From 2522287448a8be8c2e80775395149b96533868d8 Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Fri, 23 Jan 2026 16:29:25 +0900 Subject: [PATCH 01/11] wip:Implement ILibDurationFmt --- lib/flutter_ilib.dart | 2 + lib/ilib_date.dart | 104 ++ lib/ilib_datefmt.dart | 101 +- lib/ilib_durationfmt.dart | 100 ++ test/durfmt/durfmt_test.dart | 2184 ++++++++++++++++++++++++++++++++++ 5 files changed, 2391 insertions(+), 100 deletions(-) create mode 100644 lib/ilib_date.dart create mode 100644 lib/ilib_durationfmt.dart create mode 100644 test/durfmt/durfmt_test.dart diff --git a/lib/flutter_ilib.dart b/lib/flutter_ilib.dart index 5d48b8a..c1dcdcb 100644 --- a/lib/flutter_ilib.dart +++ b/lib/flutter_ilib.dart @@ -6,7 +6,9 @@ import 'ilib_init.dart'; import 'internal/logger/log_adapter.dart'; import 'internal/logger/logger_selector.dart'; +export 'ilib_date.dart'; export 'ilib_datefmt.dart'; +export 'ilib_durationfmt.dart'; export 'ilib_init.dart'; export 'ilib_localeinfo.dart'; diff --git a/lib/ilib_date.dart b/lib/ilib_date.dart new file mode 100644 index 0000000..2faac4c --- /dev/null +++ b/lib/ilib_date.dart @@ -0,0 +1,104 @@ +class ILibDateOptions { + /// [locale] Locales are specified either with a specifier string that follows the BCP-47 convention, + /// [year] The year + /// [month] The month + /// [week] The week + /// [day] The day of the month + /// [hour] The hour of the day + /// [minute] The minute [0..59] + /// [second] The second [0..59] + /// [millisecond] The millisecond [0..999] + /// [unixtime] Sets the time of this instance according to the given unix time. + /// [timezone] Time zone name as a string + /// [calendar] Same as "type" property + /// [dateTime] DateTime class of flutter + /// [type] Specifies the type/calendar of the date desired. + ILibDateOptions( + {this.locale, + this.year, + this.month, + this.week, + this.day, + this.hour, + this.minute, + this.second, + this.millisecond, + this.unixtime, + this.timezone, + this.calendar, + this.dateTime, + this.type}); + String? locale; + int? year; + int? month; + int? week; + int? day; + int? hour; + int? minute; + int? second; + int? millisecond; + int? unixtime; + String? timezone; + String? type; + String? calendar; + DateTime? dateTime; + + /// A string representation of parameters to call functions of iLib library properly + String toJsonString() { + int? y = year; + int? m = month; + int? w = week; + int? d = day; + int? h = hour; + int? min = minute; + int? sec = second; + int? milsec = millisecond; + String result = ''; + String completeOption = ''; + + if (dateTime != null) { + y = dateTime!.year; + m = dateTime!.month; + d = dateTime!.day; + h = dateTime!.hour; + min = dateTime!.minute; + sec = dateTime!.second; + milsec = dateTime!.millisecond; + } + + final Map paramInfo = { + 'locale': '$locale', + // If dateTime is not null and is in UTC, set timezone to 'Etc/UTC'. + // Otherwise, use the provided timezone value. + 'timezone': (dateTime?.isUtc ?? false) ? 'Etc/UTC' : '$timezone', + 'type': '$type', + 'calendar': '$calendar' + }; + + paramInfo.forEach((String key, String value) { + if (value != 'null') { + result += '$key:"$value",'; + } + }); + + final Map datetimeInfo = { + 'year': y, + 'month': m, + 'week': w, + 'day': d, + 'hour': h, + 'minute': min, + 'second': sec, + 'millisecond': milsec, + }; + datetimeInfo.forEach((String key, int? value) { + if (value != null) { + result += '$key:$value,'; + } + }); + result = + result.isNotEmpty ? result.substring(0, result.length - 1) : result; + completeOption = result.isNotEmpty ? '{$result}' : ''; + return completeOption; + } +} diff --git a/lib/ilib_datefmt.dart b/lib/ilib_datefmt.dart index 72693ee..be56aab 100644 --- a/lib/ilib_datefmt.dart +++ b/lib/ilib_datefmt.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'ilib_date.dart'; import 'ilib_init.dart'; class ILibDateFmt { @@ -154,106 +155,6 @@ class ILibDateFmtOptions { bool? useNative; } -class ILibDateOptions { - /// [locale] Locales are specified either with a specifier string that follows the BCP-47 convention, - /// [year] The year - /// [month] The month - /// [day] The day of the month - /// [hour] The hour of the day - /// [minute] The minute [0..59] - /// [second] The second [0..59] - /// [millisecond] The millisecond [0..999] - /// [unixtime] Sets the time of this instance according to the given unix time. - /// [timezone] Time zone name as a string - /// [calendar] Same as "type" property - /// [dateTime] DateTime class of flutter - /// [type] Specifies the type/calendar of the date desired. - ILibDateOptions( - {this.locale, - this.year, - this.month, - this.day, - this.hour, - this.minute, - this.second, - this.millisecond, - this.unixtime, - this.timezone, - this.calendar, - this.dateTime, - this.type}); - String? locale; - int? year; - int? month; - int? day; - int? hour; - int? minute; - int? second; - int? millisecond; - int? unixtime; - String? timezone; - String? type; - String? calendar; - DateTime? dateTime; - - /// A string representation of parameters to call functions of iLib library properly - String toJsonString() { - int? y = year; - int? m = month; - int? d = day; - int? h = hour; - int? min = minute; - int? sec = second; - int? milsec = millisecond; - String result = ''; - String completeOption = ''; - - if (dateTime != null) { - y = dateTime!.year; - m = dateTime!.month; - d = dateTime!.day; - h = dateTime!.hour; - min = dateTime!.minute; - sec = dateTime!.second; - milsec = dateTime!.millisecond; - } - - final Map paramInfo = { - 'locale': '$locale', - // If dateTime is not null and is in UTC, set timezone to 'Etc/UTC'. - // Otherwise, use the provided timezone value. - 'timezone': (dateTime?.isUtc ?? false) ? 'Etc/UTC' : '$timezone', - 'type': '$type', - 'calendar': '$calendar' - }; - - paramInfo.forEach((String key, String value) { - if (value != 'null') { - result += '$key:"$value",'; - } - }); - - final Map datetimeInfo = { - 'year': y, - 'month': m, - 'day': d, - 'hour': h, - 'minute': min, - 'second': sec, - 'millisecond': milsec, - }; - datetimeInfo.forEach((String key, int? value) { - if (value != null) { - result += '$key:$value,'; - } - }); - result = - result.isNotEmpty ? result.substring(0, result.length - 1) : result; - completeOption = result.isNotEmpty ? '{$result}' : ''; - return completeOption; - } -} - class MeridiemsInfo { /// [name] The name of the meridiem /// [start] The startTime of meridiem diff --git a/lib/ilib_durationfmt.dart b/lib/ilib_durationfmt.dart new file mode 100644 index 0000000..6a61f40 --- /dev/null +++ b/lib/ilib_durationfmt.dart @@ -0,0 +1,100 @@ +import 'ilib_date.dart'; +import 'ilib_init.dart'; + +class ILibDurationFmt { + /// [options] Set the Options for formatting + ILibDurationFmt(ILibDurationFmtOptions options) { + locale = options.locale; + length = options.length; + style = options.style; + useNative = options.useNative; + } + + String? locale; + String? length; + String? style; + bool? useNative; + + /// A string representation of parameters to call functions of iLib library properly + String toJsonString() { + String result = ''; + String completeOption = ''; + + final Map paramInfo = { + 'locale': '$locale', + 'length': '$length', + 'style': '$style' + }; + paramInfo.forEach((String key, String value) { + if (value != 'null') { + result += '$key:"$value",'; + } + }); + + if (useNative != null) { + result += 'useNative:$useNative,'; + } + + result = + result.isNotEmpty ? result.substring(0, result.length - 1) : result; + completeOption = '{$result}'; + + return completeOption; + } + + /// Formats a particular date instance according to the settings of this formatter object + String format(ILibDateOptions date) { + String result = ''; + final String formatOptions = toJsonString(); + final String dateOptions = date.toJsonString(); + result = ILibJS.instance + .evaluate( + 'new DurationFmt($formatOptions).format($dateOptions).toString()') + .stringResult; + return result; + } + + /// Return the template string that is used to format date/times for this formatter instance + String getLocale() { + String result = ''; + final String formatOptions = toJsonString(); + final String jscode1 = + 'new DurationFmt($formatOptions).getLocale().toString()'; + result = ILibJS.instance.evaluate(jscode1).stringResult; + return result; + } + + String getLength() { + String result = ''; + final String formatOptions = toJsonString(); + final String jscode1 = 'new DurationFmt($formatOptions).getLength()'; + result = ILibJS.instance.evaluate(jscode1).stringResult; + return result; + } + + String getStyle() { + String result = ''; + final String formatOptions = toJsonString(); + final String jscode1 = 'new DurationFmt($formatOptions).getStyle()'; + result = ILibJS.instance.evaluate(jscode1).stringResult; + return result; + } +} + +class ILibDurationFmtOptions { + /// [locale] Locales are specified either with a specifier string that follows the BCP-47 convention, + /// [length] Specifies the length of the format to use.Valid values are "short", "medium", "long" and "full". + /// [style] + /// [type] Specifies whether this formatter should format times only, dates only, or both times and dates together. Valid values are "time", "date", and "datetime". + /// [useNative] The flag used to determine whether to use the native script settings for formatting the numbers. + ILibDurationFmtOptions({ + this.locale, + this.length, + this.style, + this.useNative, + }); + String? locale; + String? length; + String? style; + bool? useNative; +} diff --git a/test/durfmt/durfmt_test.dart b/test/durfmt/durfmt_test.dart new file mode 100644 index 0000000..48d5ef7 --- /dev/null +++ b/test/durfmt/durfmt_test.dart @@ -0,0 +1,2184 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_ilib/flutter_ilib.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../test_env.dart'; + +void main() { + late String testPlatform; + TestWidgetsFlutterBinding.ensureInitialized(); + debugPrint('Testing [datefmt_Clock_test.dart] file.'); + setUpAll(() async { + testPlatform = getTestPlatform(); + final ILibJS ilibjsinstance = ILibJS.instance; + await ilibjsinstance.loadJS(); + ilibjsinstance.initILib(); + await ilibjsinstance.loadILibLocaleDataAll(); + }); + + group('getClock()', () { + test('testDurFmtConstructorEmpty', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions(); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + }); + test('testDurFmtConstructorDefaultLocale', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions(); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + expect(fmt.getLocale(), 'en-US'); + }); + test('testDurFmtGetLength', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + expect(fmt.getLength(), 'full'); + }); + + test('testDurFmtGetLengthDefault', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions(); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + expect(fmt.getLength(), 'short'); + }); + test('testDurFmtGetLengthBogus', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'asdf'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + expect(fmt.getLength(), 'short'); + }); + test('testDurFmtGetLocale', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'de-DE'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + expect(fmt.getLocale(), 'de-DE'); + }); + test('testDurFmtGetLocaleDefault', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions(); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + expect(fmt.getLocale(), 'en-US'); + }); + test('testDurFmtGetLocaleBogus', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'zyy-XX'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + expect(fmt.getLocale(), 'zyy-XX'); + }); + test('testDurFmtGetStyleDefault', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions(); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + expect(fmt.getStyle(), 'text'); + }); + test('testDurFmtGetStyleText', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + expect(fmt.getStyle(), 'text'); + }); + test('testDurFmtGetStyleClock', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + expect(fmt.getStyle(), 'clock'); + }); + test('testDurFmtGetStyleBogus', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(style: 'asdf'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + expect(fmt.getStyle(), 'text'); + }); + test('testDurFmtFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1y 1m 1w 1d 1h 1m 1s 1ms'); + }); + + test('testDurFmtFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1y 1m 1w 1d 1:01:01'); + }); + test('testDurFmtFormatShortExceedClockLimitsNoWrap', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 36, minute: 65, second: 66); + expect(fmt.format(dateOptions), '1y 1m 1w 1d 36:65:66'); + }); + test('testDurFmtFormatShortClockNoMinutesSeconds', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = + ILibDateOptions(year: 1, month: 1, week: 1, day: 1, hour: 1); + expect(fmt.format(dateOptions), '1y 1m 1w 1d 1:00'); + }); + test('testDurFmtFormatShortTextNoMinutesSeconds', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = + ILibDateOptions(year: 1, month: 1, week: 1, day: 1, hour: 1); + expect(fmt.format(dateOptions), '1y 1m 1w 1d 1h'); + }); + test('testDurFmtFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1y, 1m, 1w, 1d, 1h, 1m, 1s, 1ms'); + }); + test('testDurFmtFormatLongSingle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), + '1 yr, 1 mth, 1 wk, 1 day, 1 hr, 1 min, 1 sec, 1 ms'); + }); + test('testDurFmtFormatFullSingle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), + '1 year, 1 month, 1 week, 1 day, 1 hour, 1 minute, 1 second, 1 millisecond'); + }); + test('testDurFmtFormatFullSingle_en_GB', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'full', locale: 'en-GB'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), + '1 year, 1 month, 1 week, 1 day, 1 hour, 1 minute, 1 second, 1 millisecond'); + }); + test('testDurFmtFormatFullSingleNotAllFields', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = + ILibDateOptions(year: 1, week: 1, day: 1, minute: 1); + expect(fmt.format(dateOptions), '1 year, 1 week, 1 day, 1 minute'); + }); + test('testDurFmtFormatFullSingleNotAllFields_en_GB', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'full', locale: 'en-GB'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = + ILibDateOptions(year: 1, week: 1, day: 1, minute: 1); + expect(fmt.format(dateOptions), '1 year, 1 week, 1 day, 1 minute'); + }); + test('testDurFmtFormatLongPlural', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, + month: 2, + week: 2, + day: 2, + hour: 2, + minute: 2, + second: 2, + millisecond: 2); + expect(fmt.format(dateOptions), + '2 yrs, 2 mths, 2 wks, 2 days, 2 hr, 2 min, 2 sec, 2 ms'); + }); + test('testDurFmtFormatFullPlural', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, + month: 2, + week: 2, + day: 2, + hour: 2, + minute: 2, + second: 2, + millisecond: 2); + expect(fmt.format(dateOptions), + '2 years, 2 months, 2 weeks, 2 days, 2 hours, 2 minutes, 2 seconds, 2 milliseconds'); + }); + test('testDurFmtFormatFullPlural_en_GB', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(length: 'full', locale: 'en-GB'); + + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, + month: 2, + week: 2, + day: 2, + hour: 2, + minute: 2, + second: 2, + millisecond: 2); + expect(fmt.format(dateOptions), + '2 years, 2 months, 2 weeks, 2 days, 2 hours, 2 minutes, 2 seconds, 2 milliseconds'); + }); + test('testDurFmtFormatShortDEDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'de-DE', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), + '1 J, 1 M, 1 W, 1 T, 1 Std., 1 Min., 1 Sek., 1 ms'); + }); + test('testDurFmtFormatShortDEText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'de-DE', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), + '1 J, 1 M, 1 W, 1 T, 1 Std., 1 Min., 1 Sek., 1 ms'); + }); + test('testDurFmtFormatShortDEClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'de-DE', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1 J, 1 M, 1 W, 1 T, 01:01:01'); + }); + test('testDurFmtFormatMediumDE', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'de-DE', length: 'medium'); + + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), + '1 J, 1 M, 1 W, 1 T, 1 Std., 1 Min., 1 Sek., 1 ms'); + }); + test('testDurFmtFormatLongDESingle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'de-DE', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), + '1 J, 1 Mon., 1 Wo., 1 Tg., 1 Std., 1 Min., 1 Sek., 1 ms'); + }); + test('testDurFmtFormatFullDESingle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'de-DE', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), + '1 Jahr, 1 Monat, 1 Woche, 1 Tag, 1 Stunde, 1 Minute, 1 Sekunde und 1 Millisekunde'); + }); + test('testDurFmtFormatLongDEPlural', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'de-DE', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, + month: 2, + week: 2, + day: 2, + hour: 2, + minute: 2, + second: 2, + millisecond: 2); + expect(fmt.format(dateOptions), + '2 J, 2 Mon., 2 Wo., 2 Tg., 2 Std., 2 Min., 2 Sek., 2 ms'); + }); + test('testDurFmtFormatFullDEPlural', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'de-DE', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, + month: 2, + week: 2, + day: 2, + hour: 2, + minute: 2, + second: 2, + millisecond: 2); + expect(fmt.format(dateOptions), + '2 Jahre, 2 Monate, 2 Wochen, 2 Tage, 2 Stunden, 2 Minuten, 2 Sekunden und 2 Millisekunden'); + }); + test('testDurFmtFormatShortZHDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'zh-Hans-CN', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1年1个月1周1天1小时1分钟1秒1毫秒'); + }); + test('testDurFmtFormatShortZHText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'zh-Hans-CN', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1年1个月1周1天1小时1分钟1秒1毫秒'); + }); + test('testDurFmtFormatShortZHClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'zh-Hans-CN', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1年1个月1周1天01:01:01'); + }); + test('testDurFmtFormatMediumZH', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'zh-Hans-CN', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1年1个月1周1天1小时1分钟1秒1毫秒'); + }); + test('testDurFmtFormatLongZH', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'zh-Hans-CN', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1年1个月1周1天1小时1分钟1秒1毫秒'); + }); + test('testDurFmtFormatFullZH', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'zh-Hans-CN', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1年1个月1周1天1小时1分钟1秒钟1毫秒'); + }); + test('testDurFmtFormatFullzh_Hans_MY', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'zh-Hans-MY', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1年1个月1周1天1小时1分钟1秒钟1毫秒'); + }); + test('testDurFmtFormatShortFRDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fr-FR', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1a 1m. 1sem. 1j 1h 1min 1s 1ms'); + }); + test('testDurFmtFormatShortFRText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'fr-FR', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1a 1m. 1sem. 1j 1h 1min 1s 1ms'); + }); + test('testDurFmtFormatShortFRClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'fr-FR', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1a 1m. 1sem. 1j 01:01:01'); + }); + test('testDurFmtFormatMediumFR', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fr-FR', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1a, 1m., 1sem., 1j, 1h, 1min, 1s, 1ms'); + }); + test('testDurFmtFormatLongFR', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fr-FR', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), + '1 an, 1 m., 1 sem., 1 j, 1 h, 1 min, 1 s, 1 ms'); + }); + test('testDurFmtFormatFullFR', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fr-FR', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), + '1 an, 1 mois, 1 semaine, 1 jour, 1 heure, 1 minute, 1 seconde et 1 milliseconde'); + }); + //test cases for bg-BG + + test('testDurFmtBGFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'bg-BG', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 г., 1 мес., 1 седм., 1 д, 1 ч, 1 мин, 1 с'); + }); + test('testDurFmtBGFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'bg-BG', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 г., 1 мес., 1 седм., 1 д, 1 ч, 1 мин, 1 с'); + }); + test('testDurFmtBGFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'bg-BG', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 г., 1 мес., 1 седм., 1 д, 1:01:01'); + }); + test('testDurFmtBGFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'bg-BG', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 г., 1 мес., 1 седм., 1 д, 1 ч, 1 мин, 1 с'); + }); + test('testDurFmtBGFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'bg-BG', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 год., 1 мес., 1 седм., 1 д, 1 ч, 1 мин, 1 сек'); + }); + test('testDurFmtBGFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'bg-BG', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 година, 1 месец, 1 седмица, 1 ден, 1 час, 1 минута и 1 секунда'); + }); + + //test cases for bs-Latn-BA + + test('testDurFmtBSLatnFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'bs-Latn-BA', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 god., 1 mj., 1 sedm., 1 d., 1 h, 1 m, 1 s'); + }); + test('testDurFmtBSLatnFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'bs-Latn-BA', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 god., 1 mj., 1 sedm., 1 d., 1 h, 1 m, 1 s'); + }); + test('testDurFmtBSLatnFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'bs-Latn-BA', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 god., 1 mj., 1 sedm., 1 d., 01:01:01'); + }); + test('testDurFmtBSLatnFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'bs-Latn-BA', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 god., 1 mj., 1 sedm., 1 d., 1 h, 1 m, 1 s'); + }); + test('testDurFmtBSLatnFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'bs-Latn-BA', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 god., 1 mj., 1 sedm., 1 dan, 1 h, 1 min., 1 sek.'); + }); + test('testDurFmtBSLatnFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'bs-Latn-BA', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 godina, 1 mjesec, 1 sedmica, 1 dan, 1 sat, 1 minuta i 1 sekunda'); + }); + //test cases for cs-CZ + + test('testDurFmtCSFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'cs-CZ', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 r. 1 m. 1 t. 1 d. 1 h 1 m 1 s'); + }); + test('testDurFmtCSFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'cs-CZ', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 r. 1 m. 1 t. 1 d. 1 h 1 m 1 s'); + }); + test('testDurFmtCSFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'cs-CZ', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 r. 1 m. 1 t. 1 d. 1:01:01'); + }); + test('testDurFmtCSFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'cs-CZ', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 r., 1 m., 1 t., 1 d., 1 h, 1 m, 1 s'); + }); + test('testDurFmtCSFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'cs-CZ', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 rok, 1 měs., 1 týd., 1 den, 1 h, 1 min, 1 s'); + }); + test('testDurFmtCSFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'cs-CZ', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 rok, 1 měsíc, 1 týden, 1 den, 1 hodina, 1 minuta a 1 sekunda'); + }); + //test cases for da-DK + + test('testDurFmtDAFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'da-DK', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 år, 1 m, 1 u, 1 d, 1 t, 1 m, 1 s'); + }); + test('testDurFmtDAFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'da-DK', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 år, 1 m, 1 u, 1 d, 1 t, 1 m, 1 s'); + }); + test('testDurFmtDAFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'da-DK', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 år, 1 m, 1 u, 1 d, 01.01.01'); + }); + test('testDurFmtDAFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'da-DK', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 år, 1 m, 1 u, 1 d, 1 t, 1 m, 1 s'); + }); + test('testDurFmtDAFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'da-DK', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 år, 1 md., 1 uge, 1 dag, 1 t., 1 min., 1 sek.'); + }); + test('testDurFmtDAFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'da-DK', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 år, 1 måned, 1 uge, 1 dag, 1 time, 1 minut og 1 sekund'); + }); + //test cases for el-GR + + test('testDurFmtGRFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'el-GR', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 έ 1 μ 1 ε 1 η 1 ώ 1 λ 1 δ'); + }); + test('testDurFmtGRFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'el-GR', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 έ 1 μ 1 ε 1 η 1 ώ 1 λ 1 δ'); + }); + test('testDurFmtGRFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'el-GR', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 έ 1 μ 1 ε 1 η 1:01:01'); + }); + test('testDurFmtGRFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'el-GR', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 έ, 1 μ, 1 ε, 1 η, 1 ώ, 1 λ, 1 δ'); + }); + test('testDurFmtGRFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'el-GR', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 έτ., 1 μήν., 1 εβδ., 1 ημέρα, 1 ώ., 1 λ., 1 δευτ.'); + }); + test('testDurFmtGRFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'el-GR', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 έτος, 1 μήνας, 1 εβδομάδα, 1 ημέρα, 1 ώρα, 1 λεπτό, 1 δευτερόλεπτο'); + }); + //test cases for es-CO + test('testDurFmtESFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'es-CO', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 a. 1 mes 1 sem. 1 día 1 h 1 min 1 s'); + }); + test('testDurFmtESFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'es-CO', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 a. 1 mes 1 sem. 1 día 1 h 1 min 1 s'); + }); + test('testDurFmtESFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'es-CO', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 a. 1 mes 1 sem. 1 día 1:01:01'); + }); + test('testDurFmtESFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'es-CO', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 a., 1 mes, 1 sem., 1 día, 1 h, 1 min, 1 s'); + }); + test('testDurFmtESFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'es-CO', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 a., 1 mes, 1 sem., 1 día, 1 h, 1 min, 1 s'); + }); + test('testDurFmtESFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'es-CO', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 año, 1 mes, 1 semana, 1 día, 1 hora, 1 minuto y 1 segundo'); + }); + //test cases for estonian + test('testDurFmtETFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'et-EE', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 a 1 k 1 n 1 p 1 t 1 min 1 s'); + }); + test('testDurFmtETFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'et-EE', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 a 1 k 1 n 1 p 1 t 1 min 1 s'); + }); + test('testDurFmtETFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'et-EE', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 a 1 k 1 n 1 p 01:01:01'); + }); + test('testDurFmtETFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'et-EE', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 a, 1 k, 1 n, 1 p, 1 t, 1 min, 1 s'); + }); + test('testDurFmtETFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'et-EE', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 a, 1 kuu, 1 näd, 1 päev, 1 t, 1 min, 1 sek'); + }); + test('testDurFmtETFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'et-EE', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 aasta, 1 kuu, 1 nädal, 1 ööpäev, 1 tund, 1 minut, 1 sekund'); + }); + //test cases for fa-IR + test('testDurFmtFAFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fa-IR', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '‏۱ سال ۱ ماه ۱ هفته ۱ روز ۱ ساعت ۱ دقیقه ۱ ث'); + }); + test('testDurFmtFAFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'fa-IR', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '‏۱ سال ۱ ماه ۱ هفته ۱ روز ۱ ساعت ۱ دقیقه ۱ ث'); + }); + test('testDurFmtFAFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'fa-IR', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '‏۱ سال ۱ ماه ۱ هفته ۱ روز ‏۱:۰۱:۰۱'); + }); + test('testDurFmtFAFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fa-IR', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '‏۱ سال ۱ ماه ۱ هفته ۱ روز ۱ ساعت ۱ دقیقه ۱ ث'); + }); + test('testDurFmtFAFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fa-IR', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '‏۱ سال،‏ ۱ ماه،‏ ۱ هفته،‏ ۱ روز،‏ ۱ ساعت،‏ ۱ دقیقه،‏ ۱ ثانیه'); + }); + test('testDurFmtFAFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fa-IR', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '‏۱ سال،‏ ۱ ماه،‏ ۱ هفته،‏ ۱ روز،‏ ۱ ساعت،‏ ۱ دقیقه، و ۱ ثانیه'); + }); + //test cases for fi-FI + test('testDurFmtFIFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fi-FI', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1v 1kk 1vk 1pv 1t 1min 1s'); + }); + test('testDurFmtFIFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'fi-FI', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1v 1kk 1vk 1pv 1t 1min 1s'); + }); + test('testDurFmtFIFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'fi-FI', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1v 1kk 1vk 1pv 1.01.01'); + }); + test('testDurFmtFIFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fi-FI', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1v, 1kk, 1vk, 1pv, 1t, 1min, 1s'); + }); + test('testDurFmtFIFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fi-FI', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 v, 1 kk, 1 vk, 1 pv, 1 t, 1 min, 1 s'); + }); + test('testDurFmtFIFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fi-FI', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 vuosi, 1 kuukausi, 1 viikko, 1 päivä, 1 tunti, 1 minuutti ja 1 sekunti'); + }); + //test cases for fr-CA + test('testDurFmtFRCAFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fr-CA', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1a 1m 1sem 1j 1h 1m 1s'); + }); + test('testDurFmtFRCAFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'fr-CA', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1a 1m 1sem 1j 1h 1m 1s'); + }); + test('testDurFmtFRCAFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'fr-CA', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1a 1m 1sem 1j 01 H 01 min 01 s'); + }); + test('testDurFmtFRCAFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fr-CA', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1a, 1m, 1sem, 1j, 1h, 1m, 1s'); + }); + test('testDurFmtFRCAFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fr-CA', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 an, 1 m., 1 sem., 1 j, 1 h, 1 min, 1 s'); + }); + test('testDurFmtFRCAFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'fr-CA', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 an, 1 mois, 1 semaine, 1 jour, 1 heure, 1 minute et 1 seconde'); + }); + //test cases for ga-IE + test('testDurFmtGAFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ga-IE', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 bl 1m 1 scht 1 lá 1 u 1 nóim 1 soic'); + }); + test('testDurFmtGAFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ga-IE', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 bl 1m 1 scht 1 lá 1 u 1 nóim 1 soic'); + }); + test('testDurFmtGAFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ga-IE', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 bl 1m 1 scht 1 lá 01:01:01'); + }); + test('testDurFmtGAFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ga-IE', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 bl, 1m, 1 scht, 1 lá, 1 u, 1 nóim, 1 soic'); + }); + test('testDurFmtGAFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ga-IE', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 bl, 1 mí, 1 scht, 1 lá, 1 u, 1 nóim, 1 soic'); + }); + test('testDurFmtGAFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ga-IE', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 bhliain, 1 mhí, 1 scht, 1 lá, 1 u, 1 nóim agus 1 soic'); + }); + //test cases for hebrew + test('testDurFmtHEFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'he-IL', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '‏1 ש′ 1 ח׳ 1 ש′ 1 י׳ 1 שע׳ 1 דק׳ 1 שנ׳'); + }); + test('testDurFmtHEFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'he-IL', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '‏1 ש′ 1 ח׳ 1 ש′ 1 י׳ 1 שע׳ 1 דק׳ 1 שנ׳'); + }); + test('testDurFmtHEFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'he-IL', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '‏1 ש′ 1 ח׳ 1 ש′ 1 י׳ ‏1:01:01'); + }); + test('testDurFmtHEFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'he-IL', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '‏1 ש′ 1 ח׳ 1 ש′ 1 י׳ 1 שע׳ 1 דק׳ 1 שנ׳'); + }); + test('testDurFmtHEFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'he-IL', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '‏1 שנה, 1 ח׳, 1 שבוע, 1 יום, 1 שעה, 1 דק׳, 1 שנ׳'); + }); + test('testDurFmtHEFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'he-IL', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '‏1 שנה, 1 חודש, 1 שבוע, 1 יום, 1 שעה, 1 דקה ו-1 שניה'); + }); + test('testDurFmtHEFormatShortManyNumber', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'he-IL', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 20, + month: 20, + week: 20, + day: 20, + hour: 20, + minute: 20, + second: 20); + expect(fmt.format(dateOptions), + '‏20 ש′ 20 ח׳ 20 ש′ 20 י׳ 20 שע׳ 20 דק׳ 20 שנ׳'); + }); + test('testDurFmtHEFormatMediumManyNumber', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'he-IL', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 20, + month: 20, + week: 20, + day: 20, + hour: 20, + minute: 20, + second: 20); + expect(fmt.format(dateOptions), + '‏20 ש′ 20 ח׳ 20 ש′ 20 י׳ 20 שע׳ 20 דק׳ 20 שנ׳'); + }); + test('testDurFmtHEFormatLongManyNumber', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'he-IL', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 20, + month: 20, + week: 20, + day: 20, + hour: 20, + minute: 20, + second: 20); + expect(fmt.format(dateOptions), + '‏20 שנים, 20 ח׳, 20 שבועות, 20 ימ׳, 20 שע׳, 20 דק׳, 20 שנ׳'); + }); + /*test('testDurFmtHEFormatFullManyNumber', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'he-IL', + length: 'full' + ); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 20, + month: 20, + week: 20, + day: 20, + hour: 20, + minute: 20, + second: 20 + }); + + // The `many` category has been removed since CLDR 42. + var platform = ilib._getPlatform(); + if (platform === 'nodejs') { + var cldrVersion = Number(process.versions['cldr']); + if (Number(cldrVersion) < 36) { // Intl.PluralRules doesn't support this locale until this version. + test.equal(duration.toString(), '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'); + } else if(Number(cldrVersion) <= 41) { + test.equal(duration.toString(), '‏20 שנים, 20 חודשים, 20 שבועות, 20 יום, 20 שעות, 20 דקות ו-20 שניות'); + } else if (Number(cldrVersion) < 43) { // The `many` category has been removed since CLDR 42. + test.equal(duration.toString(), '‏20 שנים, 20 חודשים, 20 שבועות, 20 יום, 20 שעות, 20 דקות ו-‏20 שניות'); + } else { + test.equal(duration.toString(), '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'); + } + } else if (platform === 'browser') { + var browser = ilib._getBrowser(); + var expected = '‏20 שנים, 20 חודשים, 20 שבועות, 20 יום, 20 שעות, 20 דקות ו-‏20 שניות'; + if (browser === 'chrome' && getChromeVersion() >= 110) { + expected = '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'; + } + test.equal(duration.toString(), expected); + } else { + test.equal(duration.toString(), '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'); + } + test.done(); + },*/ + test('testDurFmtHEFormatShortOtherNumber', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'he-IL', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 19, + month: 19, + week: 19, + day: 19, + hour: 19, + minute: 19, + second: 19); + expect(fmt.format(dateOptions), + '‏19 ש′ 19 ח׳ 19 ש′ 19 י׳ 19 שע׳ 19 דק׳ 19 שנ׳'); + }); + test('testDurFmtHEFormatMediumOtherNumber', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'he-IL', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 19, + month: 19, + week: 19, + day: 19, + hour: 19, + minute: 19, + second: 19); + expect(fmt.format(dateOptions), + '‏19 ש′ 19 ח׳ 19 ש′ 19 י׳ 19 שע׳ 19 דק׳ 19 שנ׳'); + }); + test('testDurFmtHEFormatLongOtherNumber', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'he-IL', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 19, + month: 19, + week: 19, + day: 19, + hour: 19, + minute: 19, + second: 19); + expect(fmt.format(dateOptions), + '‏19 שנים, 19 ח׳, 19 שבועות, 19 ימ׳, 19 שע׳, 19 דק׳, 19 שנ׳'); + }); + test('testDurFmtHEFormatFullOtherNumber', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'he-IL', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 19, + month: 19, + week: 19, + day: 19, + hour: 19, + minute: 19, + second: 19); + expect(fmt.format(dateOptions), + '‏19 שנים, 19 חודשים, 19 שבועות, 19 ימים, 19 שעות, 19 דקות ו-19 שניות'); + }); + //test cases for hi-IN + test('testDurFmtHIFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'hi-IN', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 व, 1 माह, 1 सप्ताह, 1 दि, 1 घं, 1 मि, 1 से'); + }); + test('testDurFmtHIFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'hi-IN', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 व, 1 माह, 1 सप्ताह, 1 दि, 1 घं, 1 मि, 1 से'); + }); + test('testDurFmtHIFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'hi-IN', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 व, 1 माह, 1 सप्ताह, 1 दि, 1:01:01'); + }); + test('testDurFmtHIFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'hi-IN', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 व, 1 माह, 1 सप्ताह, 1 दि, 1 घं, 1 मि, 1 से'); + }); + test('testDurFmtHIFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'hi-IN', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 वर्ष, 1 माह, 1 सप्ताह, 1 दिन, 1 घं॰, 1 मि॰, 1 से॰'); + }); + test('testDurFmtHIFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'hi-IN', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 वर्ष, 1 महीना, 1 सप्ताह, 1 दिन, 1 घंटा, 1 मिनट, और 1 सेकंड'); + }); + //test cases for marathi mr-IN + test('testDurFmtMRFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'mr-IN', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '१व १म १आ १दि १ता १मि १से'); + }); + test('testDurFmtMRFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'mr-IN', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '१व १म १आ १दि १ता १मि १से'); + }); + test('testDurFmtMRFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'mr-IN', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '१व १म १आ १दि १:०१:०१'); + }); + test('testDurFmtMRFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'mr-IN', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '१व १म १आ १दि १ता १मि १से'); + }); + test('testDurFmtMRFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'mr-IN', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '१ वर्ष, १ महिना, १ आ, १ दिवस, १ ता, १ मिनि, १ से'); + }); + test('testDurFmtMRFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'mr-IN', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '१ वर्ष, १ महिना, १ आठवडा, १ दिवस, १ तास, १ मिनिट, १ सेकंद'); + }); + //testa cases for Telugu (te-IN) + test('testDurFmtTEFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'te-IN', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1సం, 1నె, 1వా, 1రో, 1గం, 1ని, 1సె'); + }); + test('testDurFmtTEFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'te-IN', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1సం, 1నె, 1వా, 1రో, 1గం, 1ని, 1సె'); + }); + test('testDurFmtTEFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'te-IN', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1సం, 1నె, 1వా, 1రో, 1:01:01'); + }); + test('testDurFmtTEFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'te-IN', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1సం, 1నె, 1వా, 1రో, 1గం, 1ని, 1సె'); + }); + test('testDurFmtTEFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'te-IN', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 సం., 1 నె., 1 వా., 1 రోజు, 1 గం., 1 నిమి., 1 సె.'); + }); + test('testDurFmtTEFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'te-IN', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 సంవత్సరం, 1 నెల, 1 వారం, 1 రోజు, 1 గంట, 1 నిమిషం, 1 సెకను'); + }); + //test cases for kannada(kn-IN) + test('testDurFmtKNFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'kn-IN', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1ವ, 1ತಿಂ., 1ವಾ, 1ದಿ, 1ಗಂ., 1ನಿಮಿ, 1ಸೆಕೆಂ'); + }); + test('testDurFmtKNFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'kn-IN', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1ವ, 1ತಿಂ., 1ವಾ, 1ದಿ, 1ಗಂ., 1ನಿಮಿ, 1ಸೆಕೆಂ'); + }); + test('testDurFmtKNFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'kn-IN', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1ವ, 1ತಿಂ., 1ವಾ, 1ದಿ, 1:01:01'); + }); + test('testDurFmtKNFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'kn-IN', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1ವ, 1ತಿಂ., 1ವಾ, 1ದಿ, 1ಗಂ., 1ನಿಮಿ, 1ಸೆಕೆಂ'); + }); + test('testDurFmtKNFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'kn-IN', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ವರ್ಷ, 1 ತಿಂ., 1 ವಾರ, 1 ದಿನ, 1 ಗಂ., 1 ನಿಮಿ, 1 ಸೆಕೆಂ'); + }); + test('testDurFmtKNFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'kn-IN', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ವರ್ಷವು, 1 ತಿಂಗಳು, 1 ವಾರವು, 1 ದಿನವು, 1 ಗಂಟೆಯು, 1 ನಿಮಿಷವು, 1 ಸೆಕೆಂಡ್'); + }); + //test cases for tamil(ta-IN) + test('testDurFmtTAFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ta-IN', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 ஆ 1 மா 1 வா 1 நா 1 ம.நே. 1 நிமி. 1 வி.'); + }); + test('testDurFmtTAFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ta-IN', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 ஆ 1 மா 1 வா 1 நா 1 ம.நே. 1 நிமி. 1 வி.'); + }); + test('testDurFmtTAFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ta-IN', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 ஆ 1 மா 1 வா 1 நா 1:01:01'); + }); + test('testDurFmtTAFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ta-IN', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 ஆ 1 மா 1 வா 1 நா 1 ம.நே. 1 நிமி. 1 வி.'); + }); + test('testDurFmtTAFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ta-IN', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ஆண்டு, 1 மாதம், 1 வாரம், 1 நாள், 1 மணிநேரம், 1 நிமிடம், 1 விநாடி'); + }); + test('testDurFmtTAFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ta-IN', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ஆண்டு, 1 மாதம், 1 வாரம், 1 நாள், 1 மணிநேரம், 1 நிமிடம், 1 விநாடி'); + }); + //test cases for Malaylam(ml-IN) + test('testDurFmtMLFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ml-IN', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 വ 1 മാ 1 ആ 1 ദി 1 മ 1 മി. 1 സെ.'); + }); + test('testDurFmtMLFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ml-IN', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 വ 1 മാ 1 ആ 1 ദി 1 മ 1 മി. 1 സെ.'); + }); + test('testDurFmtMLFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ml-IN', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 വ 1 മാ 1 ആ 1 ദി 1:01:01'); + }); + test('testDurFmtMLFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ml-IN', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 വ 1 മാ 1 ആ 1 ദി 1 മ 1 മി. 1 സെ.'); + }); + test('testDurFmtMLFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ml-IN', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 വ, 1 മാസം, 1 ആ, 1 ദിവസം‌, 1 മ, 1 മി., 1 സെ.'); + }); + test('testDurFmtMLFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ml-IN', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 വർഷം, 1 മാസം, 1 ആഴ്ച, 1 ദിവസം, 1 മണിക്കൂർ, 1 മിനിറ്റ്, 1 സെക്കൻഡ്'); + }); + //test cases for Gujrati(gu-IN) + test('testDurFmtGUFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'gu-IN', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 વ, 1 મ, 1 અઠ., 1 દિ, 1 ક, 1 મિ, 1 સે'); + }); + test('testDurFmtGUFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'gu-IN', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 વ, 1 મ, 1 અઠ., 1 દિ, 1 ક, 1 મિ, 1 સે'); + }); + test('testDurFmtGUFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'gu-IN', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 વ, 1 મ, 1 અઠ., 1 દિ, 1:01:01'); + }); + test('testDurFmtGUFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'gu-IN', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 વ, 1 મ, 1 અઠ., 1 દિ, 1 ક, 1 મિ, 1 સે'); + }); + test('testDurFmtGUFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'gu-IN', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 વર્ષ, 1 મહિનો, 1 અઠ., 1 દિવસ, 1 કલાક, 1 મિનિટ, 1 સેકંડ'); + }); + test('testDurFmtGUFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'gu-IN', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 વર્ષ, 1 મહિનો, 1 અઠવાડિયું, 1 દિવસ, 1 કલાક, 1 મિનિટ, 1 સેકંડ'); + }); + //test cases for Bengali(bn-IN) + test('testDurFmtBNFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'bn-IN', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '১ বছর, ১ মাস, ১ সপ্তাহ, ১ দিন, ১ ঘঃ, ১ মিঃ, ১ সেঃ'); + }); + test('testDurFmtBNFormatShortDefaultStyleNative', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'bn-IN', length: 'short', useNative: true); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '১ বছর, ১ মাস, ১ সপ্তাহ, ১ দিন, ১ ঘঃ, ১ মিঃ, ১ সেঃ'); + }); + test('testDurFmtBNFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'bn-IN', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '১ বছর, ১ মাস, ১ সপ্তাহ, ১ দিন, ১ ঘঃ, ১ মিঃ, ১ সেঃ'); + }); + test('testDurFmtBNFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'bn-IN', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '১ বছর, ১ মাস, ১ সপ্তাহ, ১ দিন, ১:০১:০১'); + }); + test('testDurFmtBNFormatShortClockNative', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'bn-IN', length: 'short', style: 'clock', useNative: true); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '১ বছর, ১ মাস, ১ সপ্তাহ, ১ দিন, ১:০১:০১'); + }); + test('testDurFmtBNFormatShortClockWestern', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'bn-IN', length: 'short', style: 'clock', useNative: false); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 বছর, 1 মাস, 1 সপ্তাহ, 1 দিন, 1:01:01'); + }); + test('testDurFmtBNFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'bn-IN', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '১ বছর, ১ মাস, ১ সপ্তাহ, ১ দিন, ১ ঘঃ, ১ মিঃ, ১ সেঃ'); + }); + test('testDurFmtBNFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'bn-IN', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '১ বছর, ১ মাস, ১ সপ্তাহ, ১ দিন, ১ ঘন্টা, ১ মিনিট, ১ সেকেন্ড'); + }); + test('testDurFmtBNFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'bn-IN', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '১ বছর, ১ মাস, ১ সপ্তাহ, ১ দিন, ১ ঘন্টা, ১ মিনিট, ১ সেকেন্ড'); + }); + }); +} From 18a72ddc48c13fbfabea29db9defbf58189ea4d6 Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Mon, 26 Jan 2026 10:44:44 +0900 Subject: [PATCH 02/11] Add temp file:ilib-init_uncompiled.js for testing --- assets/js/ilib-init_uncompiled.js | 93265 ++++++++++++++++++++++++++++ lib/ilib_durationfmt.dart | 4 +- test/durfmt/durfmt_test.dart | 6 - 3 files changed, 93267 insertions(+), 8 deletions(-) create mode 100644 assets/js/ilib-init_uncompiled.js diff --git a/assets/js/ilib-init_uncompiled.js b/assets/js/ilib-init_uncompiled.js new file mode 100644 index 0000000..be8e848 --- /dev/null +++ b/assets/js/ilib-init_uncompiled.js @@ -0,0 +1,93265 @@ +/* + * ilib.js - define the ilib name space + * + * Copyright © 2012-2021, 2024 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * The global namespace that contains general ilib functions useful + * to all of ilib + * @namespace + */ +var ilib = ilib || {}; + +/** + * @version "14.21.0" + */ +/** @private */ +ilib._ver = function() { + return "14.21.0" + ; +}; + +/** + * Return the current version of ilib. + * + * @static + * @return {string} a version string for this instance of ilib + */ +ilib.getVersion = function () { + if (ilib._dyncode) { + try { + var pkg; + pkg = require("../package.json"); + return pkg.version; + } catch (e) { + // ignore + } + } + return ilib._ver() || "14.0"; +}; + +/** + * the cldr version that currently adopted on. + * + * @static + * @return {string} the adopted cldr version for ilib + */ +ilib.getCLDRVersion = function () { + return "46.0"; +}; + +/** + * Place where resources and such are eventually assigned. + */ +ilib.data = { + /** @type {{ccc:Object.,nfd:Object.,nfc:Object.,nfkd:Object.,nfkc:Object.}} */ + norm: { + ccc: {}, + nfd: {}, + nfc: {}, + nfkd: {}, + nfkc: {} + }, + zoneinfo: { + "Etc/UTC":{"o":"0:0","f":"UTC"}, + "local":{"f":"local"} + }, + /** @type {Object.,from:Object.}>} */ charmaps: {}, + /** @type {null|Object.>>} */ ctype: null, + /** @type {null|Object.>>} */ ctype_c: null, + /** @type {null|Object.>>} */ ctype_l: null, + /** @type {null|Object.>>} */ ctype_m: null, + /** @type {null|Object.>>} */ ctype_p: null, + /** @type {null|Object.>>} */ ctype_z: null, + /** @type {null|Object.>>} */ scriptToRange: null, + /** @type {null|Object.>>} */ dateformats: null, + /** @type {null|Array.} */ timezones: [], + cache: {} +}; + +/* +if (typeof(window) !== 'undefined') { + window["ilib"] = ilib; +} +*/ + +// export ilib for use as a module in nodejs +if (typeof(module) !== 'undefined') { + module.exports = ilib; + module.exports.ilib = ilib; // for backwards compatibility with older versions of ilib +} + +/** + * Sets the pseudo locale. Pseudolocalization (or pseudo-localization) is used for testing + * internationalization aspects of software. Instead of translating the text of the software + * into a foreign language, as in the process of localization, the textual elements of an application + * are replaced with an altered version of the original language.These specific alterations make + * the original words appear readable, but include the most problematic characteristics of + * the world's languages: varying length of text or characters, language direction, and so on. + * Regular Latin pseudo locale: eu-ES and RTL pseudo locale: ps-AF + * + * @param {string|undefined|null} localename the locale specifier for the pseudo locale + */ +ilib.setAsPseudoLocale = function (localename) { + if (localename) { + ilib.pseudoLocales.push(localename) + } +}; + +/** + * Reset the list of pseudo locales back to the default single locale of zxx-XX. + * @static + */ +ilib.clearPseudoLocales = function() { + ilib.pseudoLocales = [ + "zxx-XX", + "zxx-Cyrl-XX", + "zxx-Hans-XX", + "zxx-Hebr-XX" + ]; +}; + +ilib.clearPseudoLocales(); + +/** + * Return the name of the platform + * @private + * @static + * @return {string} string naming the platform + */ +ilib._getPlatform = function () { + if (!ilib._platform) { + try { + if (typeof(java.lang.Object) !== 'undefined') { + ilib._platform = (typeof(process) !== 'undefined') ? "trireme" : "rhino"; + return ilib._platform; + } + } catch (e) {} + + if (typeof(global) !== 'undefined' && global.process && + ((global.process.versions && global.process.versions.node && typeof(module) !== 'undefined') || + (typeof(global.process.iotjs) !== "undefined"))) { + ilib._platform = "nodejs"; + } else if (typeof(Qt) !== 'undefined') { + ilib._platform = "qt"; + ilib._cacheMerged = true; // qt is too slow, so we need to cache the already-merged locale data + } else if ((typeof(PalmSystem) !== 'undefined') || (typeof(webOSSystem) !== 'undefined')) { + ilib._platform = (typeof(window) !== 'undefined') ? "webos-webapp" : "webos"; + } else if (typeof(window) !== 'undefined') { + ilib._platform = "browser"; + } else { + ilib._platform = "unknown"; + } + } + return ilib._platform; +}; + +/** + * If this ilib is running in a browser, return the name of that browser. + * @private + * @static + * @return {string|undefined} the name of the browser that this is running in ("firefox", "chrome", "ie", + * "safari", or "opera"), or undefined if this is not running in a browser or if + * the browser name could not be determined + */ +ilib._getBrowser = function () { + var browser = undefined; + if (ilib._getPlatform() === "browser") { + if (navigator && navigator.userAgent) { + if (navigator.userAgent.indexOf("Firefox") > -1) { + return "firefox"; + } + if (navigator.userAgent.search(/Opera|OPR/) > -1 ) { + return "opera"; + } + if (navigator.userAgent.indexOf("Chrome") > -1) { + return "chrome"; + } + if (navigator.userAgent.indexOf(" .NET") > -1) { + return "ie"; + } + if (navigator.userAgent.indexOf("Safari") > -1) { + // chrome also has the string Safari in its userAgent, but the chrome case is + // already taken care of above + return "safari"; + } + if (navigator.userAgent.indexOf("Edge") > -1) { + return "Edge"; + } + if (navigator.userAgent.search(/iPad|iPhone|iPod/) > -1) { + // Due to constraints of the iOS platform, + // all browser must be built on top of the WebKit rendering engine + return "iOS"; + } + } + } + return "unknown"; +}; + +/** + * Return the value of the top object in the system. This could be global + * for node, or window for browsers, etc. + * @private + * @static + * @return {Object|undefined} the top variable, or undefined if there is none on this + * platform + */ +ilib._top = function() { + if (typeof(this.top) === 'undefined') { + this.top = null; + switch (ilib._getPlatform()) { + case "rhino": + this.top = (function() { + return (typeof global === 'object') ? global : this; + })(); + break; + case "nodejs": + case "trireme": + this.top = typeof(global) !== 'undefined' ? global : this; + //console.log("ilib._top: top is " + (typeof(global) !== 'undefined' ? "global" : "this")); + break; + default: + this.top = window; + break; + } + } + + return this.top || undefined; +}; + +/** + * Return the value of a global variable given its name in a way that works + * correctly for the current platform. + * @private + * @static + * @param {string} name the name of the variable to return + * @return {*} the global variable, or undefined if it does not exist + */ +ilib._global = function(name) { + var top = this._top(); + try { + return top[name]; + } catch (e) { + return undefined; + } +}; + +/** + * Return true if the global variable is defined on this platform. + * @private + * @static + * @param {string} name the name of the variable to check + * @return {boolean} true if the global variable is defined on this platform, false otherwise + */ +ilib._isGlobal = function(name) { + return typeof(ilib._global(name)) !== 'undefined'; +}; + +/** + * Clear the file load cache. This is mainly used by the unit tests, + * but could be used by regular callers if you want to free up memory + * for garbage collecting. + */ +ilib.clearCache = function() { + ilib.data.cache = {}; +}; + +/** + * Sets the default locale for all of ilib. This locale will be used + * when no explicit locale is passed to any ilib class. If the default + * locale is not set, ilib will attempt to use the locale of the + * environment it is running in, if it can find that. If not, it will + * default to the locale "en-US". If a type of parameter is string, + * ilib will take only well-formed BCP-47 tag

+ * + * + * @static + * @param {string|undefined|null} spec the locale specifier for the default locale + */ +ilib.setLocale = function (spec) { + if (typeof(spec) === 'string' || !spec) { + ilib.locale = spec; + } + // else ignore other data types, as we don't have the dependencies + // to look into them to find a locale +}; + +/** + * @private + */ +function parseLocale(str) { + if (!str) return str; + + // take care of the libc style locale with a dot + script at the end + var dot = str.indexOf('.') + if (dot > -1) { + str = str.substring(0, dot); + } + + // handle the posix default locale + if (str === "C") return "en-US"; + + var parts = str.replace(/_/g, '-').split(/-/g); + var localeParts = []; + + if (parts.length > 0) { + if (parts[0].length === 2 || parts[0].length === 3) { + // language + localeParts.push(parts[0].toLowerCase()); + + if (parts.length > 1) { + if (parts[1].length === 4) { + // script + localeParts.push(parts[1][0].toUpperCase() + parts[1].substring(1).toLowerCase()); + } else if (parts[1].length === 2 || parts[1].length == 3) { + // region + localeParts.push(parts[1].toUpperCase()); + } + + if (parts.length > 2) { + if (parts[2].length === 2 || parts[2].length == 3) { + // region + localeParts.push(parts[2].toUpperCase()); + } + } + } + } + } + + return localeParts.join('-'); +} + +/** + * Return the default locale for all of ilib if one has been set. This + * locale will be used when no explicit locale is passed to any ilib + * class. If the default + * locale is not set, ilib will attempt to use the locale of the + * environment it is running in, if it can find that. If not, it will + * default to the locale "en-US".

+ * + * + * @static + * @return {string} the locale specifier for the default locale + */ +ilib.getLocale = function () { + var lang, dot; + if (typeof(ilib.locale) !== 'string') { + var plat = ilib._getPlatform(); + switch (plat) { + case 'browser': + // running in a browser + if(typeof(navigator.language) !== 'undefined') { + ilib.locale = parseLocale(navigator.language); // FF/Opera/Chrome/Webkit + } + if (!ilib.locale) { + // IE on Windows + lang = typeof(navigator.browserLanguage) !== 'undefined' ? + navigator.browserLanguage : + (typeof(navigator.userLanguage) !== 'undefined' ? + navigator.userLanguage : + (typeof(navigator.systemLanguage) !== 'undefined' ? + navigator.systemLanguage : + undefined)); + if (typeof(lang) !== 'undefined' && lang) { + // for some reason, MS uses lower case region tags + ilib.locale = parseLocale(lang); + } else { + ilib.locale = undefined; + } + } + break; + case 'webos-webapp': + case 'webos': + // webOS + if (typeof(PalmSystem.locales) !== 'undefined' && + typeof(PalmSystem.locales.UI) != 'undefined' && + PalmSystem.locales.UI.length > 0) { + ilib.locale = parseLocale(PalmSystem.locales.UI); + } else if (typeof(PalmSystem.locale) !== 'undefined') { + ilib.locale = parseLocale(PalmSystem.locale); + } else if (typeof(webOSSystem.locale) !== 'undefined') { + ilib.locale = parseLocale(webOSSystem.locale); + } else { + ilib.locale = undefined; + } + break; + case 'rhino': + if (typeof(environment) !== 'undefined' && environment.user && typeof(environment.user.language) === 'string' && environment.user.language.length > 0) { + // running under plain rhino + var l = [environment.user.language]; + if (typeof(environment.user.country) === 'string' && environment.user.country.length > 0) { + l.push(environment.user.country); + } + ilib.locale = l.join("-"); + } + break; + case "trireme": + // under trireme on rhino emulating nodejs + lang = process.env.LANG || process.env.LANGUAGE || process.env.LC_ALL; + // the LANG variable on unix is in the form "lang_REGION.CHARSET" + // where language and region are the correct ISO codes separated by + // an underscore. This translate it back to the BCP-47 form. + ilib.locale = parseLocale(lang); + break; + case 'nodejs': + // running under nodejs + lang = global.process.env.LANG || global.process.env.LC_ALL; + // the LANG variable on unix is in the form "lang_REGION.CHARSET" + // where language and region are the correct ISO codes separated by + // an underscore. This translate it back to the BCP-47 form. + ilib.locale = parseLocale(lang); + break; + case 'qt': + // running in the Javascript engine under Qt/QML + var locobj = Qt.locale(); + ilib.locale = parseLocale(locobj.name || "en-US"); + break; + } + // test for posix "C" locale + ilib.locale = typeof(ilib.locale) === 'string' && ilib.locale.length && ilib.locale !== "C" ? ilib.locale : 'en-US'; + if (ilib.locale === "en") { + ilib.locale = "en-US"; // hack to get various platforms working correctly + } + } + return ilib.locale; +}; + +/** + * Sets the default time zone for all of ilib. This time zone will be used when + * no explicit time zone is passed to any ilib class. If the default time zone + * is not set, ilib will attempt to use the time zone of the + * environment it is running in, if it can find that. If not, it will + * default to the the UTC zone "Etc/UTC".

+ * + * + * @static + * @param {string} tz the name of the time zone to set as the default time zone + */ +ilib.setTimeZone = function (tz) { + ilib.tz = tz || ilib.tz; +}; + +/** + * Return the default time zone for all of ilib if one has been set. This + * time zone will be used when no explicit time zone is passed to any ilib + * class. If the default time zone + * is not set, ilib will attempt to use the locale of the + * environment it is running in, if it can find that. If not, it will + * default to the the zone "local".

+ * + * + * @static + * @return {string} the default time zone for ilib + */ +ilib.getTimeZone = function() { + if (typeof(ilib.tz) === 'undefined') { + if (typeof(Intl) !== 'undefined' && typeof(Intl.DateTimeFormat) !== 'undefined') { + var ro = new Intl.DateTimeFormat().resolvedOptions(); + ilib.tz = ro && ro.timeZone; + return ilib.tz; + } + + switch (ilib._getPlatform()) { + case 'browser': + // running in a browser + if (navigator.timezone && navigator.timezone.length > 0) { + ilib.tz = navigator.timezone; + } + break; + case 'webos-webapp': + case 'webos': + // running in webkit on webOS + if ((PalmSystem.timezone && PalmSystem.timezone.length > 0) || + (webOSSystem.timeZone && PalmSystem.timeZone.length > 0)) { + ilib.tz = PalmSystem.timezone; + } + break; + case 'rhino': + // running under rhino + if (typeof(environment.user.timezone) !== 'undefined' && environment.user.timezone.length > 0) { + ilib.tz = environment.user.timezone; + } + break; + case 'nodejs': + if (global.process.env && typeof(global.process.env.TZ) !== "undefined") { + ilib.tz = global.process.env.TZ; + } + break; + } + + ilib.tz = ilib.tz || "local"; + } + + return ilib.tz; +}; + +/** + * @class + * Defines the interface for the loader class for ilib. The main method of the + * loader object is loadFiles(), which loads a set of requested locale data files + * from where-ever it is stored. + * @interface + */ +ilib.Loader = function() {}; + +/** + * Load a set of files from where-ever it is stored.

+ * + * This is the main function define a callback function for loading missing locale + * data or resources. + * If this copy of ilib is assembled without including the required locale data + * or resources, then that data can be lazy loaded dynamically when it is + * needed by calling this method. Each ilib class will first + * check for the existence of data under ilib.data, and if it is not there, + * it will attempt to load it by calling this method of the loader, and then place + * it there.

+ * + * Suggested implementations of this method might load files + * directly from disk under nodejs or rhino, or within web pages, to load + * files from the server with XHR calls.

+ * + * The first parameter to this method, paths, is an array of relative paths within + * the ilib dir structure for the + * requested data. These paths will already have the locale spec integrated + * into them, so no further tweaking needs to happen to load the data. Simply + * load the named files. The second + * parameter tells the loader whether to load the files synchronously or asynchronously. + * If the sync parameters is false, then the onLoad function must also be specified. + * The third parameter gives extra parameters to the loader passed from the calling + * code. This may contain any property/value pairs. The last parameter, callback, + * is a callback function to call when all of the data is finishing loading. Make + * sure to call the callback with the context of "this" so that the caller has their + * context back again.

+ * + * The loader function must be able to operate either synchronously or asychronously. + * If the loader function is called with an undefined callback function, it is + * expected to load the data synchronously, convert it to javascript + * objects, and return the array of json objects as the return value of the + * function. If the loader + * function is called with a callback function, it may load the data + * synchronously or asynchronously (doesn't matter which) as long as it calls + * the callback function with the data converted to a javascript objects + * when it becomes available. If a particular file could not be loaded, the + * loader function should put undefined into the corresponding entry in the + * results array. + * Note that it is important that all the data is loaded before the callback + * is called.

+ * + * An example implementation for nodejs might be: + * + *

+ * 
+ *
+ * var myLoader = function() {};
+ * myLoader.prototype = new Loader();
+ * myLoader.prototype.constructor = myLoader;
+ * myLoader.prototype.loadFiles = function(paths, sync, params, callback) {
+ *    if (sync) {
+ *        var ret = [];
+ *        // synchronous load -- just return the result
+ *        paths.forEach(function (path) {
+ *            var json = fs.readFileSync(path, "utf-8");
+ *            ret.push(json ? JSON.parse(json) : undefined);
+ *        });
+ *
+ *        return ret;
+ *    }
+ *    this.callback = callback;
+ *
+ *    // asynchronous
+ *    this.results = [];
+ *    this._loadFilesAsync(paths);
+ * }
+ * myLoader.prototype._loadFilesAsync = function (paths) {
+ *    if (paths.length > 0) {
+ *        var file = paths.shift();
+ *        fs.readFile(file, "utf-8", function(err, json) {
+ *            this.results.push(err ? undefined : JSON.parse(json));
+ *            // call self recursively so that the callback is only called at the end
+ *            // when all the files are loaded sequentially
+ *            if (paths.length > 0) {
+ *                this._loadFilesAsync(paths);
+ *            } else {
+ *                this.callback(this.results);
+ *            }
+ *        });
+ *     }
+ * }
+ *
+ * // bind to "this" so that "this" is relative to your own instance
+ * ilib.setLoaderCallback(new myLoader());
+ * 
+ + * @param {Array.} paths An array of paths to load from wherever the files are stored + * @param {Boolean} sync if true, load the files synchronously, and false means asynchronously + * @param {Object} params an object with any extra parameters for the loader. These can be + * anything. The caller of the ilib class passes these parameters in. Presumably, the code that + * calls ilib and the code that provides the loader are together and can have a private + * agreement between them about what the parameters should contain. + * @param {function(Object)} callback function to call when the files are all loaded. The + * parameter of the callback function is the contents of the files. + */ +ilib.Loader.prototype.loadFiles = function (paths, sync, params, callback) {}; + +/** + * Return all files available for loading using this loader instance. + * This method returns an object where the properties are the paths to + * directories where files are loaded from and the values are an array + * of strings containing the relative paths under the directory of each + * file that can be loaded.

+ * + * Example: + *

+ *  {
+ *      "/usr/share/javascript/ilib/locale": [
+ *          "dateformats.json",
+ *          "aa/dateformats.json",
+ *          "af/dateformats.json",
+ *          "agq/dateformats.json",
+ *          "ak/dateformats.json",
+ *          ...
+ *          "zxx/dateformats.json"
+ *      ]
+ *  }
+ *  
+ * @returns {Object} a hash containing directory names and + * paths to file that can be loaded by this loader + */ +ilib.Loader.prototype.listAvailableFiles = function() {}; + +/** + * Return true if the file in the named path is available for loading using + * this loader. The path may be given as an absolute path, in which case + * only that file is checked, or as a relative path, in which case, the + * relative path may appear underneath any of the directories that the loader + * knows about. + * @returns {boolean} true if the file in the named path is available for loading, and + * false otherwise + */ +ilib.Loader.prototype.isAvailable = function(path) {}; + +/** + * Set the custom loader used to load ilib's locale data in your environment. + * The instance passed in must implement the Loader interface. See the + * Loader class documentation for more information about loaders. + * + * @static + * @param {ilib.Loader} loader class to call to access the requested data. + * @return {boolean} true if the loader was installed correctly, or false + * if not + */ +ilib.setLoaderCallback = function(loader) { + // only a basic check + if ((typeof(loader) === 'object' && typeof(loader.loadFiles) === 'function') || + typeof(loader) === 'function' || typeof(loader) === 'undefined') { + //console.log("setting callback loader to " + (loader ? loader.name : "undefined")); + ilib._load = loader; + return true; + } + return false; +}; + +/** + * Return the custom Loader instance currently in use with this instance + * of ilib. If there is no loader, this method returns undefined. + * + * @protected + * @static + * @return {ilib.Loader|undefined} the loader instance currently in use, or + * undefined if there is no such loader + */ +ilib.getLoader = function() { + return ilib._load; +}; + +/** + * Test whether an object is an javascript array. + * + * @static + * @param {*} object The object to test + * @return {boolean} return true if the object is an array + * and false otherwise + */ +ilib.isArray = function(object) { + if (typeof(object) === 'object') { + return Object.prototype.toString.call(object) === '[object Array]'; + } + return false; +}; + +/** + * Extend object1 by mixing in everything from object2 into it. The objects + * are deeply extended, meaning that this method recursively descends the + * tree in the objects and mixes them in at each level. Arrays are extended + * by concatenating the elements of object2 onto those of object1. + * + * @static + * @param {Object} object1 the target object to extend + * @param {Object=} object2 the object to mix in to object1 + * @return {Object} returns object1 + */ +ilib.extend = function (object1, object2) { + var prop = undefined; + if (object2) { + for (prop in object2) { + // don't extend object with undefined or functions + if (prop && typeof(object2[prop]) !== 'undefined' && typeof(object2[prop]) !== "function") { + if (ilib.isArray(object1[prop]) && ilib.isArray(object2[prop])) { + //console.log("Merging array prop " + prop); + object1[prop] = object1[prop].concat(object2[prop]); + } else if (typeof(object1[prop]) === 'object' && typeof(object2[prop]) === 'object') { + //console.log("Merging object prop " + prop); + if (prop !== "ilib") { + object1[prop] = ilib.extend(object1[prop], object2[prop]); + } + } else { + //console.log("Copying prop " + prop); + // for debugging. Used to determine whether or not json files are overriding their parents unnecessarily + object1[prop] = object2[prop]; + } + } + } + } + return object1; +}; + +ilib.extend2 = function (object1, object2) { + var prop = undefined; + if (object2) { + for (prop in object2) { + // don't extend object with undefined or functions + if (prop && typeof(object2[prop]) !== 'undefined') { + if (ilib.isArray(object1[prop]) && ilib.isArray(object2[prop])) { + //console.log("Merging array prop " + prop); + object1[prop] = object1[prop].concat(object2[prop]); + } else if (typeof(object1[prop]) === 'object' && typeof(object2[prop]) === 'object') { + //console.log("Merging object prop " + prop); + if (prop !== "ilib") { + object1[prop] = ilib.extend2(object1[prop], object2[prop]); + } + } else { + //console.log("Copying prop " + prop); + // for debugging. Used to determine whether or not json files are overriding their parents unnecessarily + object1[prop] = object2[prop]; + } + } + } + } + return object1; +}; + +/** + * If Function.prototype.bind does not exist in this JS engine, this + * function reimplements it in terms of older JS functions. + * bind() doesn't exist in many older browsers. + * + * @static + * @param {Object} scope object that the method should operate on + * @param {function(...)} method method to call + * @return {function(...)|undefined} function that calls the given method + * in the given scope with all of its arguments properly attached, or + * undefined if there was a problem with the arguments + */ +ilib.bind = function(scope, method/*, bound arguments*/){ + if (!scope || !method) { + return undefined; + } + + /** @protected + * @param {Arguments} inArrayLike + * @param {number=} inOffset + */ + function cloneArray(inArrayLike, inOffset) { + var arr = []; + for(var i = inOffset || 0, l = inArrayLike.length; i + * + * For example, if the ilib locale is "fr-CA", the final locale data is assembled from the + * following locale parts: + * + *
    + *
  • root - the root/default locale data shared by every locale + *
  • fr - the locale data shared by every flavour of French (eg. translations or date formats) + *
  • und/CA - the language-independent locale data for Canada (eg. time zone or official currency) + *
  • fr/CA - the locale data that is unique to French for Canada (eg. date or currency formats) + *
+ * + * On some platforms, the data loaded from disk is cached and then merged each time it is + * needed to create the whole locale data for the current locale. In other platforms, the + * merging is too slow, so the already-merged data is cached as well after the first time it + * is requested. In this way, we sacrifice the memory footprint for the sake of speed. + */ + +ilib._cacheMerged = false; + +ilib._loadtime = new Date().getTime(); +/* + * IDate.js - Represent a date in any calendar. This class is subclassed for each + * calendar and includes some shared functionality. + * + * Copyright © 2012-2015, 2018, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +/** + * @class + * Superclass for all the calendar date classes that contains shared + * functionality. This class is never instantiated on its own. Instead, + * you should use the {@link DateFactory} function to manufacture a new + * instance of a subclass of IDate. This class is called IDate for "ilib + * date" so that it does not conflict with the built-in Javascript Date + * class. + * + * @protected + * @constructor + * @param {Object=} options The date components to initialize this date with + */ +var IDate = function(options) { +}; + +/* place for the subclasses to put their constructors so that the factory method + * can find them. Do this to add your date after it's defined: + * IDate._constructors["mytype"] = IDate.MyTypeConstructor; + */ +IDate._constructors = {}; + +IDate.prototype = { + getType: function() { + return "date"; + }, + + /** + * Return the unix time equivalent to this date instance. Unix time is + * the number of milliseconds since midnight on Jan 1, 1970 UTC (Gregorian). This + * method only returns a valid number for dates between midnight, + * Jan 1, 1970 UTC (Gregorian) and Jan 19, 2038 at 3:14:07am UTC (Gregorian) when + * the unix time runs out. If this instance encodes a date outside of that range, + * this method will return -1. For date types that are not Gregorian, the point + * in time represented by this date object will only give a return value if it + * is in the correct range in the Gregorian calendar as given previously. + * + * @return {number} a number giving the unix time, or -1 if the date is outside the + * valid unix time range + */ + getTime: function() { + return this.rd.getTime(); + }, + + /** + * Return the extended unix time equivalent to this Gregorian date instance. Unix time is + * the number of milliseconds since midnight on Jan 1, 1970 UTC. Traditionally unix time + * (or the type "time_t" in C/C++) is only encoded with an unsigned 32 bit integer, and thus + * runs out on Jan 19, 2038. However, most Javascript engines encode numbers well above + * 32 bits and the Date object allows you to encode up to 100 million days worth of time + * after Jan 1, 1970, and even more interestingly, 100 million days worth of time before + * Jan 1, 1970 as well. This method returns the number of milliseconds in that extended + * range. If this instance encodes a date outside of that range, this method will return + * NaN. + * + * @return {number} a number giving the extended unix time, or Nan if the date is outside + * the valid extended unix time range + */ + getTimeExtended: function() { + return this.rd.getTimeExtended(); + }, + + /** + * Set the time of this instance according to the given unix time. Unix time is + * the number of milliseconds since midnight on Jan 1, 1970. + * + * @param {number} millis the unix time to set this date to in milliseconds + */ + setTime: function(millis) { + this.rd = this.newRd({ + unixtime: millis, + cal: this.cal + }); + this._calcDateComponents(); + }, + + getDays: function() { + return this.day; + }, + getMonths: function() { + return this.month; + }, + getYears: function() { + return this.year; + }, + getHours: function() { + return this.hour; + }, + getMinutes: function() { + return this.minute; + }, + getSeconds: function() { + return this.second; + }, + getMilliseconds: function() { + return this.millisecond; + }, + getEra: function() { + return (this.year < 1) ? -1 : 1; + }, + + setDays: function(day) { + this.day = parseInt(day, 10) || 1; + this.rd._setDateComponents(this); + }, + setMonths: function(month) { + this.month = parseInt(month, 10) || 1; + this.rd._setDateComponents(this); + }, + setYears: function(year) { + this.year = parseInt(year, 10) || 0; + this.rd._setDateComponents(this); + }, + + setHours: function(hour) { + this.hour = parseInt(hour, 10) || 0; + this.rd._setDateComponents(this); + }, + setMinutes: function(minute) { + this.minute = parseInt(minute, 10) || 0; + this.rd._setDateComponents(this); + }, + setSeconds: function(second) { + this.second = parseInt(second, 10) || 0; + this.rd._setDateComponents(this); + }, + setMilliseconds: function(milli) { + this.millisecond = parseInt(milli, 10) || 0; + this.rd._setDateComponents(this); + }, + + /** + * Return a new date instance in the current calendar that represents the first instance + * of the given day of the week before the current date. The day of the week is encoded + * as a number where 0 = Sunday, 1 = Monday, etc. + * + * @param {number} dow the day of the week before the current date that is being sought + * @return {IDate} the date being sought + */ + before: function (dow) { + return new this.constructor({ + rd: this.rd.before(dow, this.offset), + timezone: this.timezone + }); + }, + + /** + * Return a new date instance in the current calendar that represents the first instance + * of the given day of the week after the current date. The day of the week is encoded + * as a number where 0 = Sunday, 1 = Monday, etc. + * + * @param {number} dow the day of the week after the current date that is being sought + * @return {IDate} the date being sought + */ + after: function (dow) { + return new this.constructor({ + rd: this.rd.after(dow, this.offset), + timezone: this.timezone + }); + }, + + /** + * Return a new Gregorian date instance that represents the first instance of the + * given day of the week on or before the current date. The day of the week is encoded + * as a number where 0 = Sunday, 1 = Monday, etc. + * + * @param {number} dow the day of the week on or before the current date that is being sought + * @return {IDate} the date being sought + */ + onOrBefore: function (dow) { + return new this.constructor({ + rd: this.rd.onOrBefore(dow, this.offset), + timezone: this.timezone + }); + }, + + /** + * Return a new Gregorian date instance that represents the first instance of the + * given day of the week on or after the current date. The day of the week is encoded + * as a number where 0 = Sunday, 1 = Monday, etc. + * + * @param {number} dow the day of the week on or after the current date that is being sought + * @return {IDate} the date being sought + */ + onOrAfter: function (dow) { + return new this.constructor({ + rd: this.rd.onOrAfter(dow, this.offset), + timezone: this.timezone + }); + }, + + /** + * Return a Javascript Date object that is equivalent to this date + * object. + * + * @return {Date|undefined} a javascript Date object + */ + getJSDate: function() { + var unix = this.rd.getTimeExtended(); + return isNaN(unix) ? undefined : new Date(unix); + }, + + /** + * Return the Rata Die (fixed day) number of this date. + * + * @protected + * @return {number} the rd date as a number + */ + getRataDie: function() { + return this.rd.getRataDie(); + }, + + /** + * Set the date components of this instance based on the given rd. + * @protected + * @param {number} rd the rata die date to set + */ + setRd: function (rd) { + this.rd = this.newRd({ + rd: rd, + cal: this.cal + }); + this._calcDateComponents(); + }, + + /** + * Return the Julian Day equivalent to this calendar date as a number. + * + * @return {number} the julian date equivalent of this date + */ + getJulianDay: function() { + return this.rd.getJulianDay(); + }, + + /** + * Set the date of this instance using a Julian Day. + * @param {number|JulianDay} date the Julian Day to use to set this date + */ + setJulianDay: function (date) { + this.rd = this.newRd({ + julianday: (typeof(date) === 'object') ? date.getDate() : date, + cal: this.cal + }); + this._calcDateComponents(); + }, + + /** + * Return the time zone associated with this date, or + * undefined if none was specified in the constructor. + * + * @return {string|undefined} the name of the time zone for this date instance + */ + getTimeZone: function() { + return this.timezone || "local"; + }, + + /** + * Set the time zone associated with this date. + * @param {string=} tzName the name of the time zone to set into this date instance, + * or "undefined" to unset the time zone + */ + setTimeZone: function (tzName) { + if (!tzName || tzName === "") { + // same as undefining it + this.timezone = undefined; + this.tz = undefined; + } else if (typeof(tzName) === 'string') { + this.timezone = tzName; + this.tz = undefined; + // assuming the same UTC time, but a new time zone, now we have to + // recalculate what the date components are + this._calcDateComponents(); + } + }, + + /** + * Return the rd number of the first Sunday of the given ISO year. + * @protected + * @param {number} year the year for which the first Sunday is being sought + * @return {number} the rd of the first Sunday of the ISO year + */ + firstSunday: function (year) { + var firstDay = this.newRd({ + year: year, + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + cal: this.cal + }); + var firstThu = this.newRd({ + rd: firstDay.onOrAfter(4), + cal: this.cal + }); + return firstThu.before(0); + }, + + /** + * Return the ISO 8601 week number in the current year for the current date. The week + * number ranges from 0 to 55, as some years have 55 weeks assigned to them in some + * calendars. + * + * @return {number} the week number for the current date + */ + getWeekOfYear: function() { + var rd = Math.floor(this.rd.getRataDie()); + var year = this._calcYear(rd + this.offset); + var yearStart = this.firstSunday(year); + var nextYear; + + // if we have a January date, it may be in this ISO year or the previous year + if (rd < yearStart) { + yearStart = this.firstSunday(year-1); + } else { + // if we have a late December date, it may be in this ISO year, or the next year + nextYear = this.firstSunday(year+1); + if (rd >= nextYear) { + yearStart = nextYear; + } + } + + return Math.floor((rd-yearStart)/7) + 1; + }, + + /** + * Return the ordinal number of the week within the month. The first week of a month is + * the first one that contains 4 or more days in that month. If any days precede this + * first week, they are marked as being in week 0. This function returns values from 0 + * through 6.

+ * + * The locale is a required parameter because different locales that use the same + * Gregorian calendar consider different days of the week to be the beginning of + * the week. This can affect the week of the month in which some days are located. + * + * @param {Locale|string} locale the locale or locale spec to use when figuring out + * the first day of the week + * @return {number} the ordinal number of the week within the current month + */ + getWeekOfMonth: function(locale) { + var li = new LocaleInfo(locale); + + var first = this.newRd({ + year: this._calcYear(this.rd.getRataDie()+this.offset), + month: this.getMonths(), + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + cal: this.cal + }); + var weekStart = first.onOrAfter(li.getFirstDayOfWeek()); + + if (weekStart - first.getRataDie() > 3) { + // if the first week has 4 or more days in it of the current month, then consider + // that week 1. Otherwise, it is week 0. To make it week 1, move the week start + // one week earlier. + weekStart -= 7; + } + return Math.floor((this.rd.getRataDie() - weekStart) / 7) + 1; + } +}; + +/* + * IString.js - ilib string subclass definition + * + * Copyright © 2012-2015, 2018, 2021-2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data plurals + + + + + + +/** + * @class + * Create a new ilib string instance. This string inherits from and + * extends the Javascript String class. It can be + * used almost anywhere that a normal Javascript string is used, though in + * some instances you will need to call the [toString]{@link IString#toString} method when + * a built-in Javascript string is needed. The formatting methods are + * methods that are not in the intrinsic String class and are most useful + * when localizing strings in an app or web site in combination with + * the ResBundle class.

+ * + * This class is named IString ("ilib string") so as not to conflict with the + * built-in Javascript String class. + * + * @constructor + * @param {string|IString=} string initialize this instance with this string + */ +var IString = function (string) { + if (typeof(string) === 'object') { + if (string instanceof IString) { + this.str = string.str; + } else { + this.str = string.toString(); + } + } else if (typeof(string) === 'string') { + this.str = String(string); // copy it + } else { + this.str = ""; + } + this.length = this.str.length; + this.cpLength = -1; + this.localeSpec = ilib.getLocale(); +}; + +/** + * Return true if the given character is a Unicode surrogate character, + * either high or low. + * + * @private + * @static + * @param {string} ch character to check + * @return {boolean} true if the character is a surrogate + */ +IString._isSurrogate = function (ch) { + var n = ch.charCodeAt(0); + return ((n >= 0xDC00 && n <= 0xDFFF) || (n >= 0xD800 && n <= 0xDBFF)); +}; + +// build in the English rule +IString.plurals_default = { + "one": { + "and": [ + { + "eq": [ + "i", + 1 + ] + }, + { + "eq": [ + "v", + 0 + ] + } + ] + } +}; + +/** + * Convert a UCS-4 code point to a Javascript string. The codepoint can be any valid + * UCS-4 Unicode character, including supplementary characters. Standard Javascript + * only supports supplementary characters using the UTF-16 encoding, which has + * values in the range 0x0000-0xFFFF. String.fromCharCode() will only + * give you a string containing 16-bit characters, and will not properly convert + * the code point for a supplementary character (which has a value > 0xFFFF) into + * two UTF-16 surrogate characters. Instead, it will just just give you whatever + * single character happens to be the same as your code point modulo 0x10000, which + * is almost never what you want.

+ * + * Similarly, that means if you use String.charCodeAt() + * you will only retrieve a 16-bit value, which may possibly be a single + * surrogate character that is part of a surrogate pair representing a character + * in the supplementary plane. It will not give you a code point. Use + * IString.codePointAt() to access code points in a string, or use + * an iterator to walk through the code points in a string. + * + * @static + * @param {number} codepoint UCS-4 code point to convert to a character + * @return {string} a string containing the character represented by the codepoint + */ +IString.fromCodePoint = function (codepoint) { + if (codepoint < 0x10000) { + return String.fromCharCode(codepoint); + } else { + var high = Math.floor(codepoint / 0x10000) - 1; + var low = codepoint & 0xFFFF; + + return String.fromCharCode(0xD800 | ((high & 0x000F) << 6) | ((low & 0xFC00) >> 10)) + + String.fromCharCode(0xDC00 | (low & 0x3FF)); + } +}; + +/** + * Convert the character or the surrogate pair at the given + * index into the intrinsic Javascript string to a Unicode + * UCS-4 code point. + * + * @static + * @param {string} str string to get the code point from + * @param {number} index index into the string + * @return {number} code point of the character at the + * given index into the string + */ +IString.toCodePoint = function(str, index) { + if (!str || str.length === 0) { + return -1; + } + var code = -1, high = str.charCodeAt(index); + if (high >= 0xD800 && high <= 0xDBFF) { + if (str.length > index+1) { + var low = str.charCodeAt(index+1); + if (low >= 0xDC00 && low <= 0xDFFF) { + code = (((high & 0x3C0) >> 6) + 1) << 16 | + (((high & 0x3F) << 10) | (low & 0x3FF)); + } + } + } else { + code = high; + } + + return code; +}; + +/** + * Load the plural the definitions of plurals for the locale. + * @param {boolean=} sync + * @param {Locale|string=} locale + * @param {Object=} loadParams + * @param {function(*)=} onLoad + */ +IString.loadPlurals = function (sync, locale, loadParams, onLoad) { + var loc; + if (locale) { + loc = (typeof(locale) === 'string') ? new Locale(locale) : locale; + } else { + loc = new Locale(ilib.getLocale()); + } + var spec = loc.getLanguage(); + Utils.loadData({ + name: "plurals.json", + object: "IString", + locale: loc, + sync: sync, + loadParams: loadParams, + callback: ilib.bind(this, function(plurals) { + plurals = plurals || IString.plurals_default; + if (onLoad && typeof(onLoad) === 'function') { + onLoad(plurals); + } + }) + }); +}; + +/** + * @private + * @static + */ +IString._fncs = { + /** + * @private + * @param {Object} obj + * @return {string|undefined} + */ + firstProp: function (obj) { + for (var p in obj) { + if (p && obj[p]) { + return p; + } + } + return undefined; // should never get here + }, + + /** + * @private + * @param {Object} obj + * @return {string|undefined} + */ + firstPropRule: function (obj) { + if (Object.prototype.toString.call(obj) === '[object Array]') { + return "inrange"; + } else if (Object.prototype.toString.call(obj) === '[object Object]') { + for (var p in obj) { + if (p && obj[p]) { + return p; + } + } + + } + return undefined; // should never get here + }, + + /** + * @private + * @param {Object} obj + * @param {number|Object} n + * @return {?} + */ + getValue: function (obj, n) { + if (typeof(obj) === 'object') { + var subrule = IString._fncs.firstPropRule(obj); + if (subrule === "inrange") { + return IString._fncs[subrule](obj, n); + } + return IString._fncs[subrule](obj[subrule], n); + } else if (typeof(obj) === 'string') { + if (typeof(n) === 'object'){ + return n[obj]; + } + return n; + } else { + return obj; + } + }, + + /** + * @private + * @param {number|Object} n + * @param {Array.>|Object} range + * @return {boolean} + */ + matchRangeContinuous: function(n, range) { + + for (var num in range) { + if (typeof(num) !== 'undefined' && typeof(range[num]) !== 'undefined') { + var obj = range[num]; + if (typeof(obj) === 'number') { + if (n === range[num]) { + return true; + } else if (n >= range[0] && n <= range[1]) { + return true; + } + } else if (Object.prototype.toString.call(obj) === '[object Array]') { + if (n >= obj[0] && n <= obj[1]) { + return true; + } + } + } + } + return false; + }, + + /** + * @private + * @param {*} number + * @return {Object} + */ + calculateNumberDigits: function(number) { + var numberToString = number.toString(); + var parts = []; + var numberDigits = {}; + var operandSymbol = {}; + + var exponentialNum = number.toExponential(); + var exponentialIndex = exponentialNum.indexOf("e"); + if (exponentialIndex !== -1) { + operandSymbol.c = parseInt(exponentialNum[exponentialIndex+2]); + operandSymbol.e = parseInt(exponentialNum[exponentialIndex+2]); + } else { + operandSymbol.c = 0; + operandSymbol.e = 0; + } + + if (numberToString.indexOf('.') !== -1) { //decimal + parts = numberToString.split('.', 2); + numberDigits.integerPart = parseInt(parts[0], 10); + numberDigits.decimalPartLength = parts[1].length; + numberDigits.decimalPart = parseInt(parts[1], 10); + + operandSymbol.n = parseFloat(number); + operandSymbol.i = numberDigits.integerPart; + operandSymbol.v = numberDigits.decimalPartLength; + operandSymbol.w = numberDigits.decimalPartLength; + operandSymbol.f = numberDigits.decimalPart; + operandSymbol.t = numberDigits.decimalPart; + + } else { + numberDigits.integerPart = number; + numberDigits.decimalPartLength = 0; + numberDigits.decimalPart = 0; + + operandSymbol.n = parseInt(number, 10); + operandSymbol.i = numberDigits.integerPart; + operandSymbol.v = 0; + operandSymbol.w = 0; + operandSymbol.f = 0; + operandSymbol.t = 0; + + } + return operandSymbol + }, + + /** + * @private + * @param {number|Object} n + * @param {Array.>|Object} range + * @return {boolean} + */ + matchRange: function(n, range) { + return IString._fncs.matchRangeContinuous(n, range); + }, + + /** + * @private + * @param {Object} rule + * @param {number} n + * @return {boolean} + */ + is: function(rule, n) { + var left = IString._fncs.getValue(rule[0], n); + var right = IString._fncs.getValue(rule[1], n); + return left === right; + }, + + /** + * @private + * @param {Object} rule + * @param {number} n + * @return {boolean} + */ + isnot: function(rule, n) { + return IString._fncs.getValue(rule[0], n) !== IString._fncs.getValue(rule[1], n); + }, + + /** + * @private + * @param {Object} rule + * @param {number|Object} n + * @return {boolean} + */ + inrange: function(rule, n) { + if (typeof(rule[0]) === 'number') { + if(typeof(n) === 'object') { + return IString._fncs.matchRange(n.n,rule); + } + return IString._fncs.matchRange(n,rule); + } else if (typeof(rule[0]) === 'undefined') { + var subrule = IString._fncs.firstPropRule(rule); + return IString._fncs[subrule](rule[subrule], n); + } else { + return IString._fncs.matchRange(IString._fncs.getValue(rule[0], n), rule[1]); + } + }, + /** + * @private + * @param {Object} rule + * @param {number} n + * @return {boolean} + */ + notin: function(rule, n) { + return !IString._fncs.matchRange(IString._fncs.getValue(rule[0], n), rule[1]); + }, + + /** + * @private + * @param {Object} rule + * @param {number} n + * @return {boolean} + */ + within: function(rule, n) { + return IString._fncs.matchRangeContinuous(IString._fncs.getValue(rule[0], n), rule[1]); + }, + + /** + * @private + * @param {Object} rule + * @param {number} n + * @return {number} + */ + mod: function(rule, n) { + return MathUtils.mod(IString._fncs.getValue(rule[0], n), IString._fncs.getValue(rule[1], n)); + }, + + /** + * @private + * @param {Object} rule + * @param {number} n + * @return {number} + */ + n: function(rule, n) { + return n; + }, + + /** + * @private + * @param {Object} rule + * @param {number|Object} n + * @return {boolean} + */ + or: function(rule, n) { + var ruleLength = rule.length; + var result, i; + for (i=0; i < ruleLength; i++) { + result = IString._fncs.getValue(rule[i], n); + if (result) { + return true; + } + } + return false; + }, + /** + * @private + * @param {Object} rule + * @param {number|Object} n + * @return {boolean} + */ + and: function(rule, n) { + var ruleLength = rule.length; + var result, i; + for (i=0; i < ruleLength; i++) { + result= IString._fncs.getValue(rule[i], n); + if (!result) { + return false; + } + } + return true; + }, + /** + * @private + * @param {Object} rule + * @param {number|Object} n + * @return {boolean} + */ + eq: function(rule, n) { + var valueLeft = IString._fncs.getValue(rule[0], n); + var valueRight; + + if (typeof(rule[0]) === 'string') { + if (typeof(n) === 'object'){ + valueRight = n[rule[0]]; + if (typeof(rule[1])=== 'number'){ + valueRight = IString._fncs.getValue(rule[1], n); + } else if (typeof(rule[1])=== 'object' && (IString._fncs.firstPropRule(rule[1]) === "inrange" )){ + valueRight = IString._fncs.getValue(rule[1], n); + } + } + } else { + if (IString._fncs.firstPropRule(rule[1]) === "inrange") { // mod + valueRight = IString._fncs.getValue(rule[1], valueLeft); + } else { + valueRight = IString._fncs.getValue(rule[1], n); + } + } + if(typeof(valueRight) === 'boolean') { + return (valueRight ? true : false); + } else { + return (valueLeft === valueRight ? true :false); + } + }, + /** + * @private + * @param {Object} rule + * @param {number|Object} n + * @return {boolean} + */ + neq: function(rule, n) { + var valueLeft = IString._fncs.getValue(rule[0], n); + var valueRight; + var leftRange; + var rightRange; + + if (typeof(rule[0]) === 'string') { + valueRight = n[rule[0]]; + if (typeof(rule[1])=== 'number'){ + valueRight = IString._fncs.getValue(rule[1], n); + } else if (typeof(rule[1]) === 'object') { + leftRange = rule[1][0]; + rightRange = rule[1][1]; + if (typeof(leftRange) === 'number' && + typeof(rightRange) === 'number'){ + + if (valueLeft >= leftRange && valueRight <= rightRange) { + return false + } else { + return true; + } + } + } + } else { + if (IString._fncs.firstPropRule(rule[1]) === "inrange") { // mod + valueRight = IString._fncs.getValue(rule[1], valueLeft); + } else { + valueRight = IString._fncs.getValue(rule[1], n); + } + } + + if(typeof(valueRight) === 'boolean') {//mod + return (valueRight? false : true); + } else { + return (valueLeft !== valueRight ? true :false); + } + + } +}; + +IString.prototype = { + /** + * Return the length of this string in characters. This function defers to the regular + * Javascript string class in order to perform the length function. Please note that this + * method is a real method, whereas the length property of Javascript strings is + * implemented by native code and appears as a property.

+ * + * Example: + * + *

+     * var str = new IString("this is a string");
+     * console.log("String is " + str._length() + " characters long.");
+     * 
+ * @private + * @deprecated + */ + _length: function () { + return this.str.length; + }, + + /** + * Format this string instance as a message, replacing the parameters with + * the given values.

+ * + * The string can contain any text that a regular Javascript string can + * contain. Replacement parameters have the syntax: + * + *

+     * {name}
+     * 
+ * + * Where "name" can be any string surrounded by curly brackets. The value of + * "name" is taken from the parameters argument.

+ * + * Example: + * + *

+     * var str = new IString("There are {num} objects.");
+     * console.log(str.format({
+     *   num: 12
+     * });
+     * 
+ * + * Would give the output: + * + *
+     * There are 12 objects.
+     * 
+ * + * If a property is missing from the parameter block, the replacement + * parameter substring is left untouched in the string, and a different + * set of parameters may be applied a second time. This way, different + * parts of the code may format different parts of the message that they + * happen to know about.

+ * + * Example: + * + *

+     * var str = new IString("There are {num} objects in the {container}.");
+     * console.log(str.format({
+     *   num: 12
+     * });
+     * 
+ * + * Would give the output:

+ * + *

+     * There are 12 objects in the {container}.
+     * 
+ * + * The result can then be formatted again with a different parameter block that + * specifies a value for the container property. + * + * @param params a Javascript object containing values for the replacement + * parameters in the current string + * @return a new IString instance with as many replacement parameters filled + * out as possible with real values. + */ + format: function (params) { + var formatted = this.str; + if (params) { + var regex; + for (var p in params) { + if (typeof(params[p]) !== 'undefined') { + regex = new RegExp("\{"+p+"\}", "g"); + formatted = formatted.replace(regex, params[p]); + } + } + } + return formatted.toString(); + }, + + /** @private */ + _testChoice: function(index, limit) { + var operandValue = {}; + + switch (typeof(index)) { + case 'number': + operandValue = IString._fncs.calculateNumberDigits(index); + + if (limit.substring(0,2) === "<=") { + limit = parseFloat(limit.substring(2)); + return operandValue.n <= limit; + } else if (limit.substring(0,2) === ">=") { + limit = parseFloat(limit.substring(2)); + return operandValue.n >= limit; + } else if (limit.charAt(0) === "<") { + limit = parseFloat(limit.substring(1)); + return operandValue.n < limit; + } else if (limit.charAt(0) === ">") { + limit = parseFloat(limit.substring(1)); + return operandValue.n > limit; + } else { + this.locale = this.locale || new Locale(this.localeSpec); + switch (limit) { + case "zero": + case "one": + case "two": + case "few": + case "many": + // CLDR locale-dependent number classes + var ruleset = ilib.data["plurals_" + this.locale.getLanguage()+ "_" + this.locale.getRegion()] || ilib.data["plurals_" + this.locale.getLanguage()]|| IString.plurals_default; + if (ruleset) { + var rule = ruleset[limit]; + return IString._fncs.getValue(rule, operandValue); + } + break; + case "": + case "other": + // matches anything + return true; + default: + var dash = limit.indexOf("-"); + if (dash !== -1) { + // range + var start = limit.substring(0, dash); + var end = limit.substring(dash+1); + return operandValue.n >= parseInt(start, 10) && operandValue.n <= parseInt(end, 10); + } else { + return operandValue.n === parseInt(limit, 10); + } + } + } + break; + case 'boolean': + return (limit === "true" && index === true) || (limit === "false" && index === false); + + case 'string': + var regexp = new RegExp(limit, "i"); + return regexp.test(index); + + case 'object': + throw "syntax error: formatChoice parameter for the argument index cannot be an object"; + } + + return false; + }, + /** @private */ + _isIntlPluralAvailable: function(locale) { + if (typeof (locale.getVariant()) !== 'undefined'){ + return false; + } + + if (typeof(Intl) !== 'undefined' && + typeof(Intl.PluralRules) !== 'undefined' && + typeof(Intl.PluralRules.supportedLocalesOf) !== 'undefined') { + if (ilib._getPlatform() === 'nodejs') { + var version = process.versions["node"]; + if (!version) return false; + var majorVersion = version.split(".")[0]; + if (Number(majorVersion) >= 10 && (Intl.PluralRules.supportedLocalesOf(locale.getSpec()).length > 0)) { + return true; + } + return false; + } else if (Intl.PluralRules.supportedLocalesOf(locale.getSpec()).length > 0) { + return true; + } else { + return false; + } + } + return false; + }, + + /** + * Format a string as one of a choice of strings dependent on the value of + * a particular argument index or array of indices.

+ * + * The syntax of the choice string is as follows. The string contains a + * series of choices separated by a vertical bar character "|". Each choice + * has a value or range of values to match followed by a hash character "#" + * followed by the string to use if the variable matches the criteria.

+ * + * Example string: + * + *

+     * var num = 2;
+     * var str = new IString("0#There are no objects.|1#There is one object.|2#There are {number} objects.");
+     * console.log(str.formatChoice(num, {
+     *   number: num
+     * }));
+     * 
+ * + * Gives the output: + * + *
+     * "There are 2 objects."
+     * 
+ * + * The strings to format may contain replacement variables that will be formatted + * using the format() method above and the params argument as a source of values + * to use while formatting those variables.

+ * + * If the criterion for a particular choice is empty, that choice will be used + * as the default one for use when none of the other choice's criteria match.

+ * + * Example string: + * + *

+     * var num = 22;
+     * var str = new IString("0#There are no objects.|1#There is one object.|#There are {number} objects.");
+     * console.log(str.formatChoice(num, {
+     *   number: num
+     * }));
+     * 
+ * + * Gives the output: + * + *
+     * "There are 22 objects."
+     * 
+ * + * If multiple choice patterns can match a given argument index, the first one + * encountered in the string will be used. If no choice patterns match the + * argument index, then the default choice will be used. If there is no default + * choice defined, then this method will return an empty string.

+ * + * Special Syntax

+ * + * For any choice format string, all of the patterns in the string should be + * of a single type: numeric, boolean, or string/regexp. The type of the + * patterns is determined by the type of the argument index parameter.

+ * + * If the argument index is numeric, then some special syntax can be used + * in the patterns to match numeric ranges.

+ * + *

    + *
  • >x - match any number that is greater than x + *
  • >=x - match any number that is greater than or equal to x + *
  • <x - match any number that is less than x + *
  • <=x - match any number that is less than or equal to x + *
  • start-end - match any number in the range [start,end) + *
  • zero - match any number in the class "zero". (See below for + * a description of number classes.) + *
  • one - match any number in the class "one" + *
  • two - match any number in the class "two" + *
  • few - match any number in the class "few" + *
  • many - match any number in the class "many" + *
  • other - match any number in the other or default class + *
+ * + * A number class defines a set of numbers that receive a particular syntax + * in the strings. For example, in Slovenian, integers ending in the digit + * "1" are in the "one" class, including 1, 21, 31, ... 101, 111, etc. + * Similarly, integers ending in the digit "2" are in the "two" class. + * Integers ending in the digits "3" or "4" are in the "few" class, and + * every other integer is handled by the default string.

+ * + * The definition of what numbers are included in a class is locale-dependent. + * They are defined in the data file plurals.json. If your string is in a + * different locale than the default for ilib, you should call the setLocale() + * method of the string instance before calling this method.

+ * + * Other Pattern Types

+ * + * If the argument index is a boolean, the string values "true" and "false" + * may appear as the choice patterns.

+ * + * If the argument index is of type string, then the choice patterns may contain + * regular expressions, or static strings as degenerate regexps.

+ * + * Multiple Indexes

+ * + * If you have 2 or more indexes to format into a string, you can pass them as + * an array. When you do that, the patterns to match should be a comma-separate + * list of patterns as per the rules above.

+ * + * Example string: + * + *

+     * var str = new IString("zero,zero#There are no objects on zero pages.|one,one#There is 1 object on 1 page.|other,one#There are {number} objects on 1 page.|#There are {number} objects on {pages} pages.");
+     * var num = 4, pages = 1;
+     * console.log(str.formatChoice([num, pages], {
+     *   number: num,
+     *   pages: pages
+     * }));
+     * 
+ * + * Gives the output:

+ * + *

+     * "There are 4 objects on 1 page."
+     * 
+ * + * Note that when there is a single index, you would typically leave the pattern blank to + * indicate the default choice. When there are multiple indices, sometimes one of the + * patterns has to be the default case when the other is not. Rather than leaving one or + * more of the patterns blank with commas that look out-of-place in the middle of it, you + * can use the word "other" to indicate a match with the default or other choice. The above example + * shows the use of the "other" pattern. That said, you are allowed to leave the pattern + * blank if you so choose. In the example above, the pattern for the third string could + * easily have been written as ",one" instead of "other,one" and the result will be the same. + * + * @param {*|Array.<*>} argIndex The index into the choice array of the current parameter, + * or an array of indices + * @param {Object} params The hash of parameter values that replace the replacement + * variables in the string + * * @param {boolean} useIntlPlural [optional] true if you are willing to use Intl.PluralRules object + * If it is omitted, the default value is true + * @throws "syntax error in choice format pattern: " if there is a syntax error + * @return {string} the formatted string + */ + formatChoice: function(argIndex, params, useIntlPlural) { + var choices = this.str.split("|"); + var limits = []; + var strings = []; + var limitsArr = []; + var i; + var parts; + var result = undefined; + var defaultCase = ""; + var checkArgsType; + var useIntl = typeof(useIntlPlural) !== 'undefined' ? useIntlPlural : true; + if (this.str.length === 0) { + // nothing to do + return ""; + } + + // first parse all the choices + for (i = 0; i < choices.length; i++) { + parts = choices[i].split("#"); + if (parts.length > 2) { + limits[i] = parts[0]; + parts = parts.shift(); + strings[i] = parts.join("#"); + } else if (parts.length === 2) { + limits[i] = parts[0]; + strings[i] = parts[1]; + } else { + // syntax error + throw "syntax error in choice format pattern: " + choices[i]; + } + } + + var args = (ilib.isArray(argIndex)) ? argIndex : [argIndex]; + + checkArgsType = args.filter(ilib.bind(this, function(item){ + if (typeof(item) !== "number") { + return false; + } + return true; + })); + + if (useIntl && this.intlPlural && (args.length === checkArgsType.length)){ + this.cateArr = []; + for(i = 0; i < args.length;i++) { + var r = this.intlPlural.select(args[i]); + this.cateArr.push(r); + } + if (args.length === 1) { + var idx = limits.indexOf(this.cateArr[0]); + if (idx == -1) { + idx = limits.indexOf(""); + } + result = new IString(strings[idx]); + } else { + if (limits.length === 0) { + defaultCase = new IString(strings[i]); + } else { + this.findOne = false; + + for(i = 0; !this.findOne && i < limits.length; i++){ + limitsArr = (limits[i].indexOf(",") > -1) ? limits[i].split(",") : [limits[i]]; + + if (limitsArr.length > 1 && (limitsArr.length < this.cateArr.length)){ + this.cateArr = this.cateArr.slice(0,limitsArr.length); + } + limitsArr = limitsArr.map(function(item){ + return item.trim(); + }) + limitsArr.filter(ilib.bind(this, function(element, idx, arr){ + if (JSON.stringify(arr) === JSON.stringify(this.cateArr)){ + this.number = i; + this.fineOne = true; + } + })); + } + if (this.number === -1){ + this.number = limits.indexOf(""); + } + result = new IString(strings[this.number]); + } + } + } else { + // then apply the argument index (or indices) + for (i = 0; i < limits.length; i++) { + if (limits[i].length === 0) { + // this is default case + defaultCase = new IString(strings[i]); + } else { + limitsArr = (limits[i].indexOf(",") > -1) ? limits[i].split(",") : [limits[i]]; + + var applicable = true; + for (var j = 0; applicable && j < args.length && j < limitsArr.length; j++) { + applicable = this._testChoice(args[j], limitsArr[j]); + } + + if (applicable) { + result = new IString(strings[i]); + i = limits.length; + } + } + } + } + if (!result) { + result = defaultCase || new IString(""); + } + + result = result.format(params); + + return result.toString(); + }, + + // delegates + /** + * Same as String.toString() + * @return {string} this instance as regular Javascript string + */ + toString: function () { + return this.str.toString(); + }, + + /** + * Same as String.valueOf() + * @return {string} this instance as a regular Javascript string + */ + valueOf: function () { + return this.str.valueOf(); + }, + + /** + * Same as String.charAt() + * @param {number} index the index of the character being sought + * @return {IString} the character at the given index + */ + charAt: function(index) { + return new IString(this.str.charAt(index)); + }, + + /** + * Same as String.charCodeAt(). This only reports on + * 2-byte UCS-2 Unicode values, and does not take into + * account supplementary characters encoded in UTF-16. + * If you would like to take account of those characters, + * use codePointAt() instead. + * @param {number} index the index of the character being sought + * @return {number} the character code of the character at the + * given index in the string + */ + charCodeAt: function(index) { + return this.str.charCodeAt(index); + }, + + /** + * Same as String.concat() + * @param {string} strings strings to concatenate to the current one + * @return {IString} a concatenation of the given strings + */ + concat: function(strings) { + return new IString(this.str.concat(strings)); + }, + + /** + * Same as String.indexOf() + * @param {string} searchValue string to search for + * @param {number} start index into the string to start searching, or + * undefined to search the entire string + * @return {number} index into the string of the string being sought, + * or -1 if the string is not found + */ + indexOf: function(searchValue, start) { + return this.str.indexOf(searchValue, start); + }, + + /** + * Same as String.lastIndexOf() + * @param {string} searchValue string to search for + * @param {number} start index into the string to start searching, or + * undefined to search the entire string + * @return {number} index into the string of the string being sought, + * or -1 if the string is not found + */ + lastIndexOf: function(searchValue, start) { + return this.str.lastIndexOf(searchValue, start); + }, + + /** + * Same as String.match() + * @param {string} regexp the regular expression to match + * @return {Array.} an array of matches + */ + match: function(regexp) { + return this.str.match(regexp); + }, + + /** + * Same as String.matchAll() + * @param {string} regexp the regular expression to match + * @return {iterator} an iterator of the matches + */ + matchAll: function(regexp) { + return this.str.matchAll(regexp); + }, + + /** + * Same as String.replace() + * @param {string} searchValue a regular expression to search for + * @param {string} newValue the string to replace the matches with + * @return {IString} a new string with all the matches replaced + * with the new value + */ + replace: function(searchValue, newValue) { + return new IString(this.str.replace(searchValue, newValue)); + }, + + /** + * Same as String.search() + * @param {string} regexp the regular expression to search for + * @return {number} position of the match, or -1 for no match + */ + search: function(regexp) { + return this.str.search(regexp); + }, + + /** + * Same as String.slice() + * @param {number} start first character to include in the string + * @param {number} end include all characters up to, but not including + * the end character + * @return {IString} a slice of the current string + */ + slice: function(start, end) { + return new IString(this.str.slice(start, end)); + }, + + /** + * Same as String.split() + * @param {string} separator regular expression to match to find + * separations between the parts of the text + * @param {number} limit maximum number of items in the final + * output array. Any items beyond that limit will be ignored. + * @return {Array.} the parts of the current string split + * by the separator + */ + split: function(separator, limit) { + return this.str.split(separator, limit); + }, + + /** + * Same as String.substr() + * @param {number} start the index of the character that should + * begin the returned substring + * @param {number} length the number of characters to return after + * the start character. + * @return {IString} the requested substring + */ + substr: function(start, length) { + var plat = ilib._getPlatform(); + if (plat === "qt" || plat === "rhino" || plat === "trireme") { + // qt and rhino have a broken implementation of substr(), so + // work around it + if (typeof(length) === "undefined") { + length = this.str.length - start; + } + } + return new IString(this.str.substr(start, length)); + }, + + /** + * Same as String.substring() + * @param {number} from the index of the character that should + * begin the returned substring + * @param {number} to the index where to stop the extraction. If + * omitted, extracts the rest of the string + * @return {IString} the requested substring + */ + substring: function(from, to) { + return this.str.substring(from, to); + }, + + /** + * Same as String.toLowerCase(). Note that this method is + * not locale-sensitive. + * @return {IString} a string with the first character + * lower-cased + */ + toLowerCase: function() { + return this.str.toLowerCase(); + }, + + /** + * Same as String.toUpperCase(). Note that this method is + * not locale-sensitive. Use toLocaleUpperCase() instead + * to get locale-sensitive behaviour. + * @return {IString} a string with the first character + * upper-cased + */ + toUpperCase: function() { + return this.str.toUpperCase(); + }, + + /** + * Same as String.endsWith(). + * @return {boolean} true if the given characters are found at + * the end of the string, and false otherwise + */ + endsWith: function(searchString, length) { + /* (note)length is optional. If it is omitted the default value is the length of string. + * But If length is omitted, it returns false on QT. (tested on QT 5.12.4 and 5.13.0) + */ + if (typeof length === "undefined") { + length = this.str.length; + } + return this.str.endsWith(searchString, length); + }, + + /** + * Same as String.startsWith(). + * @return {boolean} true if the given characters are found at + * the beginning of the string, and false otherwise + */ + startsWith: function(searchString, length) { + return this.str.startsWith(searchString, length); + }, + + /** + * Same as String.includes(). + * @return {boolean} true if the search string is found anywhere + * with the given string, and false otherwise + */ + includes: function(searchString, position) { + return this.str.includes(searchString, position); + }, + + /** + * Same as String.normalize(). If this JS engine does not support + * this method, then you can use the NormString class of ilib + * to the same thing (albeit a little slower). + * + * @return {string} the string in normalized form + */ + normalize: function(form) { + return this.str.normalize(form); + }, + + /** + * Same as String.padEnd(). + * @return {string} a string of the specified length with the + * pad string applied at the end of the current string + */ + padEnd: function(targetLength, padString) { + return this.str.padEnd(targetLength, padString); + }, + + /** + * Same as String.padStart(). + * @return {string} a string of the specified length with the + * pad string applied at the end of the current string + */ + padStart: function(targetLength, padString) { + return this.str.padStart(targetLength, padString); + }, + + /** + * Same as String.repeat(). + * @return {string} a new string containing the specified number + * of copies of the given string + */ + repeat: function(count) { + return this.str.repeat(count); + }, + + /** + * Same as String.toLocaleLowerCase(). If the JS engine does not support this + * method, you can use the ilib CaseMapper class instead. + * @return {string} a new string representing the calling string + * converted to lower case, according to any locale-sensitive + * case mappings + */ + toLocaleLowerCase: function(locale) { + return this.str.toLocaleLowerCase(locale); + }, + + /** + * Same as String.toLocaleUpperCase(). If the JS engine does not support this + * method, you can use the ilib CaseMapper class instead. + * @return {string} a new string representing the calling string + * converted to upper case, according to any locale-sensitive + * case mappings + */ + toLocaleUpperCase: function(locale) { + return this.str.toLocaleUpperCase(locale); + }, + + /** + * Same as String.trim(). + * @return {string} a new string representing the calling string stripped + * of whitespace from both ends. + */ + trim: function() { + return this.str.trim(); + }, + + /** + * Same as String.trimEnd(). + * @return {string} a new string representing the calling string stripped + * of whitespace from its (right) end. + */ + trimEnd: function() { + return this.str.trimEnd(); + }, + + /** + * Same as String.trimRight(). + * @return {string} a new string representing the calling string stripped + * of whitespace from its (right) end. + */ + trimRight: function() { + return this.str.trimRight(); + }, + + /** + * Same as String.trimStart(). + * @return {string} A new string representing the calling string stripped + * of whitespace from its beginning (left end). + */ + trimStart: function() { + return this.str.trimStart(); + }, + + /** + * Same as String.trimLeft(). + * @return {string} A new string representing the calling string stripped + * of whitespace from its beginning (left end). + */ + trimLeft: function() { + return this.str.trimLeft(); + }, + + /** + * Convert the character or the surrogate pair at the given + * index into the string to a Unicode UCS-4 code point. + * @private + * @param {number} index index into the string + * @return {number} code point of the character at the + * given index into the string + */ + _toCodePoint: function (index) { + return IString.toCodePoint(this.str, index); + }, + + /** + * Call the callback with each character in the string one at + * a time, taking care to step through the surrogate pairs in + * the UTF-16 encoding properly.

+ * + * The standard Javascript String's charAt() method only + * returns a particular 16-bit character in the + * UTF-16 encoding scheme. + * If the index to charAt() is pointing to a low- or + * high-surrogate character, + * it will return the surrogate character rather + * than the the character + * in the supplementary planes that the two surrogates together + * encode. This function will call the callback with the full + * character, making sure to join two + * surrogates into one character in the supplementary planes + * where necessary.

+ * + * @param {function(string)} callback a callback function to call with each + * full character in the current string + */ + forEach: function(callback) { + if (typeof(callback) === 'function') { + var it = this.charIterator(); + while (it.hasNext()) { + callback(it.next()); + } + } + }, + + /** + * Call the callback with each numeric code point in the string one at + * a time, taking care to step through the surrogate pairs in + * the UTF-16 encoding properly.

+ * + * The standard Javascript String's charCodeAt() method only + * returns information about a particular 16-bit character in the + * UTF-16 encoding scheme. + * If the index to charCodeAt() is pointing to a low- or + * high-surrogate character, + * it will return the code point of the surrogate character rather + * than the code point of the character + * in the supplementary planes that the two surrogates together + * encode. This function will call the callback with the full + * code point of each character, making sure to join two + * surrogates into one code point in the supplementary planes.

+ * + * @param {function(string)} callback a callback function to call with each + * code point in the current string + */ + forEachCodePoint: function(callback) { + if (typeof(callback) === 'function') { + var it = this.iterator(); + while (it.hasNext()) { + callback(it.next()); + } + } + }, + + /** + * Return an iterator that will step through all of the characters + * in the string one at a time and return their code points, taking + * care to step through the surrogate pairs in UTF-16 encoding + * properly.

+ * + * The standard Javascript String's charCodeAt() method only + * returns information about a particular 16-bit character in the + * UTF-16 encoding scheme. + * If the index is pointing to a low- or high-surrogate character, + * it will return a code point of the surrogate character rather + * than the code point of the character + * in the supplementary planes that the two surrogates together + * encode.

+ * + * The iterator instance returned has two methods, hasNext() which + * returns true if the iterator has more code points to iterate through, + * and next() which returns the next code point as a number.

+ * + * @return {Object} an iterator + * that iterates through all the code points in the string + */ + iterator: function() { + /** + */ + function _iterator (istring) { + this.index = 0; + this.hasNext = function () { + return (this.index < istring.str.length); + }; + this.next = function () { + if (this.index < istring.str.length) { + var num = istring._toCodePoint(this.index); + this.index += ((num > 0xFFFF) ? 2 : 1); + } else { + num = -1; + } + return num; + }; + }; + return new _iterator(this); + }, + + /** + * Return an iterator that will step through all of the characters + * in the string one at a time, taking + * care to step through the surrogate pairs in UTF-16 encoding + * properly.

+ * + * The standard Javascript String's charAt() method only + * returns information about a particular 16-bit character in the + * UTF-16 encoding scheme. + * If the index is pointing to a low- or high-surrogate character, + * it will return that surrogate character rather + * than the surrogate pair which represents a character + * in the supplementary planes.

+ * + * The iterator instance returned has two methods, hasNext() which + * returns true if the iterator has more characters to iterate through, + * and next() which returns the next character.

+ * + * @return {Object} an iterator + * that iterates through all the characters in the string + */ + charIterator: function() { + /** + */ + function _chiterator (istring) { + this.index = 0; + this.hasNext = function () { + return (this.index < istring.str.length); + }; + this.next = function () { + var ch; + if (this.index < istring.str.length) { + ch = istring.str.charAt(this.index); + if (IString._isSurrogate(ch) && + this.index+1 < istring.str.length && + IString._isSurrogate(istring.str.charAt(this.index+1))) { + this.index++; + ch += istring.str.charAt(this.index); + } + this.index++; + } + return ch; + }; + }; + return new _chiterator(this); + }, + + /** + * Return the code point at the given index when the string is viewed + * as an array of code points. If the index is beyond the end of the + * array of code points or if the index is negative, -1 is returned. + * @param {number} index index of the code point + * @return {number} code point of the character at the given index into + * the string + */ + codePointAt: function (index) { + if (index < 0) { + return -1; + } + var count, + it = this.iterator(), + ch; + for (count = index; count >= 0 && it.hasNext(); count--) { + ch = it.next(); + } + return (count < 0) ? ch : -1; + }, + + /** + * Set the locale to use when processing choice formats. The locale + * affects how number classes are interpretted. In some cultures, + * the limit "few" maps to "any integer that ends in the digits 2 to 9" and + * in yet others, "few" maps to "any integer that ends in the digits + * 3 or 4". + * @param {Locale|string} locale locale to use when processing choice + * formats with this string + * @param {boolean=} sync [optional] whether to load the locale data synchronously + * or not + * @param {Object=} loadParams [optional] parameters to pass to the loader function + * @param {function(*)=} onLoad [optional] function to call when the loading is done + */ + setLocale: function (locale, sync, loadParams, onLoad) { + if (typeof(locale) === 'object') { + this.locale = locale; + } else { + this.localeSpec = locale; + this.locale = new Locale(locale); + } + + if (this._isIntlPluralAvailable(this.locale)){ + this.intlPlural = new Intl.PluralRules(this.locale.getSpec()); + } + + IString.loadPlurals(typeof(sync) !== 'undefined' ? sync : true, this.locale, loadParams, onLoad); + }, + + /** + * Return the locale to use when processing choice formats. The locale + * affects how number classes are interpretted. In some cultures, + * the limit "few" maps to "any integer that ends in the digits 2 to 9" and + * in yet others, "few" maps to "any integer that ends in the digits + * 3 or 4". + * @return {string} localespec to use when processing choice + * formats with this string + */ + getLocale: function () { + return (this.locale ? this.locale.getSpec() : this.localeSpec) || ilib.getLocale(); + }, + + /** + * Return the number of code points in this string. This may be different + * than the number of characters, as the UTF-16 encoding that Javascript + * uses for its basis returns surrogate pairs separately. Two 2-byte + * surrogate characters together make up one character/code point in + * the supplementary character planes. If your string contains no + * characters in the supplementary planes, this method will return the + * same thing as the length() method. + * @return {number} the number of code points in this string + */ + codePointLength: function () { + if (this.cpLength === -1) { + var it = this.iterator(); + this.cpLength = 0; + while (it.hasNext()) { + this.cpLength++; + it.next(); + }; + } + return this.cpLength; + } +}; + + +/* + * ISet.js - ilib Set class definition for platforms older than ES6 + * + * Copyright © 2015, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Create a new set with elements in the given array. The type of + * the set is gleaned from the type of the first element in the + * elements array, or the first element added to the set. The type + * may be "string" or "number", and all elements will be returned + * as elements of that type. + * + * @class + * @param {Array.=} elements initial elements to add to the set + * @constructor + */ +var ISet = function(elements) { + this.elements = {}; + + if (elements && elements.length) { + for (var i = 0; i < elements.length; i++) { + this.elements[elements[i]] = true; + } + + this.type = typeof(elements[0]); + } +}; + +/** + * @private + */ +ISet.prototype._addOne = function(element) { + if (this.isEmpty()) { + this.type = typeof(element); + } + + if (!this.elements[element]) { + this.elements[element] = true; + return true; + } + + return false; +}; + +/** + * Adds the specified element or array of elements to this set if it is or they are not + * already present. + * + * @param {*|Array.<*>} element element or array of elements to add + * @return {boolean} true if this set did not already contain the specified element[s] + */ +ISet.prototype.add = function(element) { + var ret = false; + + if (typeof(element) === "object") { + for (var i = 0; i < element.length; i++) { + ret = this._addOne(element[i]) || ret; + } + } else { + ret = this._addOne(element); + } + + return ret; +}; + +/** + * Removes all of the elements from this set. + */ +ISet.prototype.clear = function() { + this.elements = {}; +}; + +/** + * Returns true if this set contains the specified element. + * @param {*} element the element to test + * @return {boolean} + */ +ISet.prototype.contains = function(element) { + return this.elements[element] || false; +}; + +ISet.prototype.has = ISet.prototype.contains; // for compatibility with ES6 + +/** + * Returns true if this set contains no elements. + * @return {boolean} + */ +ISet.prototype.isEmpty = function() { + return (Object.keys(this.elements).length === 0); +}; + +/** + * Removes the specified element from this set if it is present. + * @param {*} element the element to remove + * @return {boolean} true if the set contained the specified element + */ +ISet.prototype.remove = function(element) { + if (this.elements[element]) { + delete this.elements[element]; + return true; + } + + return false; +}; + +/** + * Return the set as a javascript array. + * @return {Array.<*>} the set represented as a javascript array + */ +ISet.prototype.asArray = function() { + var keys = Object.keys(this.elements); + + // keys is an array of strings. Convert to numbers if necessary + if (this.type === "number") { + var tmp = []; + for (var i = 0; i < keys.length; i++) { + tmp.push(Number(keys[i]).valueOf()); + } + keys = tmp; + } + + return keys; +}; + +/** + * Represents the current set as json. + * @return {string} the current set represented as json + */ +ISet.prototype.toJson = function() { + return JSON.stringify(this.asArray()); +}; + +/** + * Convert to a javascript representation of this object. + * In this case, it is a normal JS array. + * @return {*} the JS representation of this object + */ +ISet.prototype.toJS = function() { + return this.asArray(); +}; + +/** + * Convert from a js representation to an internal one. + * @return {ISet|undefined} the current object, or undefined if the conversion did not work + */ +ISet.prototype.fromJS = function(obj) { + return this.add(obj) ? this : undefined; +}; + + +/* + * INumber.js - Parse a number in any locale + * + * Copyright © 2012-2015, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + + + + + + +/** + * @class + * Parse a string as a number, ignoring all locale-specific formatting.

+ * + * This class is different from the standard Javascript parseInt() and parseFloat() + * functions in that the number to be parsed can have formatting characters in it + * that are not supported by those two + * functions, and it handles numbers written in other locales properly. For example, + * if you pass the string "203,231.23" to the parseFloat() function in Javascript, it + * will return you the number 203. The INumber class will parse it correctly and + * the value() function will return the number 203231.23. If you pass parseFloat() the + * string "203.231,23" with the locale set to de-DE, it will return you 203 again. This + * class will return the correct number 203231.23 again.

+ * + * The options object may contain any of the following properties: + * + *

    + *
  • locale - specify the locale of the string to parse. This is used to + * figure out what the decimal point character is. If not specified, the default locale + * for the app or browser is used. + *
  • type - specify whether this string should be interpretted as a number, + * currency, or percentage amount. When the number is interpretted as a currency + * amount, the getCurrency() method will return something useful, otherwise it will + * return undefined. If + * the number is to be interpretted as percentage amount and there is a percentage sign + * in the string, then the number will be returned + * as a fraction from the valueOf() method. If there is no percentage sign, then the + * number will be returned as a regular number. That is "58.3%" will be returned as the + * number 0.583 but "58.3" will be returned as 58.3. Valid values for this property + * are "number", "currency", and "percentage". Default if this is not specified is + * "number". + *
  • onLoad - a callback function to call when the locale data is fully + * loaded. When the onLoad option is given, this class will attempt to + * load any missing locale data using the ilib loader callback. + * When the constructor is done (even if the data is already preassembled), the + * onLoad function is called with the current instance as a parameter, so this + * callback can be used with preassembled or dynamic loading or a mix of the two. + * + *
  • sync - tell whether to load any missing locale data synchronously or + * asynchronously. If this option is given as "false", then the "onLoad" + * callback must be given, as the instance returned from this constructor will + * not be usable for a while. + * + *
  • loadParams - an object containing parameters to pass to the + * loader callback function when locale data is missing. The parameters are not + * interpretted or modified in any way. They are simply passed along. The object + * may contain any property/value pairs as long as the calling code is in + * agreement with the loader callback function as to what those parameters mean. + *
+ *

+ * + * This class is named INumber ("ilib number") so as not to conflict with the + * built-in Javascript Number class. + * + * @constructor + * @param {string|number|INumber|Number|undefined} str a string to parse as a number, or a number value + * @param {Object=} options Options controlling how the instance should be created + */ +var INumber = function (str, options) { + var i, stripped = "", + sync = true; + + this.locale = new Locale(); + this.type = "number"; + + if (options) { + if (options.locale) { + this.locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; + } + if (options.type) { + switch (options.type) { + case "number": + case "currency": + case "percentage": + this.type = options.type; + break; + default: + break; + } + } + if (typeof(options.sync) !== 'undefined') { + sync = !!options.sync; + } + } else { + options = {sync: true}; + } + + isDigit._init(sync, options.loadParams, ilib.bind(this, function() { + isSpace._init(sync, options.loadParams, ilib.bind(this, function() { + new LocaleInfo(this.locale, { + sync: sync, + loadParams: options.loadParams, + onLoad: ilib.bind(this, function (li) { + this.li = li; + this.decimal = li.getDecimalSeparator(); + var nativeDecimal = this.li.getNativeDecimalSeparator() || ""; + + switch (typeof(str)) { + case 'string': + // stripping should work for all locales, because you just ignore all the + // formatting except the decimal char + var unary = true; // looking for the unary minus still? + var lastNumericChar = 0; + this.str = str || "0"; + i = 0; + for (i = 0; i < this.str.length; i++) { + if (unary && this.str.charAt(i) === '-') { + unary = false; + stripped += this.str.charAt(i); + lastNumericChar = i; + } else if (isDigit(this.str.charAt(i))) { + stripped += this.str.charAt(i); + unary = false; + lastNumericChar = i; + } else if (this.str.charAt(i) === this.decimal || this.str.charAt(i) === nativeDecimal) { + stripped += "."; // always convert to period + unary = false; + lastNumericChar = i; + } // else ignore + } + // record what we actually parsed + this.parsed = this.str.substring(0, lastNumericChar+1); + + /** @type {number} */ + this.value = parseFloat(this._mapToLatinDigits(stripped)); + break; + case 'number': + this.str = "" + str; + this.value = str; + break; + + case 'object': + // call parseFloat to coerse the type to number + this.value = parseFloat(str.valueOf()); + this.str = "" + this.value; + break; + + case 'undefined': + this.value = 0; + this.str = "0"; + break; + } + + switch (this.type) { + default: + // don't need to do anything special for other types + break; + case "percentage": + if (this.str.indexOf(li.getPercentageSymbol()) !== -1) { + this.value /= 100; + } + break; + case "currency": + stripped = ""; + i = 0; + while (i < this.str.length && + !isDigit(this.str.charAt(i)) && + !isSpace(this.str.charAt(i))) { + stripped += this.str.charAt(i++); + } + if (stripped.length === 0) { + while (i < this.str.length && + isDigit(this.str.charAt(i)) || + isSpace(this.str.charAt(i)) || + this.str.charAt(i) === '.' || + this.str.charAt(i) === ',' ) { + i++; + } + while (i < this.str.length && + !isDigit(this.str.charAt(i)) && + !isSpace(this.str.charAt(i))) { + stripped += this.str.charAt(i++); + } + } + new Currency({ + locale: this.locale, + sign: stripped, + sync: sync, + loadParams: options.loadParams, + onLoad: ilib.bind(this, function (cur) { + this.currency = cur; + if (options && typeof(options.onLoad) === 'function') { + options.onLoad(this); + } + }) + }); + return; + } + + if (options && typeof(options.onLoad) === 'function') { + options.onLoad(this); + } + }) + }); + })); + })); +}; + +INumber.prototype = { + /** + * @private + */ + _mapToLatinDigits: function(str) { + // only map if there are actual native digits + var digits = this.li.getNativeDigits(); + if (!digits) return str; + + var digitMap = {}; + for (var i = 0; i < digits.length; i++) { + digitMap[digits[i]] = String(i); + } + var decimal = this.li.getNativeDecimalSeparator(); + + return str.split("").map(function(ch) { + if (ch == decimal) return "."; + return digitMap[ch] || ch; + }).join(""); + }, + + /** + * Return the locale for this formatter instance. + * @return {Locale} the locale instance for this formatter + */ + getLocale: function () { + return this.locale; + }, + + /** + * Return the original string that this number instance was created with. + * @return {string} the original string + */ + toString: function () { + return this.str; + }, + + /** + * If the type of this INumber instance is "currency", then the parser will attempt + * to figure out which currency this amount represents. The amount can be written + * with any of the currency signs or ISO 4217 codes that are currently + * recognized by ilib, and the currency signs may occur before or after the + * numeric portion of the string. If no currency can be recognized, then the + * default currency for the locale is returned. If multiple currencies can be + * recognized (for example if the currency sign is "$"), then this method + * will prefer the one for the current locale. If multiple currencies can be + * recognized, but none are used in the current locale, then the first currency + * encountered will be used. This may produce random results, though the larger + * currencies occur earlier in the list. For example, if the sign found in the + * string is "$" and that is not the sign of the currency of the current locale + * then the US dollar will be recognized, as it is the largest currency that uses + * the "$" as its sign. + * + * @return {Currency|undefined} the currency instance for this amount, or + * undefined if this INumber object is not of type currency + */ + getCurrency: function () { + return this.currency; + }, + + /** + * Return the value of this INumber object as a primitive number instance. + * @return {number} the value of this number instance + */ + valueOf: function () { + return this.value; + } +}; + + +/* + * JSUtils.js - Misc utilities to work around Javascript engine differences + * + * Copyright © 2013-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +var JSUtils = {}; + +/** + * Perform a shallow copy of the source object to the target object. This only + * copies the assignments of the source properties to the target properties, + * but not recursively from there.

+ * + * + * @static + * @param {Object} source the source object to copy properties from + * @param {Object} target the target object to copy properties into + */ +JSUtils.shallowCopy = function (source, target) { + var prop = undefined; + if (source && target) { + // using Object.assign is about 1/3 faster on nodejs + if (typeof(Object.assign) === "function") { + return Object.assign(target, source); + } + // polyfill + for (prop in source) { + if (prop !== undefined && typeof(source[prop]) !== 'undefined') { + target[prop] = source[prop]; + } + } + } +}; + +/** + * Perform a recursive deep copy from the "from" object to the "deep" object. + * + * @static + * @param {Object} from the object to copy from + * @param {Object} to the object to copy to + * @return {Object} a reference to the the "to" object + */ +JSUtils.deepCopy = function(from, to) { + var prop; + + for (prop in from) { + if (prop) { + if (typeof(from[prop]) === 'object') { + to[prop] = {}; + JSUtils.deepCopy(from[prop], to[prop]); + } else { + to[prop] = from[prop]; + } + } + } + return to; +}; + +/** + * Map a string to the given set of alternate characters. If the target set + * does not contain a particular character in the input string, then that + * character will be copied to the output unmapped. + * + * @static + * @param {string} str a string to map to an alternate set of characters + * @param {Array.|Object} map a mapping to alternate characters + * @return {string} the source string where each character is mapped to alternate characters + */ +JSUtils.mapString = function (str, map) { + var mapped = ""; + if (map && str) { + for (var i = 0; i < str.length; i++) { + var c = str.charAt(i); // TODO use a char iterator? + mapped += map[c] || c; + } + } else { + mapped = str; + } + return mapped; +}; + +/** + * Check if an object is a member of the given array. If this javascript engine + * support indexOf, it is used directly. Otherwise, this function implements it + * itself. The idea is to make sure that you can use the quick indexOf if it is + * available, but use a slower implementation in older engines as well. + * + * @static + * @param {Array.} array array to search + * @param {Object|string|number} obj object being sought. This should be of the same type as the + * members of the array being searched. If not, this function will not return + * any results. + * @return {number} index of the object in the array, or -1 if it is not in the array. + */ +JSUtils.indexOf = function(array, obj) { + if (!array || !obj) { + return -1; + } + if (typeof(array.indexOf) === 'function') { + return array.indexOf(obj); + } else { + // polyfill + for (var i = 0; i < array.length; i++) { + if (array[i] === obj) { + return i; + } + } + return -1; + } +}; + +/** + * Pad the str with zeros to the given length of digits. + * + * @static + * @param {string|number} str the string or number to pad + * @param {number} length the desired total length of the output string, padded + * @param {boolean=} right if true, pad on the right side of the number rather than the left. + * Default is false. + */ +JSUtils.pad = function (str, length, right) { + if (typeof(str) !== 'string') { + str = "" + str; + } + var start = 0; + // take care of negative numbers + if (str.charAt(0) === '-') { + start++; + } + return (str.length >= length+start) ? str : + (right ? str + JSUtils.pad.zeros.substring(0,length-str.length+start) : + str.substring(0, start) + JSUtils.pad.zeros.substring(0,length-str.length+start) + str.substring(start)); +}; + +/** @private */ +JSUtils.pad.zeros = "00000000000000000000000000000000"; + +/** + * Convert a string into the hexadecimal representation + * of the Unicode characters in that string. + * + * @static + * @param {string} string The string to convert + * @param {number=} limit the number of digits to use to represent the character (1 to 8) + * @return {string} a hexadecimal representation of the + * Unicode characters in the input string + */ +JSUtils.toHexString = function(string, limit) { + var i, + result = "", + lim = (limit && limit < 9) ? limit : 4; + + if (!string) { + return ""; + } + for (i = 0; i < string.length; i++) { + var ch = string.charCodeAt(i).toString(16); + result += JSUtils.pad(ch, lim); + } + return result.toUpperCase(); +}; + +/** + * Test whether an object in a Javascript Date. + * + * @static + * @param {Object|null|undefined} object The object to test + * @return {boolean} return true if the object is a Date + * and false otherwise + */ +JSUtils.isDate = function(object) { + if (typeof(object) === 'object') { + return Object.prototype.toString.call(object) === '[object Date]'; + } + return false; +}; + +/** + * Merge the properties of object2 into object1 in a deep manner and return a merged + * object. If the property exists in both objects, the value in object2 will overwrite + * the value in object1. If a property exists in object1, but not in object2, its value + * will not be touched. If a property exists in object2, but not in object1, it will be + * added to the merged result.

+ * + * Name1 and name2 are for creating debug output only. They are not necessary.

+ * + * + * @static + * @param {*} object1 the object to merge into + * @param {*} object2 the object to merge + * @param {boolean=} replace if true, replace the array elements in object1 with those in object2. + * If false, concatenate array elements in object1 with items in object2. + * @param {string=} name1 name of the object being merged into + * @param {string=} name2 name of the object being merged in + * @return {Object} the merged object + */ +JSUtils.merge = function (object1, object2, replace, name1, name2) { + if (!object1 && object2) { + return object2; + } + if (object1 && !object2) { + return object1; + } + var prop = undefined, + newObj = {}; + for (prop in object1) { + if (prop && typeof(object1[prop]) !== 'undefined') { + newObj[prop] = object1[prop]; + } + } + for (prop in object2) { + if (prop && typeof(object2[prop]) !== 'undefined') { + if (ilib.isArray(object1[prop]) && ilib.isArray(object2[prop])) { + if (typeof(replace) !== 'boolean' || !replace) { + newObj[prop] = [].concat(object1[prop]); + newObj[prop] = newObj[prop].concat(object2[prop]); + } else { + newObj[prop] = object2[prop]; + } + } else if (typeof(object1[prop]) === 'object' && typeof(object2[prop]) === 'object') { + newObj[prop] = JSUtils.merge(object1[prop], object2[prop], replace); + } else { + // for debugging. Used to determine whether or not json files are overriding their parents unnecessarily + if (name1 && name2 && newObj[prop] === object2[prop]) { + console.log("Property " + prop + " in " + name1 + " is being overridden by the same value in " + name2); + } + newObj[prop] = object2[prop]; + } + } + } + return newObj; +}; + +/** + * Return true if the given object has no properties.

+ * + * + * @static + * @param {Object} obj the object to check + * @return {boolean} true if the given object has no properties, false otherwise + */ +JSUtils.isEmpty = function (obj) { + var prop = undefined; + + if (!obj) { + return true; + } + + for (prop in obj) { + if (prop && typeof(obj[prop]) !== 'undefined') { + return false; + } + } + return true; +}; + +/** + * @static + */ +JSUtils.hashCode = function(obj) { + var hash = 0; + + function addHash(hash, newValue) { + // co-prime numbers creates a nicely distributed hash + hash *= 65543; + hash += newValue; + hash %= 2147483647; + return hash; + } + + function stringHash(str) { + var hash = 0; + for (var i = 0; i < str.length; i++) { + hash = addHash(hash, str.charCodeAt(i)); + } + return hash; + } + + switch (typeof(obj)) { + case 'undefined': + hash = 0; + break; + case 'string': + hash = stringHash(obj); + break; + case 'function': + case 'number': + case 'xml': + hash = stringHash(String(obj)); + break; + case 'boolean': + hash = obj ? 1 : 0; + break; + case 'object': + var props = []; + for (var p in obj) { + if (obj.hasOwnProperty(p)) { + props.push(p); + } + } + // make sure the order of the properties doesn't matter + props.sort(); + for (var i = 0; i < props.length; i++) { + hash = addHash(hash, stringHash(props[i])); + hash = addHash(hash, JSUtils.hashCode(obj[props[i]])); + } + break; + } + + return hash; +}; + +/** + * Calls the given action function on each element in the given + * array arr in order and finally call the given callback when they are + * all done. The action function should take the array to + * process as its parameter, and a callback function. It should + * process the first element in the array and then call its callback + * function with the result of processing that element (if any). + * + * @param {Array.} arr the array to process + * @param {Function(Array., Function(*))} action the action + * to perform on each element of the array + * @param {Function(*)} callback the callback function to call + * with the results of processing each element of the array. + */ +JSUtils.callAll = function(arr, action, callback, results) { + results = results || []; + if (arr && arr.length) { + action(arr, function(result) { + results.push(result); + JSUtils.callAll(arr.slice(1), action, callback, results); + }); + } else { + callback(results); + } +}; + + +/* + * Utils.js - Core utility routines + * + * Copyright © 2012-2015, 2018-2019, 2021 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + +var Utils = {}; + +/** + * Return the property name inside of ilib.data that corresponds to the given locale data file. + * + * @private + * @param {String} basename the basename of the file + * @param {String} pathname the path from the root to the base file which usually encodes the + * locale of the file + * @param {String=} root the root directory of the file or undefined for the standard locale dir + */ +function getPropertyName(basename, pathname, root) { + var bits = [ basename ]; + if (root) { + bits = bits.concat(root.split("\/")); + } + if (pathname) { + bits = bits.concat(pathname.split("\/")); + } + return bits.join('_'); +} + +/** + * Return an array of locales that represent the sublocales of + * the given locale. These sublocales are intended to be used + * to load locale data. Each sublocale might be represented + * separately by files on disk in order to share them with other + * locales that have the same sublocales. The sublocales are + * given in the order that they should be loaded, which is + * least specific to most specific.

+ * + * For example, the locale "en-US" would have the sublocales + * "root", "en", "und-US", and "en-US".

+ * + *

Variations

+ * + * With only language and region specified, the following + * sequence of sublocales will be generated:

+ * + *

+ * root
+ * language
+ * und-region
+ * language-region
+ * 
+ * + * With only language and script specified:

+ * + *

+ * root
+ * language
+ * language-script
+ * 
+ * + * With only script and region specified:

+ * + *

+ * root
+ * und-region
+ * 
+ * + * With only region and variant specified:

+ * + *

+ * root
+ * und-region
+ * region-variant
+ * 
+ * + * With only language, script, and region specified:

+ * + *

+ * root
+ * language
+ * und-region
+ * language-script
+ * language-region
+ * language-script-region
+ * 
+ * + * With only language, region, and variant specified:

+ * + *

+ * root
+ * language
+ * und-region
+ * language-region
+ * und-region-variant
+ * language-region-variant
+ * 
+ * + * With all parts specified:

+ * + *

+ * root
+ * language
+ * und-region
+ * language-script
+ * language-region
+ * und-region-variant
+ * language-script-region
+ * language-region-variant
+ * language-script-region-variant
+ * 
+ * + * @static + * @param {Locale|String} locale the locale to find the sublocales for + * @return {Array.} An array of locale specifiers that + * are the sublocales of the given on + */ +Utils.getSublocales = function(locale) { + var ret = ["root"]; + var loc = typeof(locale) === "string" ? new Locale(locale) : locale; + var lang = loc.getLanguage(); + var region = loc.getRegion(); + var script = loc.getScript(); + var variant = loc.getVariant(); + + if (lang) { + ret.push(lang); + } + if (region) { + ret.push('und-' + region); + } + + if (lang) { + if (script) { + ret.push(lang + '-' + script); + } + if (region) { + ret.push(lang + '-' + region); + } + if (variant) { + ret.push(lang + '-' + variant); + } + } + + if (region && variant) { + ret.push("und-" + region + '-' + variant); + } + + if (lang) { + if (script && region) { + ret.push(lang + '-' + script + '-' + region); + } + if (script && variant) { + ret.push(lang + '-' + script + '-' + variant); + } + if (region && variant) { + ret.push(lang + '-' + region + '-' + variant); + } + if (script && region && variant) { + ret.push(lang + '-' + script + '-' + region + '-' + variant); + } + } + return ret; +}; + +/** + * Find and merge all the locale data for a particular prefix in the given locale + * and return it as a single javascript object. This merges the data in the + * correct order: + * + *
    + *
  1. shared data (usually English) + *
  2. data for language + *
  3. data for language + region + *
  4. data for language + region + script + *
  5. data for language + region + script + variant + *
+ * + * It is okay for any of the above to be missing. This function will just skip the + * missing data. + * + * @static + * @param {string} prefix prefix under ilib.data of the data to merge + * @param {Locale} locale locale of the data being sought + * @param {boolean=} replaceArrays if true, replace the array elements in object1 with those in object2. + * If false, concatenate array elements in object1 with items in object2. + * @param {boolean=} returnOne if true, only return the most locale-specific data. If false, + * merge all the relevant locale data together. + * @param {string=} root root path if there is one + * @return {Object?} the merged locale data + */ +Utils.mergeLocData = function (prefix, locale, replaceArrays, returnOne, root) { + var data = undefined; + var loc = locale || new Locale(); + var mostSpecific; + + data = {}; + + mostSpecific = data; + + Utils.getSublocales(loc).forEach(function(l) { + var property = getPropertyName(prefix, (l === "root") ? undefined : l.replace(/-/g, "/"), root); + + if (ilib.data[property]) { + if (returnOne) { + mostSpecific = ilib.data[property]; + } else { + data = JSUtils.merge(data, ilib.data[property], replaceArrays); + } + } + }); + + return returnOne ? mostSpecific : data; +}; + + +/** + * Return an array of relative path names for the + * files that represent the data for the given locale.

+ * + * Note that to prevent the situation where a directory for + * a language exists next to the directory for a region where + * the language code and region code differ only by case, the + * plain region directories are located under the special + * "undefined" language directory which has the ISO code "und". + * The reason is that some platforms have case-insensitive + * file systems, and you cannot have 2 directories with the + * same name which only differ by case. For example, "es" is + * the ISO 639 code for the language "Spanish" and "ES" is + * the ISO 3166 code for the region "Spain", so both the + * directories cannot exist underneath "locale". The region + * therefore will be loaded from "und/ES" instead.

+ * + *

Variations

+ * + * With only language and region specified, the following + * sequence of paths will be generated:

+ * + *

+ * language
+ * und/region
+ * language/region
+ * 
+ * + * With only language and script specified:

+ * + *

+ * language
+ * language/script
+ * 
+ * + * With only script and region specified:

+ * + *

+ * und/region
+ * 
+ * + * With only region and variant specified:

+ * + *

+ * und/region
+ * region/variant
+ * 
+ * + * With only language, script, and region specified:

+ * + *

+ * language
+ * und/region
+ * language/script
+ * language/region
+ * language/script/region
+ * 
+ * + * With only language, region, and variant specified:

+ * + *

+ * language
+ * und/region
+ * language/region
+ * region/variant
+ * language/region/variant
+ * 
+ * + * With all parts specified:

+ * + *

+ * language
+ * und/region
+ * language/script
+ * language/region
+ * region/variant
+ * language/script/region
+ * language/region/variant
+ * language/script/region/variant
+ * 
+ * + * @static + * @param {Locale} locale load the files for this locale + * @param {string?} name the file name of each file to load without + * any path + * @return {Array.} An array of relative path names + * for the files that contain the locale data + */ +Utils.getLocFiles = function(locale, name) { + var filename = name || "resources.json"; + var loc = locale || new Locale(); + + return Utils.getSublocales(loc).map(function(l) { + return (l === "root") ? filename : Path.join(l.replace(/-/g, "/"), filename); + }); +}; + +/** + * Load data using the new loader object or via the old function callback. + * @static + * @private + */ +Utils._callLoadData = function (files, sync, params, root, callback) { + // console.log("Utils._callLoadData called"); + if (typeof(ilib._load) === 'function') { + // console.log("Utils._callLoadData: calling as a regular function"); + return ilib._load(files, sync, params, callback); + } else if (typeof(ilib._load) === 'object' && typeof(ilib._load.loadFiles) === 'function') { + // console.log("Utils._callLoadData: calling as an object"); + return ilib._load.loadFiles(files, sync, params, callback, root); + } + + // console.log("Utils._callLoadData: not calling. Type is " + typeof(ilib._load) + " and instanceof says " + (ilib._load instanceof Loader)); + return undefined; +}; + +function getPropertyNameFromFile(basename, filepath, root) { + var dir = Path.dirname(filepath); + return getPropertyName(basename, (dir === "." || dir === "/" || dir === "..") ? undefined : dir, root); +} + +/** + * Return true if the locale data corresponding to the given pathname is not already loaded + * or assembled. + * + * @private + * @param basename + * @param locale + * @return {boolean} true if the locale data corresponding to the given pathname is not already loaded or assembled + */ +function dataNotExists(basename, pathname, root) { + return !ilib.data[getPropertyNameFromFile(basename, pathname, root)]; +} + +/** + * Find locale data or load it in. If the data with the given name is preassembled, it will + * find the data in ilib.data. If the data is not preassembled but there is a loader function, + * this function will call it to load the data. Otherwise, the callback will be called with + * undefined as the data. This function will create a cache under the given class object. + * If data was successfully loaded, it will be set into the cache so that future access to + * the same data for the same locale is much quicker.

+ * + * The parameters can specify any of the following properties:

+ * + *

    + *
  • name - String. The name of the file being loaded. Default: ResBundle.json + *
  • object - String. The name of the class attempting to load data. This is used to differentiate parts of the cache. + *
  • locale - Locale. The locale for which data is loaded. Default is the current locale. + *
  • nonlocale - boolean. If true, the data being loaded is not locale-specific. + *
  • type - String. Type of file to load. This can be "json" or "other" type. Default: "json" + *
  • replace - boolean. When merging json objects, this parameter controls whether to merge arrays + * or have arrays replace each other. If true, arrays in child objects replace the arrays in parent + * objects. When false, the arrays in child objects are concatenated with the arrays in parent objects. + *
  • root - String. If provided, look in this root directory first for files, and then fall back + * to the standard include paths if they are not found in this root. If not provided, just search the + * standard include paths. + *
  • loadParams - Object. An object with parameters to pass to the loader function + *
  • sync - boolean. Whether or not to load the data synchronously + *
  • callback - function(?)=. callback Call back function to call when the data is available. + * Data is not returned from this method, so a callback function is mandatory. + *
+ * + * @static + * @param {Object} params Parameters configuring how to load the files (see above) + */ +Utils.loadData = function(params) { + var name = "resources.json", + locale = new Locale(ilib.getLocale()), + sync = false, + type = undefined, + loadParams = {}, + callback = undefined, + nonlocale = false, + replace = false, + root, + basename; + + if (!params || typeof(params.callback) !== 'function') { + throw "Utils.loadData called without a callback. It must have a callback to work."; + } + + if (params.name) { + name = params.name; + } + if (params.locale) { + locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; + } + if (params.type) { + type = params.type; + } + if (params.loadParams) { + loadParams = params.loadParams; + } + if (params.sync) { + sync = params.sync; + } + if (params.nonlocale) { + nonlocale = !!params.nonlocale; + } + if (typeof(params.replace) === 'boolean') { + replace = params.replace; + } + + root = params.root; + callback = params.callback; + + if (!type) { + var dot = name.lastIndexOf("."); + type = (dot !== -1) ? name.substring(dot+1) : "text"; + } + + if (typeof(ilib.data.cache) === "undefined") { + ilib.data.cache = {}; + } + if (typeof(ilib.data.cache.fileSet) === "undefined") { + ilib.data.cache.fileSet = new ISet(); + } + + var data, returnOne = ((loadParams && loadParams.returnOne) || type !== "json"); + + basename = name.substring(0, name.lastIndexOf(".")).replace(/[\.:\(\)\/\\\+\-]/g, "_"); + + if (ilib._cacheMerged) { + if (typeof(ilib.data.cache.merged) === "undefined") { + ilib.data.cache.merged = {}; + } + var spec = ((!nonlocale && locale.getSpec().replace(/-/g, '_')) || "root") + "," + basename + "," + String(JSUtils.hashCode(loadParams)); + if (typeof(ilib.data.cache.merged[spec]) !== 'undefined') { + // cache hit! + callback(ilib.data.cache.merged[spec]); + return; + } + } + + if (typeof(ilib._load) !== 'undefined') { + // We have a loader, so we can figure out which json files are loaded already and + // which are not so that we can load the missing ones. + // the data is not preassembled, so attempt to load it dynamically + var files = nonlocale ? [ name || "resources.json" ] : Utils.getLocFiles(locale, name); + + var isPath = ilib._load.isMultiPaths; + + if (typeof(isPath) === "undefined" || isPath === false){ + // find the ones we haven't loaded before + files = files.filter(ilib.bind(this, function(file) { + return !ilib.data.cache.fileSet.has(Path.join(root, file)) && dataNotExists(basename, file, root); + })); + } + + if (files.length) { + Utils._callLoadData(files, sync, loadParams, root, ilib.bind(this, function(arr) { + for (var i = 0; i < files.length; i++) { + if (arr[i]) { + var property = nonlocale ? basename : getPropertyNameFromFile(basename, files[i], root); + + if (isPath || !ilib.data[property]) { + ilib.data[property] = arr[i]; + } + } + + ilib.data.cache.fileSet.add(Path.join(root, files[i])); + } + + if (!nonlocale) { + data = Utils.mergeLocData(basename, locale, replace, returnOne, root); + if (ilib._cacheMerged) ilib.data.cache.merged[spec] = data; + } else { + data = ilib.data[basename]; + } + + callback(data); + })); + + return; + } + // otherwise the code below will return the already-loaded data + } + + // No loader, or data already loaded? Then use whatever data we have already in ilib.data + if (!nonlocale) { + data = Utils.mergeLocData(basename, locale, replace, returnOne, root); + if (ilib._cacheMerged) ilib.data.cache.merged[spec] = data; + } else { + data = ilib.data[basename]; + } + + callback(data); +}; + + +/* + * MathUtils.js - Misc math utility routines + * + * Copyright © 2013-2015, 2018 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var MathUtils = {}; + +/** + * Return the sign of the given number. If the sign is negative, this function + * returns -1. If the sign is positive or zero, this function returns 1. + * @static + * @param {number} num the number to test + * @return {number} -1 if the number is negative, and 1 otherwise + */ +MathUtils.signum = function (num) { + var n = num; + if (typeof(num) === 'string') { + n = parseInt(num, 10); + } else if (typeof(num) !== 'number') { + return 1; + } + return (n < 0) ? -1 : 1; +}; + +/** + * @static + * @protected + * @param {number} num number to round + * @return {number} rounded number + */ +MathUtils.floor = function (num) { + return Math.floor(num); +}; + +/** + * @static + * @protected + * @param {number} num number to round + * @return {number} rounded number + */ +MathUtils.ceiling = function (num) { + return Math.ceil(num); +}; + +/** + * @static + * @protected + * @param {number} num number to round + * @return {number} rounded number + */ +MathUtils.down = function (num) { + return (num < 0) ? Math.ceil(num) : Math.floor(num); +}; + +/** + * @static + * @protected + * @param {number} num number to round + * @return {number} rounded number + */ +MathUtils.up = function (num) { + return (num < 0) ? Math.floor(num) : Math.ceil(num); +}; + +/** + * @static + * @protected + * @param {number} num number to round + * @return {number} rounded number + */ +MathUtils.halfup = function (num) { + return (num < 0) ? Math.ceil(num - 0.5) : Math.floor(num + 0.5); +}; + +/** + * @static + * @protected + * @param {number} num number to round + * @return {number} rounded number + */ +MathUtils.halfdown = function (num) { + return (num < 0) ? Math.floor(num + 0.5) : Math.ceil(num - 0.5); +}; + +/** + * @static + * @protected + * @param {number} num number to round + * @return {number} rounded number + */ +MathUtils.halfeven = function (num) { + return (Math.floor(num) % 2 === 0) ? Math.ceil(num - 0.5) : Math.floor(num + 0.5); +}; + +/** + * @static + * @protected + * @param {number} num number to round + * @return {number} rounded number + */ +MathUtils.halfodd = function (num) { + return (Math.floor(num) % 2 !== 0) ? Math.ceil(num - 0.5) : Math.floor(num + 0.5); +}; + +/** + * Do a proper modulo function. The Javascript % operator will give the truncated + * division algorithm, but for calendrical calculations, we need the Euclidean + * division algorithm where the remainder of any division, whether the dividend + * is negative or not, is always a positive number in the range [0, modulus).

+ * + * + * @static + * @param {number} dividend the number being divided + * @param {number} modulus the number dividing the dividend. This should always be a positive number. + * @return the remainder of dividing the dividend by the modulus. + */ +MathUtils.mod = function (dividend, modulus) { + if (modulus === 0) { + return 0; + } + var x = dividend % modulus; + return (x < 0) ? x + modulus : x; +}; + +/** + * Do a proper adjusted modulo function. The Javascript % operator will give the truncated + * division algorithm, but for calendrical calculations, we need the Euclidean + * division algorithm where the remainder of any division, whether the dividend + * is negative or not, is always a positive number in the range (0, modulus]. The adjusted + * modulo function differs from the regular modulo function in that when the remainder is + * zero, the modulus should be returned instead.

+ * + * + * @static + * @param {number} dividend the number being divided + * @param {number} modulus the number dividing the dividend. This should always be a positive number. + * @return the remainder of dividing the dividend by the modulus. + */ +MathUtils.amod = function (dividend, modulus) { + if (modulus === 0) { + return 0; + } + var x = dividend % modulus; + return (x <= 0) ? x + modulus : x; +}; + +/** + * Return the number with the decimal shifted by the given precision. + * Positive precisions shift the decimal to the right giving larger + * numbers, and negative ones shift the decimal to the left giving + * smaller numbers. + * + * @static + * @param {number} number the number to shift + * @param {number} precision the number of places to move the decimal point + * @returns {number} the number with the decimal point shifted by the + * given number of decimals + */ +MathUtils.shiftDecimal = function shift(number, precision) { + var numArray = ("" + number).split("e"); + return +(numArray[0] + "e" + (numArray[1] ? (+numArray[1] + precision) : precision)); +}; + +/** + * Returns the base 10 logarithm of a number. For platforms that support + * Math.log10() it is used directly. For plaforms that do not, such as Qt/QML, + * it will be calculated using the natural logarithm. + * + * @param {number} num the number to take the logarithm of + * @returns {number} the base-10 logarithm of the given number + */ +MathUtils.log10 = function(num) { + if (typeof(Math.log10) === "function") { + return Math.log10(num); + } + + return Math.log(num) / Math.LN10; +}; + +/** + * Return the given number with only the given number of significant digits. + * The number of significant digits can start with the digits greater than + * 1 and straddle the decimal point, or it may start after the decimal point. + * If the number of digits requested is less than 1, the original number + * will be returned unchanged. + * + * @static + * @param {number} number the number to return with only significant digits + * @param {number} digits the number of significant digits to include in the + * returned number + * @param {function(number): number=} round a rounding function to use + * @returns {number} the given number with only the requested number of + * significant digits + */ +MathUtils.significant = function(number, digits, round) { + if (digits < 1 || number === 0) return number; + var rnd = round || Math.round; + var factor = -Math.floor(MathUtils.log10(Math.abs(number))) + digits - 1; + return MathUtils.shiftDecimal(rnd(MathUtils.shiftDecimal(number, factor)), -factor); +}; + + +/* + * SearchUtils.js - Misc search utility routines + * + * Copyright © 2013-2015, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var SearchUtils = {}; + +/** + * Binary search a sorted array for a particular target value. + * If the exact value is not found, it returns the index of the smallest + * entry that is greater than the given target value.

+ * + * The comparator + * parameter is a function that knows how to compare elements of the + * array and the target. The function should return a value greater than 0 + * if the array element is greater than the target, a value less than 0 if + * the array element is less than the target, and 0 if the array element + * and the target are equivalent.

+ * + * If the comparator function is not specified, this function assumes + * the array and the target are numeric values and should be compared + * as such.

+ * + * + * @static + * @param {*} target element being sought + * @param {Array} arr the array being searched + * @param {?function(*,*)=} comparator a comparator that is appropriate for comparing two entries + * in the array + * @return the index of the array into which the value would fit if + * inserted, or -1 if given array is not an array or the target is not + * a number + */ +SearchUtils.bsearch = function(target, arr, comparator) { + if (typeof(arr) === 'undefined' || !arr || typeof(target) === 'undefined') { + return -1; + } + + var high = arr.length - 1, + low = 0, + mid = 0, + value, + cmp = comparator || SearchUtils.bsearch.numbers; + + while (low <= high) { + mid = Math.floor((high+low)/2); + value = cmp(arr[mid], target); + if (value > 0) { + high = mid - 1; + } else if (value < 0) { + low = mid + 1; + } else { + return mid; + } + } + + return low; +}; + +/** + * Returns whether or not the given element is greater than, less than, + * or equal to the given target.

+ * + * @private + * @static + * @param {number} element the element being tested + * @param {number} target the target being sought + */ +SearchUtils.bsearch.numbers = function(element, target) { + return element - target; +}; + +/** + * Do a bisection search of a function for a particular target value.

+ * + * The function to search is a function that takes a numeric parameter, + * does calculations, and returns gives a numeric result. The + * function should should be smooth and not have any discontinuities + * between the low and high values of the parameter. + * + * + * @static + * @param {number} target value being sought + * @param {number} low the lower bounds to start searching + * @param {number} high the upper bounds to start searching + * @param {number} precision minimum precision to support. Use 0 if you want to use the default. + * @param {?function(number)=} func function to search + * @return an approximation of the input value to the function that gives the desired + * target output value, correct to within the error range of Javascript floating point + * arithmetic, or NaN if there was some error + */ +SearchUtils.bisectionSearch = function(target, low, high, precision, func) { + if (typeof(target) !== 'number' || + typeof(low) !== 'number' || + typeof(high) !== 'number' || + typeof(func) !== 'function') { + return NaN; + } + + var mid = 0, + value, + pre = precision > 0 ? precision : 1e-13; + + do { + mid = (high+low)/2; + value = func(mid); + if (value > target) { + high = mid; + } else if (value < target) { + low = mid; + } + } while (high - low > pre); + + return mid; +}; + + +/* + * CalendarFactory.js - Constructs new instances of the right subclass of Calendar + * + * Copyright © 2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + +/** + * Factory method to create a new instance of a calendar subclass.

+ * + * The options parameter can be an object that contains the following + * properties: + * + *

    + *
  • type - specify the type of the calendar desired. The + * list of valid values changes depending on which calendars are + * defined. When assembling your iliball.js, include those calendars + * you wish to use in your program or web page, and they will register + * themselves with this factory method. The "official", "gregorian", + * and "julian" calendars are all included by default, as they are the + * standard calendars for much of the world. + *
  • locale - some calendars vary depending on the locale. + * For example, the "official" calendar transitions from a Julian-style + * calendar to a Gregorian-style calendar on a different date for + * each country, as the governments of those countries decided to + * adopt the Gregorian calendar at different times. + * + *
  • onLoad - a callback function to call when the calendar object is fully + * loaded. When the onLoad option is given, the calendar factory will attempt to + * load any missing locale data using the ilib loader callback. + * When the constructor is done (even if the data is already preassembled), the + * onLoad function is called with the current instance as a parameter, so this + * callback can be used with preassembled or dynamic loading or a mix of the two. + * + *
  • sync - tell whether to load any missing locale data synchronously or + * asynchronously. If this option is given as "false", then the "onLoad" + * callback must be given, as the instance returned from this constructor will + * not be usable for a while. + * + *
  • loadParams - an object containing parameters to pass to the + * loader callback function when locale data is missing. The parameters are not + * interpretted or modified in any way. They are simply passed along. The object + * may contain any property/value pairs as long as the calling code is in + * agreement with the loader callback function as to what those parameters mean. + *
+ * + * If a locale is specified, but no type, then the calendar that is default for + * the locale will be instantiated and returned. If neither the type nor + * the locale are specified, then the calendar for the default locale will + * be used. + * + * @static + * @param {Object=} options options controlling the construction of this instance, or + * undefined to use the default options + * @return {Calendar} an instance of a calendar object of the appropriate type + */ +var CalendarFactory = function (options) { + var locale, + type, + sync = true, + instance; + + if (options) { + if (options.locale) { + locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; + } + + type = options.type || options.calendar; + + if (typeof(options.sync) === 'boolean') { + sync = options.sync; + } + } + + if (!locale) { + locale = new Locale(); // default locale + } + + if (!type) { + new LocaleInfo(locale, { + sync: sync, + loadParams: options && options.loadParams, + onLoad: function(info) { + type = info.getCalendar(); + + instance = CalendarFactory._init(type, options); + } + }); + } else { + instance = CalendarFactory._init(type, options); + } + + return instance; +}; + +/** + * Map calendar names to classes to initialize in the dynamic code model. + * TODO: Need to figure out some way that this doesn't have to be updated by hand. + * @private + */ +CalendarFactory._dynMap = { + "coptic": "Coptic", + "ethiopic": "Ethiopic", + "gregorian": "Gregorian", + "han": "Han", + "hebrew": "Hebrew", + "islamic": "Islamic", + "julian": "Julian", + "persian": "Persian", + "persian-algo": "PersianAlgo", + "thaisolar": "ThaiSolar" +}; + +function circumventWebPack(x) { + return "./" + x + "Cal.js"; +} + +/** + * Dynamically load the code for a calendar and calendar class if necessary. + * @protected + */ +CalendarFactory._dynLoadCalendar = function (name, fnc) { + if (!Calendar._constructors[name]) { + var entry = CalendarFactory._dynMap[name]; + if (entry) { + // eslint-disable-next-line + Calendar._constructors[name] = require(fnc(entry)); + } + } + return Calendar._constructors[name]; +}; + +/** @private */ +CalendarFactory._init = function(type, options) { + var cons; + + if (ilib.isDynCode()) { + CalendarFactory._dynLoadCalendar(type, circumventWebPack); + } + + cons = Calendar._constructors[type]; + + // pass the same options through to the constructor so the subclass + // has the ability to do something with if it needs to + if (!cons && typeof(options.onLoad) === "function") { + options.onLoad(undefined); + } + return cons && new cons(options); +}; + +/** + * Return an array of known calendar types that the factory method can instantiate. + * + * @return {Array.} an array of calendar types + */ +CalendarFactory.getCalendars = function () { + var arr = [], + c; + + if (ilib.isDynCode()) { + for (c in CalendarFactory._dynMap) { + CalendarFactory._dynLoadCalendar(c, circumventWebPack); + } + } + + for (c in Calendar._constructors) { + if (c && Calendar._constructors[c]) { + arr.push(c); // code like a pirate + } + } + + return arr; +}; + + +/* + * DateFactory.js - Factory class to create the right subclasses of a date for any + * calendar or locale. + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + + + +// Statically depend on these even though we don't use them +// to guarantee they are loaded into the cache already. + + +/** + * Factory method to create a new instance of a date subclass.

+ * + * The options parameter can be an object that contains the following + * properties: + * + *

    + *
  • type - specify the type/calendar of the date desired. The + * list of valid values changes depending on which calendars are + * defined. When assembling your iliball.js, include those date type + * you wish to use in your program or web page, and they will register + * themselves with this factory method. The "gregorian", + * and "julian" calendars are all included by default, as they are the + * standard calendars for much of the world. If not specified, the type + * of the date returned is the one that is appropriate for the locale. + * This property may also be given as "calendar" instead of "type". + * + *
  • onLoad - a callback function to call when the date object is fully + * loaded. When the onLoad option is given, the date factory will attempt to + * load any missing locale data using the ilib loader callback. + * When the constructor is done (even if the data is already preassembled), the + * onLoad function is called with the current instance as a parameter, so this + * callback can be used with preassembled or dynamic loading or a mix of the two. + * + *
  • sync - tell whether to load any missing locale data synchronously or + * asynchronously. If this option is given as "false", then the "onLoad" + * callback must be given, as the instance returned from this constructor will + * not be usable for a while. + * + *
  • loadParams - an object containing parameters to pass to the + * loader callback function when locale data is missing. The parameters are not + * interpretted or modified in any way. They are simply passed along. The object + * may contain any property/value pairs as long as the calling code is in + * agreement with the loader callback function as to what those parameters mean. + *
+ * + * The options object is also passed down to the date constructor, and + * thus can contain the the properties as the date object being instantiated. + * See the documentation for {@link GregorianDate}, and other + * subclasses for more details on other parameter that may be passed in.

+ * + * Please note that if you do not give the type parameter, this factory + * method will create a date object that is appropriate for the calendar + * that is most commonly used in the specified or current ilib locale. + * For example, in Thailand, the most common calendar is the Thai solar + * calendar. If the current locale is "th-TH" (Thai for Thailand) and you + * use this factory method to construct a new date without specifying the + * type, it will automatically give you back an instance of + * {@link ThaiSolarDate}. This is convenient because you do not + * need to know which locales use which types of dates. In fact, you + * should always use this factory method to make new date instances unless + * you know that you specifically need a date in a particular calendar.

+ * + * Also note that when you pass in the date components such as year, month, + * day, etc., these components should be appropriate for the given date + * being instantiated. That is, in our Thai example in the previous + * paragraph, the year and such should be given as a Thai solar year, not + * the Gregorian year that you get from the Javascript Date class. In + * order to initialize a date instance when you don't know what subclass + * will be instantiated for the locale, use a parameter such as "unixtime" + * or "julianday" which are unambiguous and based on UTC time, instead of + * the year/month/date date components. The date components for that UTC + * time will be calculated and the time zone offset will be automatically + * factored in. + * + * @static + * @param {Object=} options options controlling the construction of this instance, or + * undefined to use the default options + * @return {IDate} an instance of a calendar object of the appropriate type + */ +var DateFactory = function(options) { + var locale, + type, + sync = true, + obj; + + if (options) { + if (options.locale) { + locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; + } + + type = options.type || options.calendar; + + if (typeof(options.sync) === 'boolean') { + sync = options.sync; + } + } + + if (!locale) { + locale = new Locale(); // default locale + } + + if (!type) { + new LocaleInfo(locale, { + sync: sync, + loadParams: options && options.loadParams, + onLoad: function(info) { + type = info.getCalendar(); + + obj = DateFactory._init(type, options); + } + }); + } else { + obj = DateFactory._init(type, options); + } + + return obj +}; + +/** + * Map calendar names to classes to initialize in the dynamic code model. + * TODO: Need to figure out some way that this doesn't have to be updated by hand. + * @private + */ +DateFactory._dynMap = { + "coptic": "Coptic", + "ethiopic": "Ethiopic", + "gregorian": "Gregorian", + "han": "Han", + "hebrew": "Hebrew", + "islamic": "Islamic", + "julian": "Julian", + "persian": "Persian", + "persian-algo": "PersianAlgo", + "thaisolar": "ThaiSolar" +}; + +function circumventWebPackDate(x) { + return "./" + x + "Date.js"; +} + +function circumventWebPackCal(x) { + return "./" + x + "Cal.js"; +} + +/** + * Dynamically load the code for a calendar and calendar class if necessary. + * @protected + */ +DateFactory._dynLoadDate = function (name, fnc) { + if (!IDate._constructors[name]) { + var entry = DateFactory._dynMap[name]; + if (entry) { + // eslint-disable-next-line + IDate._constructors[name] = require(fnc(entry)); + } + } + return IDate._constructors[name]; +}; + +/** + * @protected + * @static + */ +DateFactory._init = function(type, options) { + var cons; + + if (ilib.isDynCode()) { + DateFactory._dynLoadDate(type, circumventWebPackDate); + CalendarFactory._dynLoadCalendar(type, circumventWebPackCal); + } + + cons = IDate._constructors[type]; + + // pass the same options through to the constructor so the subclass + // has the ability to do something with if it needs to + if (!cons && options && typeof(options.onLoad) === "function") { + options.onLoad(undefined); + } + return cons && new cons(options); +}; + +/** + * Convert JavaScript Date objects and other types into native Dates. This accepts any + * string or number that can be translated by the JavaScript Date class, + * (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse) + * any JavaScript Date classed object, any IDate subclass, an JulianDay object, an object + * containing the normal options to initialize an IDate instance, or null (will + * return null or undefined if input is null or undefined). Normal output is + * a standard native subclass of the IDate object as appropriate for the locale. + * + * @static + * @protected + * @param {IDate|Object|JulianDay|Date|string|number=} inDate The input date object, string or Number. + * @param {IString|string=} timezone timezone to use if a new date object is created + * @param {Locale|string=} locale locale to use when constructing an IDate + * @return {IDate|null|undefined} an IDate subclass equivalent to the given inDate + */ +DateFactory._dateToIlib = function(inDate, timezone, locale) { + if (typeof(inDate) === 'undefined' || inDate === null) { + return inDate; + } + if (inDate instanceof IDate) { + return inDate; + } + if (typeof(inDate) === 'number') { + return DateFactory({ + unixtime: inDate, + timezone: timezone, + locale: locale + }); + } + if (typeof(inDate) === 'string') { + inDate = new Date(inDate); + } + if (JSUtils.isDate(inDate)) { + return DateFactory({ + unixtime: inDate.getTime(), + timezone: timezone, + locale: locale + }); + } + if (inDate instanceof JulianDay) { + return DateFactory({ + jd: inDate, + timezone: timezone, + locale: locale + }); + } + if (typeof(inDate) === 'object') { + return DateFactory(inDate); + } + return DateFactory({ + unixtime: inDate.getTime(), + timezone: timezone, + locale: locale + }); +}; + +DateFactory._ilibToDate = function(ilibDate, timezone, locale) { + if (typeof(ilibDate) !== 'object' || !(ilibDate instanceof IDate)) { + return ilibDate; + } + + return new Date(ilibDate.getTimeExtended()); +}; + + +/* + * Loader.js - shared loader implementation + * + * Copyright © 2015, 2018-2019, 2021 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + +/** + * @class + * Superclass of the loader classes that contains shared functionality. + * + * @private + * @constructor + */ +var Loader = function() { + // console.log("new Loader instance"); + + this.protocol = "file://"; + this.includePath = []; + this.addPaths = []; + + this.jsutils =JSUtils; +}; + +Loader.prototype = new ilib.Loader(); +Loader.prototype.parent = ilib.Loader; +Loader.prototype.constructor = Loader; + +Loader.prototype._loadFile = function (pathname, sync, cb) {}; + +Loader.prototype._exists = function(dir, file) { + var fullpath = Path.normalize(Path.join(dir, file)); + if (this.protocol !== "http://") { + var text = this._loadFile(fullpath, true); + if (text && this.includePath.indexOf(text) === -1) { + this.includePath.push(dir); + } + } else { + // put the dir on the list now assuming it exists, and check for its availability + // later so we can avoid the 404 errors eventually + if (this.includePath.indexOf(dir) === -1) { + this.includePath.push(dir); + this._loadFile(fullpath, false, ilib.bind(this, function(text) { + if (!text) { + //console.log("Loader._exists: removing " + dir + " from the include path because it doesn't exist."); + this.includePath = this.includePath.slice(-1); + } + })); + } + } +}; + +Loader.prototype._loadFileAlongIncludePath = function(includePath, pathname) { + var textMerge={}; + for (var i = 0; i < includePath.length; i++) { + var manifest = this.manifest[includePath[i]]; + if (!manifest || Loader.indexOf(manifest, pathname) > -1) { + var filepath = Path.join(includePath[i], pathname); + //console.log("Loader._loadFileAlongIncludePath: attempting sync load " + filepath); + var text = this._loadFile(filepath, true); + + if (text) { + + if (typeof (this.isMultiPaths) !== "undefined" && this.isMultiPaths === true){ + if (typeof(text) === "string") { + text = JSON.parse(text); + } + textMerge = this.jsutils.merge(text, textMerge); + } else { + //console.log("Loader._loadFileAlongIncludePath: succeeded" + filepath); + return text; + } + } + //else { + //console.log("Loader._loadFileAlongIncludePath: failed"); + //} + } + //else { + //console.log("Loader._loadFileAlongIncludePath: " + pathname + " not in manifest for " + this.includePath[i]); + //} + } + + if (Object.keys(textMerge).length > 0) { + //console.log("Loader._loadFileAlongIncludePath: succeeded"); + return textMerge; + } + + //console.log("Loader._loadFileAlongIncludePath: file not found anywhere along the path."); + return undefined; +}; + +Loader.prototype.loadFiles = function(paths, sync, params, callback, root) { + root = root || (params && params.base); + var includePath = []; + + if(this.addPaths && this.addPaths.length > 0){ + includePath= includePath.concat(this.addPaths); + } + if (root) includePath.push(root); + includePath = includePath.concat(this.includePath); + + //console.log("Loader loadFiles called"); + // make sure we know what we can load + if (!paths) { + // nothing to load + //console.log("nothing to load"); + return; + } + + //console.log("generic loader: attempting to load these files: " + JSON.stringify(paths)); + if (sync) { + var ret = []; + + // synchronous + this._loadManifests(true); + + for (var i = 0; i < paths.length; i++) { + var text = this._loadFileAlongIncludePath(includePath, Path.normalize(paths[i])); + ret.push(typeof(text) === "string" ? JSON.parse(text) : text); + }; + + // only call the callback at the end of the chain of files + if (typeof(callback) === 'function') { + callback(ret); + } + + return ret; + } + + // asynchronous + this._loadManifests(false, ilib.bind(this, function() { + //console.log("Loader.loadFiles: now loading files asynchronously"); + var results = []; + this._loadFilesAsync(includePath, paths, results, callback); + })); +}; + +Loader.prototype._loadFilesAsyncAlongIncludePath = function (includes, filename, cb) { + var text = undefined; + + if (includes.length > 0) { + var root = includes[0]; + includes = includes.slice(1); + + var manifest = this.manifest[root]; + if (!manifest || Loader.indexOf(manifest, filename) > -1) { + var filepath = Path.join(root, filename); + this._loadFile(filepath, false, ilib.bind(this, function(t) { + //console.log("Loader._loadFilesAsyncAlongIncludePath: loading " + (t ? " success" : " failed")); + if (t) { + cb(t); + } else { + this._loadFilesAsyncAlongIncludePath(includes, filename, cb); + } + })); + } else { + //console.log("Loader._loadFilesAsyncAlongIncludePath: " + filepath + " not in manifest for " + root); + this._loadFilesAsyncAlongIncludePath(includes, filename, cb); + } + } else { + // file not found in any of the include paths + cb(); + } +}; + +Loader.prototype._loadFilesAsync = function (includePath, paths, results, callback) { + if (paths.length > 0) { + var filename = paths[0]; + paths = paths.slice(1); + + //console.log("Loader._loadFilesAsync: attempting to load " + filename + " along the include path."); + this._loadFilesAsyncAlongIncludePath(includePath, filename, ilib.bind(this, function (json) { + results.push(typeof(json) === "string" ? JSON.parse(json) : json); + this._loadFilesAsync(includePath, paths, results, callback); + })); + } else { + // only call the callback at the end of the chain of files + if (typeof(callback) === 'function') { + callback(results); + } + } +}; + +Loader.prototype._loadManifestFile = function(i, sync, cb) { + //console.log("Loader._loadManifestFile: Checking include path " + i + " " + this.includePath[i]); + if (i < this.includePath.length) { + var filepath = Path.join(this.includePath[i], "ilibmanifest.json"); + //console.log("Loader._loadManifestFile: Loading manifest file " + filepath); + var text = this._loadFile(filepath, sync, ilib.bind(this, function(text) { + if (text) { + //console.log("Loader._loadManifestFile: success!"); + this.manifest[this.includePath[i]] = (typeof(text) === "string" ? JSON.parse(text) : text).files; + } + //else console.log("Loader._loadManifestFile: failed..."); + this._loadManifestFile(i+1, sync, cb); + })); + } else { + if (typeof(cb) === 'function') { + //console.log("Loader._loadManifestFile: now calling callback function"); + cb(); + } + } +}; + +Loader.prototype._loadManifests = function(sync, cb) { + //console.log("Loader._loadManifests: called " + (sync ? "synchronously" : "asychronously.")); + if (!this.manifest) { + //console.log("Loader._loadManifests: attempting to find manifests"); + this.manifest = {}; + if (typeof(sync) !== 'boolean') { + sync = true; + } + + this._loadManifestFile(0, sync, cb); + } else { + //console.log("Loader._loadManifests: already loaded"); + if (typeof(cb) === 'function') { + //console.log("Loader._loadManifests: now calling callback function"); + cb(); + } + } +}; + +Loader.prototype.listAvailableFiles = function(sync, cb) { + //console.log("generic loader: list available files called"); + this._loadManifests(sync, ilib.bind(this, function () { + if (typeof(cb) === 'function') { + //console.log("generic loader: now calling caller's callback function"); + cb(this.manifest); + } + })); + return this.manifest; +}; + +Loader.prototype.addPath = function (paths) { + if (!paths) return; + + var newpaths = ilib.isArray(paths) ? paths : [paths]; + this.addPaths = this.addPaths.concat(newpaths); + this.isMultiPaths = true; +}; + +Loader.prototype.removePath = function (paths) { + if (!paths) return; + paths = ilib.isArray(paths) ? paths : [paths]; + + paths.forEach(ilib.bind(this, function(item){ + var index = this.addPaths.indexOf(item); + if (index !== -1) { + this.addPaths.splice(index, 1); + } + })); +}; + +Loader.indexOf = function(array, obj) { + if (!array || !obj) { + return -1; + } + if (typeof(array.indexOf) === 'function') { + return array.indexOf(obj); + } else { + for (var i = 0; i < array.length; i++) { + if (array[i] === obj) { + return i; + } + } + return -1; + } +}; + +Loader.prototype.checkAvailability = function(file) { + for (var dir in this.manifest) { + if (Loader.indexOf(this.manifest[dir], file) !== -1) { + return true; + } + } + + return false; +}; + +Loader.prototype.isAvailable = function(file, sync, cb) { + //console.log("Loader.isAvailable: called"); + if (typeof(sync) !== 'boolean') { + sync = true; + } + if (sync) { + this._loadManifests(sync); + return this.checkAvailability(file); + } + + this._loadManifests(false, ilib.bind(this, function () { + // console.log("generic loader: isAvailable " + path + "? "); + if (typeof(cb) === 'function') { + cb(this.checkAvailability(file)); + } + })); +}; + +/* + * Locale.js - Locale specifier definition + * + * Copyright © 2012-2015, 2018,2021 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + +/** + * @class + * Create a new locale instance. Locales are specified either with a specifier string + * that follows the BCP-47 convention (roughly: "language-region-script-variant") or + * with 4 parameters that specify the language, region, variant, and script individually.

+ * + * The language is given as an ISO 639-1 two-letter, lower-case language code. You + * can find a full list of these codes at + * http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes

+ * + * The region is given as an ISO 3166-1 two-letter, upper-case region code. You can + * find a full list of these codes at + * http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2.

+ * + * The variant is any string that does not contain a dash which further differentiates + * locales from each other.

+ * + * The script is given as the ISO 15924 four-letter script code. In some locales, + * text may be validly written in more than one script. For example, Serbian is often + * written in both Latin and Cyrillic, though not usually mixed together. You can find a + * full list of these codes at + * http://en.wikipedia.org/wiki/ISO_15924#List_of_codes.

+ * + * As an example in ilib, the script can be used in the date formatter. Dates formatted + * in Serbian could have day-of-week names or month names written in the Latin + * or Cyrillic script. Often one script is default such that sr-SR-Latn is the same + * as sr-SR so the script code "Latn" can be left off of the locale spec.

+ * + * Each part is optional, and an empty string in the specifier before or after a + * dash or as a parameter to the constructor denotes an unspecified value. In this + * case, many of the ilib functions will treat the locale as generic. For example + * the locale "en-" is equivalent to "en" and to "en--" and denotes a locale + * of "English" with an unspecified region and variant, which typically matches + * any region or variant.

+ * + * Without any arguments to the constructor, this function returns the locale of + * the host Javascript engine.

+ * + * + * @constructor + * @param {?string|Locale=} language the ISO 639 2-letter code for the language, or a full + * locale spec in BCP-47 format, or another Locale instance to copy from + * @param {string=} region the ISO 3166 2-letter code for the region + * @param {string=} variant the name of the variant of this locale, if any + * @param {string=} script the ISO 15924 code of the script for this locale, if any + */ +var Locale = function(language, region, variant, script) { + if (typeof(region) === 'undefined' && typeof(variant) === 'undefined' && typeof(script) === 'undefined') { + var spec = language || ilib.getLocale(); + if (typeof(spec) === 'string') { + var parts = spec.split(/[-_]/g); + for ( var i = 0; i < parts.length; i++ ) { + if (Locale._isLanguageCode(parts[i])) { + /** + * @private + * @type {string|undefined} + */ + this.language = parts[i]; + } else if (Locale._isRegionCode(parts[i])) { + /** + * @private + * @type {string|undefined} + */ + this.region = parts[i]; + } else if (Locale._isScriptCode(parts[i])) { + /** + * @private + * @type {string|undefined} + */ + this.script = parts[i]; + } else { + /** + * @private + * @type {string|undefined} + */ + this.variant = parts[i]; + } + } + this.language = this.language || undefined; + this.region = this.region || undefined; + this.script = this.script || undefined; + this.variant = this.variant || undefined; + } else if (typeof(spec) === 'object') { + this.language = spec.language || undefined; + this.region = spec.region || undefined; + this.script = spec.script || undefined; + this.variant = spec.variant || undefined; + } + } else { + if (language && typeof(language) === "string") { + language = language.trim(); + this.language = language.length > 0 ? language.toLowerCase() : undefined; + } else { + this.language = undefined; + } + if (region && typeof(region) === "string") { + region = region.trim(); + this.region = region.length > 0 ? region.toUpperCase() : undefined; + } else { + this.region = undefined; + } + if (variant && typeof(variant) === "string") { + variant = variant.trim(); + this.variant = variant.length > 0 ? variant : undefined; + } else { + this.variant = undefined; + } + if (script && typeof(script) === "string") { + script = script.trim(); + this.script = script.length > 0 ? script : undefined; + } else { + this.script = undefined; + } + } + this._genSpec(); +}; + +// from http://en.wikipedia.org/wiki/ISO_3166-1 +Locale.a2toa3regmap = { + "AF": "AFG", + "AX": "ALA", + "AL": "ALB", + "DZ": "DZA", + "AS": "ASM", + "AD": "AND", + "AO": "AGO", + "AI": "AIA", + "AQ": "ATA", + "AG": "ATG", + "AR": "ARG", + "AM": "ARM", + "AW": "ABW", + "AU": "AUS", + "AT": "AUT", + "AZ": "AZE", + "BS": "BHS", + "BH": "BHR", + "BD": "BGD", + "BB": "BRB", + "BY": "BLR", + "BE": "BEL", + "BZ": "BLZ", + "BJ": "BEN", + "BM": "BMU", + "BT": "BTN", + "BO": "BOL", + "BQ": "BES", + "BA": "BIH", + "BW": "BWA", + "BV": "BVT", + "BR": "BRA", + "IO": "IOT", + "BN": "BRN", + "BG": "BGR", + "BF": "BFA", + "BI": "BDI", + "KH": "KHM", + "CM": "CMR", + "CA": "CAN", + "CV": "CPV", + "KY": "CYM", + "CF": "CAF", + "TD": "TCD", + "CL": "CHL", + "CN": "CHN", + "CX": "CXR", + "CC": "CCK", + "CO": "COL", + "KM": "COM", + "CG": "COG", + "CD": "COD", + "CK": "COK", + "CR": "CRI", + "CI": "CIV", + "HR": "HRV", + "CU": "CUB", + "CW": "CUW", + "CY": "CYP", + "CZ": "CZE", + "DK": "DNK", + "DJ": "DJI", + "DM": "DMA", + "DO": "DOM", + "EC": "ECU", + "EG": "EGY", + "SV": "SLV", + "GQ": "GNQ", + "ER": "ERI", + "EE": "EST", + "ET": "ETH", + "FK": "FLK", + "FO": "FRO", + "FJ": "FJI", + "FI": "FIN", + "FR": "FRA", + "GF": "GUF", + "PF": "PYF", + "TF": "ATF", + "GA": "GAB", + "GM": "GMB", + "GE": "GEO", + "DE": "DEU", + "GH": "GHA", + "GI": "GIB", + "GR": "GRC", + "GL": "GRL", + "GD": "GRD", + "GP": "GLP", + "GU": "GUM", + "GT": "GTM", + "GG": "GGY", + "GN": "GIN", + "GW": "GNB", + "GY": "GUY", + "HT": "HTI", + "HM": "HMD", + "VA": "VAT", + "HN": "HND", + "HK": "HKG", + "HU": "HUN", + "IS": "ISL", + "IN": "IND", + "ID": "IDN", + "IR": "IRN", + "IQ": "IRQ", + "IE": "IRL", + "IM": "IMN", + "IL": "ISR", + "IT": "ITA", + "JM": "JAM", + "JP": "JPN", + "JE": "JEY", + "JO": "JOR", + "KZ": "KAZ", + "KE": "KEN", + "KI": "KIR", + "KP": "PRK", + "KR": "KOR", + "KW": "KWT", + "KG": "KGZ", + "LA": "LAO", + "LV": "LVA", + "LB": "LBN", + "LS": "LSO", + "LR": "LBR", + "LY": "LBY", + "LI": "LIE", + "LT": "LTU", + "LU": "LUX", + "MO": "MAC", + "MK": "MKD", + "MG": "MDG", + "MW": "MWI", + "MY": "MYS", + "MV": "MDV", + "ML": "MLI", + "MT": "MLT", + "MH": "MHL", + "MQ": "MTQ", + "MR": "MRT", + "MU": "MUS", + "YT": "MYT", + "MX": "MEX", + "FM": "FSM", + "MD": "MDA", + "MC": "MCO", + "MN": "MNG", + "ME": "MNE", + "MS": "MSR", + "MA": "MAR", + "MZ": "MOZ", + "MM": "MMR", + "NA": "NAM", + "NR": "NRU", + "NP": "NPL", + "NL": "NLD", + "NC": "NCL", + "NZ": "NZL", + "NI": "NIC", + "NE": "NER", + "NG": "NGA", + "NU": "NIU", + "NF": "NFK", + "MP": "MNP", + "NO": "NOR", + "OM": "OMN", + "PK": "PAK", + "PW": "PLW", + "PS": "PSE", + "PA": "PAN", + "PG": "PNG", + "PY": "PRY", + "PE": "PER", + "PH": "PHL", + "PN": "PCN", + "PL": "POL", + "PT": "PRT", + "PR": "PRI", + "QA": "QAT", + "RE": "REU", + "RO": "ROU", + "RU": "RUS", + "RW": "RWA", + "BL": "BLM", + "SH": "SHN", + "KN": "KNA", + "LC": "LCA", + "MF": "MAF", + "PM": "SPM", + "VC": "VCT", + "WS": "WSM", + "SM": "SMR", + "ST": "STP", + "SA": "SAU", + "SN": "SEN", + "RS": "SRB", + "SC": "SYC", + "SL": "SLE", + "SG": "SGP", + "SX": "SXM", + "SK": "SVK", + "SI": "SVN", + "SB": "SLB", + "SO": "SOM", + "ZA": "ZAF", + "GS": "SGS", + "SS": "SSD", + "ES": "ESP", + "LK": "LKA", + "SD": "SDN", + "SR": "SUR", + "SJ": "SJM", + "SZ": "SWZ", + "SE": "SWE", + "CH": "CHE", + "SY": "SYR", + "TW": "TWN", + "TJ": "TJK", + "TZ": "TZA", + "TH": "THA", + "TL": "TLS", + "TG": "TGO", + "TK": "TKL", + "TO": "TON", + "TT": "TTO", + "TN": "TUN", + "TR": "TUR", + "TM": "TKM", + "TC": "TCA", + "TV": "TUV", + "UG": "UGA", + "UA": "UKR", + "AE": "ARE", + "GB": "GBR", + "US": "USA", + "UM": "UMI", + "UY": "URY", + "UZ": "UZB", + "VU": "VUT", + "VE": "VEN", + "VN": "VNM", + "VG": "VGB", + "VI": "VIR", + "WF": "WLF", + "EH": "ESH", + "YE": "YEM", + "ZM": "ZMB", + "ZW": "ZWE" +}; + + +Locale.a1toa3langmap = { + "ab": "abk", + "aa": "aar", + "af": "afr", + "ak": "aka", + "sq": "sqi", + "am": "amh", + "ar": "ara", + "an": "arg", + "hy": "hye", + "as": "asm", + "av": "ava", + "ae": "ave", + "ay": "aym", + "az": "aze", + "bm": "bam", + "ba": "bak", + "eu": "eus", + "be": "bel", + "bn": "ben", + "bh": "bih", + "bi": "bis", + "bs": "bos", + "br": "bre", + "bg": "bul", + "my": "mya", + "ca": "cat", + "ch": "cha", + "ce": "che", + "ny": "nya", + "zh": "zho", + "cv": "chv", + "kw": "cor", + "co": "cos", + "cr": "cre", + "hr": "hrv", + "cs": "ces", + "da": "dan", + "dv": "div", + "nl": "nld", + "dz": "dzo", + "en": "eng", + "eo": "epo", + "et": "est", + "ee": "ewe", + "fo": "fao", + "fj": "fij", + "fi": "fin", + "fr": "fra", + "ff": "ful", + "gl": "glg", + "ka": "kat", + "de": "deu", + "el": "ell", + "gn": "grn", + "gu": "guj", + "ht": "hat", + "ha": "hau", + "he": "heb", + "hz": "her", + "hi": "hin", + "ho": "hmo", + "hu": "hun", + "ia": "ina", + "id": "ind", + "ie": "ile", + "ga": "gle", + "ig": "ibo", + "ik": "ipk", + "io": "ido", + "is": "isl", + "it": "ita", + "iu": "iku", + "ja": "jpn", + "jv": "jav", + "kl": "kal", + "kn": "kan", + "kr": "kau", + "ks": "kas", + "kk": "kaz", + "km": "khm", + "ki": "kik", + "rw": "kin", + "ky": "kir", + "kv": "kom", + "kg": "kon", + "ko": "kor", + "ku": "kur", + "kj": "kua", + "la": "lat", + "lb": "ltz", + "lg": "lug", + "li": "lim", + "ln": "lin", + "lo": "lao", + "lt": "lit", + "lu": "lub", + "lv": "lav", + "gv": "glv", + "mk": "mkd", + "mg": "mlg", + "ms": "msa", + "ml": "mal", + "mt": "mlt", + "mi": "mri", + "mr": "mar", + "mh": "mah", + "mn": "mon", + "na": "nau", + "nv": "nav", + "nb": "nob", + "nd": "nde", + "ne": "nep", + "ng": "ndo", + "nn": "nno", + "no": "nor", + "ii": "iii", + "nr": "nbl", + "oc": "oci", + "oj": "oji", + "cu": "chu", + "om": "orm", + "or": "ori", + "os": "oss", + "pa": "pan", + "pi": "pli", + "fa": "fas", + "pl": "pol", + "ps": "pus", + "pt": "por", + "qu": "que", + "rm": "roh", + "rn": "run", + "ro": "ron", + "ru": "rus", + "sa": "san", + "sc": "srd", + "sd": "snd", + "se": "sme", + "sm": "smo", + "sg": "sag", + "sr": "srp", + "gd": "gla", + "sn": "sna", + "si": "sin", + "sk": "slk", + "sl": "slv", + "so": "som", + "st": "sot", + "es": "spa", + "su": "sun", + "sw": "swa", + "ss": "ssw", + "sv": "swe", + "ta": "tam", + "te": "tel", + "tg": "tgk", + "th": "tha", + "ti": "tir", + "bo": "bod", + "tk": "tuk", + "tl": "tgl", + "tn": "tsn", + "to": "ton", + "tr": "tur", + "ts": "tso", + "tt": "tat", + "tw": "twi", + "ty": "tah", + "ug": "uig", + "uk": "ukr", + "ur": "urd", + "uz": "uzb", + "ve": "ven", + "vi": "vie", + "vo": "vol", + "wa": "wln", + "cy": "cym", + "wo": "wol", + "fy": "fry", + "xh": "xho", + "yi": "yid", + "yo": "yor", + "za": "zha", + "zu": "zul" +}; + +// the list below is originally from https://unicode.org/iso15924/iso15924-codes.html +Locale.iso15924 = [ + "Adlm", + "Afak", + "Aghb", + "Ahom", + "Arab", + "Aran", + "Armi", + "Armn", + "Avst", + "Bali", + "Bamu", + "Bass", + "Batk", + "Beng", + "Bhks", + "Blis", + "Bopo", + "Brah", + "Brai", + "Bugi", + "Buhd", + "Cakm", + "Cans", + "Cari", + "Cham", + "Cher", + "Chrs", + "Cirt", + "Copt", + "Cpmn", + "Cprt", + "Cyrl", + "Cyrs", + "Deva", + "Diak", + "Dogr", + "Dsrt", + "Dupl", + "Egyd", + "Egyh", + "Egyp", + "Elba", + "Elym", + "Ethi", + "Geok", + "Geor", + "Glag", + "Gong", + "Gonm", + "Goth", + "Gran", + "Grek", + "Gujr", + "Guru", + "Hanb", + "Hang", + "Hani", + "Hano", + "Hans", + "Hant", + "Hatr", + "Hebr", + "Hira", + "Hluw", + "Hmng", + "Hmnp", + "Hrkt", + "Hung", + "Inds", + "Ital", + "Jamo", + "Java", + "Jpan", + "Jurc", + "Kali", + "Kana", + "Khar", + "Khmr", + "Khoj", + "Kitl", + "Kits", + "Knda", + "Kore", + "Kpel", + "Kthi", + "Lana", + "Laoo", + "Latf", + "Latg", + "Latn", + "Leke", + "Lepc", + "Limb", + "Lina", + "Linb", + "Lisu", + "Loma", + "Lyci", + "Lydi", + "Mahj", + "Maka", + "Mand", + "Mani", + "Marc", + "Maya", + "Medf", + "Mend", + "Merc", + "Mero", + "Mlym", + "Modi", + "Mong", + "Moon", + "Mroo", + "Mtei", + "Mult", + "Mymr", + "Nand", + "Narb", + "Nbat", + "Newa", + "Nkdb", + "Nkgb", + "Nkoo", + "Nshu", + "Ogam", + "Olck", + "Orkh", + "Orya", + "Osge", + "Osma", + "Palm", + "Pauc", + "Perm", + "Phag", + "Phli", + "Phlp", + "Phlv", + "Phnx", + "Plrd", + "Piqd", + "Prti", + "Qaaa", + "Qabx", + "Rjng", + "Rohg", + "Roro", + "Runr", + "Samr", + "Sara", + "Sarb", + "Saur", + "Sgnw", + "Shaw", + "Shrd", + "Shui", + "Sidd", + "Sind", + "Sinh", + "Sogd", + "Sogo", + "Sora", + "Soyo", + "Sund", + "Sylo", + "Syrc", + "Syre", + "Syrj", + "Syrn", + "Tagb", + "Takr", + "Tale", + "Talu", + "Taml", + "Tang", + "Tavt", + "Telu", + "Teng", + "Tfng", + "Tglg", + "Thaa", + "Thai", + "Tibt", + "Tirh", + "Toto", + "Ugar", + "Vaii", + "Visp", + "Wara", + "Wcho", + "Wole", + "Xpeo", + "Xsux", + "Yezi", + "Yiii", + "Zanb", + "Zinh", + "Zmth", + "Zsye", + "Zsym", + "Zxxx", + "Zyyy", + "Zzzz", +]; + +/** + * Tell whether or not the str does not start with a lower case ASCII char. + * @private + * @param {string} str the char to check + * @return {boolean} true if the char is not a lower case ASCII char + */ +Locale._notLower = function(str) { + // do this with ASCII only so we don't have to depend on the CType functions + var ch = str.charCodeAt(0); + return ch < 97 || ch > 122; +}; + +/** + * Tell whether or not the str does not start with an upper case ASCII char. + * @private + * @param {string} str the char to check + * @return {boolean} true if the char is a not an upper case ASCII char + */ +Locale._notUpper = function(str) { + // do this with ASCII only so we don't have to depend on the CType functions + var ch = str.charCodeAt(0); + return ch < 65 || ch > 90; +}; + +/** + * Tell whether or not the str does not start with a digit char. + * @private + * @param {string} str the char to check + * @return {boolean} true if the char is a not an upper case ASCII char + */ +Locale._notDigit = function(str) { + // do this with ASCII only so we don't have to depend on the CType functions + var ch = str.charCodeAt(0); + return ch < 48 || ch > 57; +}; + +/** + * Tell whether or not the given string has the correct syntax to be + * an ISO 639 language code. + * + * @private + * @param {string} str the string to parse + * @return {boolean} true if the string could syntactically be a language code. + */ +Locale._isLanguageCode = function(str) { + if (typeof(str) === 'undefined' || str.length < 2 || str.length > 3) { + return false; + } + + for (var i = 0; i < str.length; i++) { + if (Locale._notLower(str.charAt(i))) { + return false; + } + } + + return true; +}; + +/** + * Tell whether or not the given string has the correct syntax to be + * an ISO 3166 2-letter region code or M.49 3-digit region code. + * + * @private + * @param {string} str the string to parse + * @return {boolean} true if the string could syntactically be a language code. + */ +Locale._isRegionCode = function (str) { + var i; + + if (typeof(str) === 'undefined' || str.length < 2 || str.length > 3) { + return false; + } + + if (str.length === 2) { + for (i = 0; i < str.length; i++) { + if (Locale._notUpper(str.charAt(i))) { + return false; + } + } + } else { + for (i = 0; i < str.length; i++) { + if (Locale._notDigit(str.charAt(i))) { + return false; + } + } + } + + return true; +}; + +/** + * Tell whether or not the given string has the correct syntax to be + * an ISO 639 language code. + * + * @private + * @param {string} str the string to parse + * @return {boolean} true if the string could syntactically be a language code. + */ +Locale._isScriptCode = function(str) { + if (typeof(str) === 'undefined' || str.length !== 4 || Locale._notUpper(str.charAt(0))) { + return false; + } + + for (var i = 1; i < 4; i++) { + if (Locale._notLower(str.charAt(i))) { + return false; + } + } + + return true; +}; + +/** + * Return the ISO-3166 alpha3 equivalent region code for the given ISO 3166 alpha2 + * region code. If the given alpha2 code is not found, this function returns its + * argument unchanged. + * @static + * @param {string|undefined} alpha2 the alpha2 code to map + * @return {string|undefined} the alpha3 equivalent of the given alpha2 code, or the alpha2 + * parameter if the alpha2 value is not found + */ +Locale.regionAlpha2ToAlpha3 = function(alpha2) { + return Locale.a2toa3regmap[alpha2] || alpha2; +}; + +/** + * Return the ISO-639 alpha3 equivalent language code for the given ISO 639 alpha1 + * language code. If the given alpha1 code is not found, this function returns its + * argument unchanged. + * @static + * @param {string|undefined} alpha1 the alpha1 code to map + * @return {string|undefined} the alpha3 equivalent of the given alpha1 code, or the alpha1 + * parameter if the alpha1 value is not found + */ +Locale.languageAlpha1ToAlpha3 = function(alpha1) { + return Locale.a1toa3langmap[alpha1] || alpha1; +}; + +Locale.prototype = { + /** + * @private + */ + _genSpec: function () { + this.spec = this.language || ""; + + if (this.script) { + if (this.spec.length > 0) { + this.spec += "-"; + } + this.spec += this.script; + } + + if (this.region) { + if (this.spec.length > 0) { + this.spec += "-"; + } + this.spec += this.region; + } + + if (this.variant) { + if (this.spec.length > 0) { + this.spec += "-"; + } + this.spec += this.variant; + } + }, + + /** + * Return the ISO 639 language code for this locale. + * @return {string|undefined} the language code for this locale + */ + getLanguage: function() { + return this.language; + }, + + /** + * Return the language of this locale as an ISO-639-alpha3 language code + * @return {string|undefined} the alpha3 language code of this locale + */ + getLanguageAlpha3: function() { + return Locale.languageAlpha1ToAlpha3(this.language); + }, + + /** + * Return the ISO 3166 region code for this locale. + * @return {string|undefined} the region code of this locale + */ + getRegion: function() { + return this.region; + }, + + /** + * Return the region of this locale as an ISO-3166-alpha3 region code + * @return {string|undefined} the alpha3 region code of this locale + */ + getRegionAlpha3: function() { + return Locale.regionAlpha2ToAlpha3(this.region); + }, + + /** + * Return the ISO 15924 script code for this locale + * @return {string|undefined} the script code of this locale + */ + getScript: function () { + return this.script; + }, + + /** + * Return the variant code for this locale + * @return {string|undefined} the variant code of this locale, if any + */ + getVariant: function() { + return this.variant; + }, + + /** + * Return the whole locale specifier as a string. + * @return {string} the locale specifier + */ + getSpec: function() { + if (!this.spec) this._genSpec(); + return this.spec; + }, + + /** + * Return the language locale specifier. This includes the + * language and the script if it is available. This can be + * used to see whether the written language of two locales + * match each other regardless of the region or variant. + * + * @return {string} the language locale specifier + */ + getLangSpec: function() { + var spec = this.language; + if (spec && this.script) { + spec += "-" + this.script; + } + return spec || ""; + }, + + /** + * Express this locale object as a string. Currently, this simply calls the getSpec + * function to represent the locale as its specifier. + * + * @return {string} the locale specifier + */ + toString: function() { + return this.getSpec(); + }, + + /** + * Return true if the the other locale is exactly equal to the current one. + * @return {boolean} whether or not the other locale is equal to the current one + */ + equals: function(other) { + return this.language === other.language && + this.region === other.region && + this.script === other.script && + this.variant === other.variant; + }, + + /** + * Return true if the current locale is the special pseudo locale. + * @return {boolean} true if the current locale is the special pseudo locale + */ + isPseudo: function () { + return JSUtils.indexOf(ilib.pseudoLocales, this.spec) > -1; + }, + + /** + * Return true if the current locale uses a valid ISO codes for each component + * of the locale that exists. + * @return {boolean} true if the current locale has all valid components, and + * false otherwise. + */ + isValid: function() { + if (!this.language && !this.script && !this.region) return false; + + return !!((!this.language || (Locale._isLanguageCode(this.language) && Locale.a1toa3langmap[this.language])) && + (!this.script || (Locale._isScriptCode(this.script) && Locale.iso15924.indexOf(this.script) > -1)) && + (!this.region || (Locale._isRegionCode(this.region) && Locale.a2toa3regmap[this.region]))); + } +}; + +// static functions +/** + * @private + */ +Locale.locales = []; +// !macro localelist + +/** + * Return the list of available locales that this iLib file supports. + * If this copy of ilib is pre-assembled with locale data, then the + * list locales may be much smaller + * than the list of all available locales in the iLib repository. The + * assembly tool will automatically fill in the list for an assembled + * copy of iLib. If this copy is being used with dynamically loaded + * data, then you + * can load any locale that iLib supports. You can form a locale with any + * combination of a language and region tags that exist in the locale + * data directory. Language tags are in the root of the locale data dir, + * and region tags can be found underneath the "und" directory. (The + * region tags are separated into a different dir because the region names + * conflict with language names on file systems that are case-insensitive.) + * If you have culled the locale data directory to limit the size of + * your app, then this function should return only those files that actually exist + * according to the ilibmanifest.json file in the root of that locale + * data dir. Make sure your ilibmanifest.json file is up-to-date with + * respect to the list of files that exist in the locale data dir. + * + * @param {boolean} sync if false, load the list of available files from disk + * asynchronously, otherwise load them synchronously. (Default: true/synchronously) + * @param {Function} onLoad a callback function to call if asynchronous + * load was requested and the list of files have been loaded. + * @return {Array.} this is an array of locale specs for which + * this iLib file has locale data for + */ +Locale.getAvailableLocales = function (sync, onLoad) { + var locales = []; + if (Locale.locales.length || typeof(ilib._load.listAvailableFiles) !== 'function') { + locales = Locale.locales; + if (onLoad && typeof(onLoad) === 'function') { + onLoad(locales); + } + } else { + if (typeof(sync) === 'undefined') { + sync = true; + } + ilib._load.listAvailableFiles(sync, function(manifest) { + if (manifest) { + for (var dir in manifest) { + var filelist = manifest[dir]; + for (var i = 0; i < filelist.length; i++) { + if (filelist[i].length > 15 && filelist[i].substr(-15) === "localeinfo.json") { + locales.push(filelist[i].substring(0,filelist[i].length-16).replace(/\//g, "-")); + } + } + } + } + if (onLoad && typeof(onLoad) === 'function') { + onLoad(locales); + } + }); + } + return locales; +}; + + +/* + * LocaleInfo.js - Encode locale-specific defaults + * + * Copyright © 2012-2015, 2018, 2021 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data localeinfo + + + + + + +/** + * @class + * Create a new locale info instance. Locale info instances give information about + * the default settings for a particular locale. These settings may be overridden + * by various parts of the code, and should be used as a fall-back setting of last + * resort.

+ * + * The optional options object holds extra parameters if they are necessary. The + * current list of supported options are: + * + *

    + *
  • onLoad - a callback function to call when the locale info object is fully + * loaded. When the onLoad option is given, the localeinfo object will attempt to + * load any missing locale data using the ilib loader callback. + * When the constructor is done (even if the data is already preassembled), the + * onLoad function is called with the current instance as a parameter, so this + * callback can be used with preassembled or dynamic loading or a mix of the two. + * + *
  • sync - tell whether to load any missing locale data synchronously or + * asynchronously. If this option is given as "false", then the "onLoad" + * callback must be given, as the instance returned from this constructor will + * not be usable for a while. + * + *
  • loadParams - an object containing parameters to pass to the + * loader callback function when locale data is missing. The parameters are not + * interpretted or modified in any way. They are simply passed along. The object + * may contain any property/value pairs as long as the calling code is in + * agreement with the loader callback function as to what those parameters mean. + *
+ * + * If this copy of ilib is pre-assembled and all the data is already available, + * or if the data was already previously loaded, then this constructor will call + * the onLoad callback immediately when the initialization is done. + * If the onLoad option is not given, this class will only attempt to load any + * missing locale data synchronously. + * + * + * @constructor + * @see {ilib.setLoaderCallback} for information about registering a loader callback + * function + * @param {Locale|string=} locale the locale for which the info is sought, or undefined for + * @param {Object=} options the locale for which the info is sought, or undefined for + * the current locale + */ +var LocaleInfo = function(locale, options) { + var sync = true, + loadParams = undefined; + + /** + @private + @type {{ + calendar:string, + clock:string, + currency:string, + delimiter: {quotationStart:string,quotationEnd:string,alternateQuotationStart:string,alternateQuotationEnd:string}, + firstDayOfWeek:number, + meridiems:string, + numfmt:{ + currencyFormats:{common:string,commonNegative:string,iso:string,isoNegative:string}, + decimalChar:string, + exponential:string, + groupChar:string, + negativenumFmt:string, + negativepctFmt:string, + pctChar:string, + pctFmt:string, + prigroupSize:number, + roundingMode:string, + script:string, + secgroupSize:number, + useNative:boolean + }, + timezone:string, + units:string, + weekendEnd:number, + weekendStart:number, + paperSizes:{regular:string} + }} + */ + this.info = LocaleInfo.defaultInfo; + + switch (typeof(locale)) { + case "string": + this.locale = new Locale(locale); + break; + default: + case "undefined": + this.locale = new Locale(); + break; + case "object": + this.locale = locale; + break; + } + var manipulateLocale = ["pa-PK", "ha-CM", "ha-SD"]; + + if (manipulateLocale.indexOf(this.locale.getSpec()) != -1) { + new LocaleMatcher({ + locale: this.locale.getSpec(), + sync:sync, + loadParams:loadParams, + onLoad: ilib.bind(this, function(lm){ + this.locale = new Locale(lm.getLikelyLocale()); + }) + }) + } + + if (options) { + if (typeof(options.sync) !== 'undefined') { + sync = !!options.sync; + } + + if (typeof(options.loadParams) !== 'undefined') { + loadParams = options.loadParams; + } + } + + Utils.loadData({ + object: "LocaleInfo", + locale: this.locale, + name: "localeinfo.json", + sync: sync, + loadParams: loadParams, + callback: ilib.bind(this, function (info) { + this.info = info || LocaleInfo.defaultInfo; + if (options && typeof(options.onLoad) === 'function') { + options.onLoad(this); + } + }) + }); +}; + +LocaleInfo.defaultInfo = ilib.data.localeinfo; +LocaleInfo.defaultInfo = LocaleInfo.defaultInfo || { + "calendar": "gregorian", + "clock": "24", + "currency": "USD", + "delimiter": { + "quotationStart": "“", + "quotationEnd": "”", + "alternateQuotationStart": "‘", + "alternateQuotationEnd": "’" + }, + "firstDayOfWeek": 1, + "meridiems": "gregorian", + "numfmt": { + "script": "Latn", + "decimalChar": ".", + "groupChar": ",", + "pctChar": "%", + "exponential": "E", + "prigroupSize": 3, + "currencyFormats": { + "common": "{s} {n}", + "commonNegative": "-{s} {n}", + "iso": "{s} {n}", + "isoNegative": "({s} {n})" + }, + "negativenumFmt": "-{n}", + "pctFmt": "{n}%", + "negativepctFmt": "-{n}%", + "roundingMode": "halfdown", + "secGroupSize": null, + "useNative": false + }, + "paperSizes": { + "regular": "A4" + }, + "timezone": "Etc/UTC", + "units": "metric", + "weekendEnd": 0, + "weekendStart": 6 +}; + +LocaleInfo.prototype = { + /** + * Return the name of the locale's language in English. + * @returns {string} the name of the locale's language in English + */ + getLanguageName: function () { + return this.info["language.name"]; + }, + + /** + * Return the name of the locale's region in English. If the locale + * has no region, this returns undefined. + * + * @returns {string|undefined} the name of the locale's region in English + */ + getRegionName: function () { + return this.info["region.name"]; + }, + + /** + * Return whether this locale commonly uses the 12- or the 24-hour clock. + * + * @returns {string} "12" if the locale commonly uses a 12-hour clock, or "24" + * if the locale commonly uses a 24-hour clock. + */ + getClock: function() { + return this.info.clock; + }, + + /** + * Return the locale that this info object was created with. + * @returns {Locale} The locale spec of the locale used to construct this info instance + */ + getLocale: function () { + return this.locale; + }, + + /** + * Return the name of the measuring system that is commonly used in the given locale. + * Valid values are "uscustomary", "imperial", and "metric". + * + * @returns {string} The name of the measuring system commonly used in the locale + */ + getUnits: function () { + return this.info.units; + }, + + /** + * Return the name of the calendar that is commonly used in the given locale. + * + * @returns {string} The name of the calendar commonly used in the locale + */ + getCalendar: function () { + return this.info.calendar; + }, + + /** + * Return the day of week that starts weeks in the current locale. Days are still + * numbered the standard way with 0 for Sunday through 6 for Saturday, but calendars + * should be displayed and weeks calculated with the day of week returned from this + * function as the first day of the week. + * + * @returns {number} the day of the week that starts weeks in the current locale. + */ + getFirstDayOfWeek: function () { + return this.info.firstDayOfWeek; + }, + + /** + * Return the day of week that starts weekend in the current locale. Days are still + * numbered the standard way with 0 for Sunday through 6 for Saturday. + * + * @returns {number} the day of the week that starts weeks in the current locale. + */ + getWeekEndStart: function () { + return this.info.weekendStart; + }, + + /** + * Return the day of week that starts weekend in the current locale. Days are still + * numbered the standard way with 0 for Sunday through 6 for Saturday. + * + * @returns {number} the day of the week that starts weeks in the current locale. + */ + getWeekEndEnd: function () { + return this.info.weekendEnd; + }, + + /** + * Return the default time zone for this locale. Many locales span across multiple + * time zones. In this case, the time zone with the largest population is chosen + * to represent the locale. This is obviously not that accurate, but then again, + * this method's return value should only be used as a default anyways. + * @returns {string} the default time zone for this locale. + */ + getTimeZone: function () { + return this.info.timezone; + }, + + /** + * Return the decimal separator for formatted numbers in this locale. + * @returns {string} the decimal separator char + */ + getDecimalSeparator: function () { + return this.info.numfmt.decimalChar; + }, + + /** + * Return the decimal separator for formatted numbers in this locale for native script. + * @returns {string} the decimal separator char + */ + getNativeDecimalSeparator: function () { + return (this.info.native_numfmt && this.info.native_numfmt.decimalChar) || this.info.numfmt.decimalChar; + }, + + /** + * Return the separator character used to separate groups of digits on the + * integer side of the decimal character. + * @returns {string} the grouping separator char + */ + getGroupingSeparator: function () { + return this.info.numfmt.groupChar; + }, + + /** + * Return the separator character used to separate groups of digits on the + * integer side of the decimal character for the native script if present other than the default script. + * @returns {string} the grouping separator char + */ + getNativeGroupingSeparator: function () { + return (this.info.native_numfmt && this.info.native_numfmt.groupChar) || this.info.numfmt.groupChar; + }, + + /** + * Return the minimum number of digits grouped together on the integer side + * for the first (primary) group. + * In western European cultures, groupings are in 1000s, so the number of digits + * is 3. + * @returns {number} the number of digits in a primary grouping, or 0 for no grouping + */ + getPrimaryGroupingDigits: function () { + return (typeof(this.info.numfmt.prigroupSize) !== 'undefined' && this.info.numfmt.prigroupSize) || 0; + }, + + /** + * Return the minimum number of digits grouped together on the integer side + * for the second or more (secondary) group.

+ * + * In western European cultures, all groupings are by 1000s, so the secondary + * size should be 0 because there is no secondary size. In general, if this + * method returns 0, then all groupings are of the primary size.

+ * + * For some other cultures, the first grouping (primary) + * is 3 and any subsequent groupings (secondary) are two. So, 100000 would be + * written as: "1,00,000". + * + * @returns {number} the number of digits in a secondary grouping, or 0 for no + * secondary grouping. + */ + getSecondaryGroupingDigits: function () { + return this.info.numfmt.secgroupSize || 0; + }, + + /** + * Return the format template used to format percentages in this locale. + * @returns {string} the format template for formatting percentages + */ + getPercentageFormat: function () { + return this.info.numfmt.pctFmt; + }, + + /** + * Return the format template used to format percentages in this locale + * with negative amounts. + * @returns {string} the format template for formatting percentages + */ + getNegativePercentageFormat: function () { + return this.info.numfmt.negativepctFmt; + }, + + /** + * Return the symbol used for percentages in this locale. + * @returns {string} the symbol used for percentages in this locale + */ + getPercentageSymbol: function () { + return this.info.numfmt.pctChar || "%"; + }, + + /** + * Return the symbol used for exponential in this locale. + * @returns {string} the symbol used for exponential in this locale + */ + getExponential: function () { + return this.info.numfmt.exponential; + }, + + /** + * Return the symbol used for exponential in this locale for native script. + * @returns {string} the symbol used for exponential in this locale for native script + */ + getNativeExponential: function () { + return (this.info.native_numfmt && this.info.native_numfmt.exponential) || this.info.numfmt.exponential; + }, + + /** + * Return the symbol used for percentages in this locale for native script. + * @returns {string} the symbol used for percentages in this locale for native script + */ + getNativePercentageSymbol: function () { + return (this.info.native_numfmt && this.info.native_numfmt.pctChar) || this.info.numfmt.pctChar || "%"; + + }, + /** + * Return the format template used to format negative numbers in this locale. + * @returns {string} the format template for formatting negative numbers + */ + getNegativeNumberFormat: function () { + return this.info.numfmt.negativenumFmt; + }, + + /** + * Return an object containing the format templates for formatting currencies + * in this locale. The object has a number of properties in it that each are + * a particular style of format. Normally, this contains a "common" and an "iso" + * style, but may contain others in the future. + * @returns {Object} an object containing the format templates for currencies + */ + getCurrencyFormats: function () { + return this.info.numfmt.currencyFormats; + }, + + /** + * Return the currency that is legal in the locale, or which is most commonly + * used in regular commerce. + * @returns {string} the ISO 4217 code for the currency of this locale + */ + getCurrency: function () { + return this.info.currency; + }, + + /** + * Return a string that describes the style of digits used by this locale. + * Possible return values are: + *

    + *
  • western - uses the regular western 10-based digits 0 through 9 + *
  • optional - native 10-based digits exist, but in modern usage, + * this locale most often uses western digits + *
  • native - native 10-based native digits exist and are used + * regularly by this locale + *
  • custom - uses native digits by default that are not 10-based + *
+ * @returns {string} string that describes the style of digits used in this locale + */ + getDigitsStyle: function () { + if (this.info.numfmt && this.info.numfmt.useNative) { + return "native"; + } + if (typeof(this.info.native_numfmt) !== 'undefined') { + return "optional"; + } + return "western"; + }, + + /** + * Return the digits of the default script if they are defined. + * If not defined, the default should be the regular "Arabic numerals" + * used in the Latin script. (0-9) + * @returns {string|undefined} the digits used in the default script + */ + getDigits: function () { + return this.info.numfmt.digits; + }, + + /** + * Return the digits of the native script if they are defined. + * @returns {string|undefined} the digits used in the default script + */ + getNativeDigits: function () { + return (this.info.numfmt.useNative && this.info.numfmt.digits) || (this.info.native_numfmt && this.info.native_numfmt.digits); + }, + + /** + * If this locale typically uses a different type of rounding for numeric + * formatting other than halfdown, especially for currency, then it can be + * specified in the localeinfo. If the locale uses the default, then this + * method returns undefined. The locale's rounding method overrides the + * rounding method for the currency itself, which can sometimes shared + * between various locales so it is less specific. + * @returns {string} the name of the rounding mode typically used in this + * locale, or "halfdown" if the locale does not override the default + */ + getRoundingMode: function () { + return this.info.numfmt.roundingMode; + }, + + /** + * Return the default script used to write text in the language of this + * locale. Text for most languages is written in only one script, but there + * are some languages where the text can be written in a number of scripts, + * depending on a variety of things such as the region, ethnicity, religion, + * etc. of the author. This method returns the default script for the + * locale, in which the language is most commonly written.

+ * + * The script is returned as an ISO 15924 4-letter code. + * + * @returns {string} the ISO 15924 code for the default script used to write + * text in this locale + */ + getDefaultScript: function() { + return (this.info.scripts) ? this.info.scripts[0] : "Latn"; + }, + + /** + * Return the script used for the current locale. If the current locale + * explicitly defines a script, then this script is returned. If not, then + * the default script for the locale is returned. + * + * @see LocaleInfo.getDefaultScript + * @returns {string} the ISO 15924 code for the script used to write + * text in this locale + */ + getScript: function() { + return this.locale.getScript() || this.getDefaultScript(); + }, + + /** + * Return an array of script codes which are used to write text in the current + * language. Text for most languages is written in only one script, but there + * are some languages where the text can be written in a number of scripts, + * depending on a variety of things such as the region, ethnicity, religion, + * etc. of the author. This method returns an array of script codes in which + * the language is commonly written. + * + * @returns {Array.} an array of ISO 15924 codes for the scripts used + * to write text in this language + */ + getAllScripts: function() { + return this.info.scripts || ["Latn"]; + }, + + /** + * Return the default style of meridiems used in this locale. Meridiems are + * times of day like AM/PM. In a few locales with some calendars, for example + * Amharic/Ethiopia using the Ethiopic calendar, the times of day may be + * split into different segments than simple AM/PM as in the Gregorian + * calendar. Only a few locales are like that. For most locales, formatting + * a Gregorian date will use the regular Gregorian AM/PM meridiems. + * + * @returns {string} the default meridiems style used in this locale. Possible + * values are "gregorian", "chinese", and "ethiopic" + */ + getMeridiemsStyle: function () { + return this.info.meridiems || "gregorian"; + }, + /** + * Return the default PaperSize information in this locale. + * @returns {string} default PaperSize in this locale + */ + getPaperSize: function () { + return this.info.paperSizes.regular; + }, + /** + * Return the default Delimiter QuotationStart information in this locale. + * @returns {string} default QuotationStart in this locale + */ + getDelimiterQuotationStart: function () { + return this.info.delimiter.quotationStart; + }, + /** + * Return the default Delimiter QuotationEnd information in this locale. + * @returns {string} default QuotationEnd in this locale + */ + getDelimiterQuotationEnd: function () { + return this.info.delimiter.quotationEnd; + } +}; + + +/* + * ScriptInfo.js - information about scripts + * + * Copyright © 2012-2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data scripts + + + + +/** + * @class + * Create a new script info instance. This class encodes information about + * scripts, which are sets of characters used in a writing system.

+ * + * The options object may contain any of the following properties: + * + *

    + *
  • onLoad - a callback function to call when the script info object is fully + * loaded. When the onLoad option is given, the script info object will attempt to + * load any missing locale data using the ilib loader callback. + * When the constructor is done (even if the data is already preassembled), the + * onLoad function is called with the current instance as a parameter, so this + * callback can be used with preassembled or dynamic loading or a mix of the two. + * + *
  • sync - tell whether to load any missing locale data synchronously or + * asynchronously. If this option is given as "false", then the "onLoad" + * callback must be given, as the instance returned from this constructor will + * not be usable for a while. + * + *
  • loadParams - an object containing parameters to pass to the + * loader callback function when locale data is missing. The parameters are not + * interpretted or modified in any way. They are simply passed along. The object + * may contain any property/value pairs as long as the calling code is in + * agreement with the loader callback function as to what those parameters mean. + *
+ * + * + * @constructor + * @param {string} script The ISO 15924 4-letter identifier for the script + * @param {Object=} options parameters to initialize this instance + */ +var ScriptInfo = function(script, options) { + var sync = true, + loadParams = undefined; + + this.script = script; + + if (options) { + if (typeof(options.sync) !== 'undefined') { + sync = !!options.sync; + } + + if (typeof(options.loadParams) !== 'undefined') { + loadParams = options.loadParams; + } + } + + if (!ilib.data.scripts) { + Utils.loadData({ + object: "ScriptInfo", + nonlocale: true, + name: "scripts.json", + sync: sync, + loadParams: loadParams, + callback: ilib.bind(this, function (info) { + if (!info) { + info = {"Latn":{"nb":215,"nm":"Latin","lid":"Latin","rtl":false,"ime":false,"casing":true}}; + } + ilib.data.scripts = info; + this.info = script && ilib.data.scripts[script]; + if (options && typeof(options.onLoad) === 'function') { + options.onLoad(this); + } + }) + }); + } else { + this.info = ilib.data.scripts[script]; + if (options && typeof(options.onLoad) === 'function') { + options.onLoad(this); + } + } +}; + +/** + * @private + */ +ScriptInfo._getScriptsArray = function() { + var ret = [], + script = undefined, + scripts = ilib.data.scripts; + + for (script in scripts) { + if (script && scripts[script]) { + ret.push(script); + } + } + + return ret; +}; + +/** + * Return an array of all ISO 15924 4-letter identifier script identifiers that + * this copy of ilib knows about. + * @static + * @param {boolean} sync whether to find the available ids synchronously (true) or asynchronously (false) + * @param {Object} loadParams arbitrary object full of properties to pass to the loader + * @param {function(Array.)} onLoad callback function to call when the data is finished loading + * @return {Array.} an array of all script identifiers that this copy of + * ilib knows about + */ +ScriptInfo.getAllScripts = function(sync, loadParams, onLoad) { + if (!ilib.data.scripts) { + Utils.loadData({ + object: "ScriptInfo", + locale: "-", + name: "scripts.json", + sync: sync, + loadParams: loadParams, + callback: ilib.bind(this, function (info) { + ilib.data.scripts = info; + + if (typeof(onLoad) === 'function') { + onLoad(ScriptInfo._getScriptsArray()); + } + }) + }); + } else { + if (typeof(onLoad) === 'function') { + onLoad(ScriptInfo._getScriptsArray()); + } + } + + return ScriptInfo._getScriptsArray(); +}; + +ScriptInfo.prototype = { + /** + * Return the 4-letter ISO 15924 identifier associated + * with this script. + * @return {string} the 4-letter ISO code for this script + */ + getCode: function () { + return this.info && this.script; + }, + + /** + * Get the ISO 15924 code number associated with this + * script. + * + * @return {number} the ISO 15924 code number + */ + getCodeNumber: function () { + return this.info && this.info.nb || 0; + }, + + /** + * Get the name of this script in English. + * + * @return {string} the name of this script in English + */ + getName: function () { + return this.info && this.info.nm; + }, + + /** + * Get the long identifier assciated with this script. + * + * @return {string} the long identifier of this script + */ + getLongCode: function () { + return this.info && this.info.lid; + }, + + /** + * Return the usual direction that text in this script is written + * in. Possible return values are "rtl" for right-to-left, + * "ltr" for left-to-right, and "ttb" for top-to-bottom. + * + * @return {string} the usual direction that text in this script is + * written in + */ + getScriptDirection: function() { + return (this.info && typeof(this.info.rtl) !== 'undefined' && this.info.rtl) ? "rtl" : "ltr"; + }, + + /** + * Return true if this script typically requires an input method engine + * to enter its characters. + * + * @return {boolean} true if this script typically requires an IME + */ + getNeedsIME: function () { + return this.info && this.info.ime ? true : false; // converts undefined to false + }, + + /** + * Return true if this script uses lower- and upper-case characters. + * + * @return {boolean} true if this script uses letter case + */ + getCasing: function () { + return this.info && this.info.casing ? true : false; // converts undefined to false + } +}; + +/* + * LocaleMatcher.js - Locale matcher definition + * + * Copyright © 2013-2015, 2018-2019, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data localematch + + + + + +var componentWeights = [ + 0.5, // language + 0.2, // script + 0.25, // region + 0.05 // variant +]; + +// these are languages where you have to put the script all the time, +// as none of the scripts are default for the language +var multiScriptLanguages = { + "az": true, // Azerbaijani + "kk": true, // Kazakh + "ku": true, // Kurdish + "ky": true, // Kyrgyz + "pa": true, // Panjabi + "sr": true, // Serbian + "tg": true, // Tajik + "uz": true, // Uzbek + "zh": true // Chinese +}; + +/** + * @class + * Create a new locale matcher instance. This is used + * to see which locales can be matched with each other in + * various ways.

+ * + * The options object may contain any of the following properties: + * + *

    + *
  • locale - the locale instance or locale spec to match + * + *
  • onLoad - a callback function to call when the locale matcher object is fully + * loaded. When the onLoad option is given, the locale matcher object will attempt to + * load any missing locale data using the ilib loader callback. + * When the constructor is done (even if the data is already preassembled), the + * onLoad function is called with the current instance as a parameter, so this + * callback can be used with preassembled or dynamic loading or a mix of the two. + * + *
  • sync - tell whether to load any missing locale data synchronously or + * asynchronously. If this option is given as "false", then the "onLoad" + * callback must be given, as the instance returned from this constructor will + * not be usable for a while. + * + *
  • loadParams - an object containing parameters to pass to the + * loader callback function when locale data is missing. The parameters are not + * interpretted or modified in any way. They are simply passed along. The object + * may contain any property/value pairs as long as the calling code is in + * agreement with the loader callback function as to what those parameters mean. + *
+ * + * + * @constructor + * @param {Object} options parameters to initialize this matcher + */ +var LocaleMatcher = function(options) { + var sync = true, + loadParams = undefined; + + this.locale = new Locale(); + + if (options) { + if (typeof(options.locale) !== 'undefined') { + this.locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; + } + + if (typeof(options.sync) !== 'undefined') { + sync = !!options.sync; + } + + if (typeof(options.loadParams) !== 'undefined') { + loadParams = options.loadParams; + } + } + + if (typeof(ilib.data.localematch) === 'undefined') { + Utils.loadData({ + object: "LocaleMatcher", + locale: "-", + name: "localematch.json", + sync: sync, + loadParams: loadParams, + callback: ilib.bind(this, function (info) { + if (!info) { + info = {}; + } + /** @type {Object.} */ + this.info = info; + if (options && typeof(options.onLoad) === 'function') { + options.onLoad(this); + } + }) + }); + } else { + this.info = ilib.data.localematch; + if (options && typeof(options.onLoad) === 'function') { + options.onLoad(this); + } + } +}; + + +LocaleMatcher.prototype = { + /** + * Return the locale used to construct this instance. + * @return {Locale|undefined} the locale for this matcher + */ + getLocale: function() { + return this.locale; + }, + + /** + * Do the work + * @private + */ + _getLikelyLocale: function(locale) { + // already full specified + if (locale.language && locale.script && locale.region) return locale; + + if (typeof(this.info.likelyLocales[locale.getSpec()]) === 'undefined') { + // try various partials before giving up + var partial = this.info.likelyLocales[new Locale(locale.language, undefined, locale.region).getSpec()]; + if (typeof(partial) !== 'undefined') return new Locale(partial); + + partial = this.info.likelyLocales[new Locale(locale.language, locale.script, undefined).getSpec()]; + if (typeof(partial) !== 'undefined') return new Locale(partial); + + partial = this.info.likelyLocales[new Locale(locale.language, undefined, undefined).getSpec()]; + if (typeof(partial) !== 'undefined') return new Locale(partial); + + partial = this.info.likelyLocales[new Locale(undefined, locale.script, locale.region).getSpec()]; + if (typeof(partial) !== 'undefined') return new Locale(partial); + + partial = this.info.likelyLocales[new Locale(undefined, undefined, locale.region).getSpec()]; + if (typeof(partial) !== 'undefined') return new Locale(partial); + + partial = this.info.likelyLocales[new Locale(undefined, locale.script, undefined).getSpec()]; + if (typeof(partial) !== 'undefined') return new Locale(partial); + + return locale; + } + + return new Locale(this.info.likelyLocales[locale.getSpec()]); + }, + + /** + * Return an Locale instance that is fully specified based on partial information + * given to the constructor of this locale matcher instance. For example, if the locale + * spec given to this locale matcher instance is simply "ru" (for the Russian language), + * then it will fill in the missing region and script tags and return a locale with + * the specifier "ru-Cyrl-RU". (ie. Russian language, Cyrillic, Russian Federation). + * Any one or two of the language, script, or region parts may be left unspecified, + * and the other one or two parts will be filled in automatically. If this + * class has no information about the given locale, then the locale of this + * locale matcher instance is returned unchanged. + * + * @returns {Locale} the most likely completion of the partial locale given + * to the constructor of this locale matcher instance + */ + getLikelyLocale: function () { + return this._getLikelyLocale(this.locale); + }, + + /** + * Return an Locale instance that is specified based on partial information + * given to the constructor of this locale matcher instance but which leaves out any + * part of the locale specifier that is so common that it is understood. For example, + * if the locale + * spec given to this locale matcher instance is simply "ru" (for the Russian language), + * then it will fill in the missing region and/or script tags and return a locale with + * the specifier "ru-RU". (ie. Russian language, Russian Federation). Note that the + * default script "Cyrl" is left out because the vast majority of text written in + * Russian is written with the Cyrllic script, so that part of the locale is understood + * and is commonly left out.

+ * + * Any one or two of the language, script, or region parts may be left unspecified, + * and the other one or two parts will be filled in automatically. If this + * class has no information about the given locale, then the locale of this + * locale matcher instance is returned unchanged.

+ * + * This method returns the same information as getLikelyLocale but with the very common + * parts left out. + * + * @returns {Locale} the most likely "minimal" completion of the partial locale given + * to the constructor of this locale matcher instance where the commonly understood + * parts are left out. + */ + getLikelyLocaleMinimal: function() { + var fullLocale = this._getLikelyLocale(this.locale); + var langLocale = this._getLikelyLocale(new Locale(fullLocale.language)); + return fullLocale.script === langLocale.script && !multiScriptLanguages[fullLocale.language] ? + new Locale(fullLocale.language, undefined, fullLocale.region) : + fullLocale; + }, + + /** + * Return the degree that the given locale matches the current locale of this + * matcher. This method returns an integer from 0 to 100. A value of 100 is + * a 100% match, meaning that the two locales are exactly equivalent to each + * other. (eg. "ja-JP" and "ja-JP") A value of 0 means that there 0% match or + * that the two locales have nothing in common. (eg. "en-US" and "ja-JP")

+ * + * Locale matching is not the same as equivalence, as the degree of matching + * is returned. (See Locale.equals for equivalence.)

+ * + * The match score is calculated based on matching the 4 locale components, + * weighted by importance: + * + *

    + *
  • language - this accounts for 50% of the match score + *
  • region - accounts for 25% of the match score + *
  • script - accounts for 20% of the match score + *
  • variant - accounts for 5% of the match score + *
+ * + * The score is affected by the following things: + * + *
    + *
  • A large language score is given when the language components of the locales + * match exactly. + *
  • Higher language scores are given when the languages are linguistically + * close to each other, such as dialects. + *
  • A small score is given when two languages are in the same + * linguistic family, but one is not a dialect of the other, such as German + * and Dutch. + *
  • A large region score is given when two locales share the same region. + *
  • A smaller region score is given when one region is contained within + * another. For example, Hong Kong is part of China, so a moderate score is + * given instead of a full score. + *
  • A small score is given if two regions are geographically close to + * each other or are tied by history. For example, Ireland and Great Britain + * are both adjacent and tied by history, so they receive a moderate score. + *
  • A high script score is given if the two locales share the same script. + * The legibility of a common script means that there is some small kinship of the + * different languages. + *
  • A high variant score is given if the two locales share the same + * variant. Full score is given when both locales have no variant at all. + *
  • Locale components that are unspecified in both locales are given high + * scores. + *
  • Locales where a particular locale component is missing in only one + * locale can still match when the default for that locale component matches + * the component in the other locale. The + * default value for the missing component is determined using the likely locales + * data. (See getLikelyLocale()) For example, "en-US" and "en-Latn-US" receive + * a high script score because the default script for "en" is "Latn". + *
+ * + * The intention of this method is that it can be used to determine + * compatibility of locales. For example, when a user signs up for an + * account on a web site, the locales that the web site supports and + * the locale of the user's browser may differ, and the site needs to + * pick the best locale to show the user. Let's say the + * web site supports a selection of European languages such as "it-IT", + * "fr-FR", "de-DE", and "en-GB". The user's + * browser may be set to "it-CH". The web site code can then match "it-CH" + * against each of the supported locales to find the one with the + * highest score. In + * this case, the best match would be "it-IT" because it shares a + * language and script in common with "it-CH" and differs only in the region + * component. It is not a 100% match, but it is pretty good. The web site + * may decide if the match scores all fall + * below a chosen threshold (perhaps 50%?), it should show the user the + * default language "en-GB", because that is probably a better choice + * than any other supported locale.

+ * + * @param {Locale} locale the other locale to match against the current one + * @return {number} an integer from 0 to 100 that indicates the degree to + * which these locales match each other + */ + match: function(locale) { + var other = new Locale(locale); + var scores = [0, 0, 0, 0]; + var thisfull, otherfull, i; + + if (this.locale.language === other.language) { + scores[0] = 100; + } else { + if (!this.locale.language || !other.language) { + // check for default language + thisfull = this.getLikelyLocale(); + otherfull = new Locale(this.info.likelyLocales[other.getSpec()] || other.getSpec()); + if (thisfull.language === otherfull.language) { + scores[0] = 100; + } + } else { + // check for macro languages + var mlthis = this.info.macroLanguagesReverse[this.locale.language] || this.locale.language; + var mlother = this.info.macroLanguagesReverse[other.language] || other.language; + if (mlthis === mlother) { + scores[0] = 90; + } else { + // check for mutual intelligibility + var pair = this.locale.language + "-" + other.language; + scores[0] = this.info.mutualIntelligibility[pair] || 0; + } + } + } + + if (this.locale.script === other.script) { + scores[1] = 100; + } else { + if (!this.locale.script || !other.script) { + // check for default script + thisfull = this.locale.script ? this.locale : new Locale(this.info.likelyLocales[this.locale.language]); + otherfull = other.script ? other : new Locale(this.info.likelyLocales[other.language]); + if (thisfull.script === otherfull.script) { + scores[1] = 100; + } + } + } + + if (this.locale.region === other.region) { + scores[2] = 100; + } else { + if (!this.locale.region || !other.region) { + // check for default region + thisfull = this.getLikelyLocale(); + otherfull = new Locale(this.info.likelyLocales[other.getSpec()] || other.getSpec()); + if (thisfull.region === otherfull.region) { + scores[2] = 100; + } + } else { + // check for containment + var containers = this.info.territoryContainmentReverse[this.locale.region] || []; + // end at 1 because 0 is "001" which is "the whole world" -- which is not useful + for (i = containers.length-1; i > 0; i--) { + var container = this.info.territoryContainment[containers[i]]; + if (container && container.indexOf(other.region) > -1) { + // same area only accounts for 20% of the region score + scores[2] = ((i+1) * 100 / containers.length) * 0.2; + break; + } + } + } + } + + if (this.locale.variant === other.variant) { + scores[3] = 100; + } + + var total = 0; + + for (i = 0; i < 4; i++) { + total += scores[i] * componentWeights[i]; + } + + return Math.round(total); + }, + + /** + * Return the macrolanguage associated with this locale. If the + * locale's language is not part of a macro-language, then the + * locale's language is returned as-is. + * + * @returns {string} the ISO code for the macrolanguage associated + * with this locale, or language of the locale + */ + getMacroLanguage: function() { + return this.info.macroLanguagesReverse[this.locale.language] || this.locale.language; + }, + + /** + * Return the containment array for the given region code. + * @private + */ + _getRegionContainment: function(region) { + return this.info.territoryContainmentReverse[region] || [] + }, + + /** + * Return the list of regions that this locale is contained within. Regions are + * nested, so locales can be in multiple regions. (eg. US is in Northern North + * America, North America, the Americas, the World.) Most regions are specified + * using UN.49 region numbers, though some, like "EU", are letters. If the + * locale is underspecified, this method will use the most likely locale method + * to get the region first. For example, the locale "ja" (Japanese) is most + * likely "ja-JP" (Japanese for Japan), and the region containment info for Japan + * is returned. + * + * @returns {Array.} an array of region specifiers that this locale is within + */ + getRegionContainment: function() { + var region = this.locale.region || this.getLikelyLocale().region; + return this._getRegionContainment(region); + }, + + /** + * Find the smallest region that contains both the current locale and the other locale. + * If the current or other locales are underspecified, this method will use the most + * likely locale method + * to get their regions first. For example, the locale "ja" (Japanese) is most + * likely "ja-JP" (Japanese for Japan), and the region containment info for Japan + * is checked against the other locale's region containment info. + * + * @param {string|Locale} otherLocale a locale specifier or a Locale instance to + * compare against + * @returns {string} the region specifier of the smallest region containing both the + * current locale and other locale + */ + smallestCommonRegion: function(otherLocale) { + if (typeof(otherLocale) === "undefined") return "001"; + + var thisRegion = this.locale.region || this.getLikelyLocale().region; + var otherLoc = typeof(otherLocale) === "string" ? new Locale(otherLocale) : otherLocale; + var otherRegion = this._getLikelyLocale(otherLoc).region; + + var thisRegions = this._getRegionContainment(thisRegion); + var otherRegions = this._getRegionContainment(otherRegion); + + // region containment arrays are arranged from largest to smallest, so start + // at the end of the array + for (var i = thisRegions.length-1; i > 0; i--) { + if (otherRegions.indexOf(thisRegions[i]) > -1) { + return thisRegions[i]; + } + } + + // this default should never be reached because the world should be common to all regions + return "001"; + } +}; + + +/* + * isAlnum.js - Character type is alphanumeric + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + +/** + * Return whether or not the first character is alphabetic or numeric.

+ * + * @static + * @param {string|IString|number} ch character or code point to examine + * @return {boolean} true if the first character is alphabetic or numeric + */ +var isAlnum = function (ch) { + var num; + switch (typeof(ch)) { + case 'number': + num = ch; + break; + case 'string': + num = IString.toCodePoint(ch, 0); + break; + case 'undefined': + return false; + default: + num = ch._toCodePoint(0); + break; + } + return isAlpha(num) || isDigit(num); +}; + +/** + * @protected + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +isAlnum._init = function (sync, loadParams, onLoad) { + isAlpha._init(sync, loadParams, function () { + isDigit._init(sync, loadParams, onLoad); + }); +}; + + +/* + * ctype.islpha.js - Character type is alphabetic + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data ctype_l + + + + + +/** + * Return whether or not the first character is alphabetic.

+ * + * @static + * @param {string|IString|number} ch character or code point to examine + * @return {boolean} true if the first character is alphabetic. + */ +var isAlpha = function (ch) { + var num; + switch (typeof(ch)) { + case 'number': + num = ch; + break; + case 'string': + num = IString.toCodePoint(ch, 0); + break; + case 'undefined': + return false; + default: + num = ch._toCodePoint(0); + break; + } + return ilib.data.ctype_l ? + (CType._inRange(num, 'Lu', ilib.data.ctype_l) || + CType._inRange(num, 'Ll', ilib.data.ctype_l) || + CType._inRange(num, 'Lt', ilib.data.ctype_l) || + CType._inRange(num, 'Lm', ilib.data.ctype_l) || + CType._inRange(num, 'Lo', ilib.data.ctype_l)) : + ((num >= 0x41 && num <= 0x5A) || (num >= 0x61 && num <= 0x7A)); +}; + +/** + * @protected + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +isAlpha._init = function (sync, loadParams, onLoad) { + CType._load("ctype_l", sync, loadParams, onLoad); +}; + +/* + * isAscii.js - Character type is ASCII + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data ctype + + + + + +/** + * Return whether or not the first character is in the ASCII range.

+ * + * @static + * @param {string|IString|number} ch character or code point to examine + * @return {boolean} true if the first character is in the ASCII range. + */ +var isAscii = function (ch) { + var num; + switch (typeof(ch)) { + case 'number': + num = ch; + break; + case 'string': + num = IString.toCodePoint(ch, 0); + break; + case 'undefined': + return false; + default: + num = ch._toCodePoint(0); + break; + } + return ilib.data.ctype ? CType._inRange(num, 'ascii', ilib.data.ctype) : (num <= 0x7F); +}; + +/** + * @protected + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +isAscii._init = function (sync, loadParams, onLoad) { + CType._init(sync, loadParams, onLoad); +}; + +/* + * isBlank.js - Character type is blank + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data ctype + + + + + +/** + * Return whether or not the first character is a blank character.

+ * + * @static + * ie. a space or a tab. + * @param {string|IString|number} ch character or code point to examine + * @return {boolean} true if the first character is a blank character. + */ +var isBlank = function (ch) { + var num; + switch (typeof(ch)) { + case 'number': + num = ch; + break; + case 'string': + num = IString.toCodePoint(ch, 0); + break; + case 'undefined': + return false; + default: + num = ch._toCodePoint(0); + break; + } + return ilib.data.ctype ? CType._inRange(num, 'blank', ilib.data.ctype) : (ch === ' ' || ch === '\t'); +}; + +/** + * @protected + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +isBlank._init = function (sync, loadParams, onLoad) { + CType._init(sync, loadParams, onLoad); +}; + +/* + * isCntrl.js - Character type is control character + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data ctype_c + + + + + +/** + * Return whether or not the first character is a control character.

+ * + * @static + * @param {string|IString|number} ch character or code point to examine + * @return {boolean} true if the first character is a control character. + */ +var isCntrl = function (ch) { + var num; + switch (typeof(ch)) { + case 'number': + num = ch; + break; + case 'string': + num = IString.toCodePoint(ch, 0); + break; + case 'undefined': + return false; + default: + num = ch._toCodePoint(0); + break; + } + return CType._inRange(num, 'Cc', ilib.data.ctype_c); +}; + +/** + * @protected + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +isCntrl._init = function (sync, loadParams, onLoad) { + CType._load("ctype_c", sync, loadParams, onLoad); +}; + +/* + * isDigit.js - Character type is digit + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data ctype ctype_n + + + + + +/** + * Return whether or not the first character is a digit character in the + * Latin script.

+ * + * @static + * @param {string|IString|number} ch character or code point to examine + * @return {boolean} true if the first character is a digit character in the + * Latin script. + */ +var isDigit = function (ch) { + var num; + switch (typeof(ch)) { + case 'number': + num = ch; + break; + case 'string': + num = IString.toCodePoint(ch, 0); + break; + case 'undefined': + return false; + default: + num = ch._toCodePoint(0); + break; + } + return ilib.data.ctype ? CType._inRange(num, 'Nd', ilib.data.ctype_n) : (num >= 0x30 && num <= 0x39); +}; + +/** + * @protected + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +isDigit._init = function (sync, loadParams, onLoad) { + CType._load("ctype_n", sync, loadParams, onLoad); +}; + + +/* + * isGraph.js - Character type is graph char + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + +/** + * Return whether or not the first character is any printable character + * other than space.

+ * + * @static + * @param {string|IString|number} ch character or code point to examine + * @return {boolean} true if the first character is any printable character + * other than space. + */ +var isGraph = function (ch) { + var num; + switch (typeof(ch)) { + case 'number': + num = ch; + break; + case 'string': + num = IString.toCodePoint(ch, 0); + break; + case 'undefined': + return false; + default: + num = ch._toCodePoint(0); + break; + } + return typeof(ch) !== 'undefined' && ch.length > 0 && !isSpace(num) && !isCntrl(num); +}; + +/** + * @protected + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +isGraph._init = function (sync, loadParams, onLoad) { + isSpace._init(sync, loadParams, function () { + isCntrl._init(sync, loadParams, onLoad); + }); +}; + + +/* + * isIdeo.js - Character type definitions + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data ctype + + + + + +/** + * Return whether or not the first character is an ideographic character.

+ * + * @static + * @param {string|IString|number} ch character or code point to examine + * @return {boolean} true if the first character is an ideographic character. + */ +var isIdeo = function (ch) { + var num; + switch (typeof(ch)) { + case 'number': + num = ch; + break; + case 'string': + num = IString.toCodePoint(ch, 0); + break; + case 'undefined': + return false; + default: + num = ch._toCodePoint(0); + break; + } + + return CType._inRange(num, 'cjk', ilib.data.ctype) || + CType._inRange(num, 'cjkradicals', ilib.data.ctype) || + CType._inRange(num, 'enclosedcjk', ilib.data.ctype) || + CType._inRange(num, 'cjkpunct', ilib.data.ctype) || + CType._inRange(num, 'cjkcompatibility', ilib.data.ctype); +}; + +/** + * @protected + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +isIdeo._init = function (sync, loadParams, onLoad) { + CType._init(sync, loadParams, onLoad); +}; + +/* + * isLower.js - Character type is lower case letter + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data ctype_l + + + + + + +/** + * Return whether or not the first character is lower-case. For alphabetic + * characters in scripts that do not make a distinction between upper- and + * lower-case, this function always returns true.

+ * + * @static + * @param {string|IString|number} ch character or code point to examine + * @return {boolean} true if the first character is lower-case. + */ +var isLower = function (ch) { + var num; + switch (typeof(ch)) { + case 'number': + num = ch; + break; + case 'string': + num = IString.toCodePoint(ch, 0); + break; + case 'undefined': + return false; + default: + num = ch._toCodePoint(0); + break; + } + + return ilib.data.ctype_l ? CType._inRange(num, 'Ll', ilib.data.ctype_l) : (num >= 0x61 && num <= 0x7A); +}; + +/** + * @protected + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +isLower._init = function (sync, loadParams, onLoad) { + CType._load("ctype_l", sync, loadParams, onLoad); +}; + +/* + * isPrint.js - Character type is printable char + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +/** + * Return whether or not the first character is any printable character, + * including space.

+ * + * @static + * @param {string|IString|number} ch character or code point to examine + * @return {boolean} true if the first character is printable. + */ +var isPrint = function (ch) { + return typeof(ch) !== 'undefined' && ch.length > 0 && !isCntrl(ch); +}; + +/** + * @protected + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +isPrint._init = function (sync, loadParams, onLoad) { + isCntrl._init(sync, loadParams, onLoad); +}; + + +/* + * isPunct.js - Character type is punctuation + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data ctype_p + + + + + + +/** + * Return whether or not the first character is punctuation.

+ * + * @static + * @param {string|IString|number} ch character or code point to examine + * @return {boolean} true if the first character is punctuation. + */ +var isPunct = function (ch) { + var num; + switch (typeof(ch)) { + case 'number': + num = ch; + break; + case 'string': + num = IString.toCodePoint(ch, 0); + break; + case 'undefined': + return false; + default: + num = ch._toCodePoint(0); + break; + } + + return ilib.data.ctype_p ? + (CType._inRange(num, 'Pd', ilib.data.ctype_p) || + CType._inRange(num, 'Ps', ilib.data.ctype_p) || + CType._inRange(num, 'Pe', ilib.data.ctype_p) || + CType._inRange(num, 'Pc', ilib.data.ctype_p) || + CType._inRange(num, 'Po', ilib.data.ctype_p) || + CType._inRange(num, 'Pi', ilib.data.ctype_p) || + CType._inRange(num, 'Pf', ilib.data.ctype_p)) : + ((num >= 0x21 && num <= 0x2F) || + (num >= 0x3A && num <= 0x40) || + (num >= 0x5B && num <= 0x60) || + (num >= 0x7B && num <= 0x7E)); +}; + +/** + * @protected + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +isPunct._init = function (sync, loadParams, onLoad) { + CType._load("ctype_p", sync, loadParams, onLoad); +}; + + +/* + * isSpace.js - Character type is space char + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data ctype ctype_z + + + + + + +/** + * Return whether or not the first character is a whitespace character.

+ * + * @static + * @param {string|IString|number} ch character or code point to examine + * @return {boolean} true if the first character is a whitespace character. + */ +var isSpace = function (ch) { + var num; + switch (typeof(ch)) { + case 'number': + num = ch; + break; + case 'string': + num = IString.toCodePoint(ch, 0); + break; + case 'undefined': + return false; + default: + num = ch._toCodePoint(0); + break; + } + + return ilib.data.ctype && ilib.data.ctype_z ? + (CType._inRange(num, 'space', ilib.data.ctype) || + CType._inRange(num, 'Zs', ilib.data.ctype_z) || + CType._inRange(num, 'Zl', ilib.data.ctype_z) || + CType._inRange(num, 'Zp', ilib.data.ctype_z)) : + (ch === ' ' || num === 0xA0 || + (num >= 0x09 && num <= 0x0D)); +}; + +/** + * @protected + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +isSpace._init = function (sync, loadParams, onLoad) { + CType._load("ctype_z", sync, loadParams, function () { + CType._init(sync, loadParams, onLoad); + }); +}; + +/* + * isUpper.js - Character type is upper-case letter + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data ctype_l + + + + + + +/** + * Return whether or not the first character is upper-case. For alphabetic + * characters in scripts that do not make a distinction between upper- and + * lower-case, this function always returns true.

+ * + * @static + * @param {string|IString|number} ch character or code point to examine + * @return {boolean} true if the first character is upper-case. + */ +var isUpper = function (ch) { + var num; + switch (typeof(ch)) { + case 'number': + num = ch; + break; + case 'string': + num = IString.toCodePoint(ch, 0); + break; + case 'undefined': + return false; + default: + num = ch._toCodePoint(0); + break; + } + + return ilib.data.ctype_l ? CType._inRange(num, 'Lu', ilib.data.ctype_l) : (num >= 0x41 && num <= 0x5A); +}; + +/** + * @protected + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +isUpper._init = function (sync, loadParams, onLoad) { + CType._load("ctype_l", sync, loadParams, onLoad); +}; + +/* + * isXdigit.js - Character type is hex digit + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data ctype + + + + + + +/** + * Return whether or not the first character is a hexadecimal digit written + * in the Latin script. (0-9 or A-F)

+ * + * @static + * @param {string|IString|number} ch character or code point to examine + * @return {boolean} true if the first character is a hexadecimal digit written + * in the Latin script. + */ +var isXdigit = function (ch) { + var num; + switch (typeof(ch)) { + case 'number': + num = ch; + break; + case 'string': + num = IString.toCodePoint(ch, 0); + break; + case 'undefined': + return false; + default: + num = ch._toCodePoint(0); + break; + } + + return ilib.data.ctype ? CType._inRange(num, 'xdigit', ilib.data.ctype) : + ((num >= 0x30 && num <= 0x39) || (num >= 0x41 && num <= 0x46) || (num >= 0x61 && num <= 0x66)); +}; + +/** + * @protected + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +isXdigit._init = function (sync, loadParams, onLoad) { + CType._init(sync, loadParams, onLoad); +}; + +/* + * isScript.js - Character type is script + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data scriptToRange + + + + + + +/** + * Return whether or not the first character in the given string is + * in the given script. The script is given as the 4-letter ISO + * 15924 script code.

+ * + * @static + * @param {string|IString|number} ch character or code point to examine + * @param {string} script the 4-letter ISO 15924 to query against + * @return {boolean} true if the first character is in the given script, and + * false otherwise + */ +var isScript = function (ch, script) { + var num; + switch (typeof(ch)) { + case 'number': + num = ch; + break; + case 'string': + num = IString.toCodePoint(ch, 0); + break; + case 'undefined': + return false; + default: + num = ch._toCodePoint(0); + break; + } + + return CType._inRange(num, script, ilib.data.scriptToRange); +}; + +/** + * @protected + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +isScript._init = function (sync, loadParams, onLoad) { + CType._load("scriptToRange", sync, loadParams, onLoad); +}; + +/* + * CType.js - Character type definitions + * + * Copyright © 2012-2015, 2018, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data ctype + + + + + + +/** + * Provides a set of static routines that return information about characters. + * These routines emulate the C-library ctype functions. The characters must be + * encoded in utf-16, as no other charsets are currently supported. Only the first + * character of the given string is tested. + * @namespace + */ +var CType = {}; + + +/** + * Actual implementation for withinRange. Searches the given object for ranges. + * The range names are taken from the Unicode range names in + * http://www.unicode.org/Public/UNIDATA/extracted/DerivedGeneralCategory.txt + * + *

    + *
  • Cn - Unassigned + *
  • Lu - Uppercase_Letter + *
  • Ll - Lowercase_Letter + *
  • Lt - Titlecase_Letter + *
  • Lm - Modifier_Letter + *
  • Lo - Other_Letter + *
  • Mn - Nonspacing_Mark + *
  • Me - Enclosing_Mark + *
  • Mc - Spacing_Mark + *
  • Nd - Decimal_Number + *
  • Nl - Letter_Number + *
  • No - Other_Number + *
  • Zs - Space_Separator + *
  • Zl - Line_Separator + *
  • Zp - Paragraph_Separator + *
  • Cc - Control + *
  • Cf - Format + *
  • Co - Private_Use + *
  • Cs - Surrogate + *
  • Pd - Dash_Punctuation + *
  • Ps - Open_Punctuation + *
  • Pe - Close_Punctuation + *
  • Pc - Connector_Punctuation + *
  • Po - Other_Punctuation + *
  • Sm - Math_Symbol + *
  • Sc - Currency_Symbol + *
  • Sk - Modifier_Symbol + *
  • So - Other_Symbol + *
  • Pi - Initial_Punctuation + *
  • Pf - Final_Punctuation + *
+ * + * @private + * @param {number} num code point of the character to examine + * @param {string} rangeName the name of the range to check + * @param {Object} obj object containing the character range data + * @return {boolean} true if the first character is within the named + * range + */ +CType._inRange = function(num, rangeName, obj) { + var range; + if (num < 0 || !rangeName || !obj) { + return false; + } + + range = obj[rangeName]; + if (!range) { + return false; + } + + var compare = function(singlerange, target) { + if (singlerange.length === 1) { + return singlerange[0] - target; + } else { + return target < singlerange[0] ? singlerange[0] - target : + (target > singlerange[1] ? singlerange[1] - target : 0); + } + }; + var result = SearchUtils.bsearch(num, range, compare); + return result < range.length && compare(range[result], num) === 0; +}; + +/** + * Return whether or not the first character is within the named range + * of Unicode characters. The valid list of range names are taken from + * the Unicode 6.0 spec. Characters in all ranges of Unicode are supported, + * including those supported in Javascript via UTF-16. Currently, this method + * supports the following range names: + * + *
    + *
  • ascii - basic ASCII + *
  • latin - Latin, Latin Extended Additional, Latin-1 supplement, Latin Extended-C, Latin Extended-D, Latin Extended-E + *
  • armenian + *
  • greek - Greek, Greek Extended + *
  • cyrillic - Cyrillic, Cyrillic Extended-A, Cyrillic Extended-B, Cyrillic Extended-C, Cyrillic Supplement + *
  • georgian - Georgian, Georgian Supplement + *
  • glagolitic - Glagolitic, Glagolitic Supplement + *
  • gothic + *
  • ogham + *
  • oldpersian + *
  • runic + *
  • ipa - IPA, Phonetic Extensions, Phonetic Extensions Supplement + *
  • phonetic + *
  • modifiertone - Modifier Tone Letters + *
  • spacing + *
  • diacritics + *
  • halfmarks - Combining Half Marks + *
  • small - Small Form Variants + *
  • bamum - Bamum, Bamum Supplement + *
  • ethiopic - Ethiopic, Ethiopic Extended, Ethiopic Extended-A + *
  • nko + *
  • osmanya + *
  • tifinagh + *
  • val + *
  • arabic - Arabic, Arabic Supplement, Arabic Presentation Forms-A, + * Arabic Presentation Forms-B, Arabic Mathematical Alphabetic Symbols + *
  • carlan + *
  • hebrew + *
  • mandaic + *
  • samaritan + *
  • syriac + *
  • mongolian + *
  • phagspa + *
  • tibetan + *
  • bengali + *
  • devanagari - Devanagari, Devanagari Extended + *
  • gujarati + *
  • gurmukhi + *
  • kannada + *
  • lepcha + *
  • limbu + *
  • malayalam + *
  • meetaimayek + *
  • olchiki + *
  • oriya + *
  • saurashtra + *
  • sinhala + *
  • sylotinagri - Syloti Nagri + *
  • tangut + *
  • tamil + *
  • telugu + *
  • thaana + *
  • vedic + *
  • batak + *
  • balinese + *
  • buginese + *
  • cham + *
  • javanese + *
  • kayahli + *
  • khmer + *
  • lao + *
  • myanmar - Myanmar, Myanmar Extended-A, Myanmar Extended-B + *
  • newtailue + *
  • rejang + *
  • sundanese - Sundanese, Sundanese Supplement + *
  • taile + *
  • taitham + *
  • taiviet + *
  • thai + *
  • buhld + *
  • hanunoo + *
  • tagalog + *
  • tagbanwa + *
  • bopomofo - Bopomofo, Bopomofo Extended + *
  • cjk - the CJK unified ideographs (Han), CJK Unified Ideographs + * Extension A, CJK Unified Ideographs Extension B, CJK Unified Ideographs + * Extension C, CJK Unified Ideographs Extension D, Ideographic Description + * Characters (=isIdeo()) + *
  • cjkcompatibility - CJK Compatibility, CJK Compatibility + * Ideographs, CJK Compatibility Forms, CJK Compatibility Ideographs Supplement + *
  • cjkradicals - the CJK radicals, KangXi radicals + *
  • hangul - Hangul Jamo, Hangul Syllables, Hangul Jamo Extended-A, + * Hangul Jamo Extended-B, Hangul Compatibility Jamo + *
  • cjkpunct - CJK symbols and punctuation + *
  • cjkstrokes - CJK strokes + *
  • hiragana + *
  • katakana - Katakana, Katakana Phonetic Extensions, Kana Supplement + *
  • kanbun + *
  • lisu + *
  • yi - Yi Syllables, Yi Radicals + *
  • cherokee + *
  • canadian - Unified Canadian Aboriginal Syllabics, Unified Canadian + * Aboriginal Syllabics Extended + *
  • presentation - Alphabetic presentation forms + *
  • vertical - Vertical Forms + *
  • width - Halfwidth and Fullwidth Forms + *
  • punctuation - General punctuation, Supplemental Punctuation + *
  • box - Box Drawing + *
  • block - Block Elements + *
  • letterlike - Letterlike symbols + *
  • mathematical - Mathematical alphanumeric symbols, Miscellaneous + * Mathematical Symbols-A, Miscellaneous Mathematical Symbols-B + *
  • enclosedalpha - Enclosed alphanumerics, Enclosed Alphanumeric Supplement + *
  • enclosedcjk - Enclosed CJK letters and months, Enclosed Ideographic Supplement + *
  • cjkcompatibility - CJK compatibility + *
  • apl - APL symbols + *
  • controlpictures - Control pictures + *
  • misc - Miscellaneous technical + *
  • ocr - Optical character recognition (OCR) + *
  • combining - Combining Diacritical Marks, Combining Diacritical Marks + * for Symbols, Combining Diacritical Marks Supplement, Combining Diacritical Marks Extended + *
  • digits - ASCII digits (=isDigit()) + *
  • indicnumber - Common Indic Number Forms + *
  • numbers - Number forms + *
  • supersub - Superscripts and Subscripts + *
  • arrows - Arrows, Miscellaneous Symbols and Arrows, Supplemental Arrows-A, + * Supplemental Arrows-B, Supplemental Arrows-C + *
  • operators - Mathematical operators, supplemental + * mathematical operators + *
  • geometric - Geometric shapes, Geometric shapes extended + *
  • ancient - Ancient symbols + *
  • braille - Braille patterns + *
  • currency - Currency symbols + *
  • dingbats + *
  • gamesymbols + *
  • yijing - Yijing Hexagram Symbols + *
  • specials + *
  • variations - Variation Selectors, Variation Selectors Supplement + *
  • privateuse - Private Use Area, Supplementary Private Use Area-A, + * Supplementary Private Use Area-B + *
  • supplementarya - Supplementary private use area-A + *
  • supplementaryb - Supplementary private use area-B + *
  • highsurrogates - High Surrogates, High Private Use Surrogates + *
  • lowsurrogates + *
  • reserved + *
  • noncharacters + *
  • copticnumber - coptic epact numbers + *
  • oldpermic - old permic + *
  • albanian - albanian + *
  • lineara - linear a + *
  • meroitic - meroitic cursive + *
  • oldnortharabian - old north arabian + *
  • oldhungarian - Supplementary private use area-A + *
  • sorasompeng - sora sompeng + *
  • warangciti - warang citi + *
  • paucinhau - pau cin hau + *
  • bassavah - bassa vah + *
  • pahawhhmong - pahawh hmong + *
  • shorthandformat - shorthand format controls + *
  • suttonsignwriting - sutton signwriting + *
  • pictographs - miscellaneous symbols and pictographs, supplemental symbols and pictographs + *
  • ornamentaldingbats - ornamental dingbats + *

+ * + * + * @protected + * @param {string|IString|number} ch character or code point to examine + * @param {string} rangeName the name of the range to check + * @return {boolean} true if the first character is within the named + * range + */ +CType.withinRange = function(ch, rangeName) { + if (!rangeName) { + return false; + } + var num; + switch (typeof(ch)) { + case 'number': + num = ch; + break; + case 'string': + num = IString.toCodePoint(ch, 0); + break; + case 'undefined': + return false; + default: + num = ch._toCodePoint(0); + break; + } + + return CType._inRange(num, rangeName.toLowerCase(), ilib.data.ctype); +}; + +/** + * @private + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +CType._init = function(sync, loadParams, onLoad) { + CType._load("ctype", sync, loadParams, onLoad); +}; + +/** + * @private + * @param {string} name + * @param {boolean} sync + * @param {Object|undefined} loadParams + * @param {function(*)|undefined} onLoad + */ +CType._load = function (name, sync, loadParams, onLoad) { + if (!ilib.data[name]) { + var loadName = name ? name + ".json" : "CType.json"; + Utils.loadData({ + object: "CType", + name: loadName, + locale: "-", + nonlocale: true, + sync: sync, + loadParams: loadParams, + callback: ilib.bind(this, function(ct) { + ilib.data[name] = ct; + if (onLoad && typeof(onLoad) === 'function') { + onLoad(ilib.data[name]); + } + }) + }); + } else { + if (onLoad && typeof(onLoad) === 'function') { + onLoad(ilib.data[name]); + } + } +}; + + +/* + * Astro.js - Static functions to support astronomical calculations + * + * Copyright © 2014-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data astro + +/* + * These routines were derived from a public domain set of JavaScript + * functions for positional astronomy by John Walker of Fourmilab, + * September 1999. + */ + + + + + + + + + +var Astro = {}; + +/** + * Load in all the data needed for astrological calculations. + * + * @private + * @param {boolean} sync + * @param {*} loadParams + * @param {function(*)|undefined} callback + */ +Astro.initAstro = function(sync, loadParams, callback) { + if (!ilib.data.astro) { + Utils.loadData({ + object: "Astro", + name: "astro.json", // countries in their own language + locale: "-", // only need to load the root file + nonLocale: true, + sync: sync, + loadParams: loadParams, + callback: ilib.bind(this, function(astroData) { + /** + * @type {{ + * _EquinoxpTerms:Array., + * _JDE0tab1000:Array., + * _JDE0tab2000:Array., + * _deltaTtab:Array., + * _oterms:Array., + * _nutArgMult:Array., + * _nutArgCoeff:Array., + * _nutCoeffA:Array., + * _nutCoeffB:Array., + * _coeff19th:Array., + * _coeff18th:Array., + * _solarLongCoeff:Array., + * _solarLongMultipliers:Array., + * _solarLongAddends:Array., + * _meanMoonCoeff:Array., + * _elongationCoeff:Array., + * _solarAnomalyCoeff:Array., + * _lunarAnomalyCoeff:Array., + * _moonFromNodeCoeff:Array., + * _eCoeff:Array., + * _lunarElongationLongCoeff:Array., + * _solarAnomalyLongCoeff:Array., + * _lunarAnomalyLongCoeff:Array., + * _moonFromNodeLongCoeff:Array., + * _sineCoeff:Array., + * _nmApproxCoeff:Array., + * _nmCapECoeff:Array., + * _nmSolarAnomalyCoeff:Array., + * _nmLunarAnomalyCoeff:Array., + * _nmMoonArgumentCoeff:Array., + * _nmCapOmegaCoeff:Array., + * _nmEFactor:Array., + * _nmSolarCoeff:Array., + * _nmLunarCoeff:Array., + * _nmMoonCoeff:Array., + * _nmSineCoeff:Array., + * _nmAddConst:Array., + * _nmAddCoeff:Array., + * _nmAddFactor:Array., + * _nmExtra:Array. + * }} + */ + ilib.data.astro = astroData; + if (callback && typeof(callback) === 'function') { + callback(astroData); + } + }) + }); + } else { + if (callback && typeof(callback) === 'function') { + callback(ilib.data.astro); + } + } +}; + +/** + * Convert degrees to radians. + * + * @static + * @protected + * @param {number} d angle in degrees + * @return {number} angle in radians + */ +Astro._dtr = function(d) { + return (d * Math.PI) / 180.0; +}; + +/** + * Convert radians to degrees. + * + * @static + * @protected + * @param {number} r angle in radians + * @return {number} angle in degrees + */ +Astro._rtd = function(r) { + return (r * 180.0) / Math.PI; +}; + +/** + * Return the cosine of an angle given in degrees. + * @static + * @protected + * @param {number} d angle in degrees + * @return {number} cosine of the angle. + */ +Astro._dcos = function(d) { + return Math.cos(Astro._dtr(d)); +}; + +/** + * Return the sine of an angle given in degrees. + * @static + * @protected + * @param {number} d angle in degrees + * @return {number} sine of the angle. + */ +Astro._dsin = function(d) { + return Math.sin(Astro._dtr(d)); +}; + +/** + * Return the tan of an angle given in degrees. + * @static + * @protected + * @param {number} d angle in degrees + * @return {number} tan of the angle. + */ +Astro._dtan = function(d) { + return Math.tan(Astro._dtr(d)); +}; + +/** + * Range reduce angle in degrees. + * + * @static + * @param {number} a angle to reduce + * @return {number} the reduced angle + */ +Astro._fixangle = function(a) { + return a - 360.0 * (Math.floor(a / 360.0)); +}; + +/** + * Range reduce angle in radians. + * + * @static + * @protected + * @param {number} a angle to reduce + * @return {number} the reduced angle + */ +Astro._fixangr = function(a) { + return a - (2 * Math.PI) * (Math.floor(a / (2 * Math.PI))); +}; + +/** + * Determine the Julian Ephemeris Day of an equinox or solstice. The "which" + * argument selects the item to be computed: + * + *

    + *
  • 0 March equinox + *
  • 1 June solstice + *
  • 2 September equinox + *
  • 3 December solstice + *
+ * + * @static + * @protected + * @param {number} year Gregorian year to calculate for + * @param {number} which Which equinox or solstice to calculate + */ +Astro._equinox = function(year, which) { + var deltaL, i, j, JDE0, JDE, JDE0tab, S, T, W, Y; + + /* Initialize terms for mean equinox and solstices. We + have two sets: one for years prior to 1000 and a second + for subsequent years. */ + + if (year < 1000) { + JDE0tab = ilib.data.astro._JDE0tab1000; + Y = year / 1000; + } else { + JDE0tab = ilib.data.astro._JDE0tab2000; + Y = (year - 2000) / 1000; + } + + JDE0 = JDE0tab[which][0] + (JDE0tab[which][1] * Y) + + (JDE0tab[which][2] * Y * Y) + (JDE0tab[which][3] * Y * Y * Y) + + (JDE0tab[which][4] * Y * Y * Y * Y); + + //document.debug.log.value += "JDE0 = " + JDE0 + "\n"; + + T = (JDE0 - 2451545.0) / 36525; + //document.debug.log.value += "T = " + T + "\n"; + W = (35999.373 * T) - 2.47; + //document.debug.log.value += "W = " + W + "\n"; + deltaL = 1 + (0.0334 * Astro._dcos(W)) + (0.0007 * Astro._dcos(2 * W)); + //document.debug.log.value += "deltaL = " + deltaL + "\n"; + + // Sum the periodic terms for time T + + S = 0; + j = 0; + for (i = 0; i < 24; i++) { + S += ilib.data.astro._EquinoxpTerms[j] + * Astro._dcos(ilib.data.astro._EquinoxpTerms[j + 1] + (ilib.data.astro._EquinoxpTerms[j + 2] * T)); + j += 3; + } + + //document.debug.log.value += "S = " + S + "\n"; + //document.debug.log.value += "Corr = " + ((S * 0.00001) / deltaL) + "\n"; + + JDE = JDE0 + ((S * 0.00001) / deltaL); + + return JDE; +}; + +/* + * The table of observed Delta T values at the beginning of + * years from 1620 through 2014 as found in astro.json is taken from + * http://www.staff.science.uu.nl/~gent0113/deltat/deltat.htm + * and + * ftp://maia.usno.navy.mil/ser7/deltat.data + */ + +/** + * Determine the difference, in seconds, between dynamical time and universal time. + * + * @static + * @protected + * @param {number} year to calculate the difference for + * @return {number} difference in seconds between dynamical time and universal time + */ +Astro._deltat = function (year) { + var dt, f, i, t; + + if ((year >= 1620) && (year <= 2014)) { + i = Math.floor(year - 1620); + f = (year - 1620) - i; /* Fractional part of year */ + dt = ilib.data.astro._deltaTtab[i] + ((ilib.data.astro._deltaTtab[i + 1] - ilib.data.astro._deltaTtab[i]) * f); + } else { + t = (year - 2000) / 100; + if (year < 948) { + dt = 2177 + (497 * t) + (44.1 * t * t); + } else { + dt = 102 + (102 * t) + (25.3 * t * t); + if ((year > 2000) && (year < 2100)) { + dt += 0.37 * (year - 2100); + } + } + } + return dt; +}; + +/** + * Calculate the obliquity of the ecliptic for a given + * Julian date. This uses Laskar's tenth-degree + * polynomial fit (J. Laskar, Astronomy and + * Astrophysics, Vol. 157, page 68 [1986]) which is + * accurate to within 0.01 arc second between AD 1000 + * and AD 3000, and within a few seconds of arc for + * +/-10000 years around AD 2000. If we're outside the + * range in which this fit is valid (deep time) we + * simply return the J2000 value of the obliquity, which + * happens to be almost precisely the mean. + * + * @static + * @protected + * @param {number} jd Julian Day to calculate the obliquity for + * @return {number} the obliquity + */ +Astro._obliqeq = function (jd) { + var eps, u, v, i; + + v = u = (jd - 2451545.0) / 3652500.0; + + eps = 23 + (26 / 60.0) + (21.448 / 3600.0); + + if (Math.abs(u) < 1.0) { + for (i = 0; i < 10; i++) { + eps += (ilib.data.astro._oterms[i] / 3600.0) * v; + v *= u; + } + } + return eps; +}; + +/** + * Return the position of the sun. We return + * intermediate values because they are useful in a + * variety of other contexts. + * @static + * @protected + * @param {number} jd find the position of sun on this Julian Day + * @return {Object} the position of the sun and many intermediate + * values + */ +Astro._sunpos = function(jd) { + var ret = {}, + T, T2, T3, Omega, epsilon, epsilon0; + + T = (jd - 2451545.0) / 36525.0; + //document.debug.log.value += "Sunpos. T = " + T + "\n"; + T2 = T * T; + T3 = T * T2; + ret.meanLongitude = Astro._fixangle(280.46646 + 36000.76983 * T + 0.0003032 * T2); + //document.debug.log.value += "ret.meanLongitude = " + ret.meanLongitude + "\n"; + ret.meanAnomaly = Astro._fixangle(357.52911 + (35999.05029 * T) - 0.0001537 * T2 - 0.00000048 * T3); + //document.debug.log.value += "ret.meanAnomaly = " + ret.meanAnomaly + "\n"; + ret.eccentricity = 0.016708634 - 0.000042037 * T - 0.0000001267 * T2; + //document.debug.log.value += "e = " + e + "\n"; + ret.equationOfCenter = ((1.914602 - 0.004817 * T - 0.000014 * T2) * Astro._dsin(ret.meanAnomaly)) + + ((0.019993 - 0.000101 * T) * Astro._dsin(2 * ret.meanAnomaly)) + + (0.000289 * Astro._dsin(3 * ret.meanAnomaly)); + //document.debug.log.value += "ret.equationOfCenter = " + ret.equationOfCenter + "\n"; + ret.sunLongitude = ret.meanLongitude + ret.equationOfCenter; + //document.debug.log.value += "ret.sunLongitude = " + ret.sunLongitude + "\n"; + //ret.sunAnomaly = ret.meanAnomaly + ret.equationOfCenter; + //document.debug.log.value += "ret.sunAnomaly = " + ret.sunAnomaly + "\n"; + // ret.sunRadius = (1.000001018 * (1 - (ret.eccentricity * ret.eccentricity))) / (1 + (ret.eccentricity * Astro._dcos(ret.sunAnomaly))); + //document.debug.log.value += "ret.sunRadius = " + ret.sunRadius + "\n"; + Omega = 125.04 - (1934.136 * T); + //document.debug.log.value += "Omega = " + Omega + "\n"; + ret.apparentLong = ret.sunLongitude + (-0.00569) + (-0.00478 * Astro._dsin(Omega)); + //document.debug.log.value += "ret.apparentLong = " + ret.apparentLong + "\n"; + epsilon0 = Astro._obliqeq(jd); + //document.debug.log.value += "epsilon0 = " + epsilon0 + "\n"; + epsilon = epsilon0 + (0.00256 * Astro._dcos(Omega)); + //document.debug.log.value += "epsilon = " + epsilon + "\n"; + //ret.rightAscension = Astro._fixangle(Astro._rtd(Math.atan2(Astro._dcos(epsilon0) * Astro._dsin(ret.sunLongitude), Astro._dcos(ret.sunLongitude)))); + //document.debug.log.value += "ret.rightAscension = " + ret.rightAscension + "\n"; + // ret.declination = Astro._rtd(Math.asin(Astro._dsin(epsilon0) * Astro._dsin(ret.sunLongitude))); + ////document.debug.log.value += "ret.declination = " + ret.declination + "\n"; + ret.inclination = Astro._fixangle(23.4392911 - 0.013004167 * T - 0.00000016389 * T2 + 0.0000005036 * T3); + ret.apparentRightAscension = Astro._fixangle(Astro._rtd(Math.atan2(Astro._dcos(epsilon) * Astro._dsin(ret.apparentLong), Astro._dcos(ret.apparentLong)))); + //document.debug.log.value += "ret.apparentRightAscension = " + ret.apparentRightAscension + "\n"; + //ret.apparentDeclination = Astro._rtd(Math.asin(Astro._dsin(epsilon) * Astro._dsin(ret.apparentLong))); + //document.debug.log.value += "ret.apparentDecliation = " + ret.apparentDecliation + "\n"; + + // Angular quantities are expressed in decimal degrees + return ret; +}; + +/** + * Calculate the nutation in longitude, deltaPsi, and obliquity, + * deltaEpsilon for a given Julian date jd. Results are returned as an object + * giving deltaPsi and deltaEpsilon in degrees. + * + * @static + * @protected + * @param {number} jd calculate the nutation of this Julian Day + * @return {Object} the deltaPsi and deltaEpsilon of the nutation + */ +Astro._nutation = function(jd) { + var i, j, + t = (jd - 2451545.0) / 36525.0, + t2, t3, to10, + ta = [], + dp = 0, + de = 0, + ang, + ret = {}; + + t3 = t * (t2 = t * t); + + /* + * Calculate angles. The correspondence between the elements of our array + * and the terms cited in Meeus are: + * + * ta[0] = D ta[0] = M ta[2] = M' ta[3] = F ta[4] = \Omega + * + */ + + ta[0] = Astro._dtr(297.850363 + 445267.11148 * t - 0.0019142 * t2 + t3 / 189474.0); + ta[1] = Astro._dtr(357.52772 + 35999.05034 * t - 0.0001603 * t2 - t3 / 300000.0); + ta[2] = Astro._dtr(134.96298 + 477198.867398 * t + 0.0086972 * t2 + t3 / 56250.0); + ta[3] = Astro._dtr(93.27191 + 483202.017538 * t - 0.0036825 * t2 + t3 / 327270); + ta[4] = Astro._dtr(125.04452 - 1934.136261 * t + 0.0020708 * t2 + t3 / 450000.0); + + /* + * Range reduce the angles in case the sine and cosine functions don't do it + * as accurately or quickly. + */ + + for (i = 0; i < 5; i++) { + ta[i] = Astro._fixangr(ta[i]); + } + + to10 = t / 10.0; + for (i = 0; i < 63; i++) { + ang = 0; + for (j = 0; j < 5; j++) { + if (ilib.data.astro._nutArgMult[(i * 5) + j] != 0) { + ang += ilib.data.astro._nutArgMult[(i * 5) + j] * ta[j]; + } + } + dp += (ilib.data.astro._nutArgCoeff[(i * 4) + 0] + ilib.data.astro._nutArgCoeff[(i * 4) + 1] * to10) * Math.sin(ang); + de += (ilib.data.astro._nutArgCoeff[(i * 4) + 2] + ilib.data.astro._nutArgCoeff[(i * 4) + 3] * to10) * Math.cos(ang); + } + + /* + * Return the result, converting from ten thousandths of arc seconds to + * radians in the process. + */ + + ret.deltaPsi = dp / (3600.0 * 10000.0); + ret.deltaEpsilon = de / (3600.0 * 10000.0); + + return ret; +}; + +/** + * Returns the equation of time as a fraction of a day. + * + * @static + * @protected + * @param {number} jd the Julian Day of the day to calculate for + * @return {number} the equation of time for the given day + */ +Astro._equationOfTime = function(jd) { + var alpha, deltaPsi, E, epsilon, L0, tau, pos; + + // 2451545.0 is the Julian day of J2000 epoch + // 365250.0 is the number of days in a Julian millenium + tau = (jd - 2451545.0) / 365250.0; + //console.log("equationOfTime. tau = " + tau); + L0 = 280.4664567 + (360007.6982779 * tau) + (0.03032028 * tau * tau) + + ((tau * tau * tau) / 49931) + + (-((tau * tau * tau * tau) / 15300)) + + (-((tau * tau * tau * tau * tau) / 2000000)); + //console.log("L0 = " + L0); + L0 = Astro._fixangle(L0); + //console.log("L0 = " + L0); + pos = Astro._sunpos(jd); + alpha = pos.apparentRightAscension; + //console.log("alpha = " + alpha); + var nut = Astro._nutation(jd); + deltaPsi = nut.deltaPsi; + //console.log("deltaPsi = " + deltaPsi); + epsilon = Astro._obliqeq(jd) + nut.deltaEpsilon; + //console.log("epsilon = " + epsilon); + //console.log("L0 - 0.0057183 = " + (L0 - 0.0057183)); + //console.log("L0 - 0.0057183 - alpha = " + (L0 - 0.0057183 - alpha)); + //console.log("deltaPsi * cos(epsilon) = " + deltaPsi * Astro._dcos(epsilon)); + + E = L0 - 0.0057183 - alpha + deltaPsi * Astro._dcos(epsilon); + // if alpha and L0 are in different quadrants, then renormalize + // so that the difference between them is in the right range + if (E > 180) { + E -= 360; + } + //console.log("E = " + E); + // E = E - 20.0 * (Math.floor(E / 20.0)); + E = E * 4; + //console.log("Efixed = " + E); + E = E / (24 * 60); + //console.log("Eday = " + E); + + return E; +}; + +/** + * @private + * @static + */ +Astro._poly = function(x, coefficients) { + var result = coefficients[0]; + var xpow = x; + for (var i = 1; i < coefficients.length; i++) { + result += coefficients[i] * xpow; + xpow *= x; + } + return result; +}; + +/** + * Calculate the UTC RD from the local RD given "zone" number of minutes + * worth of offset. + * + * @static + * @protected + * @param {number} local RD of the locale time, given in any calendar + * @param {number} zone number of minutes of offset from UTC for the time zone + * @return {number} the UTC equivalent of the local RD + */ +Astro._universalFromLocal = function(local, zone) { + return local - zone / 1440; +}; + +/** + * Calculate the local RD from the UTC RD given "zone" number of minutes + * worth of offset. + * + * @static + * @protected + * @param {number} local RD of the locale time, given in any calendar + * @param {number} zone number of minutes of offset from UTC for the time zone + * @return {number} the UTC equivalent of the local RD + */ +Astro._localFromUniversal = function(local, zone) { + return local + zone / 1440; +}; + +/** + * @private + * @static + * @param {number} c julian centuries of the date to calculate + * @return {number} the aberration + */ +Astro._aberration = function(c) { + return 9.74e-05 * Astro._dcos(177.63 + 35999.01847999999 * c) - 0.005575; +}; + +/** + * ilib.data.astro._nutCoeffA = [124.90, -1934.134, 0.002063]; + * ilib.data.astro._nutCoeffB q= [201.11, 72001.5377, 0.00057]; + * @private + * +*/ + +/** + * @private + * @static + * @param {number} c julian centuries of the date to calculate + * @return {number} the nutation for the given julian century in radians + */ +Astro._nutation2 = function(c) { + var a = Astro._poly(c, ilib.data.astro._nutCoeffA); + var b = Astro._poly(c, ilib.data.astro._nutCoeffB); + // return -0.0000834 * Astro._dsin(a) - 0.0000064 * Astro._dsin(b); + return -0.004778 * Astro._dsin(a) - 0.0003667 * Astro._dsin(b); +}; + +/** + * @static + * @private + */ +Astro._ephemerisCorrection = function(jd) { + var year = GregorianDate._calcYear(jd - 1721424.5); + + if (1988 <= year && year <= 2019) { + return (year - 1933) / 86400; + } + + if (1800 <= year && year <= 1987) { + var jul1 = new GregRataDie({ + year: year, + month: 7, + day: 1, + hour: 0, + minute: 0, + second: 0 + }); + // 693596 is the rd of Jan 1, 1900 + var theta = (jul1.getRataDie() - 693596) / 36525; + return Astro._poly(theta, (1900 <= year) ? ilib.data.astro._coeff19th : ilib.data.astro._coeff18th); + } + + if (1620 <= year && year <= 1799) { + year -= 1600; + return (196.58333 - 4.0675 * year + 0.0219167 * year * year) / 86400; + } + + // 660724 is the rd of Jan 1, 1810 + var jan1 = new GregRataDie({ + year: year, + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0 + }); + // var x = 0.5 + (jan1.getRataDie() - 660724); + var x = 0.5 + (jan1.getRataDie() - 660724); + + return ((x * x / 41048480) - 15) / 86400; +}; + +/** + * @static + * @private + */ +Astro._ephemerisFromUniversal = function(jd) { + return jd + Astro._ephemerisCorrection(jd); +}; + +/** + * @static + * @private + */ +Astro._universalFromEphemeris = function(jd) { + return jd - Astro._ephemerisCorrection(jd); +}; + +/** + * @static + * @private + */ +Astro._julianCenturies = function(jd) { + // 2451545.0 is the Julian day of J2000 epoch + // 730119.5 is the Gregorian RD of J2000 epoch + // 36525.0 is the number of days in a Julian century + return (Astro._ephemerisFromUniversal(jd) - 2451545.0) / 36525.0; +}; + +/** + * Calculate the solar longitude + * + * @static + * @protected + * @param {number} jd julian day of the date to calculate the longitude for + * @return {number} the solar longitude in degrees + */ +Astro._solarLongitude = function(jd) { + var c = Astro._julianCenturies(jd), + longitude = 0, + len = ilib.data.astro._solarLongCoeff.length; + + for (var i = 0; i < len; i++) { + longitude += ilib.data.astro._solarLongCoeff[i] * + Astro._dsin(ilib.data.astro._solarLongAddends[i] + ilib.data.astro._solarLongMultipliers[i] * c); + } + longitude *= 5.729577951308232e-06; + longitude += 282.77718340000001 + 36000.769537439999 * c; + longitude += Astro._aberration(c) + Astro._nutation2(c); + return Astro._fixangle(longitude); +}; + +/** + * @static + * @protected + * @param {number} jd + * @return {number} + */ +Astro._lunarLongitude = function (jd) { + var c = Astro._julianCenturies(jd), + meanMoon = Astro._fixangle(Astro._poly(c, ilib.data.astro._meanMoonCoeff)), + elongation = Astro._fixangle(Astro._poly(c, ilib.data.astro._elongationCoeff)), + solarAnomaly = Astro._fixangle(Astro._poly(c, ilib.data.astro._solarAnomalyCoeff)), + lunarAnomaly = Astro._fixangle(Astro._poly(c, ilib.data.astro._lunarAnomalyCoeff)), + moonNode = Astro._fixangle(Astro._poly(c, ilib.data.astro._moonFromNodeCoeff)), + e = Astro._poly(c, ilib.data.astro._eCoeff); + + var sum = 0; + for (var i = 0; i < ilib.data.astro._lunarElongationLongCoeff.length; i++) { + var x = ilib.data.astro._solarAnomalyLongCoeff[i]; + + sum += ilib.data.astro._sineCoeff[i] * Math.pow(e, Math.abs(x)) * + Astro._dsin(ilib.data.astro._lunarElongationLongCoeff[i] * elongation + x * solarAnomaly + + ilib.data.astro._lunarAnomalyLongCoeff[i] * lunarAnomaly + + ilib.data.astro._moonFromNodeLongCoeff[i] * moonNode); + } + var longitude = sum / 1000000; + var venus = 3958.0 / 1000000 * Astro._dsin(119.75 + c * 131.84899999999999); + var jupiter = 318.0 / 1000000 * Astro._dsin(53.090000000000003 + c * 479264.28999999998); + var flatEarth = 1962.0 / 1000000 * Astro._dsin(meanMoon - moonNode); + + return Astro._fixangle(meanMoon + longitude + venus + jupiter + flatEarth + Astro._nutation2(c)); +}; + +/** + * @static + * @protected + * @param {number} n + * @return {number} julian day of the n'th new moon + */ +Astro._newMoonTime = function(n) { + var k = n - 24724; + var c = k / 1236.8499999999999; + var approx = Astro._poly(c, ilib.data.astro._nmApproxCoeff); + var capE = Astro._poly(c, ilib.data.astro._nmCapECoeff); + var solarAnomaly = Astro._poly(c, ilib.data.astro._nmSolarAnomalyCoeff); + var lunarAnomaly = Astro._poly(c, ilib.data.astro._nmLunarAnomalyCoeff); + var moonArgument = Astro._poly(c, ilib.data.astro._nmMoonArgumentCoeff); + var capOmega = Astro._poly(c, ilib.data.astro._nmCapOmegaCoeff); + var correction = -0.00017 * Astro._dsin(capOmega); + var i; + for (i = 0; i < ilib.data.astro._nmSineCoeff.length; i++) { + correction = correction + ilib.data.astro._nmSineCoeff[i] * Math.pow(capE, ilib.data.astro._nmEFactor[i]) * + Astro._dsin(ilib.data.astro._nmSolarCoeff[i] * solarAnomaly + + ilib.data.astro._nmLunarCoeff[i] * lunarAnomaly + + ilib.data.astro._nmMoonCoeff[i] * moonArgument); + } + var additional = 0; + for (i = 0; i < ilib.data.astro._nmAddConst.length; i++) { + additional = additional + ilib.data.astro._nmAddFactor[i] * + Astro._dsin(ilib.data.astro._nmAddConst[i] + ilib.data.astro._nmAddCoeff[i] * k); + } + var extra = 0.000325 * Astro._dsin(Astro._poly(c, ilib.data.astro._nmExtra)); + return Astro._universalFromEphemeris(approx + correction + extra + additional + RataDie.gregorianEpoch); +}; + +/** + * @static + * @protected + * @param {number} jd + * @return {number} + */ +Astro._lunarSolarAngle = function(jd) { + var lunar = Astro._lunarLongitude(jd); + var solar = Astro._solarLongitude(jd) + return Astro._fixangle(lunar - solar); +}; + +/** + * @static + * @protected + * @param {number} jd + * @return {number} + */ +Astro._newMoonBefore = function (jd) { + var phase = Astro._lunarSolarAngle(jd); + // 11.450086114414322 is the julian day of the 0th full moon + // 29.530588853000001 is the average length of a month + var guess = Math.round((jd - 11.450086114414322 - RataDie.gregorianEpoch) / 29.530588853000001 - phase / 360) - 1; + var current, last; + current = last = Astro._newMoonTime(guess); + while (current < jd) { + guess++; + last = current; + current = Astro._newMoonTime(guess); + } + return last; +}; + +/** + * @static + * @protected + * @param {number} jd + * @return {number} + */ +Astro._newMoonAtOrAfter = function (jd) { + var phase = Astro._lunarSolarAngle(jd); + // 11.450086114414322 is the julian day of the 0th full moon + // 29.530588853000001 is the average length of a month + var guess = Math.round((jd - 11.450086114414322 - RataDie.gregorianEpoch) / 29.530588853000001 - phase / 360); + var current; + while ((current = Astro._newMoonTime(guess)) < jd) { + guess++; + } + return current; +}; + +/** + * @static + * @protected + * @param {number} jd JD to calculate from + * @param {number} longitude longitude to seek + * @returns {number} the JD of the next time that the solar longitude + * is a multiple of the given longitude + */ +Astro._nextSolarLongitude = function(jd, longitude) { + var rate = 365.242189 / 360.0; + var tau = jd + rate * Astro._fixangle(longitude - Astro._solarLongitude(jd)); + var start = Math.max(jd, tau - 5.0); + var end = tau + 5.0; + + return SearchUtils.bisectionSearch(0, start, end, 1e-6, function (l) { + return 180 - Astro._fixangle(Astro._solarLongitude(l) - longitude); + }); +}; + +/** + * Floor the julian day to midnight of the current julian day. + * + * @static + * @protected + * @param {number} jd the julian to round + * @return {number} the jd floored to the midnight of the julian day + */ +Astro._floorToJD = function(jd) { + return Math.floor(jd - 0.5) + 0.5; +}; + +/** + * Floor the julian day to midnight of the current julian day. + * + * @static + * @protected + * @param {number} jd the julian to round + * @return {number} the jd floored to the midnight of the julian day + */ +Astro._ceilToJD = function(jd) { + return Math.ceil(jd + 0.5) - 0.5; +}; + + +/* + * Calendar.js - Represent a calendar object. + * + * Copyright © 2012-2015, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @class + * Superclass for all calendar subclasses that contains shared + * functionality. + * This class is never instantiated on its own. Instead, + * you should use the {@link CalendarFactory} function to manufacture a new + * instance of a subclass of Calendar. + * + * @protected + * @constructor + */ +var Calendar = function() { +}; + +/* place for the subclasses to put their constructors so that the factory method + * can find them. Do this to add your calendar after it's defined: + * Calendar._constructors["mytype"] = Calendar.MyTypeConstructor; + */ +Calendar._constructors = {}; + +Calendar.prototype = { + /** + * Return the type of this calendar. + * + * @return {string} the name of the type of this calendar + */ + getType: function() { + throw "Cannot call methods of abstract class Calendar"; + }, + + /** + * Return the number of months in the given year. The number of months in a year varies + * for some luni-solar calendars because in some years, an extra month is needed to extend the + * days in a year to an entire solar year. The month is represented as a 1-based number + * where 1=first month, 2=second month, etc. + * + * @param {number} year a year for which the number of months is sought + * @return {number} The number of months in the given year + */ + getNumMonths: function(year) { + throw "Cannot call methods of abstract class Calendar"; + }, + + /** + * Return the number of days in a particular month in a particular year. This function + * can return a different number for a month depending on the year because of things + * like leap years. + * + * @param {number} month the month for which the length is sought + * @param {number} year the year within which that month can be found + * @return {number} the number of days within the given month in the given year + */ + getMonLength: function(month, year) { + throw "Cannot call methods of abstract class Calendar"; + }, + + /** + * Return true if the given year is a leap year in this calendar. + * The year parameter may be given as a number. + * + * @param {number} year the year for which the leap year information is being sought + * @return {boolean} true if the given year is a leap year + */ + isLeapYear: function(year) { + throw "Cannot call methods of abstract class Calendar"; + } +}; + +/* + * RataDie.js - Represent the RD date number in the calendar + * + * Copyright © 2014-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + +/** + * @class + * Construct a new RD date number object. The constructor parameters can + * contain any of the following properties: + * + *
    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. + * + *
  • julianday - sets the time of this instance according to the given + * Julian Day instance or the Julian Day given as a float + * + *
  • cycle - any integer giving the number of 60-year cycle in which the date is located. + * If the cycle is not given but the year is, it is assumed that the year parameter is a fictitious + * linear count of years since the beginning of the epoch, much like other calendars. This linear + * count is never used. If both the cycle and year are given, the year is wrapped to the range 0 + * to 60 and treated as if it were a year in the regular 60-year cycle. + * + *
  • year - any integer, including 0 + * + *
  • month - 1 to 12, where 1 means January, 2 means February, etc. + * + *
  • day - 1 to 31 + * + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + * + *
  • minute - 0 to 59 + * + *
  • second - 0 to 59 + * + *
  • millisecond - 0 to 999 + * + *
  • parts - 0 to 1079. Specify the halaqim parts of an hour. Either specify + * the parts or specify the minutes, seconds, and milliseconds, but not both. This is only used + * in the Hebrew calendar. + * + *
  • minute - 0 to 59 + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If the constructor is called with another date instance instead of + * a parameter block, the other instance acts as a parameter block and its + * settings are copied into the current instance.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above are present, then the RD is calculate based on + * the current date at the time of instantiation.

+ * + * If any of the properties from year through millisecond are not + * specified in the params, it is assumed that they have the smallest possible + * value in the range for the property (zero or one).

+ * + * + * @private + * @constructor + * @param {Object=} params parameters that govern the settings and behaviour of this RD date + */ +var RataDie = function(params) { + if (params) { + if (typeof(params.date) !== 'undefined') { + // accept JS Date classes or strings + var date = params.date; + if (!(JSUtils.isDate(date))) { + date = new Date(date); // maybe a string initializer? + } + this._setTime(date.getTime()); + } else if (typeof(params.unixtime) !== 'undefined') { + this._setTime(parseInt(params.unixtime, 10)); + } else if (typeof(params.julianday) !== 'undefined') { + // JD time is defined to be UTC + this._setJulianDay(parseFloat(params.julianday)); + } else if (params.year || params.month || params.day || params.hour || + params.minute || params.second || params.millisecond || params.parts || params.cycle) { + this._setDateComponents(params); + } else if (typeof(params.rd) !== 'undefined') { + /** + * the Rata Die number of this date for this calendar type + * @type {number} + */ + this.rd = (typeof(params.rd) === 'object' && params.rd instanceof RataDie) ? params.rd.rd : params.rd; + } + } + + if (typeof(this.rd) === 'undefined' || isNaN(this.rd)) { + var now = new Date(); + this._setTime(now.getTime()); + } +}; + +/** + * @private + * @const + * @type {number} + */ +RataDie.gregorianEpoch = 1721424.5; + +RataDie.prototype = { + /** + * the difference between a zero Julian day and the zero Gregorian date. + * @protected + * @type {number} + */ + epoch: RataDie.gregorianEpoch, + + /** + * Set the RD of this instance according to the given unix time. Unix time is + * the number of milliseconds since midnight on Jan 1, 1970. + * + * @protected + * @param {number} millis the unix time to set this date to in milliseconds + */ + _setTime: function(millis) { + // 2440587.5 is the julian day of midnight Jan 1, 1970, UTC (Gregorian) + this._setJulianDay(2440587.5 + millis / 86400000); + }, + + /** + * Set the date of this instance using a Julian Day. + * @protected + * @param {number} date the Julian Day to use to set this date + */ + _setJulianDay: function (date) { + var jd = (typeof(date) === 'number') ? new JulianDay(date) : date; + // round to the nearest millisecond + this.rd = MathUtils.halfup((jd.getDate() - this.epoch) * 86400000) / 86400000; + }, + + /** + * Return the rd number of the particular day of the week on or before the + * given rd. eg. The Sunday on or before the given rd. + * @protected + * @param {number} rd the rata die date of the reference date + * @param {number} dayOfWeek the day of the week that is being sought relative + * to the current date + * @return {number} the rd of the day of the week + */ + _onOrBefore: function(rd, dayOfWeek) { + return rd - MathUtils.mod(Math.floor(rd) - dayOfWeek - 2, 7); + }, + + /** + * Return the rd number of the particular day of the week on or before the current rd. + * eg. The Sunday on or before the current rd. If the offset is given, the calculation + * happens in wall time instead of UTC. UTC time may be a day before or day behind + * wall time, so it it would give the wrong day of the week if this calculation was + * done in UTC time when the caller really wanted wall time. Even though the calculation + * may be done in wall time, the return value is nonetheless always given in UTC. + * @param {number} dayOfWeek the day of the week that is being sought relative + * to the current date + * @param {number=} offset RD offset for the time zone. Zero is assumed if this param is + * not given + * @return {number} the rd of the day of the week + */ + onOrBefore: function(dayOfWeek, offset) { + offset = offset || 0; + return this._onOrBefore(this.rd + offset, dayOfWeek) - offset; + }, + + /** + * Return the rd number of the particular day of the week on or before the current rd. + * eg. The Sunday on or before the current rd. If the offset is given, the calculation + * happens in wall time instead of UTC. UTC time may be a day before or day behind + * wall time, so it it would give the wrong day of the week if this calculation was + * done in UTC time when the caller really wanted wall time. Even though the calculation + * may be done in wall time, the return value is nonetheless always given in UTC. + * @param {number} dayOfWeek the day of the week that is being sought relative + * to the reference date + * @param {number=} offset RD offset for the time zone. Zero is assumed if this param is + * not given + * @return {number} the day of the week + */ + onOrAfter: function(dayOfWeek, offset) { + offset = offset || 0; + return this._onOrBefore(this.rd+6+offset, dayOfWeek) - offset; + }, + + /** + * Return the rd number of the particular day of the week before the current rd. + * eg. The Sunday before the current rd. If the offset is given, the calculation + * happens in wall time instead of UTC. UTC time may be a day before or day behind + * wall time, so it it would give the wrong day of the week if this calculation was + * done in UTC time when the caller really wanted wall time. Even though the calculation + * may be done in wall time, the return value is nonetheless always given in UTC. + * @param {number} dayOfWeek the day of the week that is being sought relative + * to the reference date + * @param {number=} offset RD offset for the time zone. Zero is assumed if this param is + * not given + * @return {number} the day of the week + */ + before: function(dayOfWeek, offset) { + offset = offset || 0; + return this._onOrBefore(this.rd-1+offset, dayOfWeek) - offset; + }, + + /** + * Return the rd number of the particular day of the week after the current rd. + * eg. The Sunday after the current rd. If the offset is given, the calculation + * happens in wall time instead of UTC. UTC time may be a day before or day behind + * wall time, so it it would give the wrong day of the week if this calculation was + * done in UTC time when the caller really wanted wall time. Even though the calculation + * may be done in wall time, the return value is nonetheless always given in UTC. + * @param {number} dayOfWeek the day of the week that is being sought relative + * to the reference date + * @param {number=} offset RD offset for the time zone. Zero is assumed if this param is + * not given + * @return {number} the day of the week + */ + after: function(dayOfWeek, offset) { + offset = offset || 0; + return this._onOrBefore(this.rd+7+offset, dayOfWeek) - offset; + }, + + /** + * Return the unix time equivalent to this Gregorian date instance. Unix time is + * the number of milliseconds since midnight on Jan 1, 1970 UTC. This method only + * returns a valid number for dates between midnight, Jan 1, 1970 and + * Jan 19, 2038 at 3:14:07am when the unix time runs out. If this instance + * encodes a date outside of that range, this method will return -1. + * + * @return {number} a number giving the unix time, or -1 if the date is outside the + * valid unix time range + */ + getTime: function() { + // earlier than Jan 1, 1970 + // or later than Jan 19, 2038 at 3:14:07am + var jd = this.getJulianDay(); + if (jd < 2440587.5 || jd > 2465442.634803241) { + return -1; + } + + // avoid the rounding errors in the floating point math by only using + // the whole days from the rd, and then calculating the milliseconds directly + return Math.round((jd - 2440587.5) * 86400000); + }, + + /** + * Return the extended unix time equivalent to this Gregorian date instance. Unix time is + * the number of milliseconds since midnight on Jan 1, 1970 UTC. Traditionally unix time + * (or the type "time_t" in C/C++) is only encoded with a unsigned 32 bit integer, and thus + * runs out on Jan 19, 2038. However, most Javascript engines encode numbers well above + * 32 bits and the Date object allows you to encode up to 100 million days worth of time + * after Jan 1, 1970, and even more interestingly 100 million days worth of time before + * Jan 1, 1970 as well. This method returns the number of milliseconds in that extended + * range. If this instance encodes a date outside of that range, this method will return + * NaN. + * + * @return {number} a number giving the extended unix time, or NaN if the date is outside + * the valid extended unix time range + */ + getTimeExtended: function() { + var jd = this.getJulianDay(); + + // test if earlier than Jan 1, 1970 - 100 million days + // or later than Jan 1, 1970 + 100 million days + if (jd < -97559412.5 || jd > 102440587.5) { + return NaN; + } + + // avoid the rounding errors in the floating point math by only using + // the whole days from the rd, and then calculating the milliseconds directly + return Math.round((jd - 2440587.5) * 86400000); + }, + + /** + * Return the Julian Day equivalent to this calendar date as a number. + * This returns the julian day in UTC. + * + * @return {number} the julian date equivalent of this date + */ + getJulianDay: function() { + return this.rd + this.epoch; + }, + + /** + * Return the Rata Die (fixed day) number of this RD date. + * + * @return {number} the rd date as a number + */ + getRataDie: function() { + return this.rd; + } +}; + + +/* + * JulianDay.js - A Julian Day object. + * + * Copyright © 2012-2015, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @class + * A Julian Day class. A Julian Day is a date based on the Julian Day count + * of time invented by Joseph Scaliger in 1583 for use with astronomical calculations. + * Do not confuse it with a date in the Julian calendar, which it has very + * little in common with. The naming is unfortunately close, and comes from history.

+ * + * + * @constructor + * @param {number} num the Julian Day expressed as a floating point number + */ +var JulianDay = function(num) { + this.jd = num; + this.days = Math.floor(this.jd); + this.frac = num - this.days; +}; + +JulianDay.prototype = { + /** + * Return the integral portion of this Julian Day instance. This corresponds to + * the number of days since the beginning of the epoch. + * + * @return {number} the integral portion of this Julian Day + */ + getDays: function() { + return this.days; + }, + + /** + * Set the date of this Julian Day instance. + * + * @param {number} days the julian date expressed as a floating point number + */ + setDays: function(days) { + this.days = Math.floor(days); + this.jd = this.days + this.frac; + }, + + /** + * Return the fractional portion of this Julian Day instance. This portion + * corresponds to the time of day for the instance. + */ + getDayFraction: function() { + return this.frac; + }, + + /** + * Set the fractional part of the Julian Day. The fractional part represents + * the portion of a fully day. Julian dates start at noon, and proceed until + * noon of the next day. That would mean midnight is represented as a fractional + * part of 0.5. + * + * @param {number} fraction The fractional part of the Julian date + */ + setDayFraction: function(fraction) { + var t = Math.floor(fraction); + this.frac = fraction - t; + this.jd = this.days + this.frac; + }, + + /** + * Return the Julian Day expressed as a floating point number. + * @return {number} the Julian Day as a number + */ + getDate: function () { + return this.jd; + }, + + /** + * Set the date of this Julian Day instance. + * + * @param {number} num the numeric Julian Day to set into this instance + */ + setDate: function (num) { + this.jd = num; + }, + + /** + * Add an offset to the current date instance. The offset should be expressed in + * terms of Julian days. That is, each integral unit represents one day of time, and + * fractional part represents a fraction of a regular 24-hour day. + * + * @param {number} offset an amount to add (or subtract) to the current result instance. + */ + addDate: function(offset) { + if (typeof(offset) === 'number') { + this.jd += offset; + this.days = Math.floor(this.jd); + this.frac = this.jd - this.days; + } + } +}; + + +/* + * JulianCal.js - Represent a Julian calendar object. + * + * Copyright © 2012-2017, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + +/** + * @class + * Construct a new Julian calendar object. This class encodes information about + * a Julian calendar.

+ * + * @param {Object=} options Options governing the construction of this instance + * @constructor + * @extends Calendar + */ +var JulianCal = function(options) { + this.type = "julian"; + + if (options && typeof(options.onLoad) === "function") { + options.onLoad(this); + } +}; + +/* the lengths of each month */ +JulianCal.monthLengths = [ + 31, /* Jan */ + 28, /* Feb */ + 31, /* Mar */ + 30, /* Apr */ + 31, /* May */ + 30, /* Jun */ + 31, /* Jul */ + 31, /* Aug */ + 30, /* Sep */ + 31, /* Oct */ + 30, /* Nov */ + 31 /* Dec */ +]; + +/** + * the cumulative lengths of each month, for a non-leap year + * @private + * @const + * @type Array. + */ +JulianCal.cumMonthLengths = [ + 0, /* Jan */ + 31, /* Feb */ + 59, /* Mar */ + 90, /* Apr */ + 120, /* May */ + 151, /* Jun */ + 181, /* Jul */ + 212, /* Aug */ + 243, /* Sep */ + 273, /* Oct */ + 304, /* Nov */ + 334, /* Dec */ + 365 +]; + +/** + * the cumulative lengths of each month, for a leap year + * @private + * @const + * @type Array. + */ +JulianCal.cumMonthLengthsLeap = [ + 0, /* Jan */ + 31, /* Feb */ + 60, /* Mar */ + 91, /* Apr */ + 121, /* May */ + 152, /* Jun */ + 182, /* Jul */ + 213, /* Aug */ + 244, /* Sep */ + 274, /* Oct */ + 305, /* Nov */ + 335, /* Dec */ + 366 +]; + +/** + * Return the number of months in the given year. The number of months in a year varies + * for lunar calendars because in some years, an extra month is needed to extend the + * days in a year to an entire solar year. The month is represented as a 1-based number + * where 1=Jaunary, 2=February, etc. until 12=December. + * + * @param {number} year a year for which the number of months is sought + */ +JulianCal.prototype.getNumMonths = function(year) { + return 12; +}; + +/** + * Return the number of days in a particular month in a particular year. This function + * can return a different number for a month depending on the year because of things + * like leap years. + * + * @param {number} month the month for which the length is sought + * @param {number} year the year within which that month can be found + * @return {number} the number of days within the given month in the given year + */ +JulianCal.prototype.getMonLength = function(month, year) { + if (month !== 2 || !this.isLeapYear(year)) { + return JulianCal.monthLengths[month-1]; + } else { + return 29; + } +}; + +/** + * Return true if the given year is a leap year in the Julian calendar. + * The year parameter may be given as a number, or as a JulDate object. + * @param {number|JulianDate} year the year for which the leap year information is being sought + * @return {boolean} true if the given year is a leap year + */ +JulianCal.prototype.isLeapYear = function(year) { + var y = (typeof(year) === 'number' ? year : year.year); + return MathUtils.mod(y, 4) === ((year > 0) ? 0 : 3); +}; + +/** + * Return the type of this calendar. + * + * @return {string} the name of the type of this calendar + */ +JulianCal.prototype.getType = function() { + return this.type; +}; + + +/* register this calendar for the factory method */ +Calendar._constructors["julian"] = JulianCal; + + +/* + * JulianDate.js - Represent a date in the Julian calendar + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + +/** + * @class + * Construct a new Julian RD date number object. The constructor parameters can + * contain any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. + * + *
  • julianday - sets the time of this instance according to the given + * Julian Day instance or the Julian Day given as a float + * + *
  • year - any integer, including 0 + * + *
  • month - 1 to 12, where 1 means January, 2 means February, etc. + * + *
  • day - 1 to 31 + * + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + * + *
  • minute - 0 to 59 + * + *
  • second - 0 to 59 + * + *
  • millisecond - 0 to 999 + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If the constructor is called with another Julian date instance instead of + * a parameter block, the other instance acts as a parameter block and its + * settings are copied into the current instance.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above are present, then the RD is calculate based on + * the current date at the time of instantiation.

+ * + * If any of the properties from year through millisecond are not + * specified in the params, it is assumed that they have the smallest possible + * value in the range for the property (zero or one).

+ * + * + * @private + * @constructor + * @extends RataDie + * @param {Object=} params parameters that govern the settings and behaviour of this Julian RD date + */ +var JulianRataDie = function(params) { + this.cal = params && params.cal || new JulianCal(); + this.rd = NaN; + RataDie.call(this, params); +}; + +JulianRataDie.prototype = new RataDie(); +JulianRataDie.prototype.parent = RataDie; +JulianRataDie.prototype.constructor = JulianRataDie; + +/** + * The difference between a zero Julian day and the first Julian date + * of Friday, July 16, 622 CE Julian. + * @private + * @type number + */ +JulianRataDie.prototype.epoch = 1721422.5; + +/** + * Calculate the Rata Die (fixed day) number of the given date from the + * date components. + * + * @protected + * @param {Object} date the date components to calculate the RD from + */ +JulianRataDie.prototype._setDateComponents = function(date) { + var year = date.year + ((date.year < 0) ? 1 : 0); + var years = 365 * (year - 1) + Math.floor((year-1)/4); + var dayInYear = (date.month > 1 ? JulianCal.cumMonthLengths[date.month-1] : 0) + + date.day + + (this.cal.isLeapYear(date.year) && date.month > 2 ? 1 : 0); + var rdtime = (date.hour * 3600000 + + date.minute * 60000 + + date.second * 1000 + + date.millisecond) / + 86400000; + + /* + console.log("calcRataDie: converting " + JSON.stringify(parts)); + console.log("getRataDie: year is " + years); + console.log("getRataDie: day in year is " + dayInYear); + console.log("getRataDie: rdtime is " + rdtime); + console.log("getRataDie: rd is " + (years + dayInYear + rdtime)); + */ + + this.rd = years + dayInYear + rdtime; +}; + +/* + * JulianDate.js - Represent a date in the Julian calendar + * + * Copyright © 2012-2015, 2018, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + + + + + + + +/** + * @class + * Construct a new date object for the Julian Calendar. The constructor can be called + * with a parameter object that contains any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970 (Gregorian). + *
  • julianday - the Julian Day to set into this date + *
  • year - any integer except 0. Years go from -1 (BCE) to 1 (CE), skipping the zero + * year which doesn't exist in the Julian calendar + *
  • month - 1 to 12, where 1 means January, 2 means February, etc. + *
  • day - 1 to 31 + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + *
  • minute - 0 to 59 + *
  • second - 0 to 59 + *
  • millisecond - 0 to 999 + *
  • locale - the TimeZone instance or time zone name as a string + * of this julian date. The date/time is kept in the local time. The time zone + * is used later if this date is formatted according to a different time zone and + * the difference has to be calculated, or when the date format has a time zone + * component in it. + *
  • timezone - the time zone of this instance. If the time zone is not + * given, it can be inferred from this locale. For locales that span multiple + * time zones, the one with the largest population is chosen as the one that + * represents the locale. + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * NB. The Julian Day + * (JulianDay) object is a different object than a + * date in + * the Julian calendar and the two are not to be confused. The Julian Day + * object represents time as a number of whole and fractional days since the + * beginning of the epoch, whereas a date in the Julian + * calendar is a regular date that signifies year, month, day, etc. using the rules + * of the Julian calendar. The naming of Julian Days and the Julian calendar are + * unfortunately close, and come from history.

+ * + * If called with another Julian date argument, the date components of the given + * date are copied into the current one.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above + * from unixtime through millisecond are present, then the date + * components are + * filled in with the current date at the time of instantiation. Note that if + * you do not give the time zone when defaulting to the current time and the + * time zone for all of ilib was not set with ilib.setTimeZone(), then the + * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich + * Mean Time").

+ * + * + * @constructor + * @extends IDate + * @param {Object=} params parameters that govern the settings and behaviour of this Julian date + */ +var JulianDate = function(params) { + this.cal = new JulianCal(); + + params = params || {}; + + if (params.timezone) { + this.timezone = params.timezone; + } + if (params.locale) { + this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; + } + + if (!this.timezone) { + if (this.locale) { + new LocaleInfo(this.locale, { + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(li) { + this.li = li; + this.timezone = li.getTimeZone(); + this._init(params); + }) + }); + } else { + this.timezone = "local"; + this._init(params); + } + } else { + this._init(params); + } + +}; + +JulianDate.prototype = new IDate({noinstance: true}); +JulianDate.prototype.parent = IDate; +JulianDate.prototype.constructor = JulianDate; + +/** + * Initialize the date + * @private + */ +JulianDate.prototype._init = function (params) { + if (params.year || params.month || params.day || params.hour || + params.minute || params.second || params.millisecond ) { + /** + * Year in the Julian calendar. + * @type number + */ + this.year = parseInt(params.year, 10) || 0; + /** + * The month number, ranging from 1 (January) to 12 (December). + * @type number + */ + this.month = parseInt(params.month, 10) || 1; + /** + * The day of the month. This ranges from 1 to 31. + * @type number + */ + this.day = parseInt(params.day, 10) || 1; + /** + * The hour of the day. This can be a number from 0 to 23, as times are + * stored unambiguously in the 24-hour clock. + * @type number + */ + this.hour = parseInt(params.hour, 10) || 0; + /** + * The minute of the hours. Ranges from 0 to 59. + * @type number + */ + this.minute = parseInt(params.minute, 10) || 0; + /** + * The second of the minute. Ranges from 0 to 59. + * @type number + */ + this.second = parseInt(params.second, 10) || 0; + /** + * The millisecond of the second. Ranges from 0 to 999. + * @type number + */ + this.millisecond = parseInt(params.millisecond, 10) || 0; + + /** + * The day of the year. Ranges from 1 to 383. + * @type number + */ + this.dayOfYear = parseInt(params.dayOfYear, 10); + + if (typeof(params.dst) === 'boolean') { + this.dst = params.dst; + } + + this.rd = this.newRd(this); + + new TimeZone({ + id: this.timezone, + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(tz) { + this.tz = tz; + // add the time zone offset to the rd to convert to UTC + // getOffsetMillis requires that this.year, this.rd, and this.dst + // are set in order to figure out which time zone rules apply and + // what the offset is at that point in the year + this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; + if (this.offset !== 0) { + this.rd = this.newRd({ + rd: this.rd.getRataDie() - this.offset + }); + } + this._init2(params); + }) + }); + } else { + this._init2(params); + } +}; + +/** + * Finish initializing the date + * @private + */ +JulianDate.prototype._init2 = function (params) { + if (!this.rd) { + this.rd = this.newRd(params); + this._calcDateComponents(); + } + + if (typeof(params.onLoad) === "function") { + params.onLoad(this); + } +}; + +/** + * Return a new RD for this date type using the given params. + * @protected + * @param {Object=} params the parameters used to create this rata die instance + * @returns {RataDie} the new RD instance for the given params + */ +JulianDate.prototype.newRd = function (params) { + return new JulianRataDie(params); +}; + +/** + * Return the year for the given RD + * @private + * @param {number} rd RD to calculate from + * @returns {number} the year for the RD + */ +JulianDate.prototype._calcYear = function(rd) { + var year = Math.floor((4*(Math.floor(rd)-1) + 1464)/1461); + + return (year <= 0) ? year - 1 : year; +}; + +/** + * Calculate date components for the given RD date. + * @private + */ +JulianDate.prototype._calcDateComponents = function () { + var remainder, + cumulative, + rd = this.rd.getRataDie(); + + this.year = this._calcYear(rd); + + if (typeof(this.offset) === "undefined") { + this.year = this._calcYear(rd); + + // now offset the RD by the time zone, then recalculate in case we were + // near the year boundary + if (!this.tz) { + this.tz = new TimeZone({id: this.timezone}); + } + this.offset = this.tz.getOffsetMillis(this) / 86400000; + } + + if (this.offset !== 0) { + rd += this.offset; + this.year = this._calcYear(rd); + } + + var jan1 = this.newRd({ + year: this.year, + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }); + remainder = rd + 1 - jan1.getRataDie(); + + cumulative = this.cal.isLeapYear(this.year) ? + JulianCal.cumMonthLengthsLeap : + JulianCal.cumMonthLengths; + + this.month = SearchUtils.bsearch(Math.floor(remainder), cumulative); + remainder = remainder - cumulative[this.month-1]; + + this.day = Math.floor(remainder); + remainder -= this.day; + // now convert to milliseconds for the rest of the calculation + remainder = Math.round(remainder * 86400000); + + this.hour = Math.floor(remainder/3600000); + remainder -= this.hour * 3600000; + + this.minute = Math.floor(remainder/60000); + remainder -= this.minute * 60000; + + this.second = Math.floor(remainder/1000); + remainder -= this.second * 1000; + + this.millisecond = remainder; +}; + +/** + * Return the day of the week of this date. The day of the week is encoded + * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. + * + * @return {number} the day of the week + */ +JulianDate.prototype.getDayOfWeek = function() { + var rd = Math.floor(this.rd.getRataDie() + (this.offset || 0)); + return MathUtils.mod(rd-2, 7); +}; + +/** + * Return the name of the calendar that governs this date. + * + * @return {string} a string giving the name of the calendar + */ +JulianDate.prototype.getCalendar = function() { + return "julian"; +}; + +//register with the factory method +IDate._constructors["julian"] = JulianDate; + + +/* + * GregorianCal.js - Represent a Gregorian calendar object. + * + * Copyright © 2012-2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + +/** + * @class + * Construct a new Gregorian calendar object. This class encodes information about + * a Gregorian calendar.

+ * + * + * @constructor + * @param {{noinstance:boolean}=} options + * @extends Calendar + */ +var GregorianCal = function(options) { + if (!options || !options.noinstance) { + this.type = "gregorian"; + } + + if (options && typeof(options.onLoad) === "function") { + options.onLoad(this); + } +}; + +/** + * the lengths of each month + * @private + * @const + * @type Array. + */ +GregorianCal.monthLengths = [ + 31, /* Jan */ + 28, /* Feb */ + 31, /* Mar */ + 30, /* Apr */ + 31, /* May */ + 30, /* Jun */ + 31, /* Jul */ + 31, /* Aug */ + 30, /* Sep */ + 31, /* Oct */ + 30, /* Nov */ + 31 /* Dec */ +]; + +/** + * Return the number of months in the given year. The number of months in a year varies + * for some luni-solar calendars because in some years, an extra month is needed to extend the + * days in a year to an entire solar year. The month is represented as a 1-based number + * where 1=first month, 2=second month, etc. + * + * @param {number} year a year for which the number of months is sought + * @return {number} The number of months in the given year + */ +GregorianCal.prototype.getNumMonths = function(year) { + return 12; +}; + +/** + * Return the number of days in a particular month in a particular year. This function + * can return a different number for a month depending on the year because of things + * like leap years. + * + * @param {number} month the month for which the length is sought + * @param {number} year the year within which that month can be found + * @return {number} the number of days within the given month in the given year + */ +GregorianCal.prototype.getMonLength = function(month, year) { + if (month !== 2 || !this.isLeapYear(year)) { + return GregorianCal.monthLengths[month-1]; + } else { + return 29; + } +}; + +/** + * Return true if the given year is a leap year in the Gregorian calendar. + * The year parameter may be given as a number, or as a GregDate object. + * @param {number|GregorianDate} year the year for which the leap year information is being sought + * @return {boolean} true if the given year is a leap year + */ +GregorianCal.prototype.isLeapYear = function(year) { + var y = (typeof(year) === 'number' ? year : year.getYears()); + var centuries = MathUtils.mod(y, 400); + return (MathUtils.mod(y, 4) === 0 && centuries !== 100 && centuries !== 200 && centuries !== 300); +}; + +/** + * Return the type of this calendar. + * + * @return {string} the name of the type of this calendar + */ +GregorianCal.prototype.getType = function() { + return this.type; +}; + +/* register this calendar for the factory method */ +Calendar._constructors["gregorian"] = GregorianCal; + + +/* + * GregorianDate.js - Represent a date in the Gregorian calendar + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + + + + + + + +/** + * @class + * Construct a new Gregorian date object. The constructor parameters can + * contain any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. + *
  • julianday - sets the time of this instance according to the given + * Julian Day instance or the Julian Day given as a float + * + *
  • year - any integer, including 0 + * + *
  • month - 1 to 12, where 1 means January, 2 means February, etc. + * + *
  • day - 1 to 31 + * + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + * + *
  • minute - 0 to 59 + * + *
  • second - 0 to 59 + * + *
  • millisecond - 0 to 999 + * + *
  • dst - boolean used to specify whether the given time components are + * intended to be in daylight time or not. This is only used in the overlap + * time when transitioning from DST to standard time, and the time components are + * ambiguous. Otherwise at all other times of the year, this flag is ignored. + * If you specify the date using unix time (UTC) or a julian day, then the time is + * already unambiguous and this flag does not need to be specified.

    + * For example, in the US, the transition out of daylight savings time + * in 2014 happens at Nov 2, 2014 2:00am Daylight Time, when the time falls + * back to Nov 2, 2014 1:00am Standard Time. If you give a date/time components as + * "Nov 2, 2014 1:30am", then there are two 1:30am times in that day, and you would + * have to give the standard flag to indicate which of those two you mean. + * (dst=true means daylight time, dst=false means standard time).

    + * + *
  • timezone - the TimeZone instance or time zone name as a string + * of this gregorian date. The date/time is kept in the local time. The time zone + * is used later if this date is formatted according to a different time zone and + * the difference has to be calculated, or when the date format has a time zone + * component in it. + * + *
  • locale - locale for this gregorian date. If the time zone is not + * given, it can be inferred from this locale. For locales that span multiple + * time zones, the one with the largest population is chosen as the one that + * represents the locale. + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + * + *
  • onLoad - a callback function to call when this date object is fully + * loaded. When the onLoad option is given, this date object will attempt to + * load any missing locale data using the ilib loader callback. + * When the constructor is done (even if the data is already preassembled), the + * onLoad function is called with the current instance as a parameter, so this + * callback can be used with preassembled or dynamic loading or a mix of the two. + * + *
  • sync - tell whether to load any missing locale data synchronously or + * asynchronously. If this option is given as "false", then the "onLoad" + * callback must be given, as the instance returned from this constructor will + * not be usable for a while. + * + *
  • loadParams - an object containing parameters to pass to the + * loader callback function when locale data is missing. The parameters are not + * interpretted or modified in any way. They are simply passed along. The object + * may contain any property/value pairs as long as the calling code is in + * agreement with the loader callback function as to what those parameters mean. + *
+ * + * If the constructor is called with another Gregorian date instance instead of + * a parameter block, the other instance acts as a parameter block and its + * settings are copied into the current instance.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above + * from unixtime through millisecond are present, then the date + * components are + * filled in with the current date at the time of instantiation. Note that if + * you do not give the time zone when defaulting to the current time and the + * time zone for all of ilib was not set with ilib.setTimeZone(), then the + * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich + * Mean Time").

+ * + * If any of the properties from year through millisecond are not + * specified in the params, it is assumed that they have the smallest possible + * value in the range for the property (zero or one).

+ * + * + * @constructor + * @extends IDate + * @param {Object=} params parameters that govern the settings and behaviour of this Gregorian date + */ +var GregorianDate = function(params) { + this.cal = new GregorianCal(); + + params = params || {}; + if (typeof(params.noinstance) === 'boolean' && params.noinstance) { + // for doing inheritance, so don't need to fill in the data. The + // inheriting class only wants the methods. + return; + } + + if (params.timezone) { + this.timezone = params.timezone.toString(); + } + if (params.locale) { + this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; + } + + if (!this.timezone) { + if (this.locale) { + new LocaleInfo(this.locale, { + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(li) { + this.li = li; + this.timezone = li.getTimeZone(); + this._init(params); + }) + }); + } else { + this.timezone = "local"; + this._init(params); + } + } else { + this._init(params); + } +}; + +GregorianDate.prototype = new IDate({noinstance: true}); +GregorianDate.prototype.parent = IDate; +GregorianDate.prototype.constructor = GregorianDate; + +/** + * Initialize this date object + * @private + */ +GregorianDate.prototype._init = function (params) { + if (params.year || params.month || params.day || params.hour || + params.minute || params.second || params.millisecond ) { + this.year = parseInt(params.year, 10) || 0; + this.month = parseInt(params.month, 10) || 1; + this.day = parseInt(params.day, 10) || 1; + this.hour = parseInt(params.hour, 10) || 0; + this.minute = parseInt(params.minute, 10) || 0; + this.second = parseInt(params.second, 10) || 0; + this.millisecond = parseInt(params.millisecond, 10) || 0; + if (typeof(params.dst) === 'boolean') { + this.dst = params.dst; + } + this.rd = this.newRd(params); + + // add the time zone offset to the rd to convert to UTC + this.offset = 0; + if (this.timezone === "local" && typeof(params.dst) === 'undefined') { + // if dst is defined, the intrinsic Date object has no way of specifying which version of a time you mean + // in the overlap time at the end of DST. Do you mean the daylight 1:30am or the standard 1:30am? In this + // case, use the ilib calculations below, which can distinguish between the two properly + var d = new Date(this.year, this.month-1, this.day, this.hour, this.minute, this.second, this.millisecond); + var hBefore = new Date(this.year, this.month-1, this.day, this.hour - 1, this.minute, this.second, this.millisecond); + this.offset = -d.getTimezoneOffset() / 1440; + if (d.getTimezoneOffset() < hBefore.getTimezoneOffset()) { + var startOffset = -hBefore.getTimezoneOffset() / 1440; + this.rd = this.newRd({ + rd: this.rd.getRataDie() - startOffset + }); + } else { + this.rd = this.newRd({ + rd: this.rd.getRataDie() - this.offset + }); + } + this._init2(params); + } else { + new TimeZone({ + id: this.timezone, + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(tz) { + this.tz = tz; + + // getOffsetMillis requires that this.year, this.rd, and this.dst + // are set in order to figure out which time zone rules apply and + // what the offset is at that point in the year + this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; + this.rd = this.newRd({ + rd: this.rd.getRataDie() - this.offset + }); + this._init2(params); + }) + }); + } + } else { + this._init2(params); + } +}; + +/** + * Finish initializing this date object + * @private + */ +GregorianDate.prototype._init2 = function (params) { + if (!this.rd) { + this.rd = this.newRd(params); + this._calcDateComponents(); + } + + if (typeof(params.onLoad) === "function") { + params.onLoad(this); + } +}; + +/** + * Return a new RD for this date type using the given params. + * @private + * @param {Object=} params the parameters used to create this rata die instance + * @returns {RataDie} the new RD instance for the given params + */ +GregorianDate.prototype.newRd = function (params) { + return new GregRataDie(params); +}; + +/** + * Calculates the Gregorian year for a given rd number. + * @private + * @static + */ +GregorianDate._calcYear = function(rd) { + var days400, + days100, + days4, + years400, + years100, + years4, + years1, + year; + + years400 = Math.floor((rd - 1) / 146097); + days400 = MathUtils.mod((rd - 1), 146097); + years100 = Math.floor(days400 / 36524); + days100 = MathUtils.mod(days400, 36524); + years4 = Math.floor(days100 / 1461); + days4 = MathUtils.mod(days100, 1461); + years1 = Math.floor(days4 / 365); + + year = 400 * years400 + 100 * years100 + 4 * years4 + years1; + if (years100 !== 4 && years1 !== 4) { + year++; + } + return year; +}; + +/** + * @private + */ +GregorianDate.prototype._calcYear = function(rd) { + return GregorianDate._calcYear(rd); +}; + +/** + * Calculate the date components for the current time zone + * @private + */ +GregorianDate.prototype._calcDateComponents = function () { + if (this.timezone === "local" && this.rd.getRataDie() >= -99280837 && this.rd.getRataDie() <= 100719163) { + // console.log("using js Date to calculate offset"); + // use the intrinsic JS Date object to do the tz conversion for us, which + // guarantees that it follows the system tz database settings + var d = new Date(this.rd.getTimeExtended()); + + /** + * Year in the Gregorian calendar. + * @type number + */ + this.year = d.getFullYear(); + + /** + * The month number, ranging from 1 (January) to 12 (December). + * @type number + */ + this.month = d.getMonth()+1; + + /** + * The day of the month. This ranges from 1 to 31. + * @type number + */ + this.day = d.getDate(); + + /** + * The hour of the day. This can be a number from 0 to 23, as times are + * stored unambiguously in the 24-hour clock. + * @type number + */ + this.hour = d.getHours(); + + /** + * The minute of the hours. Ranges from 0 to 59. + * @type number + */ + this.minute = d.getMinutes(); + + /** + * The second of the minute. Ranges from 0 to 59. + * @type number + */ + this.second = d.getSeconds(); + + /** + * The millisecond of the second. Ranges from 0 to 999. + * @type number + */ + this.millisecond = d.getMilliseconds(); + + this.offset = -d.getTimezoneOffset() / 1440; + } else { + // console.log("using ilib to calculate offset. tz is " + this.timezone); + // console.log("GregDate._calcDateComponents: date is " + JSON.stringify(this) + " parent is " + JSON.stringify(this.parent) + " and parent.parent is " + JSON.stringify(this.parent.parent)); + if (typeof(this.offset) === "undefined") { + // console.log("calculating offset"); + this.year = this._calcYear(this.rd.getRataDie()); + + // now offset the RD by the time zone, then recalculate in case we were + // near the year boundary + if (!this.tz) { + this.tz = new TimeZone({id: this.timezone}); + } + this.offset = this.tz.getOffsetMillis(this) / 86400000; + // } else { + // console.log("offset is already defined somehow. type is " + typeof(this.offset)); + // console.trace("Stack is this one"); + } + // console.log("offset is " + this.offset); + var rd = this.rd.getRataDie(); + if (this.offset !== 0) { + rd += this.offset; + } + this.year = this._calcYear(rd); + + var yearStartRd = this.newRd({ + year: this.year, + month: 1, + day: 1, + cal: this.cal + }); + + // remainder is days into the year + var remainder = rd - yearStartRd.getRataDie() + 1; + + var cumulative = GregorianCal.prototype.isLeapYear.call(this.cal, this.year) ? + GregRataDie.cumMonthLengthsLeap : + GregRataDie.cumMonthLengths; + + this.month = SearchUtils.bsearch(Math.floor(remainder), cumulative); + remainder = remainder - cumulative[this.month-1]; + + this.day = Math.floor(remainder); + remainder -= this.day; + // now convert to milliseconds for the rest of the calculation + remainder = Math.round(remainder * 86400000); + + this.hour = Math.floor(remainder/3600000); + remainder -= this.hour * 3600000; + + this.minute = Math.floor(remainder/60000); + remainder -= this.minute * 60000; + + this.second = Math.floor(remainder/1000); + remainder -= this.second * 1000; + + this.millisecond = Math.floor(remainder); + } +}; + +/** + * Return the day of the week of this date. The day of the week is encoded + * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. + * + * @return {number} the day of the week + */ +GregorianDate.prototype.getDayOfWeek = function() { + var rd = Math.floor(this.rd.getRataDie() + (this.offset || 0)); + return MathUtils.mod(rd, 7); +}; + +/** + * Return the ordinal day of the year. Days are counted from 1 and proceed linearly up to + * 365, regardless of months or weeks, etc. That is, January 1st is day 1, and + * December 31st is 365 in regular years, or 366 in leap years. + * @return {number} the ordinal day of the year + */ +GregorianDate.prototype.getDayOfYear = function() { + var cumulativeMap = this.cal.isLeapYear(this.year) ? + GregRataDie.cumMonthLengthsLeap : + GregRataDie.cumMonthLengths; + + return cumulativeMap[this.month-1] + this.day; +}; + +/** + * Return the era for this date as a number. The value for the era for Gregorian + * calendars is -1 for "before the common era" (BCE) and 1 for "the common era" (CE). + * BCE dates are any date before Jan 1, 1 CE. In the proleptic Gregorian calendar, + * there is a year 0, so any years that are negative or zero are BCE. In the Julian + * calendar, there is no year 0. Instead, the calendar goes straight from year -1 to + * 1. + * @return {number} 1 if this date is in the common era, -1 if it is before the + * common era + */ +GregorianDate.prototype.getEra = function() { + return (this.year < 1) ? -1 : 1; +}; + +/** + * Return the name of the calendar that governs this date. + * + * @return {string} a string giving the name of the calendar + */ +GregorianDate.prototype.getCalendar = function() { + return "gregorian"; +}; + +// register with the factory method +IDate._constructors["gregorian"] = GregorianDate; + + +/* + * GregRataDie.js - Represent the RD date number in the Gregorian calendar + * + * Copyright © 2014-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + +/** + * @class + * Construct a new Gregorian RD date number object. The constructor parameters can + * contain any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. + * + *
  • julianday - sets the time of this instance according to the given + * Julian Day instance or the Julian Day given as a float + * + *
  • year - any integer, including 0 + * + *
  • month - 1 to 12, where 1 means January, 2 means February, etc. + * + *
  • day - 1 to 31 + * + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + * + *
  • minute - 0 to 59 + * + *
  • second - 0 to 59 + * + *
  • millisecond - 0 to 999 + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If the constructor is called with another Gregorian date instance instead of + * a parameter block, the other instance acts as a parameter block and its + * settings are copied into the current instance.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above are present, then the RD is calculate based on + * the current date at the time of instantiation.

+ * + * If any of the properties from year through millisecond are not + * specified in the params, it is assumed that they have the smallest possible + * value in the range for the property (zero or one).

+ * + * + * @private + * @constructor + * @extends RataDie + * @param {Object=} params parameters that govern the settings and behaviour of this Gregorian RD date + */ +var GregRataDie = function(params) { + this.cal = params && params.cal || new GregorianCal(); + /** @type {number|undefined} */ + this.rd = NaN; + RataDie.call(this, params); +}; + +GregRataDie.prototype = new RataDie(); +GregRataDie.prototype.parent = RataDie; +GregRataDie.prototype.constructor = GregRataDie; + +/** + * the cumulative lengths of each month, for a non-leap year + * @private + * @const + * @type Array. + */ +GregRataDie.cumMonthLengths = [ + 0, /* Jan */ + 31, /* Feb */ + 59, /* Mar */ + 90, /* Apr */ + 120, /* May */ + 151, /* Jun */ + 181, /* Jul */ + 212, /* Aug */ + 243, /* Sep */ + 273, /* Oct */ + 304, /* Nov */ + 334, /* Dec */ + 365 +]; + +/** + * the cumulative lengths of each month, for a leap year + * @private + * @const + * @type Array. + */ +GregRataDie.cumMonthLengthsLeap = [ + 0, /* Jan */ + 31, /* Feb */ + 60, /* Mar */ + 91, /* Apr */ + 121, /* May */ + 152, /* Jun */ + 182, /* Jul */ + 213, /* Aug */ + 244, /* Sep */ + 274, /* Oct */ + 305, /* Nov */ + 335, /* Dec */ + 366 +]; + +/** + * Calculate the Rata Die (fixed day) number of the given date. + * + * @private + * @param {Object} date the date components to calculate the RD from + */ +GregRataDie.prototype._setDateComponents = function(date) { + var year = parseInt(date.year, 10) || 0; + var month = parseInt(date.month, 10) || 1; + var day = parseInt(date.day, 10) || 1; + var hour = parseInt(date.hour, 10) || 0; + var minute = parseInt(date.minute, 10) || 0; + var second = parseInt(date.second, 10) || 0; + var millisecond = parseInt(date.millisecond, 10) || 0; + + var years = 365 * (year - 1) + + Math.floor((year-1)/4) - + Math.floor((year-1)/100) + + Math.floor((year-1)/400); + + var dayInYear = (month > 1 ? GregRataDie.cumMonthLengths[month-1] : 0) + + day + + (GregorianCal.prototype.isLeapYear.call(this.cal, year) && month > 2 ? 1 : 0); + var rdtime = (hour * 3600000 + + minute * 60000 + + second * 1000 + + millisecond) / + 86400000; + /* + debug("getRataDie: converting " + JSON.stringify(this)); + debug("getRataDie: year is " + years); + debug("getRataDie: day in year is " + dayInYear); + debug("getRataDie: rdtime is " + rdtime); + debug("getRataDie: rd is " + (years + dayInYear + rdtime)); + */ + + /** + * the RD number of this Gregorian date + * @type {number|undefined} + */ + this.rd = years + dayInYear + rdtime; +}; + +/** + * Return the rd number of the particular day of the week on or before the + * given rd. eg. The Sunday on or before the given rd. + * @private + * @param {number} rd the rata die date of the reference date + * @param {number} dayOfWeek the day of the week that is being sought relative + * to the current date + * @return {number} the rd of the day of the week + */ +GregRataDie.prototype._onOrBefore = function(rd, dayOfWeek) { + return rd - MathUtils.mod(Math.floor(rd) - dayOfWeek, 7); +}; + + +/* + * HebrewRataDie.js - Represent an RD date in the Hebrew calendar + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + +/** + * @class + * Construct a new Hebrew RD date number object. The constructor parameters can + * contain any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. + * + *
  • julianday - sets the time of this instance according to the given + * Julian Day instance or the Julian Day given as a float + * + *
  • year - any integer, including 0 + * + *
  • month - 1 to 12, where 1 means January, 2 means February, etc. + * + *
  • day - 1 to 31 + * + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + * + *
  • parts - 0 to 1079. Specify the halaqim parts of an hour. Either specify + * the parts or specify the minutes, seconds, and milliseconds, but not both. + * + *
  • minute - 0 to 59 + * + *
  • second - 0 to 59 + * + *
  • millisecond - 0 to 999 + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If the constructor is called with another Hebrew date instance instead of + * a parameter block, the other instance acts as a parameter block and its + * settings are copied into the current instance.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above are present, then the RD is calculate based on + * the current date at the time of instantiation.

+ * + * If any of the properties from year through millisecond are not + * specified in the params, it is assumed that they have the smallest possible + * value in the range for the property (zero or one).

+ * + * + * @private + * @constructor + * @extends RataDie + * @param {Object=} params parameters that govern the settings and behaviour of this Hebrew RD date + */ +var HebrewRataDie = function(params) { + this.cal = params && params.cal || new HebrewCal(); + this.rd = NaN; + RataDie.call(this, params); +}; + +HebrewRataDie.prototype = new RataDie(); +HebrewRataDie.prototype.parent = RataDie; +HebrewRataDie.prototype.constructor = HebrewRataDie; + +/** + * The difference between a zero Julian day and the first day of the Hebrew + * calendar: sunset on Monday, Tishri 1, 1 = September 7, 3760 BC Gregorian = JD 347997.25 + * @private + * @type number + */ +HebrewRataDie.prototype.epoch = 347997.25; + +/** + * the cumulative lengths of each month for a non-leap year, without new years corrections + * @private + * @const + * @type Array. + */ +HebrewRataDie.cumMonthLengths = [ + 176, /* Nisan */ + 206, /* Iyyar */ + 235, /* Sivan */ + 265, /* Tammuz */ + 294, /* Av */ + 324, /* Elul */ + 0, /* Tishri - Jewish New Year (Rosh HaShanah) starts in month 7 */ + 30, /* Heshvan */ + 59, /* Kislev */ + 88, /* Teveth */ + 117, /* Shevat */ + 147 /* Adar I */ +]; + +/** + * the cumulative lengths of each month for a leap year, without new years corrections + * @private + * @const + * @type Array. + */ +HebrewRataDie.cumMonthLengthsLeap = [ + 206, /* Nisan */ + 236, /* Iyyar */ + 265, /* Sivan */ + 295, /* Tammuz */ + 324, /* Av */ + 354, /* Elul */ + 0, /* Tishri - Jewish New Year (Rosh HaShanah) starts in month 7 */ + 30, /* Heshvan */ + 59, /* Kislev */ + 88, /* Teveth */ + 117, /* Shevat */ + 147, /* Adar I */ + 177 /* Adar II */ +]; + +/** + * Calculate the Rata Die (fixed day) number of the given date from the + * date components. + * + * @private + * @param {Object} date the date components to calculate the RD from + */ +HebrewRataDie.prototype._setDateComponents = function(date) { + var elapsed = HebrewCal.elapsedDays(date.year); + var days = elapsed + + HebrewCal.newYearsCorrection(date.year, elapsed) + + date.day - 1; + var sum = 0, table; + + //console.log("getRataDie: converting " + JSON.stringify(date)); + //console.log("getRataDie: days is " + days); + //console.log("getRataDie: new years correction is " + HebrewCal.newYearsCorrection(date.year, elapsed)); + + table = this.cal.isLeapYear(date.year) ? + HebrewRataDie.cumMonthLengthsLeap : + HebrewRataDie.cumMonthLengths; + sum = table[date.month-1]; + + // gets cumulative without correction, so now add in the correction + if ((date.month < 7 || date.month > 8) && HebrewCal.longHeshvan(date.year)) { + sum++; + } + if ((date.month < 7 || date.month > 9) && HebrewCal.longKislev(date.year)) { + sum++; + } + // console.log("getRataDie: cum days is now " + sum); + + days += sum; + + // the date starts at sunset, which we take as 18:00, so the hours from + // midnight to 18:00 are on the current Gregorian day, and the hours from + // 18:00 to midnight are on the previous Gregorian day. So to calculate the + // number of hours into the current day that this time represents, we have + // to count from 18:00 to midnight first, and add in 6 hours if the time is + // less than 18:00 + var minute, second, millisecond; + + if (typeof(date.parts) !== 'undefined') { + // The parts (halaqim) of the hour. This can be a number from 0 to 1079. + var parts = parseInt(date.parts, 10); + var seconds = parseInt(parts, 10) * 3.333333333333; + minute = Math.floor(seconds / 60); + seconds -= minute * 60; + second = Math.floor(seconds); + millisecond = (seconds - second); + } else { + minute = parseInt(date.minute, 10) || 0; + second = parseInt(date.second, 10) || 0; + millisecond = parseInt(date.millisecond, 10) || 0; + } + + var time; + if (date.hour >= 18) { + time = ((date.hour - 18 || 0) * 3600000 + + (minute || 0) * 60000 + + (second || 0) * 1000 + + (millisecond || 0)) / + 86400000; + } else { + time = 0.25 + // 6 hours from 18:00 to midnight on the previous gregorian day + ((date.hour || 0) * 3600000 + + (minute || 0) * 60000 + + (second || 0) * 1000 + + (millisecond || 0)) / + 86400000; + } + + //console.log("getRataDie: rd is " + (days + time)); + this.rd = days + time; +}; + +/** + * Return the rd number of the particular day of the week on or before the + * given rd. eg. The Sunday on or before the given rd. + * @private + * @param {number} rd the rata die date of the reference date + * @param {number} dayOfWeek the day of the week that is being sought relative + * to the current date + * @return {number} the rd of the day of the week + */ +HebrewRataDie.prototype._onOrBefore = function(rd, dayOfWeek) { + return rd - MathUtils.mod(Math.floor(rd) - dayOfWeek + 1, 7); +}; + + +/* + * HebrewDate.js - Represent a date in the Hebrew calendar + * + * Copyright © 2012-2015, 2018, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + + + + + + +/** + * @class + * Construct a new civil Hebrew date object. The constructor can be called + * with a params object that can contain the following properties:

+ * + *

    + *
  • julianday - the Julian Day to set into this date + *
  • year - any integer except 0. Years go from -1 (BCE) to 1 (CE), skipping the zero year + *
  • month - 1 to 12, where 1 means Nisan, 2 means Iyyar, etc. + *
  • day - 1 to 30 + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + *
  • parts - 0 to 1079. Specify the halaqim parts of an hour. Either specify + * the parts or specify the minutes, seconds, and milliseconds, but not both. + *
  • minute - 0 to 59 + *
  • second - 0 to 59 + *
  • millisecond - 0 to 999 + *
  • locale - the TimeZone instance or time zone name as a string + * of this julian date. The date/time is kept in the local time. The time zone + * is used later if this date is formatted according to a different time zone and + * the difference has to be calculated, or when the date format has a time zone + * component in it. + *
  • timezone - the time zone of this instance. If the time zone is not + * given, it can be inferred from this locale. For locales that span multiple + * time zones, the one with the largest population is chosen as the one that + * represents the locale. + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If called with another Hebrew date argument, the date components of the given + * date are copied into the current one.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above + * from julianday through millisecond are present, then the date + * components are + * filled in with the current date at the time of instantiation. Note that if + * you do not give the time zone when defaulting to the current time and the + * time zone for all of ilib was not set with ilib.setTimeZone(), then the + * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich + * Mean Time").

+ * + * + * @constructor + * @extends IDate + * @param {Object=} params parameters that govern the settings and behaviour of this Hebrew date + */ +var HebrewDate = function(params) { + this.cal = new HebrewCal(); + + params = params || {}; + + if (params.timezone) { + this.timezone = params.timezone; + } + if (params.locale) { + this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; + } + + if (!this.timezone) { + if (this.locale) { + new LocaleInfo(this.locale, { + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(li) { + this.li = li; + this.timezone = li.getTimeZone(); + this._init(params); + }) + }); + } else { + this.timezone = "local"; + this._init(params); + } + } else { + this._init(params); + } +}; + +HebrewDate.prototype = new IDate({noinstance: true}); +HebrewDate.prototype.parent = IDate; +HebrewDate.prototype.constructor = HebrewDate; + +/** + * Initialize this date + * @private + */ +HebrewDate.prototype._init = function (params) { + if (params.year || params.month || params.day || params.hour || + params.minute || params.second || params.millisecond || params.parts ) { + /** + * Year in the Hebrew calendar. + * @type number + */ + this.year = parseInt(params.year, 10) || 0; + + /** + * The month number, ranging from 1 to 13. + * @type number + */ + this.month = parseInt(params.month, 10) || 1; + + /** + * The day of the month. This ranges from 1 to 30. + * @type number + */ + this.day = parseInt(params.day, 10) || 1; + + /** + * The hour of the day. This can be a number from 0 to 23, as times are + * stored unambiguously in the 24-hour clock. + * @type number + */ + this.hour = parseInt(params.hour, 10) || 0; + + if (typeof(params.parts) !== 'undefined') { + /** + * The parts (halaqim) of the hour. This can be a number from 0 to 1079. + * @type number + */ + this.parts = parseInt(params.parts, 10); + var seconds = parseInt(params.parts, 10) * 3.333333333333; + this.minute = Math.floor(seconds / 60); + seconds -= this.minute * 60; + this.second = Math.floor(seconds); + this.millisecond = (seconds - this.second); + } else { + /** + * The minute of the hours. Ranges from 0 to 59. + * @type number + */ + this.minute = parseInt(params.minute, 10) || 0; + + /** + * The second of the minute. Ranges from 0 to 59. + * @type number + */ + this.second = parseInt(params.second, 10) || 0; + + /** + * The millisecond of the second. Ranges from 0 to 999. + * @type number + */ + this.millisecond = parseInt(params.millisecond, 10) || 0; + } + + /** + * The day of the year. Ranges from 1 to 383. + * @type number + */ + this.dayOfYear = parseInt(params.dayOfYear, 10); + + if (typeof(params.dst) === 'boolean') { + this.dst = params.dst; + } + + this.rd = this.newRd(this); + + // add the time zone offset to the rd to convert to UTC + new TimeZone({ + id: this.timezone, + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(tz) { + this.tz = tz; + // getOffsetMillis requires that this.year, this.rd, and this.dst + // are set in order to figure out which time zone rules apply and + // what the offset is at that point in the year + this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; + if (this.offset !== 0) { + this.rd = this.newRd({ + rd: this.rd.getRataDie() - this.offset + }); + } + + this._init2(params); + }) + }); + } else { + this._init2(params); + } +}; + +/** + * Finish initializing this date + * @private + */ +HebrewDate.prototype._init2 = function (params) { + if (!this.rd) { + this.rd = this.newRd(params); + this._calcDateComponents(); + } + + if (typeof(params.onLoad) === "function") { + params.onLoad(this); + } +}; + +/** + * the cumulative lengths of each month for a non-leap year, without new years corrections, + * that can be used in reverse to map days to months + * @private + * @const + * @type Array. + */ +HebrewDate.cumMonthLengthsReverse = [ +// [days, monthnumber], + [0, 7], /* Tishri - Jewish New Year (Rosh HaShanah) starts in month 7 */ + [30, 8], /* Heshvan */ + [59, 9], /* Kislev */ + [88, 10], /* Teveth */ + [117, 11], /* Shevat */ + [147, 12], /* Adar I */ + [176, 1], /* Nisan */ + [206, 2], /* Iyyar */ + [235, 3], /* Sivan */ + [265, 4], /* Tammuz */ + [294, 5], /* Av */ + [324, 6], /* Elul */ + [354, 7] /* end of year sentinel value */ +]; + +/** + * the cumulative lengths of each month for a leap year, without new years corrections + * that can be used in reverse to map days to months + * + * @private + * @const + * @type Array. + */ +HebrewDate.cumMonthLengthsLeapReverse = [ +// [days, monthnumber], + [0, 7], /* Tishri - Jewish New Year (Rosh HaShanah) starts in month 7 */ + [30, 8], /* Heshvan */ + [59, 9], /* Kislev */ + [88, 10], /* Teveth */ + [117, 11], /* Shevat */ + [147, 12], /* Adar I */ + [177, 13], /* Adar II */ + [206, 1], /* Nisan */ + [236, 2], /* Iyyar */ + [265, 3], /* Sivan */ + [295, 4], /* Tammuz */ + [324, 5], /* Av */ + [354, 6], /* Elul */ + [384, 7] /* end of year sentinel value */ +]; + +/** + * Number of days difference between RD 0 of the Hebrew calendar + * (Jan 1, 1 Gregorian = JD 1721057.5) and RD 0 of the Hebrew calendar + * (September 7, -3760 Gregorian = JD 347997.25) + * @private + * @const + * @type number + */ +HebrewDate.GregorianDiff = 1373060.25; + +/** + * Return a new RD for this date type using the given params. + * @private + * @param {Object=} params the parameters used to create this rata die instance + * @returns {RataDie} the new RD instance for the given params + */ +HebrewDate.prototype.newRd = function (params) { + return new HebrewRataDie(params); +}; + +/** + * Return the year for the given RD + * @private + * @param {number} rd RD to calculate from + * @returns {number} the year for the RD + */ +HebrewDate.prototype._calcYear = function(rd) { + var year, approximation, nextNewYear; + + // divide by the average number of days per year in the Hebrew calendar + // to approximate the year, then tweak it to get the real year + approximation = Math.floor(rd / 365.246822206) + 1; + + // console.log("HebrewDate._calcYear: approx is " + approximation); + + // search forward from approximation-1 for the year that actually contains this rd + year = approximation; + nextNewYear = HebrewCal.newYear(year); + while (rd >= nextNewYear) { + year++; + nextNewYear = HebrewCal.newYear(year); + } + return year - 1; +}; + +/** + * Calculate date components for the given RD date. + * @private + */ +HebrewDate.prototype._calcDateComponents = function () { + var remainder, + i, + table, + target, + rd = this.rd.getRataDie(); + + // console.log("HebrewDate.calcComponents: calculating for rd " + rd); + + if (typeof(this.offset) === "undefined") { + this.year = this._calcYear(rd); + + // now offset the RD by the time zone, then recalculate in case we were + // near the year boundary + if (!this.tz) { + this.tz = new TimeZone({id: this.timezone}); + } + this.offset = this.tz.getOffsetMillis(this) / 86400000; + } + + if (this.offset !== 0) { + rd += this.offset; + this.year = this._calcYear(rd); + } + + // console.log("HebrewDate.calcComponents: year is " + this.year + " with starting rd " + thisNewYear); + + remainder = rd - HebrewCal.newYear(this.year); + // console.log("HebrewDate.calcComponents: remainder is " + remainder); + + // take out new years corrections so we get the right month when we look it up in the table + if (remainder >= 59) { + if (remainder >= 88) { + if (HebrewCal.longKislev(this.year)) { + remainder--; + } + } + if (HebrewCal.longHeshvan(this.year)) { + remainder--; + } + } + + // console.log("HebrewDate.calcComponents: after new years corrections, remainder is " + remainder); + + table = this.cal.isLeapYear(this.year) ? + HebrewDate.cumMonthLengthsLeapReverse : + HebrewDate.cumMonthLengthsReverse; + + i = 0; + target = Math.floor(remainder); + while (i+1 < table.length && target >= table[i+1][0]) { + i++; + } + + this.month = table[i][1]; + // console.log("HebrewDate.calcComponents: remainder is " + remainder); + remainder -= table[i][0]; + + // console.log("HebrewDate.calcComponents: month is " + this.month + " and remainder is " + remainder); + + this.day = Math.floor(remainder); + remainder -= this.day; + this.day++; // days are 1-based + + // console.log("HebrewDate.calcComponents: day is " + this.day + " and remainder is " + remainder); + + // now convert to milliseconds for the rest of the calculation + remainder = Math.round(remainder * 86400000); + + this.hour = Math.floor(remainder/3600000); + remainder -= this.hour * 3600000; + + // the hours from 0 to 6 are actually 18:00 to midnight of the previous + // gregorian day, so we have to adjust for that + if (this.hour >= 6) { + this.hour -= 6; + } else { + this.hour += 18; + } + + this.minute = Math.floor(remainder/60000); + remainder -= this.minute * 60000; + + this.second = Math.floor(remainder/1000); + remainder -= this.second * 1000; + + this.millisecond = Math.floor(remainder); +}; + +/** + * Return the day of the week of this date. The day of the week is encoded + * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. + * + * @return {number} the day of the week + */ +HebrewDate.prototype.getDayOfWeek = function() { + var rd = Math.floor(this.rd.getRataDie() + (this.offset || 0)); + return MathUtils.mod(rd+1, 7); +}; + +/** + * Get the Halaqim (parts) of an hour. There are 1080 parts in an hour, which means + * each part is 3.33333333 seconds long. This means the number returned may not + * be an integer. + * + * @return {number} the halaqim parts of the current hour + */ +HebrewDate.prototype.getHalaqim = function() { + if (this.parts < 0) { + // convert to ms first, then to parts + var h = this.minute * 60000 + this.second * 1000 + this.millisecond; + this.parts = (h * 0.0003); + } + return this.parts; +}; + +/** + * Return the rd number of the first Sunday of the given ISO year. + * @protected + * @return the rd of the first Sunday of the ISO year + */ +HebrewDate.prototype.firstSunday = function (year) { + var tishri1 = this.newRd({ + year: year, + month: 7, + day: 1, + hour: 18, + minute: 0, + second: 0, + millisecond: 0, + cal: this.cal + }); + var firstThu = this.newRd({ + rd: tishri1.onOrAfter(4), + cal: this.cal + }); + return firstThu.before(0); +}; + +/** + * Return the ordinal day of the year. Days are counted from 1 and proceed linearly up to + * 385, regardless of months or weeks, etc. That is, Tishri 1st is day 1, and + * Elul 29 is 385 for a leap year with a long Heshvan and long Kislev. + * @return {number} the ordinal day of the year + */ +HebrewDate.prototype.getDayOfYear = function() { + var table = this.cal.isLeapYear(this.year) ? + HebrewRataDie.cumMonthLengthsLeap : + HebrewRataDie.cumMonthLengths; + var days = table[this.month-1]; + if ((this.month < 7 || this.month > 8) && HebrewCal.longHeshvan(this.year)) { + days++; + } + if ((this.month < 7 || this.month > 9) && HebrewCal.longKislev(this.year)) { + days++; + } + + return days + this.day; +}; + +/** + * Return the ordinal number of the week within the month. The first week of a month is + * the first one that contains 4 or more days in that month. If any days precede this + * first week, they are marked as being in week 0. This function returns values from 0 + * through 6.

+ * + * The locale is a required parameter because different locales that use the same + * Hebrew calendar consider different days of the week to be the beginning of + * the week. This can affect the week of the month in which some days are located. + * + * @param {Locale|string} locale the locale or locale spec to use when figuring out + * the first day of the week + * @return {number} the ordinal number of the week within the current month + */ +HebrewDate.prototype.getWeekOfMonth = function(locale) { + var li = new LocaleInfo(locale), + first = this.newRd({ + year: this.year, + month: this.month, + day: 1, + hour: 18, + minute: 0, + second: 0, + millisecond: 0 + }), + rd = this.rd.getRataDie(), + weekStart = first.onOrAfter(li.getFirstDayOfWeek()); + + if (weekStart - first.getRataDie() > 3) { + // if the first week has 4 or more days in it of the current month, then consider + // that week 1. Otherwise, it is week 0. To make it week 1, move the week start + // one week earlier. + weekStart -= 7; + } + return (rd < weekStart) ? 0 : Math.floor((rd - weekStart) / 7) + 1; +}; + +/** + * Return the era for this date as a number. The value for the era for Hebrew + * calendars is -1 for "before the Hebrew era" and 1 for "the Hebrew era". + * Hebrew era dates are any date after Tishri 1, 1, which is the same as + * September 7, 3760 BC in the Gregorian calendar. + * + * @return {number} 1 if this date is in the Hebrew era, -1 if it is before the + * Hebrew era + */ +HebrewDate.prototype.getEra = function() { + return (this.year < 1) ? -1 : 1; +}; + +/** + * Return the name of the calendar that governs this date. + * + * @return {string} a string giving the name of the calendar + */ +HebrewDate.prototype.getCalendar = function() { + return "hebrew"; +}; + +// register with the factory method +IDate._constructors["hebrew"] = HebrewDate; + + +/* + * HebrewCal.js - Represent a Hebrew calendar object. + * + * Copyright © 2012-2015,2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + +/** + * @class + * Construct a new Hebrew calendar object. This class encodes information about + * the Hebrew (Jewish) calendar. The Hebrew calendar is a tabular hebrew + * calendar where the dates are calculated by arithmetic rules. This differs from + * the religious Hebrew calendar which is used to mark the beginning of particular + * holidays. The religious calendar depends on the first sighting of the new + * crescent moon to determine the first day of the new month. Because humans and + * weather are both involved, the actual time of sighting varies, so it is not + * really possible to precalculate the religious calendar. Certain groups, such + * as the Hebrew Society of North America, decreed in in 2007 that they will use + * a calendar based on calculations rather than observations to determine the + * beginning of lunar months, and therefore the dates of holidays.

+ * + * @param {Object=} options Options governing the construction of this instance + * @constructor + * @extends Calendar + */ +var HebrewCal = function(options) { + this.type = "hebrew"; + + if (options && typeof(options.onLoad) === "function") { + options.onLoad(this); + } +}; + +/** + * Return the number of days elapsed in the Hebrew calendar before the + * given year starts. + * @private + * @param {number} year the year for which the number of days is sought + * @return {number} the number of days elapsed in the Hebrew calendar before the + * given year starts + */ +HebrewCal.elapsedDays = function(year) { + var months = Math.floor(((235*year) - 234)/19); + var parts = 204 + 793 * MathUtils.mod(months, 1080); + var hours = 11 + 12 * months + 793 * Math.floor(months/1080) + + Math.floor(parts/1080); + var days = 29 * months + Math.floor(hours/24); + return (MathUtils.mod(3 * (days + 1), 7) < 3) ? days + 1 : days; +}; + +/** + * Return the number of days that the New Year's (Rosh HaShanah) in the Hebrew + * calendar will be corrected for the given year. Corrections are caused because New + * Year's is not allowed to start on certain days of the week. To deal with + * it, the start of the new year is corrected for the next year by adding a + * day to the 8th month (Heshvan) and/or the 9th month (Kislev) in the current + * year to make them 30 days long instead of 29. + * + * @private + * @param {number} year the year for which the correction is sought + * @param {number} elapsed number of days elapsed up to this year + * @return {number} the number of days correction in the current year to make sure + * Rosh HaShanah does not fall on undesirable days of the week + */ +HebrewCal.newYearsCorrection = function(year, elapsed) { + var lastYear = HebrewCal.elapsedDays(year-1), + thisYear = elapsed, + nextYear = HebrewCal.elapsedDays(year+1); + + return (nextYear - thisYear) == 356 ? 2 : ((thisYear - lastYear) == 382 ? 1 : 0); +}; + +/** + * Return the rata die date of the new year for the given hebrew year. + * @private + * @param {number} year the year for which the new year is needed + * @return {number} the rata die date of the new year + */ +HebrewCal.newYear = function(year) { + var elapsed = HebrewCal.elapsedDays(year); + + return elapsed + HebrewCal.newYearsCorrection(year, elapsed); +}; + +/** + * Return the number of days in the given year. Years contain a variable number of + * days because the date of Rosh HaShanah (New Year's) changes so that it doesn't + * fall on particular days of the week. Days are added to the months of Heshvan + * and/or Kislev in the previous year in order to prevent the current year's New + * Year from being on Sunday, Wednesday, or Friday. + * + * @param {number} year the year for which the length is sought + * @return {number} number of days in the given year + */ +HebrewCal.daysInYear = function(year) { + return HebrewCal.newYear(year+1) - HebrewCal.newYear(year); +}; + +/** + * Return true if the given year contains a long month of Heshvan. That is, + * it is 30 days instead of 29. + * + * @private + * @param {number} year the year in which that month is questioned + * @return {boolean} true if the given year contains a long month of Heshvan + */ +HebrewCal.longHeshvan = function(year) { + return MathUtils.mod(HebrewCal.daysInYear(year), 10) === 5; +}; + +/** + * Return true if the given year contains a long month of Kislev. That is, + * it is 30 days instead of 29. + * + * @private + * @param {number} year the year in which that month is questioned + * @return {boolean} true if the given year contains a short month of Kislev + */ +HebrewCal.longKislev = function(year) { + return MathUtils.mod(HebrewCal.daysInYear(year), 10) !== 3; +}; + +/** + * Return the date of the last day of the month for the given year. The date of + * the last day of the month is variable because a number of months gain an extra + * day in leap years, and it is variable which months gain a day for each leap + * year and which do not. + * + * @param {number} month the month for which the number of days is sought + * @param {number} year the year in which that month is + * @return {number} the number of days in the given month and year + */ +HebrewCal.prototype.lastDayOfMonth = function(month, year) { + switch (month) { + case 2: + case 4: + case 6: + case 10: + return 29; + case 13: + return this.isLeapYear(year) ? 29 : 0; + case 8: + return HebrewCal.longHeshvan(year) ? 30 : 29; + case 9: + return HebrewCal.longKislev(year) ? 30 : 29; + case 12: + case 1: + case 3: + case 5: + case 7: + case 11: + return 30; + default: + return 0; + } +}; + +/** + * Return the number of months in the given year. The number of months in a year varies + * for luni-solar calendars because in some years, an extra month is needed to extend the + * days in a year to an entire solar year. The month is represented as a 1-based number + * where 1=first month, 2=second month, etc. + * + * @param {number} year a year for which the number of months is sought + */ +HebrewCal.prototype.getNumMonths = function(year) { + return this.isLeapYear(year) ? 13 : 12; +}; + +/** + * Return the number of days in a particular month in a particular year. This function + * can return a different number for a month depending on the year because of leap years. + * + * @param {number} month the month for which the length is sought + * @param {number} year the year within which that month can be found + * @returns {number} the number of days within the given month in the given year, or + * 0 for an invalid month in the year + */ +HebrewCal.prototype.getMonLength = function(month, year) { + if (month < 1 || month > 13 || (month == 13 && !this.isLeapYear(year))) { + return 0; + } + return this.lastDayOfMonth(month, year); +}; + +/** + * Return true if the given year is a leap year in the Hebrew calendar. + * The year parameter may be given as a number, or as a HebrewDate object. + * @param {number|Object} year the year for which the leap year information is being sought + * @returns {boolean} true if the given year is a leap year + */ +HebrewCal.prototype.isLeapYear = function(year) { + var y = (typeof(year) == 'number') ? year : year.year; + return (MathUtils.mod(1 + 7 * y, 19) < 7); +}; + +/** + * Return the type of this calendar. + * + * @returns {string} the name of the type of this calendar + */ +HebrewCal.prototype.getType = function() { + return this.type; +}; + + +/*register this calendar for the factory method */ +Calendar._constructors["hebrew"] = HebrewCal; + + +/* + * IslamicCal.js - Represent a Islamic calendar object. + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + +/** + * @class + * Construct a new Islamic calendar object. This class encodes information about + * the civil Islamic calendar. The civil Islamic calendar is a tabular islamic + * calendar where the dates are calculated by arithmetic rules. This differs from + * the religious Islamic calendar which is used to mark the beginning of particular + * holidays. The religious calendar depends on the first sighting of the new + * crescent moon to determine the first day of the new month. Because humans and + * weather are both involved, the actual time of sighting varies, so it is not + * really possible to precalculate the religious calendar. Certain groups, such + * as the Islamic Society of North America, decreed in in 2007 that they will use + * a calendar based on calculations rather than observations to determine the + * beginning of lunar months, and therefore the dates of holidays.

+ * + * @param {Object=} options Options governing the construction of this instance + * @constructor + * @extends Calendar + */ +var IslamicCal = function(options) { + this.type = "islamic"; + + if (options && typeof(options.onLoad) === "function") { + options.onLoad(this); + } +}; + +/** + * the lengths of each month + * @private + * @const + * @type Array. + */ +IslamicCal.monthLengths = [ + 30, /* Muharram */ + 29, /* Saffar */ + 30, /* Rabi'I */ + 29, /* Rabi'II */ + 30, /* Jumada I */ + 29, /* Jumada II */ + 30, /* Rajab */ + 29, /* Sha'ban */ + 30, /* Ramadan */ + 29, /* Shawwal */ + 30, /* Dhu al-Qa'da */ + 29 /* Dhu al-Hijja */ +]; + + +/** + * Return the number of months in the given year. The number of months in a year varies + * for luni-solar calendars because in some years, an extra month is needed to extend the + * days in a year to an entire solar year. The month is represented as a 1-based number + * where 1=first month, 2=second month, etc. + * + * @param {number} year a year for which the number of months is sought + */ +IslamicCal.prototype.getNumMonths = function(year) { + return 12; +}; + +/** + * Return the number of days in a particular month in a particular year. This function + * can return a different number for a month depending on the year because of things + * like leap years. + * + * @param {number} month the month for which the length is sought + * @param {number} year the year within which that month can be found + * @return {number} the number of days within the given month in the given year + */ +IslamicCal.prototype.getMonLength = function(month, year) { + if (month !== 12) { + return IslamicCal.monthLengths[month-1]; + } else { + return this.isLeapYear(year) ? 30 : 29; + } +}; + +/** + * Return true if the given year is a leap year in the Islamic calendar. + * The year parameter may be given as a number, or as a IslamicDate object. + * @param {number} year the year for which the leap year information is being sought + * @return {boolean} true if the given year is a leap year + */ +IslamicCal.prototype.isLeapYear = function(year) { + return (MathUtils.mod((14 + 11 * year), 30) < 11); +}; + +/** + * Return the type of this calendar. + * + * @return {string} the name of the type of this calendar + */ +IslamicCal.prototype.getType = function() { + return this.type; +}; + + +/*register this calendar for the factory method */ +Calendar._constructors["islamic"] = IslamicCal; + + +/* + * IslamicRataDie.js - Represent an RD date in the Islamic calendar + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + +/** + * @class + * Construct a new Islamic RD date number object. The constructor parameters can + * contain any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. + * + *
  • julianday - sets the time of this instance according to the given + * Julian Day instance or the Julian Day given as a float + * + *
  • year - any integer, including 0 + * + *
  • month - 1 to 12, where 1 means January, 2 means February, etc. + * + *
  • day - 1 to 31 + * + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + * + *
  • minute - 0 to 59 + * + *
  • second - 0 to 59 + * + *
  • millisecond - 0 to 999 + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If the constructor is called with another Islamic date instance instead of + * a parameter block, the other instance acts as a parameter block and its + * settings are copied into the current instance.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above are present, then the RD is calculate based on + * the current date at the time of instantiation.

+ * + * If any of the properties from year through millisecond are not + * specified in the params, it is assumed that they have the smallest possible + * value in the range for the property (zero or one).

+ * + * + * @private + * @constructor + * @extends RataDie + * @param {Object=} params parameters that govern the settings and behaviour of this Islamic RD date + */ +var IslamicRataDie = function(params) { + this.cal = params && params.cal || new IslamicCal(); + this.rd = NaN; + RataDie.call(this, params); +}; + +IslamicRataDie.prototype = new RataDie(); +IslamicRataDie.prototype.parent = RataDie; +IslamicRataDie.prototype.constructor = IslamicRataDie; + +/** + * The difference between a zero Julian day and the first Islamic date + * of Friday, July 16, 622 CE Julian. + * @private + * @type number + */ +IslamicRataDie.prototype.epoch = 1948439.5; + +/** + * Calculate the Rata Die (fixed day) number of the given date from the + * date components. + * + * @protected + * @param {Object} date the date components to calculate the RD from + */ +IslamicRataDie.prototype._setDateComponents = function(date) { + var days = (date.year - 1) * 354 + + Math.ceil(29.5 * (date.month - 1)) + + date.day + + Math.floor((3 + 11 * date.year) / 30) - 1; + var time = (date.hour * 3600000 + + date.minute * 60000 + + date.second * 1000 + + date.millisecond) / + 86400000; + + //console.log("getRataDie: converting " + JSON.stringify(date)); + //console.log("getRataDie: days is " + days); + //console.log("getRataDie: time is " + time); + //console.log("getRataDie: rd is " + (days + time)); + + this.rd = days + time; +}; + +/* + * IslamicDate.js - Represent a date in the Islamic calendar + * + * Copyright © 2012-2015, 2018, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + + + + + + + +/** + * @class + * Construct a new civil Islamic date object. The constructor can be called + * with a params object that can contain the following properties:

+ * + *

    + *
  • julianday - the Julian Day to set into this date + *
  • year - any integer except 0. Years go from -1 (BCE) to 1 (CE), skipping the zero year + *
  • month - 1 to 12, where 1 means Muharram, 2 means Saffar, etc. + *
  • day - 1 to 30 + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + *
  • minute - 0 to 59 + *
  • second - 0 to 59 + *
  • millisecond - 0 to 999 + *
  • locale - the TimeZone instance or time zone name as a string + * of this julian date. The date/time is kept in the local time. The time zone + * is used later if this date is formatted according to a different time zone and + * the difference has to be calculated, or when the date format has a time zone + * component in it. + *
  • timezone - the time zone of this instance. If the time zone is not + * given, it can be inferred from this locale. For locales that span multiple + * time zones, the one with the largest population is chosen as the one that + * represents the locale. + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If called with another Islamic date argument, the date components of the given + * date are copied into the current one.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above + * from julianday through millisecond are present, then the date + * components are + * filled in with the current date at the time of instantiation. Note that if + * you do not give the time zone when defaulting to the current time and the + * time zone for all of ilib was not set with ilib.setTimeZone(), then the + * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich + * Mean Time").

+ * + * + * @constructor + * @extends IDate + * @param {Object=} params parameters that govern the settings and behaviour of this Islamic date + */ +var IslamicDate = function(params) { + this.cal = new IslamicCal(); + + params = params || {}; + + if (params.timezone) { + this.timezone = params.timezone; + } + if (params.locale) { + this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; + } + + if (!this.timezone) { + if (this.locale) { + new LocaleInfo(this.locale, { + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(li) { + this.li = li; + this.timezone = li.getTimeZone(); + this._init(params); + }) + }); + } else { + this.timezone = "local"; + this._init(params); + } + } else { + this._init(params); + } +}; + +IslamicDate.prototype = new IDate({noinstance: true}); +IslamicDate.prototype.parent = IDate; +IslamicDate.prototype.constructor = IslamicDate; + +/** + * Initialize the date + * @private + */ +IslamicDate.prototype._init = function (params) { + if (params.year || params.month || params.day || params.hour || + params.minute || params.second || params.millisecond ) { + /** + * Year in the Islamic calendar. + * @type number + */ + this.year = parseInt(params.year, 10) || 0; + + /** + * The month number, ranging from 1 to 12 (December). + * @type number + */ + this.month = parseInt(params.month, 10) || 1; + + /** + * The day of the month. This ranges from 1 to 30. + * @type number + */ + this.day = parseInt(params.day, 10) || 1; + + /** + * The hour of the day. This can be a number from 0 to 23, as times are + * stored unambiguously in the 24-hour clock. + * @type number + */ + this.hour = parseInt(params.hour, 10) || 0; + + /** + * The minute of the hours. Ranges from 0 to 59. + * @type number + */ + this.minute = parseInt(params.minute, 10) || 0; + + /** + * The second of the minute. Ranges from 0 to 59. + * @type number + */ + this.second = parseInt(params.second, 10) || 0; + + /** + * The millisecond of the second. Ranges from 0 to 999. + * @type number + */ + this.millisecond = parseInt(params.millisecond, 10) || 0; + + /** + * The day of the year. Ranges from 1 to 355. + * @type number + */ + this.dayOfYear = parseInt(params.dayOfYear, 10); + + if (typeof(params.dst) === 'boolean') { + this.dst = params.dst; + } + + this.rd = this.newRd(this); + + new TimeZone({ + id: this.timezone, + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(tz) { + this.tz = tz; + // add the time zone offset to the rd to convert to UTC + // getOffsetMillis requires that this.year, this.rd, and this.dst + // are set in order to figure out which time zone rules apply and + // what the offset is at that point in the year + this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; + if (this.offset !== 0) { + this.rd = this.newRd({ + rd: this.rd.getRataDie() - this.offset + }); + } + this._init2(params); + }) + }); + } else { + this._init2(params); + } +}; + +/** + * Finish initializing this date object + * @private + */ +IslamicDate.prototype._init2 = function (params) { + if (!this.rd) { + this.rd = this.newRd(params); + this._calcDateComponents(); + } + + if (typeof(params.onLoad) === "function") { + params.onLoad(this); + } +}; + +/** + * the cumulative lengths of each month, for a non-leap year + * @private + * @const + * @type Array. + */ +IslamicDate.cumMonthLengths = [ + 0, /* Muharram */ + 30, /* Saffar */ + 59, /* Rabi'I */ + 89, /* Rabi'II */ + 118, /* Jumada I */ + 148, /* Jumada II */ + 177, /* Rajab */ + 207, /* Sha'ban */ + 236, /* Ramadan */ + 266, /* Shawwal */ + 295, /* Dhu al-Qa'da */ + 325, /* Dhu al-Hijja */ + 354 +]; + +/** + * Number of days difference between RD 0 of the Gregorian calendar and + * RD 0 of the Islamic calendar. + * @private + * @const + * @type number + */ +IslamicDate.GregorianDiff = 227015; + +/** + * Return a new RD for this date type using the given params. + * @protected + * @param {Object=} params the parameters used to create this rata die instance + * @returns {RataDie} the new RD instance for the given params + */ +IslamicDate.prototype.newRd = function (params) { + return new IslamicRataDie(params); +}; + +/** + * Return the year for the given RD + * @private + * @param {number} rd RD to calculate from + * @returns {number} the year for the RD + */ +IslamicDate.prototype._calcYear = function(rd) { + return Math.floor((30 * rd + 10646) / 10631); +}; + +/** + * Calculate date components for the given RD date. + * @private + */ +IslamicDate.prototype._calcDateComponents = function () { + var remainder, + rd = this.rd.getRataDie(); + + this.year = this._calcYear(rd); + + if (typeof(this.offset) === "undefined") { + this.year = this._calcYear(rd); + + // now offset the RD by the time zone, then recalculate in case we were + // near the year boundary + if (!this.tz) { + this.tz = new TimeZone({id: this.timezone}); + } + this.offset = this.tz.getOffsetMillis(this) / 86400000; + } + + if (this.offset !== 0) { + rd += this.offset; + this.year = this._calcYear(rd); + } + + //console.log("IslamicDate.calcComponent: calculating for rd " + rd); + //console.log("IslamicDate.calcComponent: year is " + ret.year); + var yearStart = this.newRd({ + year: this.year, + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }); + remainder = rd - yearStart.getRataDie() + 1; + + this.dayOfYear = remainder; + + //console.log("IslamicDate.calcComponent: remainder is " + remainder); + + this.month = SearchUtils.bsearch(remainder, IslamicDate.cumMonthLengths); + remainder -= IslamicDate.cumMonthLengths[this.month-1]; + + //console.log("IslamicDate.calcComponent: month is " + this.month + " and remainder is " + remainder); + + this.day = Math.floor(remainder); + remainder -= this.day; + + //console.log("IslamicDate.calcComponent: day is " + this.day + " and remainder is " + remainder); + + // now convert to milliseconds for the rest of the calculation + remainder = Math.round(remainder * 86400000); + + this.hour = Math.floor(remainder/3600000); + remainder -= this.hour * 3600000; + + this.minute = Math.floor(remainder/60000); + remainder -= this.minute * 60000; + + this.second = Math.floor(remainder/1000); + remainder -= this.second * 1000; + + this.millisecond = remainder; +}; + +/** + * Return the day of the week of this date. The day of the week is encoded + * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. + * + * @return {number} the day of the week + */ +IslamicDate.prototype.getDayOfWeek = function() { + var rd = Math.floor(this.rd.getRataDie() + (this.offset || 0)); + return MathUtils.mod(rd-2, 7); +}; + +/** + * Return the ordinal day of the year. Days are counted from 1 and proceed linearly up to + * 354 or 355, regardless of months or weeks, etc. That is, Muharran 1st is day 1, and + * Dhu al-Hijja 29 is 354. + * @return {number} the ordinal day of the year + */ +IslamicDate.prototype.getDayOfYear = function() { + return IslamicDate.cumMonthLengths[this.month-1] + this.day; +}; + +/** + * Return the era for this date as a number. The value for the era for Islamic + * calendars is -1 for "before the Islamic era" and 1 for "the Islamic era". + * Islamic era dates are any date after Muharran 1, 1, which is the same as + * July 16, 622 CE in the Gregorian calendar. + * + * @return {number} 1 if this date is in the common era, -1 if it is before the + * common era + */ +IslamicDate.prototype.getEra = function() { + return (this.year < 1) ? -1 : 1; +}; + +/** + * Return the name of the calendar that governs this date. + * + * @return {string} a string giving the name of the calendar + */ +IslamicDate.prototype.getCalendar = function() { + return "islamic"; +}; + +//register with the factory method +IDate._constructors["islamic"] = IslamicDate; + + +/* + * ThaiSolarCal.js - Represent a Thai solar calendar object. + * + * Copyright © 2013-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + +/** + * @class + * Construct a new Thai solar calendar object. This class encodes information about + * a Thai solar calendar.

+ * + * @param {Object=} options Options governing the construction of this instance + * @constructor + * @extends Calendar + */ +var ThaiSolarCal = function(options) { + this.type = "thaisolar"; + + if (options && typeof(options.onLoad) === "function") { + options.onLoad(this); + } +}; + +ThaiSolarCal.prototype = new GregorianCal({noinstance: true}); +ThaiSolarCal.prototype.parent = GregorianCal; +ThaiSolarCal.prototype.constructor = ThaiSolarCal; + +/** + * Return true if the given year is a leap year in the Thai solar calendar. + * The year parameter may be given as a number, or as a ThaiSolarDate object. + * @param {number|ThaiSolarDate} year the year for which the leap year information is being sought + * @return {boolean} true if the given year is a leap year + */ +ThaiSolarCal.prototype.isLeapYear = function(year) { + var y = (typeof(year) === 'number' ? year : year.getYears()); + y -= 543; + var centuries = MathUtils.mod(y, 400); + return (MathUtils.mod(y, 4) === 0 && centuries !== 100 && centuries !== 200 && centuries !== 300); +}; + + +/* register this calendar for the factory method */ +Calendar._constructors["thaisolar"] = ThaiSolarCal; + + +/* + * ThaiSolarDate.js - Represent a date in the ThaiSolar calendar + * + * Copyright © 2013-2015, 2018, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + + + +/** + * @class + * Construct a new Thai solar date object. The constructor parameters can + * contain any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. + * + *
  • julianday - sets the time of this instance according to the given + * Julian Day instance or the Julian Day given as a float + * + *
  • year - any integer, including 0 + * + *
  • month - 1 to 12, where 1 means January, 2 means February, etc. + * + *
  • day - 1 to 31 + * + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + * + *
  • minute - 0 to 59 + * + *
  • second - 0 to 59 + * + *
  • millisecond - 0 to 999 + * + *
  • timezone - the TimeZone instance or time zone name as a string + * of this Thai solar date. The date/time is kept in the local time. The time zone + * is used later if this date is formatted according to a different time zone and + * the difference has to be calculated, or when the date format has a time zone + * component in it. + * + *
  • locale - locale for this Thai solar date. If the time zone is not + * given, it can be inferred from this locale. For locales that span multiple + * time zones, the one with the largest population is chosen as the one that + * represents the locale. + *
+ * + * If the constructor is called with another Thai solar date instance instead of + * a parameter block, the other instance acts as a parameter block and its + * settings are copied into the current instance.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above + * from unixtime through millisecond are present, then the date + * components are + * filled in with the current date at the time of instantiation. Note that if + * you do not give the time zone when defaulting to the current time and the + * time zone for all of ilib was not set with ilib.setTimeZone(), then the + * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich + * Mean Time").

+ * + * If any of the properties from year through millisecond are not + * specified in the params, it is assumed that they have the smallest possible + * value in the range for the property (zero or one).

+ * + * + * @constructor + * @extends GregorianDate + * @param {Object=} params parameters that govern the settings and behaviour of this Thai solar date + */ +var ThaiSolarDate = function(params) { + var p = {}; + + if (params) { + JSUtils.shallowCopy(params, p); + + // there is 198327 days difference between the Thai solar and + // Gregorian epochs which is equivalent to 543 years + if (typeof(p.year) !== 'undefined') { + p.year -= 543; + } + if (typeof(p.rd) !== 'undefined') { + p.rd -= 198327; + } + } + this.rd = null; // clear these out so that the GregorianDate constructor can set it + this.offset = undefined; + //console.log("ThaiSolarDate.constructor: date is " + JSON.stringify(this) + " parent is " + JSON.stringify(this.parent) + " and parent.parent is " + JSON.stringify(this.parent.parent)); + + p.onLoad = ilib.bind(this, function(gd) { + this.cal = new ThaiSolarCal(); + + // make sure the year is set correctly from the original params + if (params && typeof(params.year) !== 'undefined') { + this.year = parseInt(params.year, 10); + } + + if (params && typeof(params.onLoad) === "function") { + params.onLoad(gd); + } + }); + + GregorianDate.call(this, p); +}; + +ThaiSolarDate.prototype = new GregorianDate({noinstance: true}); +ThaiSolarDate.prototype.parent = GregorianDate.prototype; +ThaiSolarDate.prototype.constructor = ThaiSolarDate; + +/** + * the difference between a zero Julian day and the zero Thai Solar date. + * This is some 543 years before the start of the Gregorian epoch. + * @private + * @type number + */ +ThaiSolarDate.epoch = 1523097.5; + +/** + * Calculate the date components for the current time zone + * @private + */ +ThaiSolarDate.prototype._calcDateComponents = function () { + // there is 198327 days difference between the Thai solar and + // Gregorian epochs which is equivalent to 543 years + // console.log("ThaiSolarDate._calcDateComponents: date is " + JSON.stringify(this) + " parent is " + JSON.stringify(this.parent) + " and parent.parent is " + JSON.stringify(this.parent.parent)); + this.parent._calcDateComponents.call(this); + this.year += 543; +}; + +/** + * Return the Rata Die (fixed day) number of this date. + * + * @protected + * @return {number} the rd date as a number + */ +ThaiSolarDate.prototype.getRataDie = function() { + // there is 198327 days difference between the Thai solar and + // Gregorian epochs which is equivalent to 543 years + return this.rd.getRataDie() + 198327; +}; + +/** + * Return a new Gregorian date instance that represents the first instance of the + * given day of the week before the current date. The day of the week is encoded + * as a number where 0 = Sunday, 1 = Monday, etc. + * + * @param {number} dow the day of the week before the current date that is being sought + * @return {IDate} the date being sought + */ +ThaiSolarDate.prototype.before = function (dow) { + return new ThaiSolarDate({ + rd: this.rd.before(dow, this.offset) + 198327, + timezone: this.timezone + }); +}; + +/** + * Return a new Gregorian date instance that represents the first instance of the + * given day of the week after the current date. The day of the week is encoded + * as a number where 0 = Sunday, 1 = Monday, etc. + * + * @param {number} dow the day of the week after the current date that is being sought + * @return {IDate} the date being sought + */ +ThaiSolarDate.prototype.after = function (dow) { + return new ThaiSolarDate({ + rd: this.rd.after(dow, this.offset) + 198327, + timezone: this.timezone + }); +}; + +/** + * Return a new Gregorian date instance that represents the first instance of the + * given day of the week on or before the current date. The day of the week is encoded + * as a number where 0 = Sunday, 1 = Monday, etc. + * + * @param {number} dow the day of the week on or before the current date that is being sought + * @return {IDate} the date being sought + */ +ThaiSolarDate.prototype.onOrBefore = function (dow) { + return new ThaiSolarDate({ + rd: this.rd.onOrBefore(dow, this.offset) + 198327, + timezone: this.timezone + }); +}; + +/** + * Return a new Gregorian date instance that represents the first instance of the + * given day of the week on or after the current date. The day of the week is encoded + * as a number where 0 = Sunday, 1 = Monday, etc. + * + * @param {number} dow the day of the week on or after the current date that is being sought + * @return {IDate} the date being sought + */ +ThaiSolarDate.prototype.onOrAfter = function (dow) { + return new ThaiSolarDate({ + rd: this.rd.onOrAfter(dow, this.offset) + 198327, + timezone: this.timezone + }); +}; + +/** + * Return the name of the calendar that governs this date. + * + * @return {string} a string giving the name of the calendar + */ +ThaiSolarDate.prototype.getCalendar = function() { + return "thaisolar"; +}; + +//register with the factory method +IDate._constructors["thaisolar"] = ThaiSolarDate; + + +/* + * PersRataDie.js - Represent a rata die date in the Persian calendar + * + * Copyright © 2014-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + + +/** + * @class + * Construct a new Persian RD date number object. The constructor parameters can + * contain any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970, Gregorian + * + *
  • julianday - sets the time of this instance according to the given + * Julian Day instance or the Julian Day given as a float + * + *
  • year - any integer, including 0 + * + *
  • month - 1 to 12, where 1 means Farvardin, 2 means Ordibehesht, etc. + * + *
  • day - 1 to 31 + * + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + * + *
  • minute - 0 to 59 + * + *
  • second - 0 to 59 + * + *
  • millisecond - 0 to 999 + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If the constructor is called with another Persian date instance instead of + * a parameter block, the other instance acts as a parameter block and its + * settings are copied into the current instance.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above are present, then the RD is calculate based on + * the current date at the time of instantiation.

+ * + * If any of the properties from year through millisecond are not + * specified in the params, it is assumed that they have the smallest possible + * value in the range for the property (zero or one).

+ * + * + * @private + * @constructor + * @extends RataDie + * @param {Object=} params parameters that govern the settings and behaviour of this Persian RD date + */ +var PersRataDie = function(params) { + this.rd = NaN; + Astro.initAstro( + params && typeof(params.sync) === 'boolean' ? params.sync : true, + params && params.loadParams, + ilib.bind(this, function (x) { + RataDie.call(this, params); + if (params && typeof(params.callback) === 'function') { + params.callback(this); + } + }) + ); +}; + +PersRataDie.prototype = new RataDie(); +PersRataDie.prototype.parent = RataDie; +PersRataDie.prototype.constructor = PersRataDie; + +/** + * The difference between a zero Julian day and the first Persian date + * @private + * @type number + */ +PersRataDie.prototype.epoch = 1948319.5; + +/** + * @protected + */ +PersRataDie.prototype._tehranEquinox = function(year) { + var equJED, equJD, equAPP, equTehran, dtTehran, eot; + + // March equinox in dynamical time + equJED = Astro._equinox(year, 0); + + // Correct for delta T to obtain Universal time + equJD = equJED - (Astro._deltat(year) / (24 * 60 * 60)); + + // Apply the equation of time to yield the apparent time at Greenwich + eot = Astro._equationOfTime(equJED) * 360; + eot = (eot - 20 * Math.floor(eot/20)) / 360; + equAPP = equJD + eot; + + /* + * Finally, we must correct for the constant difference between + * the Greenwich meridian and the time zone standard for Iran + * Standard time, 52 degrees 30 minutes to the East. + */ + + dtTehran = 52.5 / 360; + equTehran = equAPP + dtTehran; + + return equTehran; +}; + +/** + * Calculate the year based on the given Julian day. + * @protected + * @param {number} jd the Julian day to get the year for + * @return {{year:number,equinox:number}} the year and the last equinox + */ +PersRataDie.prototype._getYear = function(jd) { + var gd = new GregorianDate({julianday: jd}); + var guess = gd.getYears() - 2, + nexteq, + ret = {}; + + //ret.equinox = Math.floor(this._tehranEquinox(guess)); + ret.equinox = this._tehranEquinox(guess); + while (ret.equinox > jd) { + guess--; + // ret.equinox = Math.floor(this._tehranEquinox(guess)); + ret.equinox = this._tehranEquinox(guess); + } + nexteq = ret.equinox - 1; + // if the equinox falls after noon, then the day after that is the start of the + // next year, so truncate the JD to get the noon of the day before the day with + //the equinox on it, then add 0.5 to get the midnight of that day + while (!(Math.floor(ret.equinox) + 0.5 <= jd && jd < Math.floor(nexteq) + 0.5)) { + ret.equinox = nexteq; + guess++; + // nexteq = Math.floor(this._tehranEquinox(guess)); + nexteq = this._tehranEquinox(guess); + } + + // Mean solar tropical year is 365.24219878 days + ret.year = Math.round((ret.equinox - this.epoch - 1) / 365.24219878) + 1; + + return ret; +}; + +/** + * Calculate the Rata Die (fixed day) number of the given date from the + * date components. + * + * @protected + * @param {Object} date the date components to calculate the RD from + */ +PersRataDie.prototype._setDateComponents = function(date) { + var adr, guess, jd; + + // Mean solar tropical year is 365.24219878 days + guess = this.epoch + 1 + 365.24219878 * ((date.year || 0) - 2); + adr = {year: (date.year || 0) - 1, equinox: 0}; + + while (adr.year < date.year) { + adr = this._getYear(guess); + guess = adr.equinox + (365.24219878 + 2); + } + + jd = Math.floor(adr.equinox) + + (((date.month || 0) <= 7) ? + (((date.month || 1) - 1) * 31) : + ((((date.month || 1) - 1) * 30) + 6) + ) + + ((date.day || 1) - 1 + 0.5); // add 0.5 so that we convert JDs, which start at noon to RDs which start at midnight + + jd += ((date.hour || 0) * 3600000 + + (date.minute || 0) * 60000 + + (date.second || 0) * 1000 + + (date.millisecond || 0)) / + 86400000; + + this.rd = jd - this.epoch; +}; + +/** + * Return the rd number of the particular day of the week on or before the + * given rd. eg. The Sunday on or before the given rd. + * @private + * @param {number} rd the rata die date of the reference date + * @param {number} dayOfWeek the day of the week that is being sought relative + * to the current date + * @return {number} the rd of the day of the week + */ +PersRataDie.prototype._onOrBefore = function(rd, dayOfWeek) { + return rd - MathUtils.mod(Math.floor(rd) - dayOfWeek - 3, 7); +}; + +/* + * PersianCal.js - Represent a Persian astronomical (Hijjri) calendar object. + * + * Copyright © 2014-2015,2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + +/** + * @class + * Construct a new Persian astronomical (Hijjri) calendar object. This class encodes + * information about a Persian calendar. This class differs from the + * Persian calendar in that the leap years are calculated based on the + * astronomical observations of the sun in Teheran, instead of calculating + * the leap years based on a regular cyclical rhythm algorithm.

+ * + * @param {Object=} options Options governing the construction of this instance + * @constructor + * @extends Calendar + */ +var PersianCal = function(options) { + this.type = "persian"; + + if (options && typeof(options.onLoad) === "function") { + options.onLoad(this); + } +}; + +/** + * the lengths of each month + * @private + * @const + * @type Array. + */ +PersianCal.monthLengths = [ + 31, // Farvardin + 31, // Ordibehesht + 31, // Khordad + 31, // Tir + 31, // Mordad + 31, // Shahrivar + 30, // Mehr + 30, // Aban + 30, // Azar + 30, // Dey + 30, // Bahman + 29 // Esfand +]; + +/** + * Return the number of months in the given year. The number of months in a year varies + * for some luni-solar calendars because in some years, an extra month is needed to extend the + * days in a year to an entire solar year. The month is represented as a 1-based number + * where 1=first month, 2=second month, etc. + * + * @param {number} year a year for which the number of months is sought + * @return {number} The number of months in the given year + */ +PersianCal.prototype.getNumMonths = function(year) { + return 12; +}; + +/** + * Return the number of days in a particular month in a particular year. This function + * can return a different number for a month depending on the year because of things + * like leap years. + * + * @param {number} month the month for which the length is sought + * @param {number} year the year within which that month can be found + * @return {number} the number of days within the given month in the given year + */ +PersianCal.prototype.getMonLength = function(month, year) { + if (month !== 12 || !this.isLeapYear(year)) { + return PersianCal.monthLengths[month-1]; + } else { + // Month 12, Esfand, has 30 days instead of 29 in leap years + return 30; + } +}; + +/** + * Return true if the given year is a leap year in the Persian astronomical calendar. + * @param {number} year the year for which the leap year information is being sought + * @return {boolean} true if the given year is a leap year + */ +PersianCal.prototype.isLeapYear = function(year) { + var rdNextYear = new PersRataDie({ + cal: this, + year: year + 1, + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }); + var rdThisYear = new PersRataDie({ + cal: this, + year: year, + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }); + return (rdNextYear.getRataDie() - rdThisYear.getRataDie()) > 365; +}; + +/** + * Return the type of this calendar. + * + * @return {string} the name of the type of this calendar + */ +PersianCal.prototype.getType = function() { + return this.type; +}; + +/* register this calendar for the factory method */ +Calendar._constructors["persian"] = PersianCal; + + +/* + * PersianDate.js - Represent a date in the Persian astronomical (Hijjri) calendar + * + * Copyright © 2014-2015, 2018, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + + + + + + + + +/** + * @class + * + * Construct a new Persian astronomical date object. The constructor parameters can + * contain any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970, Gregorian + * + *
  • julianday - sets the time of this instance according to the given + * Julian Day instance or the Julian Day given as a float + * + *
  • year - any integer, including 0 + * + *
  • month - 1 to 12, where 1 means Farvardin, 2 means Ordibehesht, etc. + * + *
  • day - 1 to 31 + * + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + * + *
  • minute - 0 to 59 + * + *
  • second - 0 to 59 + * + *
  • millisecond - 0 to 999 + * + *
  • timezone - the TimeZone instance or time zone name as a string + * of this persian date. The date/time is kept in the local time. The time zone + * is used later if this date is formatted according to a different time zone and + * the difference has to be calculated, or when the date format has a time zone + * component in it. + * + *
  • locale - locale for this persian date. If the time zone is not + * given, it can be inferred from this locale. For locales that span multiple + * time zones, the one with the largest population is chosen as the one that + * represents the locale. + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If the constructor is called with another Persian date instance instead of + * a parameter block, the other instance acts as a parameter block and its + * settings are copied into the current instance.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above + * from unixtime through millisecond are present, then the date + * components are + * filled in with the current date at the time of instantiation. Note that if + * you do not give the time zone when defaulting to the current time and the + * time zone for all of ilib was not set with ilib.setTimeZone(), then the + * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich + * Mean Time").

+ * + * If any of the properties from year through millisecond are not + * specified in the params, it is assumed that they have the smallest possible + * value in the range for the property (zero or one).

+ * + * + * @constructor + * @extends IDate + * @param {Object=} params parameters that govern the settings and behaviour of this Persian date + */ +var PersianDate = function(params) { + this.cal = new PersianCal(); + + params = params || {}; + + if (params.timezone) { + this.timezone = params.timezone; + } + if (params.locale) { + this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; + } + + if (!this.timezone) { + if (this.locale) { + new LocaleInfo(this.locale, { + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(li) { + this.li = li; + this.timezone = li.getTimeZone(); + this._init(params); + }) + }); + } else { + this.timezone = "local"; + this._init(params); + } + } else { + this._init(params); + } +}; + +PersianDate.prototype = new IDate({noinstance: true}); +PersianDate.prototype.parent = IDate; +PersianDate.prototype.constructor = PersianDate; + +/** + * Initialize this date object + * @private + */ +PersianDate.prototype._init = function (params) { + Astro.initAstro( + typeof(params.sync) === 'boolean' ? params.sync : true, + params.loadParams, + ilib.bind(this, function (x) { + if (params.year || params.month || params.day || params.hour || + params.minute || params.second || params.millisecond) { + /** + * Year in the Persian calendar. + * @type number + */ + this.year = parseInt(params.year, 10) || 0; + + /** + * The month number, ranging from 1 to 12 + * @type number + */ + this.month = parseInt(params.month, 10) || 1; + + /** + * The day of the month. This ranges from 1 to 31. + * @type number + */ + this.day = parseInt(params.day, 10) || 1; + + /** + * The hour of the day. This can be a number from 0 to 23, as times are + * stored unambiguously in the 24-hour clock. + * @type number + */ + this.hour = parseInt(params.hour, 10) || 0; + + /** + * The minute of the hours. Ranges from 0 to 59. + * @type number + */ + this.minute = parseInt(params.minute, 10) || 0; + + /** + * The second of the minute. Ranges from 0 to 59. + * @type number + */ + this.second = parseInt(params.second, 10) || 0; + + /** + * The millisecond of the second. Ranges from 0 to 999. + * @type number + */ + this.millisecond = parseInt(params.millisecond, 10) || 0; + + /** + * The day of the year. Ranges from 1 to 366. + * @type number + */ + this.dayOfYear = parseInt(params.dayOfYear, 10); + + if (typeof(params.dst) === 'boolean') { + this.dst = params.dst; + } + + this.newRd(JSUtils.merge(params, { + callback: ilib.bind(this, function(rd) { + this.rd = rd; + + new TimeZone({ + id: this.timezone, + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(tz) { + this.tz = tz; + // add the time zone offset to the rd to convert to UTC + // getOffsetMillis requires that this.year, this.rd, and this.dst + // are set in order to figure out which time zone rules apply and + // what the offset is at that point in the year + this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; + if (this.offset !== 0) { + this.rd = this.newRd({ + rd: this.rd.getRataDie() - this.offset + }); + } + this._init2(params); + }) + }); + }) + })); + + } else { + this._init2(params); + } + }) + ); +}; + +/** + * Finish initializing this date object + * @private + */ +PersianDate.prototype._init2 = function (params) { + if (!this.rd) { + this.newRd(JSUtils.merge(params, { + callback: ilib.bind(this, function(rd) { + this.rd = rd; + this._calcDateComponents(); + + if (typeof(params.onLoad) === "function") { + params.onLoad(this); + } + }) + })); + } else { + if (typeof(params.onLoad) === "function") { + params.onLoad(this); + } + } +}; + +/** + * the cumulative lengths of each month, for a non-leap year + * @private + * @const + * @type Array. + */ +PersianDate.cumMonthLengths = [ + 0, // Farvardin + 31, // Ordibehesht + 62, // Khordad + 93, // Tir + 124, // Mordad + 155, // Shahrivar + 186, // Mehr + 216, // Aban + 246, // Azar + 276, // Dey + 306, // Bahman + 336, // Esfand + 366 +]; + +/** + * Return a new RD for this date type using the given params. + * @protected + * @param {Object=} params the parameters used to create this rata die instance + * @returns {RataDie} the new RD instance for the given params + */ +PersianDate.prototype.newRd = function (params) { + return new PersRataDie(params); +}; + +/** + * Return the year for the given RD + * @private + * @param {number} rd RD to calculate from + * @returns {number} the year for the RD + */ +PersianDate.prototype._calcYear = function(rd) { + var julianday = rd + this.rd.epoch; + return this.rd._getYear(julianday).year; +}; + +/** + * Calculate date components for the given RD date. + * @private + */ +PersianDate.prototype._calcDateComponents = function () { + var remainder, + rd = this.rd.getRataDie(); + + this.year = this._calcYear(rd); + + if (typeof(this.offset) === "undefined") { + // now offset the RD by the time zone, then recalculate in case we were + // near the year boundary + if (!this.tz) { + this.tz = new TimeZone({id: this.timezone}); + } + this.offset = this.tz.getOffsetMillis(this) / 86400000; + } + + if (this.offset !== 0) { + rd += this.offset; + this.year = this._calcYear(rd); + } + + //console.log("PersDate.calcComponent: calculating for rd " + rd); + //console.log("PersDate.calcComponent: year is " + ret.year); + var yearStart = this.newRd({ + year: this.year, + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }); + remainder = rd - yearStart.getRataDie() + 1; + + this.dayOfYear = remainder; + + //console.log("PersDate.calcComponent: remainder is " + remainder); + + this.month = SearchUtils.bsearch(Math.floor(remainder), PersianDate.cumMonthLengths); + remainder -= PersianDate.cumMonthLengths[this.month-1]; + + //console.log("PersDate.calcComponent: month is " + this.month + " and remainder is " + remainder); + + this.day = Math.floor(remainder); + remainder -= this.day; + + //console.log("PersDate.calcComponent: day is " + this.day + " and remainder is " + remainder); + + // now convert to milliseconds for the rest of the calculation + remainder = Math.round(remainder * 86400000); + + this.hour = Math.floor(remainder/3600000); + remainder -= this.hour * 3600000; + + this.minute = Math.floor(remainder/60000); + remainder -= this.minute * 60000; + + this.second = Math.floor(remainder/1000); + remainder -= this.second * 1000; + + this.millisecond = remainder; +}; + +/** + * Return the day of the week of this date. The day of the week is encoded + * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. + * + * @return {number} the day of the week + */ +PersianDate.prototype.getDayOfWeek = function() { + var rd = Math.floor(this.getRataDie()); + return MathUtils.mod(rd-3, 7); +}; + +/** + * Return the ordinal day of the year. Days are counted from 1 and proceed linearly up to + * 365, regardless of months or weeks, etc. That is, Farvardin 1st is day 1, and + * December 31st is 365 in regular years, or 366 in leap years. + * @return {number} the ordinal day of the year + */ +PersianDate.prototype.getDayOfYear = function() { + return PersianDate.cumMonthLengths[this.month-1] + this.day; +}; + +/** + * Return the era for this date as a number. The value for the era for Persian + * calendars is -1 for "before the persian era" (BP) and 1 for "the persian era" (anno + * persico or AP). + * BP dates are any date before Farvardin 1, 1 AP. In the proleptic Persian calendar, + * there is a year 0, so any years that are negative or zero are BP. + * @return {number} 1 if this date is in the common era, -1 if it is before the + * common era + */ +PersianDate.prototype.getEra = function() { + return (this.year < 1) ? -1 : 1; +}; + +/** + * Return the name of the calendar that governs this date. + * + * @return {string} a string giving the name of the calendar + */ +PersianDate.prototype.getCalendar = function() { + return "persian"; +}; + +// register with the factory method +IDate._constructors["persian"] = PersianDate; + + +/* + * PersianAlgoCal.js - Represent a Persian algorithmic calendar object. + * + * Copyright © 2014-2015,2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + +/** + * @class + * Construct a new Persian algorithmic calendar object. This class encodes information about + * a Persian algorithmic calendar.

+ * + * @param {Object=} options Options governing the construction of this instance + * @constructor + * @extends Calendar + */ +var PersianAlgoCal = function(options) { + this.type = "persian-algo"; + + if (options && typeof(options.onLoad) === "function") { + options.onLoad(this); + } +}; + +/** + * the lengths of each month + * @private + * @const + * @type Array. + */ +PersianAlgoCal.monthLengths = [ + 31, // Farvardin + 31, // Ordibehesht + 31, // Khordad + 31, // Tir + 31, // Mordad + 31, // Shahrivar + 30, // Mehr + 30, // Aban + 30, // Azar + 30, // Dey + 30, // Bahman + 29 // Esfand +]; + +/** + * Return the number of months in the given year. The number of months in a year varies + * for some luni-solar calendars because in some years, an extra month is needed to extend the + * days in a year to an entire solar year. The month is represented as a 1-based number + * where 1=first month, 2=second month, etc. + * + * @param {number} year a year for which the number of months is sought + * @return {number} The number of months in the given year + */ +PersianAlgoCal.prototype.getNumMonths = function(year) { + return 12; +}; + +/** + * Return the number of days in a particular month in a particular year. This function + * can return a different number for a month depending on the year because of things + * like leap years. + * + * @param {number} month the month for which the length is sought + * @param {number} year the year within which that month can be found + * @return {number} the number of days within the given month in the given year + */ +PersianAlgoCal.prototype.getMonLength = function(month, year) { + if (month !== 12 || !this.isLeapYear(year)) { + return PersianAlgoCal.monthLengths[month-1]; + } else { + // Month 12, Esfand, has 30 days instead of 29 in leap years + return 30; + } +}; + +/** + * Return the equivalent year in the 2820 year cycle that begins on + * Far 1, 474. This particular cycle obeys the cycle-of-years formula + * whereas the others do not specifically. This cycle can be used as + * a proxy for other years outside of the cycle by shifting them into + * the cycle. + * @param {number} year year to find the equivalent cycle year for + * @returns {number} the equivalent cycle year + */ +PersianAlgoCal.prototype.equivalentCycleYear = function(year) { + var y = year - (year >= 0 ? 474 : 473); + return MathUtils.mod(y, 2820) + 474; +}; + +/** + * Return true if the given year is a leap year in the Persian calendar. + * The year parameter may be given as a number, or as a PersAlgoDate object. + * @param {number} year the year for which the leap year information is being sought + * @return {boolean} true if the given year is a leap year + */ +PersianAlgoCal.prototype.isLeapYear = function(year) { + return (MathUtils.mod((this.equivalentCycleYear(year) + 38) * 682, 2816) < 682); +}; + +/** + * Return the type of this calendar. + * + * @return {string} the name of the type of this calendar + */ +PersianAlgoCal.prototype.getType = function() { + return this.type; +}; + + +/* register this calendar for the factory method */ +Calendar._constructors["persian-algo"] = PersianAlgoCal; + + +/* + * PersAlsoRataDie.js - Represent an RD date in the Persian algorithmic calendar + * + * Copyright © 2014-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + +/** + * @class + * Construct a new Persian RD date number object. The constructor parameters can + * contain any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970, Gregorian + * + *
  • julianday - sets the time of this instance according to the given + * Julian Day instance or the Julian Day given as a float + * + *
  • year - any integer, including 0 + * + *
  • month - 1 to 12, where 1 means Farvardin, 2 means Ordibehesht, etc. + * + *
  • day - 1 to 31 + * + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + * + *
  • minute - 0 to 59 + * + *
  • second - 0 to 59 + * + *
  • millisecond - 0 to 999 + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If the constructor is called with another Persian date instance instead of + * a parameter block, the other instance acts as a parameter block and its + * settings are copied into the current instance.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above are present, then the RD is calculate based on + * the current date at the time of instantiation.

+ * + * If any of the properties from year through millisecond are not + * specified in the params, it is assumed that they have the smallest possible + * value in the range for the property (zero or one).

+ * + * + * @private + * @constructor + * @extends RataDie + * @param {Object=} params parameters that govern the settings and behaviour of this Persian RD date + */ +var PersAlgoRataDie = function(params) { + this.cal = params && params.cal || new PersianAlgoCal(); + this.rd = NaN; + RataDie.call(this, params); +}; + +PersAlgoRataDie.prototype = new RataDie(); +PersAlgoRataDie.prototype.parent = RataDie; +PersAlgoRataDie.prototype.constructor = PersAlgoRataDie; + +/** + * The difference between a zero Julian day and the first Persian date + * @private + * @type number + */ +PersAlgoRataDie.prototype.epoch = 1948319.5; + +/** + * the cumulative lengths of each month, for a non-leap year + * @private + * @const + * @type Array. + */ +PersAlgoRataDie.cumMonthLengths = [ + 0, // Farvardin + 31, // Ordibehesht + 62, // Khordad + 93, // Tir + 124, // Mordad + 155, // Shahrivar + 186, // Mehr + 216, // Aban + 246, // Azar + 276, // Dey + 306, // Bahman + 336, // Esfand + 365 +]; + +/** + * Calculate the Rata Die (fixed day) number of the given date from the + * date components. + * + * @protected + * @param {Object} date the date components to calculate the RD from + */ +PersAlgoRataDie.prototype._setDateComponents = function(date) { + var year = this.cal.equivalentCycleYear(date.year); + var y = date.year - (date.year >= 0 ? 474 : 473); + var rdOfYears = 1029983 * Math.floor(y/2820) + 365 * (year - 1) + Math.floor((682 * year - 110) / 2816); + var dayInYear = (date.month > 1 ? PersAlgoRataDie.cumMonthLengths[date.month-1] : 0) + date.day; + var rdtime = (date.hour * 3600000 + + date.minute * 60000 + + date.second * 1000 + + date.millisecond) / + 86400000; + + /* + // console.log("getRataDie: converting " + JSON.stringify(this)); + console.log("getRataDie: year is " + year); + console.log("getRataDie: rd of years is " + rdOfYears); + console.log("getRataDie: day in year is " + dayInYear); + console.log("getRataDie: rdtime is " + rdtime); + console.log("getRataDie: rd is " + (rdOfYears + dayInYear + rdtime)); + */ + + this.rd = rdOfYears + dayInYear + rdtime; +}; + +/** + * Return the rd number of the particular day of the week on or before the + * given rd. eg. The Sunday on or before the given rd. + * @private + * @param {number} rd the rata die date of the reference date + * @param {number} dayOfWeek the day of the week that is being sought relative + * to the current date + * @return {number} the rd of the day of the week + */ +PersAlgoRataDie.prototype._onOrBefore = function(rd, dayOfWeek) { + return rd - MathUtils.mod(Math.floor(rd) - dayOfWeek - 3, 7); +}; + +/* + * PersianAlgoDate.js - Represent a date in the Persian algorithmic calendar + * + * Copyright © 2014-2015, 2018, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + + + + + + + +/** + * @class + * + * Construct a new Persian date object. The constructor parameters can + * contain any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970, Gregorian + * + *
  • julianday - sets the time of this instance according to the given + * Julian Day instance or the Julian Day given as a float + * + *
  • year - any integer, including 0 + * + *
  • month - 1 to 12, where 1 means Farvardin, 2 means Ordibehesht, etc. + * + *
  • day - 1 to 31 + * + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + * + *
  • minute - 0 to 59 + * + *
  • second - 0 to 59 + * + *
  • millisecond - 0 to 999 + * + *
  • timezone - the TimeZone instance or time zone name as a string + * of this persian date. The date/time is kept in the local time. The time zone + * is used later if this date is formatted according to a different time zone and + * the difference has to be calculated, or when the date format has a time zone + * component in it. + * + *
  • locale - locale for this persian date. If the time zone is not + * given, it can be inferred from this locale. For locales that span multiple + * time zones, the one with the largest population is chosen as the one that + * represents the locale. + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If the constructor is called with another Persian date instance instead of + * a parameter block, the other instance acts as a parameter block and its + * settings are copied into the current instance.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above + * from unixtime through millisecond are present, then the date + * components are + * filled in with the current date at the time of instantiation. Note that if + * you do not give the time zone when defaulting to the current time and the + * time zone for all of ilib was not set with ilib.setTimeZone(), then the + * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich + * Mean Time").

+ * + * If any of the properties from year through millisecond are not + * specified in the params, it is assumed that they have the smallest possible + * value in the range for the property (zero or one).

+ * + * + * @constructor + * @extends IDate + * @param {Object=} params parameters that govern the settings and behaviour of this Persian date + */ +var PersianAlgoDate = function(params) { + this.cal = new PersianAlgoCal(); + + params = params || {}; + + if (params.timezone) { + this.timezone = params.timezone; + } + if (params.locale) { + this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; + } + + if (!this.timezone) { + if (this.locale) { + new LocaleInfo(this.locale, { + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(li) { + this.li = li; + this.timezone = li.getTimeZone(); + this._init(params); + }) + }); + } else { + this.timezone = "local"; + this._init(params); + } + } else { + this._init(params); + } + + + if (!this.rd) { + this.rd = this.newRd(params); + this._calcDateComponents(); + } +}; + +PersianAlgoDate.prototype = new IDate({noinstance: true}); +PersianAlgoDate.prototype.parent = IDate; +PersianAlgoDate.prototype.constructor = PersianAlgoDate; + +/** + * Initialize this date + * @private + */ +PersianAlgoDate.prototype._init = function (params) { + if (params.year || params.month || params.day || params.hour || + params.minute || params.second || params.millisecond ) { + /** + * Year in the Persian calendar. + * @type number + */ + this.year = parseInt(params.year, 10) || 0; + + /** + * The month number, ranging from 1 to 12 + * @type number + */ + this.month = parseInt(params.month, 10) || 1; + + /** + * The day of the month. This ranges from 1 to 31. + * @type number + */ + this.day = parseInt(params.day, 10) || 1; + + /** + * The hour of the day. This can be a number from 0 to 23, as times are + * stored unambiguously in the 24-hour clock. + * @type number + */ + this.hour = parseInt(params.hour, 10) || 0; + + /** + * The minute of the hours. Ranges from 0 to 59. + * @type number + */ + this.minute = parseInt(params.minute, 10) || 0; + + /** + * The second of the minute. Ranges from 0 to 59. + * @type number + */ + this.second = parseInt(params.second, 10) || 0; + + /** + * The millisecond of the second. Ranges from 0 to 999. + * @type number + */ + this.millisecond = parseInt(params.millisecond, 10) || 0; + + /** + * The day of the year. Ranges from 1 to 366. + * @type number + */ + this.dayOfYear = parseInt(params.dayOfYear, 10); + + if (typeof(params.dst) === 'boolean') { + this.dst = params.dst; + } + + this.rd = this.newRd(this); + + new TimeZone({ + id: this.timezone, + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(tz) { + this.tz = tz; + // add the time zone offset to the rd to convert to UTC + // getOffsetMillis requires that this.year, this.rd, and this.dst + // are set in order to figure out which time zone rules apply and + // what the offset is at that point in the year + this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; + if (this.offset !== 0) { + this.rd = this.newRd({ + rd: this.rd.getRataDie() - this.offset + }); + } + this._init2(params); + }) + }); + } else { + this._init2(params); + } +}; + +/** +* Finish initializing this date object. +* @private +*/ +PersianAlgoDate.prototype._init2 = function (params) { + if (!this.rd) { + this.rd = this.newRd(params); + this._calcDateComponents(); + } + + if (typeof(params.onLoad) === "function") { + params.onLoad(this); + } +}; + +/** + * Return a new RD for this date type using the given params. + * @protected + * @param {Object=} params the parameters used to create this rata die instance + * @returns {RataDie} the new RD instance for the given params + */ +PersianAlgoDate.prototype.newRd = function (params) { + return new PersAlgoRataDie(params); +}; + +/** + * Return the year for the given RD + * @private + * @param {number} rd RD to calculate from + * @returns {number} the year for the RD + */ +PersianAlgoDate.prototype._calcYear = function(rd) { + var shiftedRd = rd - 173126; + var numberOfCycles = Math.floor(shiftedRd / 1029983); + var shiftedDayInCycle = MathUtils.mod(shiftedRd, 1029983); + var yearInCycle = (shiftedDayInCycle === 1029982) ? 2820 : Math.floor((2816 * shiftedDayInCycle + 1031337) / 1028522); + var year = 474 + 2820 * numberOfCycles + yearInCycle; + return (year > 0) ? year : year - 1; +}; + +/** + * Calculate date components for the given RD date. + * @private + */ +PersianAlgoDate.prototype._calcDateComponents = function () { + var remainder, + rd = this.rd.getRataDie(); + + this.year = this._calcYear(rd); + + if (typeof(this.offset) === "undefined") { + // now offset the RD by the time zone, then recalculate in case we were + // near the year boundary + if (!this.tz) { + this.tz = new TimeZone({id: this.timezone}); + } + this.offset = this.tz.getOffsetMillis(this) / 86400000; + } + + if (this.offset !== 0) { + rd += this.offset; + this.year = this._calcYear(rd); + } + + //console.log("PersAlgoDate.calcComponent: calculating for rd " + rd); + //console.log("PersAlgoDate.calcComponent: year is " + ret.year); + var yearStart = this.newRd({ + year: this.year, + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }); + remainder = rd - yearStart.getRataDie() + 1; + + this.dayOfYear = remainder; + + //console.log("PersAlgoDate.calcComponent: remainder is " + remainder); + + this.month = SearchUtils.bsearch(remainder, PersAlgoRataDie.cumMonthLengths); + remainder -= PersAlgoRataDie.cumMonthLengths[this.month-1]; + + //console.log("PersAlgoDate.calcComponent: month is " + this.month + " and remainder is " + remainder); + + this.day = Math.floor(remainder); + remainder -= this.day; + + //console.log("PersAlgoDate.calcComponent: day is " + this.day + " and remainder is " + remainder); + + // now convert to milliseconds for the rest of the calculation + remainder = Math.round(remainder * 86400000); + + this.hour = Math.floor(remainder/3600000); + remainder -= this.hour * 3600000; + + this.minute = Math.floor(remainder/60000); + remainder -= this.minute * 60000; + + this.second = Math.floor(remainder/1000); + remainder -= this.second * 1000; + + this.millisecond = remainder; +}; + +/** + * Return the day of the week of this date. The day of the week is encoded + * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. + * + * @return {number} the day of the week + */ +PersianAlgoDate.prototype.getDayOfWeek = function() { + var rd = Math.floor(this.getRataDie()); + return MathUtils.mod(rd-3, 7); +}; + +/** + * Return the ordinal day of the year. Days are counted from 1 and proceed linearly up to + * 365, regardless of months or weeks, etc. That is, Farvardin 1st is day 1, and + * December 31st is 365 in regular years, or 366 in leap years. + * @return {number} the ordinal day of the year + */ +PersianAlgoDate.prototype.getDayOfYear = function() { + return PersAlgoRataDie.cumMonthLengths[this.month-1] + this.day; +}; + +/** + * Return the era for this date as a number. The value for the era for Persian + * calendars is -1 for "before the persian era" (BP) and 1 for "the persian era" (anno + * persico or AP). + * BP dates are any date before Farvardin 1, 1 AP. In the proleptic Persian calendar, + * there is a year 0, so any years that are negative or zero are BP. + * @return {number} 1 if this date is in the common era, -1 if it is before the + * common era + */ +PersianAlgoDate.prototype.getEra = function() { + return (this.year < 1) ? -1 : 1; +}; + +/** + * Return the name of the calendar that governs this date. + * + * @return {string} a string giving the name of the calendar + */ +PersianAlgoDate.prototype.getCalendar = function() { + return "persian-algo"; +}; + +// register with the factory method +IDate._constructors["persian-algo"] = PersianAlgoDate; + +/* + * HanCal.js - Represent a Han Chinese Lunar calendar object. + * + * Copyright © 2014-2017, 2018, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + + + + + +/** + * @class + * Construct a new Han algorithmic calendar object. This class encodes information about + * a Han algorithmic calendar.

+ * + * + * @constructor + * @param {Object=} params optional parameters to load the calendrical data + * @extends Calendar + */ +var HanCal = function(params) { + this.type = "han"; + var sync = params && typeof(params.sync) === 'boolean' ? params.sync : true; + + Astro.initAstro(sync, params && params.loadParams, ilib.bind(this, function (x) { + if (params && typeof(params.onLoad) === 'function') { + params.onLoad(this); + } + })); +}; + +/** + * @private + * @static + * @param {number} year + * @param {number=} cycle + * @return {number} + */ +HanCal._getElapsedYear = function(year, cycle) { + var elapsedYear = year || 0; + if (typeof(year) !== 'undefined' && year < 61 && typeof(cycle) !== 'undefined') { + elapsedYear = 60 * cycle + year; + } + return elapsedYear; +}; + +/** + * @private + * @static + * @param {number} jd julian day to calculate from + * @param {number} longitude longitude to seek + * @returns {number} the julian day of the next time that the solar longitude + * is a multiple of the given longitude + */ +HanCal._hanNextSolarLongitude = function(jd, longitude) { + var tz = HanCal._chineseTZ(jd); + var uni = Astro._universalFromLocal(jd, tz); + var sol = Astro._nextSolarLongitude(uni, longitude); + return Astro._localFromUniversal(sol, tz); +}; + +/** + * @private + * @static + * @param {number} jd julian day to calculate from + * @returns {number} the major solar term for the julian day + */ +HanCal._majorSTOnOrAfter = function(jd) { + var tz = HanCal._chineseTZ(jd); + var uni = Astro._universalFromLocal(jd, tz); + var next = Astro._fixangle(30 * Math.ceil(Astro._solarLongitude(uni)/30)); + return HanCal._hanNextSolarLongitude(jd, next); +}; + +/** + * @private + * @static + * @param {number} year the year for which the leap year information is being sought + * @param {number=} cycle if the given year < 60, this can specify the cycle. If the + * cycle is not given, then the year should be given as elapsed years since the beginning + * of the epoch + */ +HanCal._solsticeBefore = function (year, cycle) { + var elapsedYear = HanCal._getElapsedYear(year, cycle); + var gregyear = elapsedYear - 2697; + var rd = new GregRataDie({ + year: gregyear-1, + month: 12, + day: 15, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }); + return HanCal._majorSTOnOrAfter(rd.getRataDie() + RataDie.gregorianEpoch); +}; + +/** + * @private + * @static + * @param {number} jd julian day to calculate from + * @returns {number} the current major solar term + */ +HanCal._chineseTZ = function(jd) { + var year = GregorianDate._calcYear(jd - RataDie.gregorianEpoch); + return year < 1929 ? 465.6666666666666666 : 480; +}; + +/** + * @private + * @static + * @param {number} jd julian day to calculate from + * @returns {number} the julian day of next new moon on or after the given julian day date + */ +HanCal._newMoonOnOrAfter = function(jd) { + var tz = HanCal._chineseTZ(jd); + var uni = Astro._universalFromLocal(jd, tz); + var moon = Astro._newMoonAtOrAfter(uni); + // floor to the start of the julian day + return Astro._floorToJD(Astro._localFromUniversal(moon, tz)); +}; + +/** + * @private + * @static + * @param {number} jd julian day to calculate from + * @returns {number} the julian day of previous new moon before the given julian day date + */ +HanCal._newMoonBefore = function(jd) { + var tz = HanCal._chineseTZ(jd); + var uni = Astro._universalFromLocal(jd, tz); + var moon = Astro._newMoonBefore(uni); + // floor to the start of the julian day + return Astro._floorToJD(Astro._localFromUniversal(moon, tz)); +}; + +/** + * @static + * @private + * @param {number} year the year for which the leap year information is being sought + * @param {number=} cycle if the given year < 60, this can specify the cycle. If the + * cycle is not given, then the year should be given as elapsed years since the beginning + * of the epoch + */ +HanCal._leapYearCalc = function(year, cycle) { + var ret = { + elapsedYear: HanCal._getElapsedYear(year, cycle) + }; + ret.solstice1 = HanCal._solsticeBefore(ret.elapsedYear); + ret.solstice2 = HanCal._solsticeBefore(ret.elapsedYear+1); + // ceil to the end of the julian day + ret.m1 = HanCal._newMoonOnOrAfter(Astro._ceilToJD(ret.solstice1)); + ret.m2 = HanCal._newMoonBefore(Astro._ceilToJD(ret.solstice2)); + + return ret; +}; + +/** + * @private + * @static + * @param {number} jd julian day to calculate from + * @returns {number} the current major solar term + */ +HanCal._currentMajorST = function(jd) { + var s = Astro._solarLongitude(Astro._universalFromLocal(jd, HanCal._chineseTZ(jd))); + return MathUtils.amod(2 + Math.floor(s/30), 12); +}; + +/** + * @private + * @static + * @param {number} jd julian day to calculate from + * @returns {boolean} true if there is no major solar term in the same year + */ +HanCal._noMajorST = function(jd) { + return HanCal._currentMajorST(jd) === HanCal._currentMajorST(HanCal._newMoonOnOrAfter(jd+1)); +}; + +/** + * Return the number of months in the given year. The number of months in a year varies + * for some luni-solar calendars because in some years, an extra month is needed to extend the + * days in a year to an entire solar year. The month is represented as a 1-based number + * where 1=first month, 2=second month, etc. + * + * @param {number} year a year for which the number of months is sought + * @param {number=} cycle if the given year < 60, this can specify the cycle. If the + * cycle is not given, then the year should be given as elapsed years since the beginning + * of the epoch + * @return {number} The number of months in the given year + */ +HanCal.prototype.getNumMonths = function(year, cycle) { + return this.isLeapYear(year, cycle) ? 13 : 12; +}; + +/** + * Return the number of days in a particular month in a particular year. This function + * can return a different number for a month depending on the year because of things + * like leap years. + * + * @param {number} month the elapsed month for which the length is sought + * @param {number} year the elapsed year within which that month can be found + * @return {number} the number of days within the given month in the given year + */ +HanCal.prototype.getMonLength = function(month, year) { + // distance between two new moons in Nanjing China + var calc = HanCal._leapYearCalc(year); + var priorNewMoon = HanCal._newMoonOnOrAfter(calc.m1 + month * 29); + var postNewMoon = HanCal._newMoonOnOrAfter(priorNewMoon + 1); + return postNewMoon - priorNewMoon; +}; + +/** + * Return the equivalent year in the 2820 year cycle that begins on + * Far 1, 474. This particular cycle obeys the cycle-of-years formula + * whereas the others do not specifically. This cycle can be used as + * a proxy for other years outside of the cycle by shifting them into + * the cycle. + * @param {number} year year to find the equivalent cycle year for + * @returns {number} the equivalent cycle year + */ +HanCal.prototype.equivalentCycleYear = function(year) { + var y = year - (year >= 0 ? 474 : 473); + return MathUtils.mod(y, 2820) + 474; +}; + +/** + * Return true if the given year is a leap year in the Han calendar. + * If the year is given as a year/cycle combination, then the year should be in the + * range [1,60] and the given cycle is the cycle in which the year is located. If + * the year is greater than 60, then + * it represents the total number of years elapsed in the proleptic calendar since + * the beginning of the Chinese epoch in on 15 Feb, -2636 (Gregorian). In this + * case, the cycle parameter is ignored. + * + * @param {number} year the year for which the leap year information is being sought + * @param {number=} cycle if the given year < 60, this can specify the cycle. If the + * cycle is not given, then the year should be given as elapsed years since the beginning + * of the epoch + * @return {boolean} true if the given year is a leap year + */ +HanCal.prototype.isLeapYear = function(year, cycle) { + var calc = HanCal._leapYearCalc(year, cycle); + return Math.round((calc.m2 - calc.m1) / 29.530588853000001) === 12; +}; + +/** + * Return the month of the year that is the leap month. If the given year is + * not a leap year, then this method will return -1. + * + * @param {number} year the year for which the leap year information is being sought + * @param {number=} cycle if the given year < 60, this can specify the cycle. If the + * cycle is not given, then the year should be given as elapsed years since the beginning + * of the epoch + * @return {number} the number of the month that is doubled in this leap year, or -1 + * if this is not a leap year + */ +HanCal.prototype.getLeapMonth = function(year, cycle) { + var calc = HanCal._leapYearCalc(year, cycle); + + if (Math.round((calc.m2 - calc.m1) / 29.530588853000001) != 12) { + return -1; // no leap month + } + + // search between rd1 and rd2 for the first month with no major solar term. That is our leap month. + var month = 0; + var m = HanCal._newMoonOnOrAfter(calc.m1+1); + while (!HanCal._noMajorST(m)) { + month++; + m = HanCal._newMoonOnOrAfter(m+1); + } + + // return the number of the month that is doubled + return month; +}; + +/** + * Return the date of Chinese New Years in the given calendar year. + * + * @param {number} year the Chinese year for which the new year information is being sought + * @param {number=} cycle if the given year < 60, this can specify the cycle. If the + * cycle is not given, then the year should be given as elapsed years since the beginning + * of the epoch + * @return {number} the julian day of the beginning of the given year + */ +HanCal.prototype.newYears = function(year, cycle) { + var calc = HanCal._leapYearCalc(year, cycle); + var m2 = HanCal._newMoonOnOrAfter(calc.m1+1); + if (Math.round((calc.m2 - calc.m1) / 29.530588853000001) === 12 && + (HanCal._noMajorST(calc.m1) || HanCal._noMajorST(m2)) ) { + return HanCal._newMoonOnOrAfter(m2+1); + } + return m2; +}; + +/** + * Return the type of this calendar. + * + * @return {string} the name of the type of this calendar + */ +HanCal.prototype.getType = function() { + return this.type; +}; + + +/* register this calendar for the factory method */ +Calendar._constructors["han"] = HanCal; + + +/* + * HanDate.js - Represent a date in the Han algorithmic calendar + * + * Copyright © 2014-2015, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + +/** + * Construct a new Han RD date number object. The constructor parameters can + * contain any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970, Gregorian + * + *
  • julianday - sets the time of this instance according to the given + * Julian Day instance or the Julian Day given as a float + * + *
  • cycle - any integer giving the number of 60-year cycle in which the date is located. + * If the cycle is not given but the year is, it is assumed that the year parameter is a fictitious + * linear count of years since the beginning of the epoch, much like other calendars. This linear + * count is never used. If both the cycle and year are given, the year is wrapped to the range 0 + * to 60 and treated as if it were a year in the regular 60-year cycle. + * + *
  • year - any integer, including 0 + * + *
  • month - 1 to 12, where 1 means Farvardin, 2 means Ordibehesht, etc. + * + *
  • day - 1 to 31 + * + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + * + *
  • minute - 0 to 59 + * + *
  • second - 0 to 59 + * + *
  • millisecond - 0 to 999 + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If the constructor is called with another Han date instance instead of + * a parameter block, the other instance acts as a parameter block and its + * settings are copied into the current instance.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above are present, then the RD is calculate based on + * the current date at the time of instantiation.

+ * + * If any of the properties from year through millisecond are not + * specified in the params, it is assumed that they have the smallest possible + * value in the range for the property (zero or one).

+ * + * + * @private + * @class + * @constructor + * @extends RataDie + * @param {Object=} params parameters that govern the settings and behaviour of this Han RD date + */ +var HanRataDie = function(params) { + this.rd = NaN; + if (params && params.cal) { + this.cal = params.cal; + RataDie.call(this, params); + if (params && typeof(params.callback) === 'function') { + params.callback(this); + } + } else { + new HanCal({ + sync: params && params.sync, + loadParams: params && params.loadParams, + onLoad: ilib.bind(this, function(c) { + this.cal = c; + RataDie.call(this, params); + if (params && typeof(params.callback) === 'function') { + params.callback(this); + } + }) + }); + } +}; + +HanRataDie.prototype = new RataDie(); +HanRataDie.prototype.parent = RataDie; +HanRataDie.prototype.constructor = HanRataDie; + +/** + * The difference between a zero Julian day and the first Han date + * which is February 15, -2636 (Gregorian). + * @private + * @type number + */ +HanRataDie.epoch = 758325.5; + +/** + * Calculate the Rata Die (fixed day) number of the given date from the + * date components. + * + * @protected + * @param {Object} date the date components to calculate the RD from + */ +HanRataDie.prototype._setDateComponents = function(date) { + var calc = HanCal._leapYearCalc(date.year, date.cycle); + var m2 = HanCal._newMoonOnOrAfter(calc.m1+1); + var newYears; + this.leapYear = (Math.round((calc.m2 - calc.m1) / 29.530588853000001) === 12); + if (this.leapYear && (HanCal._noMajorST(calc.m1) || HanCal._noMajorST(m2)) ) { + newYears = HanCal._newMoonOnOrAfter(m2+1); + } else { + newYears = m2; + } + + var priorNewMoon = HanCal._newMoonOnOrAfter(calc.m1 + date.month * 29); // this is a julian day + this.priorLeapMonth = HanRataDie._priorLeapMonth(newYears, HanCal._newMoonBefore(priorNewMoon)); + this.leapMonth = (this.leapYear && HanCal._noMajorST(priorNewMoon) && !this.priorLeapMonth); + + var rdtime = (date.hour * 3600000 + + date.minute * 60000 + + date.second * 1000 + + date.millisecond) / + 86400000; + + /* + console.log("getRataDie: converting " + JSON.stringify(date) + " to an RD"); + console.log("getRataDie: year is " + date.year + " plus cycle " + date.cycle); + console.log("getRataDie: isLeapYear is " + this.leapYear); + console.log("getRataDie: priorNewMoon is " + priorNewMoon); + console.log("getRataDie: day in month is " + date.day); + console.log("getRataDie: rdtime is " + rdtime); + console.log("getRataDie: rd is " + (priorNewMoon + date.day - 1 + rdtime)); + */ + + this.rd = priorNewMoon + date.day - 1 + rdtime - RataDie.gregorianEpoch; +}; + +/** + * Return the rd number of the particular day of the week on or before the + * given rd. eg. The Sunday on or before the given rd. + * @private + * @param {number} rd the rata die date of the reference date + * @param {number} dayOfWeek the day of the week that is being sought relative + * to the current date + * @return {number} the rd of the day of the week + */ +HanRataDie.prototype._onOrBefore = function(rd, dayOfWeek) { + return rd - MathUtils.mod(Math.floor(rd) - dayOfWeek, 7); +}; + +/** + * @protected + * @static + * @param {number} jd1 first julian day + * @param {number} jd2 second julian day + * @returns {boolean} true if there is a leap month earlier in the same year + * as the given months + */ +HanRataDie._priorLeapMonth = function(jd1, jd2) { + return jd2 >= jd1 && + (HanRataDie._priorLeapMonth(jd1, HanCal._newMoonBefore(jd2)) || + HanCal._noMajorST(jd2)); +}; + + +/* + * HanDate.js - Represent a date in the Han algorithmic calendar + * + * Copyright © 2014-2015, 2018, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + + + + + + + + + + +/** + * @class + * + * Construct a new Han date object. The constructor parameters can + * contain any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970, Gregorian + * + *
  • julianday - sets the time of this instance according to the given + * Julian Day instance or the Julian Day given as a float + * + *
  • cycle - any integer giving the number of 60-year cycle in which the date is located. + * If the cycle is not given but the year is, it is assumed that the year parameter is a fictitious + * linear count of years since the beginning of the epoch, much like other calendars. This linear + * count is never used. If both the cycle and year are given, the year is wrapped to the range 0 + * to 60 and treated as if it were a year in the regular 60-year cycle. + * + *
  • year - any integer, including 0 + * + *
  • month - 1 to 12, where 1 means Farvardin, 2 means Ordibehesht, etc. + * + *
  • day - 1 to 31 + * + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + * + *
  • minute - 0 to 59 + * + *
  • second - 0 to 59 + * + *
  • millisecond - 0 to 999 + * + *
  • timezone - the TimeZone instance or time zone name as a string + * of this han date. The date/time is kept in the local time. The time zone + * is used later if this date is formatted according to a different time zone and + * the difference has to be calculated, or when the date format has a time zone + * component in it. + * + *
  • locale - locale for this han date. If the time zone is not + * given, it can be inferred from this locale. For locales that span multiple + * time zones, the one with the largest population is chosen as the one that + * represents the locale. + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If the constructor is called with another Han date instance instead of + * a parameter block, the other instance acts as a parameter block and its + * settings are copied into the current instance.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above + * from unixtime through millisecond are present, then the date + * components are + * filled in with the current date at the time of instantiation. Note that if + * you do not give the time zone when defaulting to the current time and the + * time zone for all of ilib was not set with ilib.setTimeZone(), then the + * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich + * Mean Time").

+ * + * If any of the properties from year through millisecond are not + * specified in the params, it is assumed that they have the smallest possible + * value in the range for the property (zero or one).

+ * + * + * @constructor + * @extends Date + * @param {Object=} params parameters that govern the settings and behaviour of this Han date + */ +var HanDate = function(params) { + params = params || {}; + if (params.locale) { + this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; + } + if (params.timezone) { + this.timezone = params.timezone; + } + + if (!this.timezone) { + if (this.locale) { + new LocaleInfo(this.locale, { + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(li) { + this.li = li; + this.timezone = li.getTimeZone(); + this._init(params); + }) + }); + } else { + this.timezone = "local"; + this._init(params); + } + } else { + this._init(params); + } +}; + +HanDate.prototype = new IDate({noinstance: true}); +HanDate.prototype.parent = IDate; +HanDate.prototype.constructor = HanDate; + +/** + * Initialize the han date + * @private + */ +HanDate.prototype._init = function (params) { + new HanCal({ + sync: params && typeof(params.sync) === 'boolean' ? params.sync : true, + loadParams: params && params.loadParams, + onLoad: ilib.bind(this, function (cal) { + this.cal = cal; + + if (params.year || params.month || params.day || params.hour || + params.minute || params.second || params.millisecond || params.cycle || params.cycleYear) { + if (typeof(params.cycle) !== 'undefined') { + /** + * Cycle number in the Han calendar. + * @type number + */ + this.cycle = parseInt(params.cycle, 10) || 0; + + var year = (typeof(params.year) !== 'undefined' ? parseInt(params.year, 10) : parseInt(params.cycleYear, 10)) || 0; + + /** + * Year in the Han calendar. + * @type number + */ + this.year = HanCal._getElapsedYear(year, this.cycle); + } else { + if (typeof(params.year) !== 'undefined') { + this.year = parseInt(params.year, 10) || 0; + this.cycle = Math.floor((this.year - 1) / 60); + } else { + this.year = this.cycle = 0; + } + } + + /** + * The month number, ranging from 1 to 13 + * @type number + */ + this.month = parseInt(params.month, 10) || 1; + + /** + * The day of the month. This ranges from 1 to 30. + * @type number + */ + this.day = parseInt(params.day, 10) || 1; + + /** + * The hour of the day. This can be a number from 0 to 23, as times are + * stored unambiguously in the 24-hour clock. + * @type number + */ + this.hour = parseInt(params.hour, 10) || 0; + + /** + * The minute of the hours. Ranges from 0 to 59. + * @type number + */ + this.minute = parseInt(params.minute, 10) || 0; + + /** + * The second of the minute. Ranges from 0 to 59. + * @type number + */ + this.second = parseInt(params.second, 10) || 0; + + /** + * The millisecond of the second. Ranges from 0 to 999. + * @type number + */ + this.millisecond = parseInt(params.millisecond, 10) || 0; + + // derived properties + + /** + * Year in the cycle of the Han calendar + * @type number + */ + this.cycleYear = MathUtils.amod(this.year, 60); + + /** + * The day of the year. Ranges from 1 to 384. + * @type number + */ + this.dayOfYear = parseInt(params.dayOfYear, 10); + + if (typeof(params.dst) === 'boolean') { + this.dst = params.dst; + } + + this.newRd({ + cal: this.cal, + cycle: this.cycle, + year: this.year, + month: this.month, + day: this.day, + hour: this.hour, + minute: this.minute, + second: this.second, + millisecond: this.millisecond, + sync: params.sync, + loadParams: params.loadParams, + callback: ilib.bind(this, function (rd) { + if (rd) { + this.rd = rd; + + // add the time zone offset to the rd to convert to UTC + new TimeZone({ + id: this.timezone, + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(tz) { + this.tz = tz; + // getOffsetMillis requires that this.year, this.rd, and this.dst + // are set in order to figure out which time zone rules apply and + // what the offset is at that point in the year + this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; + if (this.offset !== 0) { + // this newRd can be called synchronously because we already called + // it asynchronously above, so all of the astro data should + // already be loaded. + this.rd = this.newRd({ + cal: this.cal, + rd: this.rd.getRataDie() - this.offset + }); + this._calcLeap(); + } else { + // re-use the derived properties from the RD calculations + this.leapMonth = this.rd.leapMonth; + this.priorLeapMonth = this.rd.priorLeapMonth; + this.leapYear = this.rd.leapYear; + } + + this._init2(params); + }) + }); + } else { + this._init2(params); + } + }) + }); + } else { + this._init2(params); + } + }) + }); +}; + +/** + * Finish the initialization for the han date. + * @private + */ +HanDate.prototype._init2 = function (params) { + if (!this.rd) { + // init2() may be called without newRd having been called before, + // so we cannot guarantee that the astro data is already loaded. + // That means, we have to treat this as a possibly asynchronous + // call. + this.newRd(JSUtils.merge(params || {}, { + cal: this.cal, + sync: params.sync, + loadParams: params.loadParams, + callback: ilib.bind(this, function(rd) { + this.rd = rd; + this._calcDateComponents(); + + if (params && typeof(params.onLoad) === 'function') { + params.onLoad(this); + } + }) + })); + } else { + if (params && typeof(params.onLoad) === 'function') { + params.onLoad(this); + } + } +}; + +/** + * Return a new RD for this date type using the given params. + * @protected + * @param {Object=} params the parameters used to create this rata die instance + * @returns {RataDie} the new RD instance for the given params + */ +HanDate.prototype.newRd = function (params) { + return new HanRataDie(params); +}; + +/** + * Return the year for the given RD + * @private + * @param {number} rd RD to calculate from + * @returns {number} the year for the RD + */ +HanDate.prototype._calcYear = function(rd) { + var gregdate = new GregorianDate({ + rd: rd, + timezone: this.timezone + }); + var hanyear = gregdate.year + 2697; + var newYears = this.cal.newYears(hanyear); + return hanyear - ((rd + RataDie.gregorianEpoch < newYears) ? 1 : 0); +}; + +/** + * Calculate the leap year and months from the RD. + * @private + */ +HanDate.prototype._calcLeap = function() { + var jd = this.rd.getRataDie() + RataDie.gregorianEpoch; + + var calc = HanCal._leapYearCalc(this.year); + var m2 = HanCal._newMoonOnOrAfter(calc.m1+1); + this.leapYear = Math.round((calc.m2 - calc.m1) / 29.530588853000001) === 12; + + var newYears = (this.leapYear && + (HanCal._noMajorST(calc.m1) || HanCal._noMajorST(m2))) ? + HanCal._newMoonOnOrAfter(m2+1) : m2; + + var m = HanCal._newMoonBefore(jd + 1); + this.priorLeapMonth = HanRataDie._priorLeapMonth(newYears, HanCal._newMoonBefore(m)); + this.leapMonth = (this.leapYear && HanCal._noMajorST(m) && !this.priorLeapMonth); +}; + +/** + * Calculate date components for the given RD date. + * @private + */ +HanDate.prototype._calcDateComponents = function () { + var remainder, + jd = this.rd.getRataDie() + RataDie.gregorianEpoch; + + // console.log("HanDate._calcDateComponents: calculating for jd " + jd); + + if (typeof(this.offset) === "undefined") { + // now offset the jd by the time zone, then recalculate in case we were + // near the year boundary + if (!this.tz) { + this.tz = new TimeZone({id: this.timezone}); + } + this.offset = this.tz.getOffsetMillis(this) / 86400000; + } + + if (this.offset !== 0) { + jd += this.offset; + } + + // use the Gregorian calendar objects as a convenient way to short-cut some + // of the date calculations + + var gregyear = GregorianDate._calcYear(this.rd.getRataDie()); + this.year = gregyear + 2697; + var calc = HanCal._leapYearCalc(this.year); + var m2 = HanCal._newMoonOnOrAfter(calc.m1+1); + this.leapYear = Math.round((calc.m2 - calc.m1) / 29.530588853000001) === 12; + var newYears = (this.leapYear && + (HanCal._noMajorST(calc.m1) || HanCal._noMajorST(m2))) ? + HanCal._newMoonOnOrAfter(m2+1) : m2; + + // See if it's between Jan 1 and the Chinese new years of that Gregorian year. If + // so, then the Han year is actually the previous one + if (jd < newYears) { + this.year--; + calc = HanCal._leapYearCalc(this.year); + m2 = HanCal._newMoonOnOrAfter(calc.m1+1); + this.leapYear = Math.round((calc.m2 - calc.m1) / 29.530588853000001) === 12; + newYears = (this.leapYear && + (HanCal._noMajorST(calc.m1) || HanCal._noMajorST(m2))) ? + HanCal._newMoonOnOrAfter(m2+1) : m2; + } + // month is elapsed month, not the month number + leap month boolean + var m = HanCal._newMoonBefore(jd + 1); + this.month = Math.round((m - calc.m1) / 29.530588853000001); + + this.priorLeapMonth = HanRataDie._priorLeapMonth(newYears, HanCal._newMoonBefore(m)); + this.leapMonth = (this.leapYear && HanCal._noMajorST(m) && !this.priorLeapMonth); + + this.cycle = Math.floor((this.year - 1) / 60); + this.cycleYear = MathUtils.amod(this.year, 60); + this.day = Astro._floorToJD(jd) - m + 1; + + /* + console.log("HanDate._calcDateComponents: year is " + this.year); + console.log("HanDate._calcDateComponents: isLeapYear is " + this.leapYear); + console.log("HanDate._calcDateComponents: cycle is " + this.cycle); + console.log("HanDate._calcDateComponents: cycleYear is " + this.cycleYear); + console.log("HanDate._calcDateComponents: month is " + this.month); + console.log("HanDate._calcDateComponents: isLeapMonth is " + this.leapMonth); + console.log("HanDate._calcDateComponents: day is " + this.day); + */ + + // floor to the start of the julian day + remainder = jd - Astro._floorToJD(jd); + + // console.log("HanDate._calcDateComponents: time remainder is " + remainder); + + // now convert to milliseconds for the rest of the calculation + remainder = Math.round(remainder * 86400000); + + this.hour = Math.floor(remainder/3600000); + remainder -= this.hour * 3600000; + + this.minute = Math.floor(remainder/60000); + remainder -= this.minute * 60000; + + this.second = Math.floor(remainder/1000); + remainder -= this.second * 1000; + + this.millisecond = remainder; +}; + +/** + * Return the year within the Chinese cycle of this date. Cycles are 60 + * years long, and the value returned from this method is the number of the year + * within this cycle. The year returned from getYear() is the total elapsed + * years since the beginning of the Chinese epoch and does not include + * the cycles. + * + * @return {number} the year within the current Chinese cycle + */ +HanDate.prototype.getCycleYears = function() { + return this.cycleYear; +}; + +/** + * Return the Chinese cycle number of this date. Cycles are 60 years long, + * and the value returned from getCycleYear() is the number of the year + * within this cycle. The year returned from getYear() is the total elapsed + * years since the beginning of the Chinese epoch and does not include + * the cycles. + * + * @return {number} the current Chinese cycle + */ +HanDate.prototype.getCycles = function() { + return this.cycle; +}; + +/** + * Return whether the year of this date is a leap year in the Chinese Han + * calendar. + * + * @return {boolean} true if the year of this date is a leap year in the + * Chinese Han calendar. + */ +HanDate.prototype.isLeapYear = function() { + return this.leapYear; +}; + +/** + * Return whether the month of this date is a leap month in the Chinese Han + * calendar. + * + * @return {boolean} true if the month of this date is a leap month in the + * Chinese Han calendar. + */ +HanDate.prototype.isLeapMonth = function() { + return this.leapMonth; +}; + +/** + * Return the day of the week of this date. The day of the week is encoded + * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. + * + * @return {number} the day of the week + */ +HanDate.prototype.getDayOfWeek = function() { + var rd = Math.floor(this.rd.getRataDie() + (this.offset || 0)); + return MathUtils.mod(rd, 7); +}; + +/** + * Return the ordinal day of the year. Days are counted from 1 and proceed linearly up to + * 365, regardless of months or weeks, etc. That is, Farvardin 1st is day 1, and + * December 31st is 365 in regular years, or 366 in leap years. + * @return {number} the ordinal day of the year + */ +HanDate.prototype.getDayOfYear = function() { + var newYears = this.cal.newYears(this.year); + var priorNewMoon = HanCal._newMoonOnOrAfter(newYears + (this.month -1) * 29); + return priorNewMoon - newYears + this.day; +}; + +/** + * Return the era for this date as a number. The value for the era for Han + * calendars is -1 for "before the han era" (BP) and 1 for "the han era" (anno + * persico or AP). + * BP dates are any date before Farvardin 1, 1 AP. In the proleptic Han calendar, + * there is a year 0, so any years that are negative or zero are BP. + * @return {number} 1 if this date is in the common era, -1 if it is before the + * common era + */ +HanDate.prototype.getEra = function() { + return (this.year < 1) ? -1 : 1; +}; + +/** + * Return the name of the calendar that governs this date. + * + * @return {string} a string giving the name of the calendar + */ +HanDate.prototype.getCalendar = function() { + return "han"; +}; + +// register with the factory method +IDate._constructors["han"] = HanDate; + +/* + * EthiopicCal.js - Represent a Ethiopic calendar object. + * + * Copyright © 2015-2017, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + +/** + * @class + * Construct a new Ethiopic calendar object. This class encodes information about + * a Ethiopic calendar.

+ * + * @param {Object=} options Options governing the construction of this instance + * @constructor + * @extends Calendar + */ +var EthiopicCal = function(options) { + this.type = "ethiopic"; + + if (options && typeof(options.onLoad) === "function") { + options.onLoad(this); + } +}; + +/** + * Return the number of months in the given year. The number of months in a year varies + * for lunar calendars because in some years, an extra month is needed to extend the + * days in a year to an entire solar year. The month is represented as a 1-based number + * where 1=Maskaram, 2=Teqemt, etc. until 13=Paguemen. + * + * @param {number} year a year for which the number of months is sought + */ +EthiopicCal.prototype.getNumMonths = function(year) { + return 13; +}; + +/** + * Return the number of days in a particular month in a particular year. This function + * can return a different number for a month depending on the year because of things + * like leap years. + * + * @param {number|string} month the month for which the length is sought + * @param {number} year the year within which that month can be found + * @return {number} the number of days within the given month in the given year + */ +EthiopicCal.prototype.getMonLength = function(month, year) { + var m = month; + switch (typeof(m)) { + case "string": + m = parseInt(m, 10); + break; + case "function": + case "object": + case "undefined": + return 30; + } + if (m < 13) { + return 30; + } else { + return this.isLeapYear(year) ? 6 : 5; + } +}; + +/** + * Return true if the given year is a leap year in the Ethiopic calendar. + * The year parameter may be given as a number, or as a JulDate object. + * @param {number|EthiopicDate|string} year the year for which the leap year information is being sought + * @return {boolean} true if the given year is a leap year + */ +EthiopicCal.prototype.isLeapYear = function(year) { + var y = year; + switch (typeof(y)) { + case "string": + y = parseInt(y, 10); + break; + case "object": + if (typeof(y.year) !== "number") { // in case it is an IDate object + return false; + } + y = y.year; + break; + case "function": + case "undefined": + return false; + } + return MathUtils.mod(y, 4) === 3; +}; + +/** + * Return the type of this calendar. + * + * @return {string} the name of the type of this calendar + */ +EthiopicCal.prototype.getType = function() { + return this.type; +}; + + +/* register this calendar for the factory method */ +Calendar._constructors["ethiopic"] = EthiopicCal; + + +/* + * EthiopicRataDie.js - Represent an RD date in the Ethiopic calendar + * + * Copyright © 2015, 2018, 2021 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + +/** + * @class + * Construct a new Ethiopic RD date number object. The constructor parameters can + * contain any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. + * + *
  • julianday - sets the time of this instance according to the given + * Julian Day instance or the Julian Day given as a float + * + *
  • year - any integer, including 0 + * + *
  • month - 1 to 12, where 1 means Maskaram, 2 means Teqemt, etc., and 13 means Paguemen + * + *
  • day - 1 to 30 + * + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + * + *
  • minute - 0 to 59 + * + *
  • second - 0 to 59 + * + *
  • millisecond - 0 to 999 + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If the constructor is called with another Ethiopic date instance instead of + * a parameter block, the other instance acts as a parameter block and its + * settings are copied into the current instance.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above are present, then the RD is calculate based on + * the current date at the time of instantiation.

+ * + * If any of the properties from year through millisecond are not + * specified in the params, it is assumed that they have the smallest possible + * value in the range for the property (zero or one).

+ * + * + * @private + * @constructor + * @extends RataDie + * @param {Object=} params parameters that govern the settings and behaviour of this Ethiopic RD date + */ +var EthiopicRataDie = function(params) { + this.cal = params && params.cal || new EthiopicCal(); + this.rd = NaN; + RataDie.call(this, params); +}; + +EthiopicRataDie.prototype = new RataDie(); +EthiopicRataDie.prototype.parent = RataDie; +EthiopicRataDie.prototype.constructor = EthiopicRataDie; + +/** + * The difference between the zero Julian day and the first Ethiopic date + * of Friday, August 29, 8 CE Julian at 6:00am UTC.

+ * + * See for information about how time is handled in Ethiopia. + * + * @protected + * @type number + */ +EthiopicRataDie.prototype.epoch = 1724219.75; + +/** + * Calculate the Rata Die (fixed day) number of the given date from the + * date components. + * + * @protected + * @param {Object} date the date components to calculate the RD from + */ +EthiopicRataDie.prototype._setDateComponents = function(date) { + var year = date.year; + var years = 365 * (year - 1) + Math.floor(year/4); + var dayInYear = (date.month-1) * 30 + date.day; + var rdtime = (date.hour * 3600000 + + date.minute * 60000 + + date.second * 1000 + + date.millisecond) / + 86400000; + + /* + console.log("calcRataDie: converting " + JSON.stringify(parts)); + console.log("getRataDie: year is " + years); + console.log("getRataDie: day in year is " + dayInYear); + console.log("getRataDie: rdtime is " + rdtime); + console.log("getRataDie: rd is " + (years + dayInYear + rdtime)); + */ + + this.rd = years + dayInYear + rdtime; +}; + + +/* + * EthiopicDate.js - Represent a date in the Ethiopic calendar + * + * Copyright © 2015, 2018, 2021, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + + + + + +/** + * @class + * Construct a new date object for the Ethiopic Calendar. The constructor can be called + * with a parameter object that contains any of the following properties: + * + *

+ * + * If called with another Ethiopic date argument, the date components of the given + * date are copied into the current one.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above + * from unixtime through millisecond are present, then the date + * components are + * filled in with the current date at the time of instantiation. Note that if + * you do not give the time zone when defaulting to the current time and the + * time zone for all of ilib was not set with ilib.setTimeZone(), then the + * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich + * Mean Time").

+ * + * + * @constructor + * @extends IDate + * @param {Object=} params parameters that govern the settings and behaviour of this Ethiopic date + */ +var EthiopicDate = function(params) { + this.cal = new EthiopicCal(); + + params = params || {}; + + if (typeof(params.noinstance) === 'boolean' && params.noinstance) { + // for doing inheritance, so don't need to fill in the data. The inheriting class only wants the methods. + return; + } + if (params.timezone) { + this.timezone = params.timezone; + } + if (params.locale) { + this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; + } + + if (!this.timezone) { + if (this.locale) { + new LocaleInfo(this.locale, { + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(li) { + this.li = li; + this.timezone = li.getTimeZone(); + this._init(params); + }) + }); + } else { + this.timezone = "local"; + this._init(params); + } + } else { + this._init(params); + } +}; + +EthiopicDate.prototype = new IDate({ noinstance: true }); +EthiopicDate.prototype.parent = IDate; +EthiopicDate.prototype.constructor = EthiopicDate; + +/** + * Initialize this instance + * @private + */ +EthiopicDate.prototype._init = function (params) { + new TimeZone({ + id: this.timezone, + sync: params.sync, + loadParams: params.loadParams, + onLoad: ilib.bind(this, function(tz) { + this.tz = tz; + + if (params.year || params.month || params.day || params.hour || + params.minute || params.second || params.millisecond ) { + /** + * Year in the Ethiopic calendar. + * @type number + */ + this.year = parseInt(params.year, 10) || 0; + /** + * The month number, ranging from 1 (Maskaram) to 13 (Paguemen). + * @type number + */ + this.month = parseInt(params.month, 10) || 1; + /** + * The day of the month. This ranges from 1 to 30. + * @type number + */ + this.day = parseInt(params.day, 10) || 1; + /** + * The hour of the day. This can be a number from 0 to 23, as times are + * stored unambiguously in the 24-hour clock. + * @type number + */ + this.hour = parseInt(params.hour, 10) || 0; + /** + * The minute of the hours. Ranges from 0 to 59. + * @type number + */ + this.minute = parseInt(params.minute, 10) || 0; + /** + * The second of the minute. Ranges from 0 to 59. + * @type number + */ + this.second = parseInt(params.second, 10) || 0; + /** + * The millisecond of the second. Ranges from 0 to 999. + * @type number + */ + this.millisecond = parseInt(params.millisecond, 10) || 0; + + /** + * The day of the year. Ranges from 1 to 366. + * @type number + */ + this.dayOfYear = parseInt(params.dayOfYear, 10); + + if (typeof(params.dst) === 'boolean') { + this.dst = params.dst; + } + + this.rd = this.newRd(this); + + // add the time zone offset to the rd to convert to UTC + // getOffsetMillis requires that this.year, this.rd, and this.dst + // are set in order to figure out which time zone rules apply and + // what the offset is at that point in the year + this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; + if (this.offset !== 0) { + this.rd = this.newRd({ + rd: this.rd.getRataDie() - this.offset + }); + } + } + + if (!this.rd) { + this.rd = this.newRd(params); + this._calcDateComponents(); + } + + if (typeof(params.onLoad) === "function") { + params.onLoad(this); + } + }) + }); +}; + +/** + * Return a new RD for this date type using the given params. + * @protected + * @param {Object=} params the parameters used to create this rata die instance + * @returns {RataDie} the new RD instance for the given params + */ +EthiopicDate.prototype.newRd = function (params) { + return new EthiopicRataDie(params); +}; + +/** + * Return the year for the given RD + * @private + * @param {number} rd RD to calculate from + * @returns {number} the year for the RD + */ +EthiopicDate.prototype._calcYear = function(rd) { + var year = Math.floor((4*(Math.floor(rd)-1) + 1463)/1461); + + return year; +}; + +/** + * Calculate date components for the given RD date. + * @private + */ +EthiopicDate.prototype._calcDateComponents = function () { + var remainder, + rd = this.rd.getRataDie(); + + this.year = this._calcYear(rd); + + if (typeof(this.offset) === "undefined") { + this.year = this._calcYear(rd); + + // now offset the RD by the time zone, then recalculate in case we were + // near the year boundary + if (!this.tz) { + this.tz = new TimeZone({id: this.timezone}); + } + this.offset = this.tz.getOffsetMillis(this) / 86400000; + } + + if (this.offset !== 0) { + rd += this.offset; + this.year = this._calcYear(rd); + } + + var jan1 = this.newRd({ + year: this.year, + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }); + remainder = rd + 1 - jan1.getRataDie(); + + this.month = Math.floor((remainder-1)/30) + 1; + remainder = remainder - (this.month-1) * 30; + + this.day = Math.floor(remainder); + remainder -= this.day; + + // now convert to milliseconds for the rest of the calculation + remainder = Math.round(remainder * 86400000); + + this.hour = Math.floor(remainder/3600000); + remainder -= this.hour * 3600000; + + this.minute = Math.floor(remainder/60000); + remainder -= this.minute * 60000; + + this.second = Math.floor(remainder/1000); + remainder -= this.second * 1000; + + this.millisecond = remainder; +}; + +/** + * Return the day of the week of this date. The day of the week is encoded + * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. + * + * @return {number} the day of the week + */ +EthiopicDate.prototype.getDayOfWeek = function() { + var rd = Math.floor(this.rd.getRataDie() + (this.offset || 0)); + return MathUtils.mod(rd-5, 7); +}; + +/** + * Return the name of the calendar that governs this date. + * + * @return {string} a string giving the name of the calendar + */ +EthiopicDate.prototype.getCalendar = function() { + return "ethiopic"; +}; + +//register with the factory method +IDate._constructors["ethiopic"] = EthiopicDate; + + +/* + * CopticCal.js - Represent a Coptic calendar object. + * + * Copyright © 2015,2018, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + +/** + * @class + * Construct a new Coptic calendar object. This class encodes information about + * a Coptic calendar.

+ * + * @param {Object=} options Options governing the construction of this instance + * @constructor + * @extends EthiopicCal + */ +var CopticCal = function(options) { + this.type = "coptic"; + + if (options && typeof(options.onLoad) === "function") { + options.onLoad(this); + } +}; + +CopticCal.prototype = new EthiopicCal(); +CopticCal.prototype.parent = EthiopicCal; +CopticCal.prototype.constructor = CopticCal; + + +/* register this calendar for the factory method */ +Calendar._constructors["coptic"] = CopticCal; + + +/* + * CopticRataDie.js - Represent an RD date in the Coptic calendar + * + * Copyright © 2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + +/** + * @class + * Construct a new Coptic RD date number object. The constructor parameters can + * contain any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. + * + *
  • julianday - sets the time of this instance according to the given + * Julian Day instance or the Julian Day given as a float + * + *
  • year - any integer, including 0 + * + *
  • month - 1 to 13, where 1 means Thoout, 2 means Paope, etc., and 13 means Epagomene + * + *
  • day - 1 to 30 + * + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + * + *
  • minute - 0 to 59 + * + *
  • second - 0 to 59 + * + *
  • millisecond - 0 to 999 + * + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If the constructor is called with another Coptic date instance instead of + * a parameter block, the other instance acts as a parameter block and its + * settings are copied into the current instance.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above are present, then the RD is calculate based on + * the current date at the time of instantiation.

+ * + * If any of the properties from year through millisecond are not + * specified in the params, it is assumed that they have the smallest possible + * value in the range for the property (zero or one).

+ * + * + * @private + * @constructor + * @extends EthiopicRataDie + * @param {Object=} params parameters that govern the settings and behaviour of this Coptic RD date + */ +var CopticRataDie = function(params) { + this.cal = params && params.cal || new CopticCal(); + this.rd = NaN; + /** + * The difference between the zero Julian day and the first Coptic date + * of Friday, August 29, 284 CE Julian at 7:00am UTC. + * @private + * @type number + */ + this.epoch = 1825028.5; + + var tmp = {}; + if (params) { + JSUtils.shallowCopy(params, tmp); + } + tmp.cal = this.cal; // override the cal parameter that may be passed in + EthiopicRataDie.call(this, tmp); +}; + +CopticRataDie.prototype = new EthiopicRataDie(); +CopticRataDie.prototype.parent = EthiopicRataDie; +CopticRataDie.prototype.constructor = CopticRataDie; + + +/* + * CopticDate.js - Represent a date in the Coptic calendar + * + * Copyright © 2015, 2018, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + + + + +/** + * @class + * Construct a new date object for the Coptic Calendar. The constructor can be called + * with a parameter object that contains any of the following properties: + * + *

    + *
  • unixtime - sets the time of this instance according to the given + * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970 (Gregorian). + *
  • julianday - the Julian Day to set into this date + *
  • year - any integer + *
  • month - 1 to 13, where 1 means Thoout, 2 means Paope, etc., and 13 means Epagomene + *
  • day - 1 to 30 + *
  • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation + * is always done with an unambiguous 24 hour representation + *
  • minute - 0 to 59 + *
  • second - 0 to 59 + *
  • millisecond - 0 to 999 + *
  • locale - the TimeZone instance or time zone name as a string + * of this coptic date. The date/time is kept in the local time. The time zone + * is used later if this date is formatted according to a different time zone and + * the difference has to be calculated, or when the date format has a time zone + * component in it. + *
  • timezone - the time zone of this instance. If the time zone is not + * given, it can be inferred from this locale. For locales that span multiple + * time zones, the one with the largest population is chosen as the one that + * represents the locale. + *
  • date - use the given intrinsic Javascript date to initialize this one. + *
+ * + * If called with another Coptic date argument, the date components of the given + * date are copied into the current one.

+ * + * If the constructor is called with no arguments at all or if none of the + * properties listed above + * from unixtime through millisecond are present, then the date + * components are + * filled in with the current date at the time of instantiation. Note that if + * you do not give the time zone when defaulting to the current time and the + * time zone for all of ilib was not set with ilib.setTimeZone(), then the + * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich + * Mean Time").

+ * + * + * @constructor + * @extends EthiopicDate + * @param {Object=} params parameters that govern the settings and behaviour of this Coptic date + */ +var CopticDate = function(params) { + this.rd = NaN; // clear these out so that the EthiopicDate constructor can set it + var newparams = ilib.extend({}, params); + newparams.onLoad = function(ed) { + ed.cal = new CopticCal(); + if (typeof(params.onLoad) === "function") { + params.onLoad(ed); + } + }; + EthiopicDate.call(this, params); +}; + +CopticDate.prototype = new EthiopicDate({noinstance: true}); +CopticDate.prototype.parent = EthiopicDate.prototype; +CopticDate.prototype.constructor = CopticDate; + +/** + * Return a new RD for this date type using the given params. + * @protected + * @param {Object=} params the parameters used to create this rata die instance + * @returns {RataDie} the new RD instance for the given params + */ +CopticDate.prototype.newRd = function (params) { + return new CopticRataDie(params); +}; + +/** + * Return the day of the week of this date. The day of the week is encoded + * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. + * + * @return {number} the day of the week + */ +CopticDate.prototype.getDayOfWeek = function() { + var rd = Math.floor(this.rd.getRataDie() + (this.offset || 0)); + return MathUtils.mod(rd-3, 7); +}; + +/** + * Return the name of the calendar that governs this date. + * + * @return {string} a string giving the name of the calendar + */ +CopticDate.prototype.getCalendar = function() { + return "coptic"; +}; + +//register with the factory method +IDate._constructors["coptic"] = CopticDate; + + +/* + * DateFmt.js - Date formatter definition + * + * Copyright © 2012-2015, 2018, 2020, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data dateformats sysres + + + + + + + + + + + + + + + + + + +/** + * @class + * Create a new date formatter instance. The date formatter is immutable once + * it is created, but can format as many different dates as needed with the same + * options. Create different date formatter instances for different purposes + * and then keep them cached for use later if you have more than one date to + * format.

+ * + * The options may contain any of the following properties: + * + *

    + *
  • locale - locale to use when formatting the date/time. If the locale is + * not specified, then the default locale of the app or web page will be used. + * + *
  • calendar - the type of calendar to use for this format. The value should + * be a string containing the name of the calendar. Currently, the supported + * types are "gregorian", "julian", "arabic", "hebrew", or "chinese". If the + * calendar is not specified, then the default calendar for the locale is used. When the + * calendar type is specified, then the format method must be called with an instance of + * the appropriate date type. (eg. Gregorian calendar means that the format method must + * be called with a GregDate instance.) + * + *
  • timezone - time zone to use when formatting times. This may be a time zone + * instance or a time zone specifier from the IANA list of time zone database names + * (eg. "America/Los_Angeles"), + * the string "local", or a string specifying the offset in RFC 822 format. The IANA + * list of time zone names can be viewed at + * this page. + * If the time zone is given as "local", the offset from UTC as given by + * the Javascript system is used. If the offset is given as an RFC 822 style offset + * specifier, it will parse that string and use the resulting offset. If the time zone + * is not specified, the + * default time zone for the locale is used. If both the date object and this formatter + * instance contain time zones and those time zones are different from each other, the + * formatter will calculate the offset between the time zones and subtract it from the + * date before formatting the result for the current time zone. The theory is that a date + * object that contains a time zone specifies a specific instant in time that is valid + * around the world, whereas a date object without one is a local time and can only be + * used for doing things in the local time zone of the user. + * + *
  • type - Specify whether this formatter should format times only, dates only, or + * both times and dates together. Valid values are "time", "date", and "datetime". Note that + * in some locales, the standard format uses the order "time followed by date" and in others, + * the order is exactly opposite, so it is better to create a single "datetime" formatter + * than it is to create a time formatter and a date formatter separately and concatenate the + * results. A "datetime" formatter will get the order correct for the locale.

    + * The default type if none is specified in with the type option is "date".

    + * + *
  • length - Specify the length of the format to use. The length is the approximate size of the + * formatted string. + * + *
      + *
    • short - use a short representation of the time. This is the most compact format possible for the locale. + *
    • medium - use a medium length representation of the time. This is a slightly longer format. + *
    • long - use a long representation of the time. This is a fully specified format, but some of the textual + * components may still be abbreviated + *
    • full - use a full representation of the time. This is a fully specified format where all the textual + * components are spelled out completely + *
    + * eg. The "short" format for an en_US date may be "MM/dd/yy", whereas the long format might be "d MMM, yyyy". In the long + * format, the month name is textual instead of numeric and is longer, the year is 4 digits instead of 2, and the format + * contains slightly more spaces and formatting characters.

    + * Note that the length parameter does not specify which components are to be formatted. Use the "date" and the "time" + * properties to specify the components. Also, very few of the components of a time format differ according to the length, + * so this property has little to no affect on time formatting.

    + * + *
  • date - This property tells + * which components of a date format to use. For example, + * sometimes you may wish to format a date that only contains the month and date + * without the year, such as when displaying a person's yearly birthday. The value + * of this property allows you to specify only those components you want to see in the + * final output, ordered correctly for the locale.

    + * Valid values are: + * + *
      + *
    • dmwy - format all components, weekday, date, month, and year + *
    • dmy - format only date, month, and year + *
    • dmw - format only weekday, date, and month + *
    • dm - format only date and month + *
    • my - format only month and year + *
    • dw - format only the weekday and date + *
    • d - format only the date + *
    • m - format only the month, in numbers for shorter lengths, and letters for + * longer lengths + *
    • n - format only the month, in letters only for all lengths + *
    • y - format only the year + *
    + * Default components, if this property is not specified, is "dmy". This property may be specified + * but has no affect if the current formatter is for times only.

    + * As of ilib 12.0, you can now pass ICU style skeletons in this option similar to the ones you + * get from DateTimePatternGenerator.getSkeleton(). + * It will not extract the length from the skeleton so you still need to pass the length property, + * but it will extract the date components.

    + * + *
  • time - This property gives which components of a time format to use. The time will be formatted + * correctly for the locale with only the time components requested. For example, a clock might only display + * the hour and minute and not need the seconds or the am/pm component. In this case, the time property should be set + * to "hm".

    + * Valid values for this property are: + * + *
      + *
    • ahmsz - format the hours, minutes, seconds, am/pm (if using a 12 hour clock), and the time zone + *
    • ahms - format the hours, minutes, seconds, and am/pm (if using a 12 hour clock) + *
    • hmsz - format the hours, minutes, seconds, and the time zone + *
    • hms - format the hours, minutes, and seconds + *
    • ahmz - format the hours, minutes, am/pm (if using a 12 hour clock), and the time zone + *
    • ahm - format the hours, minutes, and am/pm (if using a 12 hour clock) + *
    • hmz - format the hours, minutes, and the time zone + *
    • ah - format only the hours and am/pm if using a 12 hour clock + *
    • hm - format only the hours and minutes + *
    • ms - format only the minutes and seconds + *
    • h - format only the hours + *
    • m - format only the minutes + *
    • s - format only the seconds + *
    + * If you want to format a length of time instead of a particular instant + * in time, use the duration formatter object (DurationFmt) instead because this + * formatter is geared towards instants. A date formatter will make sure that each component of the + * time is within the normal range + * for that component. That is, the minutes will always be between 0 and 59, no matter + * what is specified in the date to format. A duration format will allow the number + * of minutes to exceed 59 if, for example, you were displaying the length of + * a movie of 198 minutes.

    + * Default value if this property is not specified is "hma".

    + * As of ilib 12.0, you can now pass ICU style skeletons in this option similar to the ones you + * get from DateTimePatternGenerator.getSkeleton(). + * It will not extract the length from the skeleton so you still need to pass the length property, + * but it will extract the time components. + * + *
  • clock - specify that the time formatter should use a 12 or 24 hour clock. + * Valid values are "12" and "24".

    + * In some locales, both clocks are used. For example, in en_US, the general populace uses + * a 12 hour clock with am/pm, but in the US military or in nautical or aeronautical or + * scientific writing, it is more common to use a 24 hour clock. This property allows you to + * construct a formatter that overrides the default for the locale.

    + * If this property is not specified, the default is to use the most widely used convention + * for the locale. + * + *
  • template - use the given template string as a fixed format when formatting + * the date/time. Valid codes to use in a template string are as follows: + * + *
      + *
    • a - am/pm marker + *
    • B - the current day period + *
    • d - 1 or 2 digit date of month, not padded + *
    • dd - 1 or 2 digit date of month, 0 padded to 2 digits + *
    • O - ordinal representation of the date of month (eg. "1st", "2nd", etc.) + *
    • D - 1 to 3 digit day of year + *
    • DD - 1 to 3 digit day of year, 0 padded to 2 digits + *
    • DDD - 1 to 3 digit day of year, 0 padded to 3 digits + *
    • M - 1 or 2 digit month number, not padded + *
    • MM - 1 or 2 digit month number, 0 padded to 2 digits + *
    • N - 1 character month name abbreviation + *
    • NN - 2 character month name abbreviation + *
    • MMM - 3 character month name abbreviation + *
    • MMMM - fully spelled out month name + *
    • L - 1 character stand-alone month name abbreviation + *
    • LL - 2 character stand-alone month name abbreviation + *
    • LLL - 3 character stand-alone month name abbreviation + *
    • LLLL - fully spelled out stand-alone month name + *
    • yy - 2 digit year + *
    • yyyy - 4 digit year + *
    • E - day-of-week name, abbreviated to a single character + *
    • EE - day-of-week name, abbreviated to a max of 2 characters + *
    • EEE - day-of-week name, abbreviated to a max of 3 characters + *
    • EEEE - day-of-week name fully spelled out + *
    • c - stand-alone day-of-week name, abbreviated to a single character + *
    • cc - stand-alone day-of-week name, abbreviated to a max of 2 characters + *
    • ccc - stand-alone day-of-week name, abbreviated to a max of 3 characters + *
    • cccc - stand-alone day-of-week name fully spelled out + *
    • G - era designator + *
    • w - week number in year + *
    • ww - week number in year, 0 padded to 2 digits + *
    • W - week in month + *
    • h - hour (12 followed by 1 to 11) + *
    • hh - hour (12, followed by 1 to 11), 0 padded to 2 digits + *
    • k - hour (1 to 24) + *
    • kk - hour (1 to 24), 0 padded to 2 digits + *
    • H - hour (0 to 23) + *
    • HH - hour (0 to 23), 0 padded to 2 digits + *
    • K - hour (0 to 11) + *
    • KK - hour (0 to 11), 0 padded to 2 digits + *
    • m - minute in hour + *
    • mm - minute in hour, 0 padded to 2 digits + *
    • s - second in minute + *
    • ss - second in minute, 0 padded to 2 digits + *
    • S - millisecond (1 to 3 digits) + *
    • SSS - millisecond, 0 padded to 3 digits + *
    • z - general time zone + *
    • Z - RFC 822 time zone + *
    + * + *
  • useNative - the flag used to determine whether to use the native script settings + * for formatting the numbers. + * + *
  • meridiems - string that specifies what style of meridiems to use with this + * format. The choices are "default", "gregorian", "ethiopic", and "chinese". The "default" + * style is often the simple Gregorian AM/PM, but the actual style is chosen by the locale. + * (For almost all locales, the Gregorian AM/PM style is most frequently used.) + * The "ethiopic" style uses 5 different meridiems for "morning", "noon", "afternoon", + * "evening", and "night". The "chinese" style uses 7 different meridiems corresponding + * to the various parts of the day. N.B. Even for the Chinese locales, the default is "gregorian" + * when formatting dates in the Gregorian calendar. + * + *
  • useIntl - choose whether Intl.DateTimeFormat object for formatting. + * When it is set to true, the Intl object is available, it supports the requested locale, and + * the parameters can be converted to equivalent parameters for the Intl.DateTimeFormat object, + * then it will format the date relatively quickly using Intl. + * When they cannot be converted, the Intl object is not available, or the Intl object does not support + * the requested locale, it will perform the relatively slow formatting using regular ilib code written in Javascript. + * The code will often return different results depending on the platform and version of the Javascript engine + * and which version of CLDR it supports. If you need consistency across versions and platforms, + * do not use the useIntl flag. Just stick with the regular ilib formatting code. + * + *
  • onLoad - a callback function to call when the date format object is fully + * loaded. When the onLoad option is given, the DateFmt object will attempt to + * load any missing locale data using the ilib loader callback. + * When the constructor is done (even if the data is already preassembled), the + * onLoad function is called with the current instance as a parameter, so this + * callback can be used with preassembled or dynamic loading or a mix of the two. + * + *
  • sync - tell whether to load any missing locale data synchronously or + * asynchronously. If this option is given as "false", then the "onLoad" + * callback must be given, as the instance returned from this constructor will + * not be usable for a while. + * + *
  • loadParams - an object containing parameters to pass to the + * loader callback function when locale data is missing. The parameters are not + * interpretted or modified in any way. They are simply passed along. The object + * may contain any property/value pairs as long as the calling code is in + * agreement with the loader callback function as to what those parameters mean. + *
+ * + * Any substring containing letters within single or double quotes will be used + * as-is in the final output and will not be interpretted for codes as above.

+ * + * Example: a date format in Spanish might be given as: "'El' d. 'de' MMMM", where + * the 'El' and the 'de' are left as-is in the output because they are quoted. Typical + * output for this example template might be, "El 5. de Mayo". + * + * The following options will be used when formatting a date/time with an explicit + * template: + * + *

    + *
  • locale - the locale is only used for + * translations of things like month names or day-of-week names. + *
  • calendar - used to translate a date instance into date/time component values + * that can be formatted into the template + *
  • timezone - used to figure out the offset to add or subtract from the time to + * get the final time component values + *
  • clock - used to figure out whether to format times with a 12 or 24 hour clock. + * If this option is specified, it will override the hours portion of a time format. + * That is, "hh" is switched with "HH" and "kk" is switched with "KK" as appropriate. + * If this option is not specified, the 12/24 code in the template will dictate whether + * to use the 12 or 24 clock, and the 12/24 default in the locale will be ignored. + *
+ * + * All other options will be ignored and their corresponding getter methods will + * return the empty string.

+ * + * + * @constructor + * @param {Object} options options governing the way this date formatter instance works + */ +var DateFmt = function(options) { + var arr, i, bad, c, comps, + sync = true, + loadParams = undefined; + + this.locale = new Locale(); + this.type = "date"; + this.length = "s"; + this.dateComponents = "dmy"; + this.timeComponents = "ahm"; + this.meridiems = "default"; + this.useIntl = false; + + options = options || {sync: true}; + if (options.locale) { + this.locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; + } + + if (options.type) { + if (options.type === 'date' || options.type === 'time' || options.type === 'datetime') { + this.type = options.type; + } + } + + if (options.calendar) { + this.calName = options.calendar; + } + + if (options.length) { + if (options.length === 'short' || + options.length === 'medium' || + options.length === 'long' || + options.length === 'full') { + // only use the first char to save space in the json files + this.length = options.length.charAt(0); + } + } + + if (options.date) { + arr = options.date.split(""); + var dateComps = new ISet(); + bad = false; + for (i = 0; i < arr.length; i++) { + c = arr[i].toLowerCase(); + if (c === "e") c = "w"; // map ICU -> ilib + if (c !== 'd' && c !== 'm' && c !== 'y' && c !== 'w' && c !== 'n') { + // ignore time components and the era + if (c !== 'h' && c !== 'm' && c !== 's' && c !== 'a' && c !== 'z' && c !== 'g') { + bad = true; + break; + } + } else { + dateComps.add(c); + } + } + if (!bad) { + comps = dateComps.asArray().sort(function (left, right) { + return (left < right) ? -1 : ((right < left) ? 1 : 0); + }); + this.dateComponents = comps.join(""); + } + } + + if (options.time) { + arr = options.time.split(""); + var timeComps = new ISet(); + this.badTime = false; + for (i = 0; i < arr.length; i++) { + c = arr[i].toLowerCase(); + if (c !== 'h' && c !== 'm' && c !== 's' && c !== 'a' && c !== 'z') { + // ignore the date components + if (c !== 'd' && c !== 'm' && c !== 'y' && c !== 'w' && c !== 'e' && c !== 'n' && c !== 'g') { + this.badTime = true; + break; + } + } else { + timeComps.add(c); + } + } + if (!this.badTime) { + comps = timeComps.asArray().sort(function (left, right) { + return (left < right) ? -1 : ((right < left) ? 1 : 0); + }); + this.timeComponents = comps.join(""); + } + } + + if (options.clock && (options.clock === '12' || options.clock === '24')) { + this.clock = options.clock; + } + + if (options.template) { + // many options are not useful when specifying the template directly, so zero + // them out. + this.type = ""; + this.length = ""; + this.dateComponents = ""; + this.timeComponents = ""; + + this.template = options.template; + } + + if (options.timezone) { + if (options.timezone instanceof TimeZone) { + this.tz = options.timezone; + this.timezone = this.tz.getId(); + } else { + this.timezone = options.timezone; + } + } + + if (typeof(options.useNative) === 'boolean') { + this.useNative = options.useNative; + } + + if (typeof(options.meridiems) !== 'undefined' && + (options.meridiems === "chinese" || + options.meridiems === "gregorian" || + options.meridiems === "ethiopic")) { + this.meridiems = options.meridiems; + } + + if (typeof(options.sync) !== 'undefined') { + sync = (options.sync === true); + } + + if (typeof(options.useIntl) !== 'undefined') { + this.useIntl = options.useIntl; + } + + loadParams = options.loadParams; + + new LocaleInfo(this.locale, { + sync: sync, + loadParams: loadParams, + onLoad: ilib.bind(this, function (li) { + this.locinfo = li; + + // get the default calendar name from the locale, and if the locale doesn't define + // one, use the hard-coded gregorian as the last resort + this.calName = this.calName || this.locinfo.getCalendar() || "gregorian"; + + if (this.useIntl && + typeof(Intl) !== 'undefined' && + typeof(Intl.DateTimeFormat) !== 'undefined' && + typeof(Intl.DateTimeFormat.supportedLocalesOf) !== 'undefined' && + Intl.DateTimeFormat.supportedLocalesOf(this.locale.getSpec()).length > 0 && + (this.locinfo.getDigitsStyle() === "western" && (!options.template) && this.calName === "gregorian")) { + var len = DateFmt.lenmap[this.length]; + if (this.type === "date" && + ((this.dateComponents === "dmy" && len !== "full") || (this.dateComponents === "dmwy" && len === "full"))) { + this.IntlDateTimeObj = new Intl.DateTimeFormat(this.locale.getSpec(), { + dateStyle: len + }); + } else if (this.type === "time" && + this.timeComponents === "ahm" || this.timeComponents === "ahms"){ + var timeMap = { + "ahm": "short", + "ahms": "medium" + } + this.IntlDateTimeObj = new Intl.DateTimeFormat(this.locale.getSpec(), { + timeStyle: timeMap[this.timeComponents] + }); + } else if (this.type === "date" && this.dateComponents === "m" && len === "full") { + this.IntlDateTimeObj = new Intl.DateTimeFormat(this.locale.getSpec(), { + month: "long" + }); + + } else if (this.type === "date" && this.dateComponents === "w" && len === "full") { + this.IntlDateTimeObj = new Intl.DateTimeFormat(this.locale.getSpec(), { + weekday: "long" + }); + } else { + this.useIntl = false; + } + } + if(!this.useIntl){ + if (!this.IntlDateTimeObj && ilib.isDynCode()) { + // If we are running in the dynamic code loading assembly of ilib, the following + // will attempt to dynamically load the calendar date class for this calendar. If + // it doesn't work, this just goes on and it will use Gregorian instead. + DateFactory._init(this.calName); + } + + CalendarFactory({ + type: this.calName, + sync: sync, + loadParams: loadParams, + onLoad: ilib.bind(this, function(cal) { + this.cal = cal; + + if (!this.cal) { + // can be synchronous + this.cal = new GregorianCal(); + } + if (this.meridiems === "default") { + this.meridiems = li.getMeridiemsStyle(); + } + + // load the strings used to translate the components + new ResBundle({ + locale: this.locale, + name: "sysres", + sync: sync, + loadParams: loadParams, + onLoad: ilib.bind(this, function (rb) { + this.sysres = rb; + + if (!this.tz) { + var timezone = options.timezone; + if (!timezone && !options.locale) { + timezone = "local"; + } + + new TimeZone({ + locale: this.locale, + id: timezone, + sync: sync, + loadParams: loadParams, + onLoad: ilib.bind(this, function(tz) { + this.tz = tz; + this._init(options); + }) + }); + } else { + this._init(options); + } + }) + }); + }) + }); + } + else { + if (typeof(options.onLoad) === 'function') { + options.onLoad(this); + } + } + }) + }); +}; + +// used in getLength +DateFmt.lenmap = { + "s": "short", + "m": "medium", + "l": "long", + "f": "full" +}; + +DateFmt.defaultFmt = { + "gregorian": { + "order": "{date} {time}", + "date": { + "dmwy": "EEE d/MM/yyyy", + "dmy": "d/MM/yyyy", + "dmw": "EEE d/MM", + "dm": "d/MM", + "my": "MM/yyyy", + "dw": "EEE d", + "d": "dd", + "m": "MM", + "y": "yyyy", + "n": "NN", + "w": "EEE" + }, + "time": { + "12": "h:mm:ssa", + "24": "H:mm:ss" + }, + "range": { + "c00": "{st} - {et}, {sd}/{sm}/{sy}", + "c01": "{sd}/{sm} {st} - {ed}/{em} {et}, {sy}", + "c02": "{sd}/{sm} {st} - {ed}/{em} {et}, {sy}", + "c03": "{sd}/{sm}/{sy} {st} - {ed}/{em}/{ey} {et}", + "c10": "{sd}-{ed}/{sm}/{sy}", + "c11": "{sd}/{sm} - {ed}/{em} {sy}", + "c12": "{sd}/{sm}/{sy} - {ed}/{em}/{ey}", + "c20": "{sm}/{sy} - {em}/{ey}", + "c30": "{sy} - {ey}" + } + }, + "islamic": "gregorian", + "hebrew": "gregorian", + "julian": "gregorian", + "buddhist": "gregorian", + "persian": "gregorian", + "persian-algo": "gregorian", + "han": "gregorian" +}; + +/** +* @static +* @private +*/ +DateFmt.monthNameLenMap = { + "short" : "N", + "medium": "NN", + "long": "MMM", + "full": "MMMM" +}; + +/** +* @static +* @private +*/ +DateFmt.weekDayLenMap = { + "short" : "E", + "medium": "EE", + "long": "EEE", + "full": "EEEE" +}; + +/** + * Return the range of possible meridiems (times of day like "AM" or + * "PM") in this date formatter.

+ * + * The options may contain any of the following properties: + * + *

    + *
  • locale - locale to use when formatting the date/time. If the locale is + * not specified, then the default locale of the app or web page will be used. + * + *
  • meridiems - string that specifies what style of meridiems to use with this + * format. The choices are "default", "gregorian", "ethiopic", and "chinese". The "default" + * style is often the simple Gregorian AM/PM, but the actual style is chosen by the locale. + * (For almost all locales, the Gregorian AM/PM style is most frequently used.) + * The "ethiopic" style uses 5 different meridiems for "morning", "noon", "afternoon", + * "evening", and "night". The "chinese" style uses 7 different meridiems corresponding + * to the various parts of the day. N.B. Even for the Chinese locales, the default is "gregorian" + * when formatting dates in the Gregorian calendar. + *
+ * + * @static + * @public + * @param {Object} options options governing the way this date formatter instance works for getting meridiems range + * @return {Array.<{name:string,start:string,end:string}>} + */ +DateFmt.getMeridiemsRange = function (options) { + options = options || {sync: true}; + var args = JSUtils.merge({}, options); + args.onLoad = function(fmt) { + if (typeof(options.onLoad) === "function") { + options.onLoad(fmt.getMeridiemsRange()); + } + }; + var fmt = new DateFmt(args); + + return fmt.getMeridiemsRange(); +}; + +/** + * return true if the locale is supported in date and time formatting for Intl.DateTimeFormat Object + *
    + *
  • locale - locale to check if it is available or not. + * If the locale is not specified, then it returns false. + * + *
+ * + * @static + * @public + * @param {string} locale locale to check if it is available or not. + * @return {Boolean} true if it is available to use, false otherwise + */ + +DateFmt.isIntlDateTimeAvailable = function (locale) { + if (!locale || + !ilib._global("Intl") || + typeof(Intl.DateTimeFormat) === 'undefined' || + typeof(Intl.DateTimeFormat.supportedLocalesOf) === 'undefined') { + return false; + } + return (Intl.DateTimeFormat.supportedLocalesOf(locale).length > 0) ? true : false; +}; + +DateFmt.prototype = { + /** + * Finish initializing the formatter object + * @private + */ + _init: function(options) { + if (typeof (options.sync) === 'undefined') { + options.sync = true; + } + Utils.loadData({ + object: "DateFmt", + locale: this.locale, + name: "dateformats.json", + sync: options.sync, + loadParams: options.loadParams, + callback: ilib.bind(this, function (formats) { + if (!formats) { + formats = ilib.data.dateformats || DateFmt.defaultFmt; + } + + this.info = formats; + var ret = this; + + if (this.template) { + this._massageTemplate(); + } else { + if (typeof(this.clock) === 'undefined') { + // default to the locale instead + this.clock = this.locinfo.getClock(); + } + + if (typeof(options.sync) === "boolean" && !options.sync) { + // in async mode, capture the exception and call the callback with "undefined" + try { + this._initTemplate(formats); + this._massageTemplate(); + } catch (e) { + ret = undefined; + } + } else { + // in sync mode, allow the exception to percolate upwards + this._initTemplate(formats); + this._massageTemplate(); + } + } + + if (typeof(options.onLoad) === 'function') { + options.onLoad(ret); + } + }) + }); + }, + /** + * @private + * @param {string|{ + * order:(string|{ + * s:string, + * m:string, + * l:string, + * f:string + * }), + * date:Object., + * time:Object.>, + * range:Object. + * }} formats + */ + _initTemplate: function (formats) { + if (formats[this.calName]) { + var name = formats[this.calName]; + // may be an alias to another calendar type + this.formats = (typeof(name) === "string") ? formats[name] : name; + + this.template = ""; + + switch (this.type) { + case "datetime": + this.template = (this.formats && this._getLengthFormat(this.formats.order, this.length)) || "{date} {time}"; + this.template = this.template.replace("{date}", this._getFormat(this.formats.date, this.dateComponents, this.length) || ""); + this.template = this.template.replace("{time}", this._getFormat(this.formats.time[this.clock], this.timeComponents, this.length) || ""); + break; + case "date": + this.template = this._getFormat(this.formats.date, this.dateComponents, this.length); + break; + case "time": + this.template = this._getFormat(this.formats.time[this.clock], this.timeComponents, this.length); + break; + } + + // calculate what order the components appear in for this locale + this.componentOrder = this._getFormat(this.formats.date, "dmy", "l"). + replace(/[^dMy]/g, ""). + replace(/y+/, "y"). + replace(/d+/, "d"). + replace(/M+/, "m"); + } else { + throw "No formats available for calendar " + this.calName + " in locale " + this.locale.toString(); + } + }, + + /** + * @private + */ + _massageTemplate: function () { + var i; + + if (this.clock && this.template) { + // explicitly set the hours to the requested type + var temp = ""; + switch (this.clock) { + case "24": + for (i = 0; i < this.template.length; i++) { + if (this.template.charAt(i) == "'") { + temp += this.template.charAt(i++); + while (i < this.template.length && this.template.charAt(i) !== "'") { + temp += this.template.charAt(i++); + } + if (i < this.template.length) { + temp += this.template.charAt(i); + } + } else if (this.template.charAt(i) == 'K') { + temp += 'k'; + } else if (this.template.charAt(i) == 'h') { + temp += 'H'; + } else { + temp += this.template.charAt(i); + } + } + this.template = temp; + break; + case "12": + for (i = 0; i < this.template.length; i++) { + if (this.template.charAt(i) == "'") { + temp += this.template.charAt(i++); + while (i < this.template.length && this.template.charAt(i) !== "'") { + temp += this.template.charAt(i++); + } + if (i < this.template.length) { + temp += this.template.charAt(i); + } + } else if (this.template.charAt(i) == 'k') { + temp += 'K'; + } else if (this.template.charAt(i) == 'H') { + temp += 'h'; + } else { + temp += this.template.charAt(i); + } + } + this.template = temp; + break; + } + } + + // tokenize it now for easy formatting + this.templateArr = this._tokenize(this.template); + + var digits; + // set up the mapping to native or alternate digits if necessary + if (typeof(this.useNative) === "boolean") { + if (this.useNative) { + digits = this.locinfo.getNativeDigits(); + if (digits) { + this.digits = digits; + } + } + } else if (this.locinfo.getDigitsStyle() === "native") { + digits = this.locinfo.getNativeDigits(); + if (digits) { + this.useNative = true; + this.digits = digits; + } + } + }, + + /** + * Convert the template into an array of date components separated by formatting chars. + * @private + * @param {string} template Format template to tokenize into components + * @return {Array.} a tokenized array of date format components + */ + _tokenize: function (template) { + var i = 0, start, ch, letter, arr = []; + + // console.log("_tokenize: tokenizing template " + template); + if (template) { + while (i < template.length) { + ch = template.charAt(i); + start = i; + if (ch === "'") { + // console.log("found quoted string"); + i++; + // escaped string - push as-is, then dequote later + while (i < template.length && template.charAt(i) !== "'") { + i++; + } + if (i < template.length) { + i++; // grab the other quote too + } + } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) { + letter = template.charAt(i); + // console.log("found letters " + letter); + while (i < template.length && ch === letter) { + ch = template.charAt(++i); + } + } else { + // console.log("found other"); + while (i < template.length && ch !== "'" && (ch < 'a' || ch > 'z') && (ch < 'A' || ch > 'Z')) { + ch = template.charAt(++i); + } + } + arr.push(template.substring(start,i)); + // console.log("start is " + start + " i is " + i + " and substr is " + template.substring(start,i)); + } + } + return arr; + }, + + /** + * @private + * @param {Object.} obj Object to search + * @param {string} components Format components to search + * @param {string} length Length of the requested format + * @return {string|undefined} the requested format + */ + _getFormatInternal: function getFormatInternal(obj, components, length) { + if (typeof(components) !== 'undefined' && obj && obj[components]) { + return this._getLengthFormat(obj[components], length); + } + return undefined; + }, + + // stand-alone of m (month) is l + // stand-alone of my (month year) is mys + // stand-alone of d (day) is a + // stand-alone of w (weekday) is e + // stand-alone of y (year) is r + _standAlones: { + "m": "l", + "my": "mys", + "d": "a", + "w": "e", + "y": "r" + }, + + /** + * @private + * @param {Object.} obj Object to search + * @param {string} components Format components to search + * @param {string} length Length of the requested format + * @return {string|undefined} the requested format + */ + _getFormat: function getFormat(obj, components, length) { + // handle some special cases for stand-alone formats + if (components && this._standAlones[components]) { + var tmp = this._getFormatInternal(obj, this._standAlones[components], length); + if (tmp) { + return tmp; + } + } + + // if no stand-alone format is available, fall back to the regular format + return this._getFormatInternal(obj, components, length); + }, + + /** + * @private + * @param {(string|{s:string,m:string,l:string,f:string})} obj Object to search + * @param {string} length Length of the requested format + * @return {(string|undefined)} the requested format + */ + _getLengthFormat: function getLengthFormat(obj, length) { + if (typeof(obj) === 'string') { + return obj; + } else if (obj[length]) { + return obj[length]; + } + return undefined; + }, + + /** + * Return the locale used with this formatter instance. + * @return {Locale} the Locale instance for this formatter + */ + getLocale: function() { + return this.locale; + }, + + /** + * Return the template string that is used to format date/times for this + * formatter instance. This will work, even when the template property is not explicitly + * given in the options to the constructor. Without the template option, the constructor + * will build the appropriate template according to the options and use that template + * in the format method. + * + * @return {string} the format template for this formatter + */ + getTemplate: function() { + return this.template; + }, + + /** + * Return the order of the year, month, and date components for the current locale.

+ * + * When implementing a date input widget in a UI, it would be useful to know what + * order to put the year, month, and date input fields so that it conforms to the + * user expectations for the locale. This method gives that order by returning a + * string that has a single "y", "m", and "d" character in it in the correct + * order.

+ * + * For example, the return value "ymd" means that this locale formats the year first, + * the month second, and the date third, and "mdy" means that the month is first, + * the date is second, and the year is third. Four of the 6 possible permutations + * of the three letters have at least one locale that uses that ordering, though some + * combinations are far more likely than others. The ones that are not used by any + * locales are "dym" and "myd", though new locales are still being added to + * CLDR frequently, and possible orderings cannot be predicted. Your code should + * support all 6 possibilities, just in case. + * + * @return {string} a string giving the date component order + */ + getDateComponentOrder: function() { + return this.componentOrder; + }, + + /** + * Return the type of this formatter. The type is a string that has one of the following + * values: "time", "date", "datetime". + * @return {string} the type of the formatter + */ + getType: function() { + return this.type; + }, + + /** + * Return the name of the calendar used to format date/times for this + * formatter instance. + * @return {string} the name of the calendar used by this formatter + */ + getCalendar: function () { + return this.cal.getType() || 'gregorian'; + }, + + /** + * Return the length used to format date/times in this formatter. This is either the + * value of the length option to the constructor, or the default value. + * + * @return {string} the length of formats this formatter returns + */ + getLength: function () { + return DateFmt.lenmap[this.length] || ""; + }, + + /** + * Return the date components that this formatter formats. This is either the + * value of the date option to the constructor, or the default value. If this + * formatter is a time-only formatter, this method will return the empty + * string. The date component letters may be specified in any order in the + * constructor, but this method will reorder the given components to a standard + * order. + * + * @return {string} the date components that this formatter formats + */ + getDateComponents: function () { + return this.dateComponents || ""; + }, + + /** + * Return the time components that this formatter formats. This is either the + * value of the time option to the constructor, or the default value. If this + * formatter is a date-only formatter, this method will return the empty + * string. The time component letters may be specified in any order in the + * constructor, but this method will reorder the given components to a standard + * order. + * + * @return {string} the time components that this formatter formats + */ + getTimeComponents: function () { + return this.timeComponents || ""; + }, + + /** + * Return the time zone used to format date/times for this formatter + * instance. + * @return {TimeZone} a time zone object that this formatter is formatting for + */ + getTimeZone: function () { + return this.tz; + }, + + /** + * Return the clock option set in the constructor. If the clock option was + * not given, the default from the locale is returned instead. + * @return {string} "12" or "24" depending on whether this formatter uses + * the 12-hour or 24-hour clock + */ + getClock: function () { + return this.clock || this.locinfo.getClock(); + }, + + /** + * Return the meridiems range in current locale. + * @return {Array.<{name:string,start:string,end:string}>} the range of available meridiems + */ + getMeridiemsRange: function () { + var result; + var _getSysString = function (key) { + return (this.sysres.getString(undefined, key + "-" + this.calName) || this.sysres.getString(undefined, key)).toString(); + }; + + switch (this.meridiems) { + case "chinese": + result = [ + { + name: _getSysString.call(this, "azh0"), + start: "00:00", + end: "05:59" + }, + { + name: _getSysString.call(this, "azh1"), + start: "06:00", + end: "08:59" + }, + { + name: _getSysString.call(this, "azh2"), + start: "09:00", + end: "11:59" + }, + { + name: _getSysString.call(this, "azh3"), + start: "12:00", + end: "12:59" + }, + { + name: _getSysString.call(this, "azh4"), + start: "13:00", + end: "17:59" + }, + { + name: _getSysString.call(this, "azh5"), + start: "18:00", + end: "20:59" + }, + { + name: _getSysString.call(this, "azh6"), + start: "21:00", + end: "23:59" + } + ]; + break; + case "ethiopic": + result = [ + { + name: _getSysString.call(this, "a0-ethiopic"), + start: "00:00", + end: "05:59" + }, + { + name: _getSysString.call(this, "a1-ethiopic"), + start: "06:00", + end: "06:00" + }, + { + name: _getSysString.call(this, "a2-ethiopic"), + start: "06:01", + end: "11:59" + }, + { + name: _getSysString.call(this, "a3-ethiopic"), + start: "12:00", + end: "17:59" + }, + { + name: _getSysString.call(this, "a4-ethiopic"), + start: "18:00", + end: "23:59" + } + ]; + break; + default: + result = [ + { + name: _getSysString.call(this, "a0"), + start: "00:00", + end: "11:59" + }, + { + name: _getSysString.call(this, "a1"), + start: "12:00", + end: "23:59" + } + ]; + break; + } + + return result; + }, + + _findMeridiem: function(hours, minutes) { + var range = this.info.dayPeriods; + if (!range) { + return ""; + } + // find all day periods that apply, and then choose the shortest one + var minuteOfDay = hours * 60 + minutes; + var shortest = { + name: "", + length: 2000 + }; + for (var i = 0; i < range.length; i++) { + var period = range[i]; + if (minuteOfDay === period.at || (minuteOfDay >= period.from && minuteOfDay < period.to)) { + var periodCode = "B" + i; + var length = typeof(period.at) !== "undefined" ? 0 : (period.to - period.from); + + if (length < shortest.length) { + shortest = { + name: this.sysres.getString(undefined, periodCode + "-" + this.calName) || + this.sysres.getString(undefined, periodCode), + length: length + }; + } + } + } + + return shortest.name; + }, + + /** + * @private + */ + _getTemplate: function (prefix, calendar) { + if (calendar !== "gregorian") { + return prefix + "-" + calendar; + } + return prefix; + }, + + /** + * Returns an array of the months of the year, formatted to the optional length specified. + * i.e. ...getMonthsOfYear() OR ...getMonthsOfYear({length: "short"}) + *

+ * The options parameter may contain any of the following properties: + * + *

    + *
  • length - length of the names of the months being sought. This may be one of + * "short", "medium", "long", or "full" + *
  • date - retrieve the names of the months in the date of the given date + *
  • year - retrieve the names of the months in the given year. In some calendars, + * the months have different names depending if that year is a leap year or not. + *
+ * + * @param {Object=} options an object-literal that contains any of the above properties + * @return {Array} an array of the names of all of the months of the year in the current calendar + */ + getMonthsOfYear: function(options) { + var length = (options && options.length) || this.getLength(), + template = DateFmt.monthNameLenMap[length], + months = [undefined], + date, + monthCount; + + if (options) { + if (options.date) { + date = DateFactory._dateToIlib(options.date); + } + + if (options.year) { + date = DateFactory({year: options.year, month: 1, day: 1, type: this.cal.getType()}); + } + } + + if (!date) { + date = DateFactory({ + calendar: this.cal.getType() + }); + } + + monthCount = this.cal.getNumMonths(date.getYears()); + for (var i = 1; i <= monthCount; i++) { + months[i] = this.sysres.getString(this._getTemplate(template + i, this.cal.getType())).toString(); + } + return months; + }, + + /** + * Returns an array of the days of the week, formatted to the optional length specified. + * i.e. ...getDaysOfWeek() OR ...getDaysOfWeek({length: "short"}) + *

+ * The options parameter may contain any of the following properties: + * + *

    + *
  • length - length of the names of the months being sought. This may be one of + * "short", "medium", "long", or "full" + *
+ * @param {Object=} options an object-literal that contains one key + * "length" with the standard length strings + * @return {Array} an array of all of the names of the days of the week + */ + getDaysOfWeek: function(options) { + var length = (options && options.length) || this.getLength(), + template = DateFmt.weekDayLenMap[length], + days = []; + for (var i = 0; i < 7; i++) { + days[i] = this.sysres.getString(this._getTemplate(template + i, this.cal.getType())).toString(); + } + return days; + }, + + + /** + * Convert this formatter to a string representation by returning the + * format template. This method delegates to getTemplate. + * + * @return {string} the format template + */ + toString: function() { + return this.getTemplate(); + }, + + /** + * Format a date according to a sequence of components. + * @private + * @param {IDate} date a date/time object to format + * @param {Array.} templateArr an array of components to format + * @return {string} the formatted date + */ + _formatTemplate: function (date, templateArr) { + var i, key, temp, tz, str = ""; + for (i = 0; i < templateArr.length; i++) { + switch (templateArr[i]) { + case 'd': + str += (date.day || 1); + break; + case 'dd': + str += JSUtils.pad(date.day || "1", 2); + break; + case 'yy': + temp = "" + ((date.year || 0) % 100); + str += JSUtils.pad(temp, 2); + break; + case 'yyyy': + str += JSUtils.pad(date.year || "0", 4); + break; + case 'M': + str += (date.month || 1); + break; + case 'MM': + str += JSUtils.pad(date.month || "1", 2); + break; + case 'h': + temp = (date.hour || 0) % 12; + if (temp == 0) { + temp = "12"; + } + str += temp; + break; + case 'hh': + temp = (date.hour || 0) % 12; + if (temp == 0) { + temp = "12"; + } + str += JSUtils.pad(temp, 2); + break; + /* + case 'j': + temp = (date.hour || 0) % 12 + 1; + str += temp; + break; + case 'jj': + temp = (date.hour || 0) % 12 + 1; + str += JSUtils.pad(temp, 2); + break; + */ + case 'K': + temp = (date.hour || 0) % 12; + str += temp; + break; + case 'KK': + temp = (date.hour || 0) % 12; + str += JSUtils.pad(temp, 2); + break; + + case 'H': + str += (date.hour || "0"); + break; + case 'HH': + str += JSUtils.pad(date.hour || "0", 2); + break; + case 'k': + str += (date.hour == 0 ? "24" : date.hour); + break; + case 'kk': + temp = (date.hour == 0 ? "24" : date.hour); + str += JSUtils.pad(temp, 2); + break; + + case 'm': + str += (date.minute || "0"); + break; + case 'mm': + str += JSUtils.pad(date.minute || "0", 2); + break; + case 's': + str += (date.second || "0"); + break; + case 'ss': + str += JSUtils.pad(date.second || "0", 2); + break; + case 'S': + str += (date.millisecond || "0"); + break; + case 'SSS': + str += JSUtils.pad(date.millisecond || "0", 3); + break; + + case 'N': + case 'NN': + case 'MMM': + case 'MMMM': + case 'L': + case 'LL': + case 'LLL': + case 'LLLL': + key = templateArr[i] + (date.month || 1); + str += (this.sysres.getString(undefined, key + "-" + this.calName) || this.sysres.getString(undefined, key) || + this.sysres.getString(undefined, key.replace(/L/g,"M") + "-" + this.calName) || this.sysres.getString(undefined, key.replace(/L/g,"M"))); + break; + + case 'E': + case 'EE': + case 'EEE': + case 'EEEE': + case 'c': + case 'cc': + case 'ccc': + case 'cccc': + key = templateArr[i] + date.getDayOfWeek(); + //console.log("finding " + key + " in the resources"); + str += (this.sysres.getString(undefined, key + "-" + this.calName) || this.sysres.getString(undefined, key)); + break; + + case 'a': + switch (this.meridiems) { + case "chinese": + if (date.hour < 6) { + key = "azh0"; // before dawn + } else if (date.hour < 9) { + key = "azh1"; // morning + } else if (date.hour < 12) { + key = "azh2"; // late morning/day before noon + } else if (date.hour < 13) { + key = "azh3"; // noon hour/midday + } else if (date.hour < 18) { + key = "azh4"; // afternoon + } else if (date.hour < 21) { + key = "azh5"; // evening time/dusk + } else { + key = "azh6"; // night time + } + break; + case "ethiopic": + if (date.hour < 6) { + key = "a0-ethiopic"; // morning + } else if (date.hour === 6 && date.minute === 0) { + key = "a1-ethiopic"; // noon + } else if (date.hour >= 6 && date.hour < 12) { + key = "a2-ethiopic"; // afternoon + } else if (date.hour >= 12 && date.hour < 18) { + key = "a3-ethiopic"; // evening + } else if (date.hour >= 18) { + key = "a4-ethiopic"; // night + } + break; + default: + key = date.hour < 12 ? "a0" : "a1"; + break; + } + //console.log("finding " + key + " in the resources"); + str += (this.sysres.getString(undefined, key + "-" + this.calName) || this.sysres.getString(undefined, key)); + break; + + case 'B': + str += this._findMeridiem(date.hour, date.minute); + break; + + case 'w': + str += date.getWeekOfYear(); + break; + case 'ww': + str += JSUtils.pad(date.getWeekOfYear(), 2); + break; + + case 'D': + str += date.getDayOfYear(); + break; + case 'DD': + str += JSUtils.pad(date.getDayOfYear(), 2); + break; + case 'DDD': + str += JSUtils.pad(date.getDayOfYear(), 3); + break; + case 'W': + str += date.getWeekOfMonth(this.locale); + break; + + case 'G': + key = "G" + date.getEra(); + str += (this.sysres.getString(undefined, key + "-" + this.calName) || this.sysres.getString(undefined, key)); + break; + + case 'O': + temp = this.sysres.getString("1#1st|2#2nd|3#3rd|21#21st|22#22nd|23#23rd|31#31st|#{num}th", "ordinalChoice"); + str += temp.formatChoice(date.day, {num: date.day}, false); + break; + + case 'z': // general time zone + tz = this.getTimeZone(); // lazy-load the tz + str += tz.getDisplayName(date, "standard"); + break; + case 'Z': // RFC 822 time zone + tz = this.getTimeZone(); // lazy-load the tz + str += tz.getDisplayName(date, "rfc822"); + break; + + default: + str += templateArr[i].replace(/'/g, ""); + break; + } + } + + if (this.digits) { + str = JSUtils.mapString(str, this.digits); + } + return str; + }, + + /** + * Format a particular date instance according to the settings of this + * formatter object. The type of the date instance being formatted must + * correspond exactly to the calendar type with which this formatter was + * constructed. If the types are not compatible, this formatter will + * produce bogus results. + * + * @param {IDate|number|string|Date|JulianDay|null|undefined} dateLike a date-like object to format + * @return {string} the formatted version of the given date instance + */ + format: function (dateLike) { + var thisZoneName = this.tz && this.tz.getId() || "local"; + + var date = DateFactory._dateToIlib(dateLike, thisZoneName, this.locale); + + if (!date.getCalendar || !(date instanceof IDate)) { + throw "Wrong date type passed to DateFmt.format()"; + } + + if(this.useIntl && this.IntlDateTimeObj){ + var jsDate = DateFactory._ilibToDate(date, thisZoneName, this.locale); + return this.IntlDateTimeObj.format(jsDate); + } + + var dateZoneName = date.timezone || "local"; + + // convert to the time zone of this formatter before formatting + if (dateZoneName !== thisZoneName || date.getCalendar() !== this.calName) { + // console.log("Differing time zones date: " + dateZoneName + " and fmt: " + thisZoneName + ". Converting..."); + // this will recalculate the date components based on the new time zone + // and/or convert a date in another calendar to the current calendar before formatting it + var newDate = DateFactory({ + type: this.calName, + timezone: thisZoneName, + julianday: date.getJulianDay() + }); + + date = newDate; + } + return this._formatTemplate(date, this.templateArr); + }, + + /** + * Return a string that describes a date relative to the given + * reference date. The string returned is text that for the locale that + * was specified when the formatter instance was constructed.

+ * + * The date can be in the future relative to the reference date or in + * the past, and the formatter will generate the appropriate string.

+ * + * The text used to describe the relative reference depends on the length + * of time between the date and the reference. If the time was in the + * past, it will use the "ago" phrase, and in the future, it will use + * the "in" phrase. Examples:

+ * + *

    + *
  • within a minute: either "X seconds ago" or "in X seconds" + *
  • within an hour: either "X minutes ago" or "in X minutes" + *
  • within a day: either "X hours ago" or "in X hours" + *
  • within 2 weeks: either "X days ago" or "in X days" + *
  • within 12 weeks (~3 months): either "X weeks ago" or "in X weeks" + *
  • within two years: either "X months ago" or "in X months" + *
  • longer than 2 years: "X years ago" or "in X years" + *
+ * + * @param {IDate|number|string|Date|JulianDay|null|undefined} reference a date that the date parameter should be relative to + * @param {IDate|number|string|Date|JulianDay|null|undefined} date a date being formatted + * @throws "Wrong calendar type" when the start or end dates are not the same + * calendar type as the formatter itself + * @return {string} the formatted relative date + */ + formatRelative: function(reference, date) { + reference = DateFactory._dateToIlib(reference); + date = DateFactory._dateToIlib(date); + + var referenceRd, dateRd, fmt, diff, absDiff, num; + + if (typeof(reference) !== 'object' || !reference.getCalendar || reference.getCalendar() !== this.calName || + typeof(date) !== 'object' || !date.getCalendar || date.getCalendar() !== this.calName) { + throw "Wrong calendar type"; + } + + referenceRd = reference.getRataDie(); + dateRd = date.getRataDie(); + + diff = referenceRd - dateRd; + absDiff = Math.abs(diff); + + if (absDiff < 0.000694444) { + num = Math.round(absDiff * 86400); + switch (this.length) { + case 's': + fmt = diff > 0 ? this.sysres.getString("#{num}s ago") : this.sysres.getString("#in {num}s"); + break; + case 'm': + fmt = diff > 0 ? this.sysres.getString("1#1 sec ago|#{num} sec ago") : this.sysres.getString("1#in 1 sec|#in {num} sec"); + break; + default: + case 'f': + case 'l': + fmt = diff > 0 ? this.sysres.getString("1#1 second ago|#{num} seconds ago") : this.sysres.getString("1#in 1 second|#in {num} seconds"); + break; + } + } else if (absDiff < 0.041666667) { + num = Math.round(absDiff * 1440); + switch (this.length) { + case 's': + fmt = diff > 0 ? this.sysres.getString("#{num}mi ago") : this.sysres.getString("#in {num}mi"); + break; + case 'm': + fmt = diff > 0 ? this.sysres.getString("1#1 min ago|#{num} min ago") : this.sysres.getString("1#in 1 min|#in {num} min"); + break; + default: + case 'f': + case 'l': + fmt = diff > 0 ? this.sysres.getString("1#1 minute ago|#{num} minutes ago") : this.sysres.getString("1#in 1 minute|#in {num} minutes"); + break; + } + } else if (absDiff < 1) { + num = Math.round(absDiff * 24); + switch (this.length) { + case 's': + fmt = diff > 0 ? this.sysres.getString("#{num}h ago") : this.sysres.getString("#in {num}h"); + break; + case 'm': + fmt = diff > 0 ? this.sysres.getString("1#1 hr ago|#{num} hrs ago") : this.sysres.getString("1#in 1 hr|#in {num} hrs"); + break; + default: + case 'f': + case 'l': + fmt = diff > 0 ? this.sysres.getString("1#1 hour ago|#{num} hours ago") : this.sysres.getString("1#in 1 hour|#in {num} hours"); + break; + } + } else if (absDiff < 14) { + num = Math.round(absDiff); + switch (this.length) { + case 's': + fmt = diff > 0 ? this.sysres.getString("#{num}d ago") : this.sysres.getString("#in {num}d"); + break; + case 'm': + fmt = diff > 0 ? this.sysres.getString("1#1 dy ago|#{num} dys ago") : this.sysres.getString("1#in 1 dy|#in {num} dys"); + break; + default: + case 'f': + case 'l': + fmt = diff > 0 ? this.sysres.getString("1#1 day ago|#{num} days ago") : this.sysres.getString("1#in 1 day|#in {num} days"); + break; + } + } else if (absDiff < 84) { + num = Math.round(absDiff/7); + switch (this.length) { + case 's': + fmt = diff > 0 ? this.sysres.getString("#{num}w ago") : this.sysres.getString("#in {num}w"); + break; + case 'm': + fmt = diff > 0 ? this.sysres.getString("1#1 wk ago|#{num} wks ago") : this.sysres.getString("1#in 1 wk|#in {num} wks"); + break; + default: + case 'f': + case 'l': + fmt = diff > 0 ? this.sysres.getString("1#1 week ago|#{num} weeks ago") : this.sysres.getString("1#in 1 week|#in {num} weeks"); + break; + } + } else if (absDiff < 730) { + num = Math.round(absDiff/30.4); + switch (this.length) { + case 's': + fmt = diff > 0 ? this.sysres.getString("#{num}mo ago") : this.sysres.getString("#in {num}mo"); + break; + case 'm': + fmt = diff > 0 ? this.sysres.getString("1#1 mon ago|#{num} mons ago") : this.sysres.getString("1#in 1 mon|#in {num} mons"); + break; + default: + case 'f': + case 'l': + fmt = diff > 0 ? this.sysres.getString("1#1 month ago|#{num} months ago") : this.sysres.getString("1#in 1 month|#in {num} months"); + break; + } + } else { + num = Math.round(absDiff/365); + switch (this.length) { + case 's': + fmt = diff > 0 ? this.sysres.getString("#{num}y ago") : this.sysres.getString("#in {num}y"); + break; + case 'm': + fmt = diff > 0 ? this.sysres.getString("1#1 yr ago|#{num} yrs ago") : this.sysres.getString("1#in 1 yr|#in {num} yrs"); + break; + default: + case 'f': + case 'l': + fmt = diff > 0 ? this.sysres.getString("1#1 year ago|#{num} years ago") : this.sysres.getString("1#in 1 year|#in {num} years"); + break; + } + } + return fmt.formatChoice(num, {num: num}); + } +}; + + +/* + * TimeZone.js - Definition of a time zone class + * + * Copyright © 2012-2015, 2018, 2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data localeinfo zoneinfo + + + + + + + + + + + + + + +/** + * @class + * Create a time zone instance. + * + * This class reports and transforms + * information about particular time zones.

+ * + * The options parameter may contain any of the following properties: + * + *

    + *
  • id - The id of the requested time zone such as "Europe/London" or + * "America/Los_Angeles". These are taken from the IANA time zone database. (See + * http://www.iana.org/time-zones for more information.)

    + * + * There is one special + * time zone that is not taken from the IANA database called simply "local". In + * this case, this class will attempt to discover the current time zone and + * daylight savings time settings by calling standard Javascript classes to + * determine the offsets from UTC. + * + *

  • locale - The locale for this time zone. + * + *
  • offset - Choose the time zone based on the offset from UTC given in + * number of minutes (negative is west, positive is east). + * + *
  • onLoad - a callback function to call when the data is fully + * loaded. When the onLoad option is given, this class will attempt to + * load any missing locale data using the ilib loader callback. + * When the data is loaded, the onLoad function is called with the current + * instance as a parameter. + * + *
  • sync - tell whether to load any missing locale data synchronously or + * asynchronously. If this option is given as "false", then the "onLoad" + * callback must be given, as the instance returned from this constructor will + * not be usable for a while. + * + *
  • loadParams - an object containing parameters to pass to the + * loader callback function when locale data is missing. The parameters are not + * interpretted or modified in any way. They are simply passed along. The object + * may contain any property/value pairs as long as the calling code is in + * agreement with the loader callback function as to what those parameters mean. + *
+ * + * There is currently no way in the ECMAscript + * standard to tell which exact time zone is currently in use. Choosing the + * id "locale" or specifying an explicit offset will not give a specific time zone, + * as it is impossible to tell with certainty which zone the offsets + * match.

+ * + * When the id "local" is given or the offset option is specified, this class will + * have the following behaviours: + *

    + *
  • The display name will always be given as the RFC822 style, no matter what + * style is requested + *
  • The id will also be returned as the RFC822 style display name + *
  • When the offset is explicitly given, this class will assume the time zone + * does not support daylight savings time, and the offsets will be calculated + * the same way year round. + *
  • When the offset is explicitly given, the inDaylightSavings() method will + * always return false. + *
  • When the id "local" is given, this class will attempt to determine the + * daylight savings time settings by examining the offset from UTC on Jan 1 + * and June 1 of the current year. If they are different, this class assumes + * that the local time zone uses DST. When the offset for a particular date is + * requested, it will use the built-in Javascript support to determine the + * offset for that date. + *
+ * + * If a more specific time zone is + * needed with display names and known start/stop times for DST, use the "id" + * property instead to specify the time zone exactly. You can perhaps ask the + * user which time zone they prefer so that your app does not need to guess.

+ * + * If the id and the offset are both not given, the default time zone for the + * locale is retrieved from + * the locale info. If the locale is not specified, the default locale for the + * library is used.

+ * + * Because this class was designed for use in web sites, and the vast majority + * of dates and times being formatted are recent date/times, this class is simplified + * by not implementing historical time zones. That is, when governments change the + * time zone rules for a particular zone, only the latest such rule is implemented + * in this class. That means that determining the offset for a date that is prior + * to the last change may give the wrong result. Historical time zone calculations + * may be implemented in a later version of iLib if there is enough demand for it, + * but it would entail a much larger set of time zone data that would have to be + * loaded. + * + * + * @constructor + * @param {Object} options Options guiding the construction of this time zone instance + */ +var TimeZone = function(options) { + this.sync = true; + this.locale = new Locale(); + this.isLocal = false; + + if (options) { + if (options.locale) { + this.locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; + } + + if (options.id) { + var id = options.id.toString(); + if (id === 'local') { + this.isLocal = true; + + // use standard Javascript Date to figure out the time zone offsets + var now = new Date(), + jan1 = new Date(now.getFullYear(), 0, 1), // months in std JS Date object are 0-based + jun1 = new Date(now.getFullYear(), 5, 1); + + // Javascript's method returns the offset backwards, so we have to + // take the negative to get the correct offset + this.offsetJan1 = -jan1.getTimezoneOffset(); + this.offsetJun1 = -jun1.getTimezoneOffset(); + // the offset of the standard time for the time zone is always the one that is closest + // to negative infinity of the two, no matter whether you are in the northern or southern + // hemisphere, east or west + this.offset = Math.min(this.offsetJan1, this.offsetJun1); + } + this.id = id; + } else if (options.offset) { + this.offset = (typeof(options.offset) === 'string') ? parseInt(options.offset, 10) : options.offset; + this.id = this.getDisplayName(undefined, undefined); + } + + if (typeof(options.sync) !== 'undefined') { + this.sync = !!options.sync; + } + + this.loadParams = options.loadParams; + this.onLoad = options.onLoad; + } + + //console.log("timezone: locale is " + this.locale); + + if (!this.id) { + new LocaleInfo(this.locale, { + sync: this.sync, + loadParams: this.loadParams, + onLoad: ilib.bind(this, function (li) { + this.id = li.getTimeZone() || "Etc/UTC"; + this._loadtzdata(); + }) + }); + } else { + this._loadtzdata(); + } + + //console.log("localeinfo is: " + JSON.stringify(this.locinfo)); + //console.log("id is: " + JSON.stringify(this.id)); +}; + +/* + * Explanation of the compressed time zone info properties. + * { + * "o": "8:0", // offset from UTC + * "f": "W{c}T", // standard abbreviation. For time zones that observe DST, the {c} replacement is replaced with the + * // letter in the e.c or s.c properties below + * "e": { // info about the end of DST + * "j": 78322.5 // Julian day when the transition happens. Either specify the "j" property or all of the "m", "r", and + * // "t" properties, but not both sets. + * "m": 3, // month that it ends + * "r": "l0", // rule for the day it ends "l" = "last", numbers are Sun=0 through Sat=6. Other syntax is "0>7". + * // This means the 0-day (Sun) after the 7th of the month. Other possible operators are <, >, <=, >= + * "t": "2:0", // time of day that the DST turns off, hours:minutes + * "c": "S" // character to replace into the abbreviation for standard time + * }, + * "s": { // info about the start of DST + * "j": 78189.5 // Julian day when the transition happens. Either specify the "j" property or all of the "m", "r", and + * // "t" properties, but not both sets. + * "m": 10, // month that it starts + * "r": "l0", // rule for the day it starts "l" = "last", numbers are Sun=0 through Sat=6. Other syntax is "0>7". + * // This means the 0-day (Sun) after the 7th of the month. Other possible operators are <, >, <=, >= + * "t": "2:0", // time of day that the DST turns on, hours:minutes + * "v": "1:0", // amount of time saved in hours:minutes + * "c": "D" // character to replace into the abbreviation for daylight time + * }, + * "c": "AU", // ISO code for the country that contains this time zone + * "n": "W. Australia {c} Time" + * // long English name of the zone. The {c} replacement is for the word "Standard" or "Daylight" as appropriate + * } + */ +TimeZone.prototype._loadtzdata = function () { + var zoneName = this.id.replace(/-/g, "m").replace(/\+/g, "p"); + // console.log("id is: " + JSON.stringify(this.id)); + // console.log("zoneinfo is: " + JSON.stringify(ilib.data.zoneinfo[zoneName])); + if (!ilib.data.zoneinfo[zoneName] && typeof(this.offset) === 'undefined') { + Utils.loadData({ + object: "TimeZone", + nonlocale: true, // locale independent + name: "zoneinfo/" + this.id + ".json", + sync: this.sync, + loadParams: this.loadParams, + callback: ilib.bind(this, function (tzdata) { + if (tzdata && !JSUtils.isEmpty(tzdata)) { + ilib.data.zoneinfo[zoneName] = tzdata; + } + this._initZone(zoneName); + }) + }); + } else { + this._initZone(zoneName); + } +}; + +TimeZone.prototype._initZone = function(zoneName) { + /** + * @private + * @type {{o:string,f:string,e:Object.<{m:number,r:string,t:string,z:string}>,s:Object.<{m:number,r:string,t:string,z:string,v:string,c:string}>,c:string,n:string}} + */ + this.zone = ilib.data.zoneinfo[zoneName]; + if (!this.zone && typeof(this.offset) === 'undefined') { + this.id = "Etc/UTC"; + this.zone = ilib.data.zoneinfo[this.id]; + } + + this._calcDSTSavings(); + + if (typeof(this.offset) === 'undefined' && this.zone.o) { + var offsetParts = this._offsetStringToObj(this.zone.o); + /** + * raw offset from UTC without DST, in minutes + * @private + * @type {number} + */ + this.offset = (Math.abs(offsetParts.h || 0) * 60 + (offsetParts.m || 0)) * MathUtils.signum(offsetParts.h || 0); + } + + if (this.onLoad && typeof(this.onLoad) === 'function') { + this.onLoad(this); + } +}; + +/** @private */ +TimeZone._marshallIds = function (country, sync, callback) { + var tz, ids = []; + + if (!country) { + // local is a special zone meaning "the local time zone according to the JS engine we are running upon" + ids.push("local"); + for (tz in ilib.data.timezones) { + if (ilib.data.timezones[tz]) { + ids.push(ilib.data.timezones[tz]); + } + } + if (typeof(callback) === 'function') { + callback(ids); + } + } else { + if (!ilib.data.zoneinfo.zonetab) { + Utils.loadData({ + object: "TimeZone", + nonlocale: true, // locale independent + name: "zoneinfo/zonetab.json", + sync: sync, + callback: ilib.bind(this, function (tzdata) { + if (tzdata) { + ilib.data.zoneinfo.zonetab = tzdata; + } + + ids = ilib.data.zoneinfo.zonetab[country]; + + if (typeof(callback) === 'function') { + callback(ids); + } + }) + }); + } else { + ids = ilib.data.zoneinfo.zonetab[country]; + if (typeof(callback) === 'function') { + callback(ids); + } + } + } + + return ids; +}; + +/** + * Return an array of available zone ids that the constructor knows about. + * The country parameter is optional. If it is not given, all time zones will + * be returned. If it specifies a country code, then only time zones for that + * country will be returned. + * + * @param {string|undefined} country country code for which time zones are being sought + * @param {boolean} sync whether to find the available ids synchronously (true) or asynchronously (false) + * @param {function(Array.)} onLoad callback function to call when the data is finished loading + * @return {Array.} an array of zone id strings + */ +TimeZone.getAvailableIds = function (country, sync, onLoad) { + var tz, ids = []; + + if (typeof(sync) !== 'boolean') { + sync = true; + } + + if (ilib.data.timezones.length === 0) { + if (typeof(ilib._load) !== 'undefined' && typeof(ilib._load.listAvailableFiles) === 'function') { + ilib._load.listAvailableFiles(sync, function(hash) { + for (var dir in hash) { + var files = hash[dir]; + if (ilib.isArray(files)) { + files.forEach(function (filename) { + if (filename && filename.match(/^zoneinfo/)) { + ilib.data.timezones.push(filename.replace(/^zoneinfo\//, "").replace(/\.json$/, "")); + } + }); + } + } + ids = TimeZone._marshallIds(country, sync, onLoad); + }); + } else { + for (tz in ilib.data.zoneinfo) { + if (ilib.data.zoneinfo[tz]) { + ilib.data.timezones.push(tz); + } + } + ids = TimeZone._marshallIds(country, sync, onLoad); + } + } else { + ids = TimeZone._marshallIds(country, sync, onLoad); + } + + return ids; +}; + +/** + * Return the id used to uniquely identify this time zone. + * @return {string} a unique id for this time zone + */ +TimeZone.prototype.getId = function () { + return this.id.toString(); +}; + +/** + * Return the abbreviation that is used for the current time zone on the given date. + * The date may be in DST or during standard time, and many zone names have different + * abbreviations depending on whether or not the date is falls within DST.

+ * + * There are two styles that are supported: + * + *

    + *
  1. standard - returns the 3 to 5 letter abbreviation of the time zone name such + * as "CET" for "Central European Time" or "PDT" for "Pacific Daylight Time" + *
  2. rfc822 - returns an RFC 822 style time zone specifier, which specifies more + * explicitly what the offset is from UTC + *
  3. long - returns the long name of the zone in English + *
+ * + * @param {IDate|Object|JulianDay|Date|string|number=} date a date to determine if it is in daylight time or standard time + * @param {string=} style one of "standard" or "rfc822". Default if not specified is "standard" + * @return {string} the name of the time zone, abbreviated according to the style + */ +TimeZone.prototype.getDisplayName = function (date, style) { + var temp; + style = (this.isLocal || typeof(this.zone) === 'undefined') ? "rfc822" : (style || "standard"); + switch (style) { + default: + case 'standard': + if (this.zone.f && this.zone.f !== "zzz") { + if (this.zone.f.indexOf("{c}") !== -1) { + var letter = ""; + letter = this.inDaylightTime(date) ? this.zone.s && this.zone.s.c : this.zone.e && this.zone.e.c; + temp = new IString(this.zone.f); + return temp.format({c: letter || ""}); + } + return this.zone.f; + } + temp = "GMT" + this.zone.o; + if (this.inDaylightTime(date)) { + temp += "+" + this.zone.s.v; + } + return temp; + + case 'rfc822': + var offset = this.getOffset(date), // includes the DST if applicable + ret = "UTC", + hour = offset.h || 0, + minute = offset.m || 0; + + if (hour !== 0) { + ret += (hour > 0) ? "+" : "-"; + if (Math.abs(hour) < 10) { + ret += "0"; + } + ret += (hour < 0) ? -hour : hour; + if (minute < 10) { + ret += "0"; + } + ret += minute; + } + return ret; + + case 'long': + if (this.zone.n) { + if (this.zone.n.indexOf("{c}") !== -1) { + var str = this.inDaylightTime(date) ? "Daylight" : "Standard"; + temp = new IString(this.zone.n); + return temp.format({c: str || ""}); + } + return this.zone.n; + } + temp = "GMT" + this.zone.o; + if (this.inDaylightTime(date)) { + temp += "+" + this.zone.s.v; + } + return temp; + } +}; + +/** + * Convert the offset string to an object with an h, m, and possibly s property + * to indicate the hours, minutes, and seconds. + * + * @private + * @param {string} str the offset string to convert to an object + * @return {Object.<{h:number,m:number,s:number}>} an object giving the offset for the zone at + * the given date/time, in hours, minutes, and seconds + */ +TimeZone.prototype._offsetStringToObj = function (str) { + var offsetParts = (typeof(str) === 'string') ? str.split(":") : [], + ret = {h:0}, + temp; + + if (offsetParts.length > 0) { + ret.h = parseInt(offsetParts[0], 10); + if (offsetParts.length > 1) { + temp = parseInt(offsetParts[1], 10); + if (temp) { + ret.m = temp; + } + if (offsetParts.length > 2) { + temp = parseInt(offsetParts[2], 10); + if (temp) { + ret.s = temp; + } + } + } + } + + return ret; +}; + +/** + * Returns the offset of this time zone from UTC at the given date/time. If daylight saving + * time is in effect at the given date/time, this method will return the offset value + * adjusted by the amount of daylight saving. + * @param {IDate|Object|JulianDay|Date|string|number=} date the date for which the offset is needed + * @return {Object.<{h:number,m:number}>} an object giving the offset for the zone at + * the given date/time, in hours, minutes, and seconds + */ +TimeZone.prototype.getOffset = function (date) { + if (!date) { + return this.getRawOffset(); + } + var offset = this.getOffsetMillis(date)/60000; + + var hours = MathUtils.down(offset/60), + minutes = Math.abs(offset) - Math.abs(hours)*60; + + var ret = { + h: hours + }; + if (minutes !== 0) { + ret.m = minutes; + } + return ret; +}; + +/** + * Returns the offset of this time zone from UTC at the given date/time expressed in + * milliseconds. If daylight saving + * time is in effect at the given date/time, this method will return the offset value + * adjusted by the amount of daylight saving. Negative numbers indicate offsets west + * of UTC and conversely, positive numbers indicate offset east of UTC. + * + * @param {IDate|Object|JulianDay|Date|string|number=} date the date for which the offset is needed, or null for the + * present date + * @return {number} the number of milliseconds of offset from UTC that the given date is + */ +TimeZone.prototype.getOffsetMillis = function (date) { + var ret; + + // check if the dst property is defined -- the intrinsic JS Date object doesn't work so + // well if we are in the overlap time at the end of DST + if (this.isLocal && typeof(date.dst) === 'undefined') { + var d = (!date) ? new Date() : new Date(date.getTimeExtended()); + return -d.getTimezoneOffset() * 60000; + } + + ret = this.offset; + + if (date && this.inDaylightTime(date)) { + ret += this.dstSavings; + } + + return ret * 60000; +}; + +/** + * Return the offset in milliseconds when the date has an RD number in wall + * time rather than in UTC time. + * @private + * @param {IDate|Object|JulianDay|Date|string|number} date the date to check in wall time + * @returns {number} the number of milliseconds of offset from UTC that the given date is + */ +TimeZone.prototype._getOffsetMillisWallTime = function (date) { + var ret; + + ret = this.offset; + + if (date && this.inDaylightTime(date, true)) { + ret += this.dstSavings; + } + + return ret * 60000; +}; + +/** + * Returns the offset of this time zone from UTC at the given date/time. If daylight saving + * time is in effect at the given date/time, this method will return the offset value + * adjusted by the amount of daylight saving. + * @param {IDate|Object|JulianDay|Date|string|number=} date the date for which the offset is needed + * @return {string} the offset for the zone at the given date/time as a string in the + * format "h:m:s" + */ +TimeZone.prototype.getOffsetStr = function (date) { + var offset = this.getOffset(date), + ret; + + ret = offset.h; + if (typeof(offset.m) !== 'undefined') { + ret += ":" + offset.m; + if (typeof(offset.s) !== 'undefined') { + ret += ":" + offset.s; + } + } else { + ret += ":0"; + } + + return ret; +}; + +/** + * Gets the offset from UTC for this time zone. + * @return {Object.<{h:number,m:number,s:number}>} an object giving the offset from + * UTC for this time zone, in hours, minutes, and seconds + */ +TimeZone.prototype.getRawOffset = function () { + var hours = MathUtils.down(this.offset/60), + minutes = Math.abs(this.offset) - Math.abs(hours)*60; + + var ret = { + h: hours + }; + if (minutes != 0) { + ret.m = minutes; + } + return ret; +}; + +/** + * Gets the offset from UTC for this time zone expressed in milliseconds. Negative numbers + * indicate zones west of UTC, and positive numbers indicate zones east of UTC. + * + * @return {number} an number giving the offset from + * UTC for this time zone in milliseconds + */ +TimeZone.prototype.getRawOffsetMillis = function () { + return this.offset * 60000; +}; + +/** + * Gets the offset from UTC for this time zone without DST savings. + * @return {string} the offset from UTC for this time zone, in the format "h:m:s" + */ +TimeZone.prototype.getRawOffsetStr = function () { + var off = this.getRawOffset(); + return off.h + ":" + (off.m || "0"); +}; + +/** + * Return the amount of time in hours:minutes that the clock is advanced during + * daylight savings time. + * @return {Object.<{h:number,m:number,s:number}>} the amount of time that the + * clock advances for DST in hours, minutes, and seconds + */ +TimeZone.prototype.getDSTSavings = function () { + if (this.isLocal) { + // take the absolute because the difference in the offsets may be positive or + // negative, depending on the hemisphere + var savings = Math.abs(this.offsetJan1 - this.offsetJun1); + var hours = MathUtils.down(savings/60), + minutes = savings - hours*60; + return { + h: hours, + m: minutes + }; + } else if (this.zone && this.zone.s) { + return this._offsetStringToObj(this.zone.s.v); // this.zone.start.savings + } + return {h:0}; +}; + +/** + * Return the amount of time in hours:minutes that the clock is advanced during + * daylight savings time. + * @return {string} the amount of time that the clock advances for DST in the + * format "h:m:s" + */ +TimeZone.prototype.getDSTSavingsStr = function () { + if (this.isLocal) { + var savings = this.getDSTSavings(); + return savings.h + ":" + savings.m; + } else if (typeof(this.offset) !== 'undefined' && this.zone && this.zone.s) { + return this.zone.s.v; // this.zone.start.savings + } + return "0:0"; +}; + +/** + * return the rd of the start of DST transition for the given year + * @private + * @param {Object} rule set of rules + * @param {number} year year to check + * @return {number} the rd of the start of DST for the year + */ +TimeZone.prototype._calcRuleStart = function (rule, year) { + var type = "=", + weekday = 0, + day, + refDay, + cal, + hour = 0, + minute = 0, + second = 0, + time, + i; + + if (typeof(rule.j) !== 'undefined') { + refDay = new GregRataDie({ + julianday: rule.j + }); + } else { + if (rule.r.charAt(0) === 'l' || rule.r.charAt(0) === 'f') { + cal = CalendarFactory({type: "gregorian"}); // can be synchronous + type = rule.r.charAt(0); + weekday = parseInt(rule.r.substring(1), 10); + day = (type === 'l') ? cal.getMonLength(rule.m, year) : 1; + //console.log("_calcRuleStart: Calculating the " + + // (rule.r.charAt(0) == 'f' ? "first " : "last ") + weekday + + // " of month " + rule.m); + } else { + i = rule.r.indexOf('<'); + if (i === -1) { + i = rule.r.indexOf('>'); + } + + if (i !== -1) { + type = rule.r.charAt(i); + weekday = parseInt(rule.r.substring(0, i), 10); + day = parseInt(rule.r.substring(i+1), 10); + //console.log("_calcRuleStart: Calculating the " + weekday + + // type + day + " of month " + rule.m); + } else { + day = parseInt(rule.r, 10); + //console.log("_calcRuleStart: Calculating the " + day + " of month " + rule.m); + } + } + + if (rule.t) { + time = rule.t.split(":"); + hour = parseInt(time[0], 10); + if (time.length > 1) { + minute = parseInt(time[1], 10); + if (time.length > 2) { + second = parseInt(time[2], 10); + } + } + } + //console.log("calculating rd of " + year + "/" + rule.m + "/" + day); + refDay = new GregRataDie({ + year: year, + month: rule.m, + day: day, + hour: hour, + minute: minute, + second: second + }); + } + //console.log("refDay is " + JSON.stringify(refDay)); + var d = refDay.getRataDie(); + + switch (type) { + case 'l': + case '<': + //console.log("returning " + refDay.onOrBefore(rd, weekday)); + d = refDay.onOrBefore(weekday); + break; + case 'f': + case '>': + //console.log("returning " + refDay.onOrAfterRd(rd, weekday)); + d = refDay.onOrAfter(weekday); + break; + } + return d; +}; + +/** + * @private + */ +TimeZone.prototype._calcDSTSavings = function () { + var saveParts = this.getDSTSavings(); + + /** + * savings in minutes when DST is in effect + * @private + * @type {number} + */ + this.dstSavings = (Math.abs(saveParts.h || 0) * 60 + (saveParts.m || 0)) * MathUtils.signum(saveParts.h || 0); +}; + +/** + * @private + */ +TimeZone.prototype._getDSTStartRule = function (year) { + // TODO: update this when historic/future zones are supported + return this.zone.s; +}; + +/** + * @private + */ +TimeZone.prototype._getDSTEndRule = function (year) { + // TODO: update this when historic/future zones are supported + return this.zone.e; +}; + +/** + * Returns whether or not the given date is in daylight saving time for the current + * zone. Note that daylight savings time is observed for the summer. Because + * the seasons are reversed, daylight savings time in the southern hemisphere usually + * runs from the end of the year through New Years into the first few months of the + * next year. This method will correctly calculate the start and end of DST for any + * location. + * + * @param {IDate|Object|JulianDay|Date|string|number=} date a date for which the info about daylight time is being sought, + * or undefined to tell whether we are currently in daylight savings time + * @param {boolean=} wallTime if true, then the given date is in wall time. If false or + * undefined, it is in the usual UTC time. + * @return {boolean} true if the given date is in DST for the current zone, and false + * otherwise. + */ +TimeZone.prototype.inDaylightTime = function (date, wallTime) { + var rd, startRd, endRd, year; + if (date) { + // need an IDate instance, so convert as necessary + date = DateFactory._dateToIlib(date, this.id, this.locale); + } + if (this.isLocal) { + // check if the dst property is defined -- the intrinsic JS Date object doesn't work so + // well if we are in the overlap time at the end of DST, so we have to work around that + // problem by adding in the savings ourselves + var offset = this.offset * 60000; + if (typeof(date.dst) !== 'undefined' && !date.dst) { + offset += this.dstSavings * 60000; + } + + var d = new Date(date ? date.getTimeExtended() - offset: undefined); + // the DST offset is always the one that is closest to positive infinity, no matter + // if you are in the northern or southern hemisphere, east or west + var dst = Math.max(this.offsetJan1, this.offsetJun1); + return (-d.getTimezoneOffset() === dst); + } + + if (!date || !date.cal || date.cal.type !== "gregorian") { + // convert to Gregorian so that we can tell if it is in DST or not + var time = date && typeof(date.getTimeExtended) === 'function' ? date.getTimeExtended() : undefined; + rd = new GregRataDie({unixtime: time}).getRataDie(); + year = new Date(time).getUTCFullYear(); + } else { + rd = date.rd.getRataDie(); + year = date.year; + } + // rd should be a Gregorian RD number now, in UTC + + // if we aren't using daylight time in this zone for the given year, then we are + // not in daylight time + if (!this.useDaylightTime(year)) { + return false; + } + + // these calculate the start/end in local wall time + var startrule = this._getDSTStartRule(year); + var endrule = this._getDSTEndRule(year); + startRd = this._calcRuleStart(startrule, year); + endRd = this._calcRuleStart(endrule, year); + + if (wallTime) { + // rd is in wall time, so we have to make sure to skip the missing time + // at the start of DST when standard time ends and daylight time begins + startRd += this.dstSavings/1440; + } else { + // rd is in UTC, so we have to convert the start/end to UTC time so + // that they can be compared directly to the UTC rd number of the date + + // when DST starts, time is standard time already, so we only have + // to subtract the offset to get to UTC and not worry about the DST savings + startRd -= this.offset/1440; + + // when DST ends, time is in daylight time already, so we have to + // subtract the DST savings to get back to standard time, then the + // offset to get to UTC + endRd -= (this.offset + this.dstSavings)/1440; + } + + // In the northern hemisphere, the start comes first some time in spring (Feb-Apr), + // then the end some time in the fall (Sept-Nov). In the southern + // hemisphere, it is the other way around because the seasons are reversed. Standard + // time is still in the winter, but the winter months are May-Aug, and daylight + // savings time usually starts Aug-Oct of one year and runs through Mar-May of the + // next year. + if (rd < endRd && endRd - rd <= this.dstSavings/1440 && typeof(date.dst) === 'boolean') { + // take care of the magic overlap time at the end of DST + return date.dst; + } + if (startRd < endRd) { + // northern hemisphere + return (rd >= startRd && rd < endRd) ? true : false; + } + // southern hemisphere + return (rd >= startRd || rd < endRd) ? true : false; +}; + +/** + * Returns true if this time zone switches to daylight savings time at some point + * in the year, and false otherwise. + * @param {number} year Whether or not the time zone uses daylight time in the given year. If + * this parameter is not given, the current year is assumed. + * @return {boolean} true if the time zone uses daylight savings time + */ +TimeZone.prototype.useDaylightTime = function (year) { + + // this zone uses daylight savings time iff there is a rule defining when to start + // and when to stop the DST + return (this.isLocal && this.offsetJan1 !== this.offsetJun1) || + (typeof(this.zone) !== 'undefined' && + typeof(this.zone.s) !== 'undefined' && + typeof(this.zone.e) !== 'undefined'); +}; + +/** + * Returns the ISO 3166 code of the country for which this time zone is defined. + * @return {string} the ISO 3166 code of the country for this zone + */ +TimeZone.prototype.getCountry = function () { + return this.zone.c; +}; + + +/* + * ResBundle.js - Resource bundle definition + * + * Copyright © 2012-2016, 2018-2019, 2022-2023 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data pseudomap + + + + + + + + + + +/** + * @class + * Create a new resource bundle instance. The resource bundle loads strings + * appropriate for a particular locale and provides them via the getString + * method.

+ * + * The options object may contain any (or none) of the following properties: + * + *

    + *
  • locale - The locale of the strings to load. If not specified, the default + * locale is the the default for the web page or app in which the bundle is + * being loaded. + * + *
  • name - Base name of the resource bundle to load. If not specified the default + * base name is "resources". + * + *
  • type - Name the type of strings this bundle contains. Valid values are + * "xml", "html", "text", "c", "raw", "ruby", or "template". The default is "text". + * If the type is "xml" or "html", + * then XML/HTML entities and tags are not pseudo-translated. During a real translation, + * HTML character entities are translated to their corresponding characters in a source + * string before looking that string up in the translations. Also, the characters "<", ">", + * and "&" are converted to entities again in the output, but characters are left as they + * are. If the type is "xml", "html", "ruby", or "text" types, then the replacement parameter names + * are not pseudo-translated as well so that the output can be used for formatting with + * the IString class. If the type is "c" then all C language style printf replacement + * parameters (eg. "%s" and "%d") are skipped automatically. This includes iOS/Objective-C/Swift + * substitution parameters like "%@" or "%1$@". If the type is raw, all characters + * are pseudo-translated, including replacement parameters as well as XML/HTML tags and entities. + * + *
  • lengthen - when pseudo-translating the string, tell whether or not to + * automatically lengthen the string to simulate "long" languages such as German + * or French. This is a boolean value. Default is false. + * + *
  • missing - what to do when a resource is missing. The choices are: + *
      + *
    • source - return the source string unchanged + *
    • pseudo - return the pseudo-translated source string, translated to the + * script of the locale if the mapping is available, or just the default Latin + * pseudo-translation if not + *
    • empty - return the empty string + *
    + * The default behaviour is the same as before, which is to return the source string + * unchanged. + * + *
  • basePath - look in the given path for the resource bundle files. This can be + * an absolute path or a relative path that is relative to the application's root. + * Default if this is not specified is to look in the standard path (ie. in the root + * of the app). + * + *
  • onLoad - a callback function to call when the resources are fully + * loaded. When the onLoad option is given, this class will attempt to + * load any missing locale data using the ilib loader callback. + * When the constructor is done (even if the data is already preassembled), the + * onLoad function is called with the current instance as a parameter, so this + * callback can be used with preassembled or dynamic loading or a mix of the two. + * + *
  • sync - tell whether to load any missing locale data synchronously or + * asynchronously. If this option is given as "false", then the "onLoad" + * callback must be given, as the instance returned from this constructor will + * not be usable for a while. + * + *
  • loadParams - an object containing parameters to pass to the + * loader callback function when locale data is missing. The parameters are not + * interpretted or modified in any way. They are simply passed along. The object + * may contain any property/value pairs as long as the calling code is in + * agreement with the loader callback function as to what those parameters mean. + *
+ * + * The locale option may be given as a locale spec string or as an + * Locale object. If the locale option is not specified, then strings for + * the default locale will be loaded.

+ * + * The name option can be used to put groups of strings together in a + * single bundle. The strings will then appear together in a JS object in + * a JS file that can be included before the ilib.

+ * + * A resource bundle with a particular name is actually a set of bundles + * that are each specific to a language, a language plus a region, etc. + * All bundles with the same base name should + * contain the same set of source strings, but with different translations for + * the given locale. The user of the bundle does not need to be aware of + * the locale of the bundle, as long as it contains values for the strings + * it needs.

+ * + * Strings in bundles for a particular locale are inherited from parent bundles + * that are more generic. In general, the hierarchy is as follows (from + * least locale-specific to most locale-specific): + * + *

    + *
  1. language + *
  2. region + *
  3. language_script + *
  4. language_region + *
  5. region_variant + *
  6. language_script_region + *
  7. language_region_variant + *
  8. language_script_region_variant + *
+ * + * That is, if the translation for a string does not exist in the current + * locale, the more-generic parent locale is searched for the string. In the + * worst case scenario, the string is not found in the base locale's strings. + * In this case, the missing option guides this class on what to do. If + * the missing option is "source", then the original source is returned as + * the translation. If it is "empty", the empty string is returned. If it + * is "pseudo", then the pseudo-translated string that is appropriate for + * the default script of the locale is returned.

+ * + * This allows developers to create code with new or changed strings in it and check in that + * code without waiting for the translations to be done first. The translated + * version of the app or web site will still function properly, but will show + * a spurious untranslated string here and there until the translations are + * done and also checked in.

+ * + * The base is whatever language your developers use to code in. For + * a German web site, strings in the source code may be written in German + * for example. Often this base is English, as many web sites are coded in + * English, but that is not required.

+ * + * The strings can be extracted with the ilib localization tool (which will be + * shipped at some future time.) Once the strings + * have been translated, the set of translated files can be generated with the + * same tool. The output from the tool can be used as input to the ResBundle + * object. It is up to the web page or app to make sure the JS file that defines + * the bundle is included before creating the ResBundle instance.

+ * + * A special locale "zxx-XX" is used as the pseudo-translation locale because + * zxx means "no linguistic information" in the ISO 639 standard, and the region + * code XX is defined to be user-defined in the ISO 3166 standard. + * Pseudo-translation is a locale where the translations are generated on + * the fly based on the contents of the source string. Characters in the source + * string are replaced with other characters and returned. + * + * Example. If the source string is: + * + *

+ * "This is a string"
+ * 
+ * + * then the pseudo-translated version might look something like this: + * + *
+ * "Ţħïş ïş á şţřïñĝ"
+ * 
+ *

+ * + * Pseudo-translation can be used to test that your app or web site is translatable + * before an actual translation has happened. These bugs can then be fixed + * before the translation starts, avoiding an explosion of bugs later when + * each language's tester registers the same bug complaining that the same + * string is not translated. When pseudo-localizing with + * the Latin script, this allows the strings to be readable in the UI in the + * source language (if somewhat funky-looking), + * so that a tester can easily verify that the string is properly externalized + * and loaded from a resource bundle without the need to be able to read a + * foreign language.

+ * + * If one of a list of script tags is given in the pseudo-locale specifier, then the + * pseudo-localization can map characters to very rough transliterations of + * characters in the given script. For example, zxx-Hebr-XX maps strings to + * Hebrew characters, which can be used to test your UI in a right-to-left + * language to catch bidi bugs before a translation is done. Currently, the + * list of target scripts includes Hebrew (Hebr), Chinese Simplified Han (Hans), + * and Cyrillic (Cyrl) with more to be added later. If no script is explicitly + * specified in the locale spec, or if the script is not supported, + * then the default mapping maps Latin base characters to accented versions of + * those Latin characters as in the example above. + * + * When the "lengthen" property is set to true in the options, the + * pseudotranslation code will add digits to the end of the string to simulate + * the lengthening that occurs when translating to other languages. The above + * example will come out like this: + * + *

+ * "Ţħïş ïş á şţřïñĝ76543210"
+ * 
+ * + * The string is lengthened according to the length of the source string. If + * the source string is less than 20 characters long, the string is lengthened + * by 50%. If the source string is 20-40 + * characters long, the string is lengthened by 33%. If te string is greater + * than 40 characters long, the string is lengthened by 20%.

+ * + * The pseudotranslation always ends a string with the digit "0". If you do + * not see the digit "0" in the UI for your app, you know that truncation + * has occurred, and the number you see at the end of the string tells you + * how many characters were truncated.

+ * + * + * @constructor + * @param {?Object} options Options controlling how the bundle is created + */ +var ResBundle = function (options) { + var lookupLocale, spec; + + this.locale = new Locale(); // use the default locale + this.baseName = "strings"; + this.type = "text"; + this.loadParams = {}; + this.missing = "source"; + this.sync = true; + + if (options) { + if (options.locale) { + this.locale = (typeof(options.locale) === 'string') ? + new Locale(options.locale) : + options.locale; + } + if (options.name) { + this.baseName = options.name; + } + if (options.type) { + this.type = options.type; + } + this.lengthen = options.lengthen || false; + this.path = options.basePath; + + if (typeof(options.sync) !== 'undefined') { + this.sync = !!options.sync; + } + + if (typeof(options.loadParams) !== 'undefined') { + this.loadParams = options.loadParams; + if (!this.path) { + if (typeof (options.loadParams.root) !== 'undefined') { + this.path = options.loadParams.root; + } else if (typeof (options.loadParams.base) !== 'undefined') { + this.path = options.loadParams.base; + } + } + } + if (typeof(options.missing) !== 'undefined') { + if (options.missing === "pseudo" || options.missing === "empty") { + this.missing = options.missing; + } + } + } else { + options = {sync: true}; + } + + this.map = {}; + + lookupLocale = this.locale.isPseudo() ? new Locale("en-US") : this.locale; + + // ensure that the plural rules are loaded before we proceed + IString.loadPlurals(this.sync, lookupLocale, this.loadParams, ilib.bind(this, function() { + Utils.loadData({ + locale: lookupLocale, + name: this.baseName + ".json", + sync: this.sync, + loadParams: this.loadParams, + root: this.path, + callback: ilib.bind(this, function (map) { + if (!map) { + map = ilib.data[this.baseName] || {}; + } + this.map = map; + if (this.locale.isPseudo()) { + this._loadPseudo(this.locale, options.onLoad); + } else if (this.missing === "pseudo") { + new LocaleInfo(this.locale, { + sync: this.sync, + loadParams: this.loadParams, + onLoad: ilib.bind(this, function (li) { + var pseudoLocale = new Locale("zxx", "XX", undefined, li.getDefaultScript()); + this._loadPseudo(pseudoLocale, options.onLoad); + }) + }); + } else { + if (typeof(options.onLoad) === 'function') { + options.onLoad(this); + } + } + }) + }) + })); + + // console.log("Merged resources " + this.locale.toString() + " are: " + JSON.stringify(this.map)); + //if (!this.locale.isPseudo() && JSUtils.isEmpty(this.map)) { + // console.log("Resources for bundle " + this.baseName + " locale " + this.locale.toString() + " are not available."); + //} +}; + +ResBundle.defaultPseudo = ilib.data.pseudomap || { + "a": "à", + "e": "ë", + "i": "í", + "o": "õ", + "u": "ü", + "y": "ÿ", + "A": "Ã", + "E": "Ë", + "I": "Ï", + "O": "Ø", + "U": "Ú", + "Y": "Ŷ" +}; + +ResBundle.prototype = { + /** + * @private + */ + _loadPseudo: function (pseudoLocale, onLoad) { + Utils.loadData({ + object: "ResBundle", + locale: pseudoLocale, + name: "pseudomap.json", + sync: this.sync, + loadParams: this.loadParams, + callback: ilib.bind(this, function (map) { + this.pseudomap = (!map || JSUtils.isEmpty(map)) ? ResBundle.defaultPseudo : map; + if (typeof(onLoad) === 'function') { + onLoad(this); + } + }) + }); + }, + + /** + * Return the locale of this resource bundle. + * @return {Locale} the locale of this resource bundle object + */ + getLocale: function () { + return this.locale; + }, + + /** + * Return the name of this resource bundle. This corresponds to the name option + * given to the constructor. + * @return {string} name of the the current instance + */ + getName: function () { + return this.baseName; + }, + + /** + * Return the type of this resource bundle. This corresponds to the type option + * given to the constructor. + * @return {string} type of the the current instance + */ + getType: function () { + return this.type; + }, + + percentRE: new RegExp("%(\\d+\\$)?([\\-#\\+ 0,\\(])*(\\d+)?(\\.\\d+)?(h|hh|l|ll|j|z|t|L|q)?[diouxXfFeEgGaAcspnCS%@]"), + + /** + * Pseudo-translate a string + * @private + */ + _pseudo: function (str) { + if (!str) { + return undefined; + } + var ret = "", i; + for (i = 0; i < str.length; i++) { + if (this.type !== "raw") { + if (this.type === "html" || this.type === "xml") { + if (str.charAt(i) === '<') { + ret += str.charAt(i++); + while (i < str.length && str.charAt(i) !== '>') { + ret += str.charAt(i++); + } + } else if (str.charAt(i) === '&') { + ret += str.charAt(i++); + while (i < str.length && str.charAt(i) !== ';' && str.charAt(i) !== ' ') { + ret += str.charAt(i++); + } + } else if (str.charAt(i) === '\\' && str.charAt(i+1) === "u") { + ret += str.substring(i, i+6); + i += 6; + } + } else if (this.type === "c") { + if (str.charAt(i) === "%") { + var m = this.percentRE.exec(str.substring(i)); + if (m && m.length) { + // console.log("Match found: " + JSON.stringify(m[0].replace("%", "%%"))); + ret += m[0]; + i += m[0].length; + } + } + } else if (this.type === "ruby") { + if (str.charAt(i) === "%" && i < str.length && str.charAt(i+1) !== "{") { + ret += str.charAt(i++); + while (i < str.length && str.charAt(i) !== '%') { + ret += str.charAt(i++); + } + } + } else if (this.type === "template") { + if (str.charAt(i) === '<' && str.charAt(i+1) === '%') { + ret += str.charAt(i++); + ret += str.charAt(i++); + while (i < str.length && (str.charAt(i) !== '>' || str.charAt(i-1) !== '%')) { + ret += str.charAt(i++); + } + } else if (str.charAt(i) === '&') { + ret += str.charAt(i++); + while (i < str.length && str.charAt(i) !== ';' && str.charAt(i) !== ' ') { + ret += str.charAt(i++); + } + } else if (str.charAt(i) === '\\' && str.charAt(i+1) === "u") { + ret += str.substring(i, i+6); + i += 6; + } + } + if (i < str.length) { + if (str.charAt(i) === '{') { + ret += str.charAt(i++); + while (i < str.length && str.charAt(i) !== '}') { + ret += str.charAt(i++); + } + if (i < str.length) { + ret += str.charAt(i); + } + } else { + ret += this.pseudomap[str.charAt(i)] || str.charAt(i); + } + } + } else { + ret += this.pseudomap[str.charAt(i)] || str.charAt(i); + } + } + if (this.lengthen) { + var add; + if (ret.length <= 20) { + add = Math.round(ret.length / 2); + } else if (ret.length > 20 && ret.length <= 40) { + add = Math.round(ret.length / 3); + } else { + add = Math.round(ret.length / 5); + } + for (i = add-1; i >= 0; i--) { + ret += (i % 10); + } + } + if (this.locale.getScript() === "Hans" || this.locale.getScript() === "Hant" || + this.locale.getScript() === "Hani" || + this.locale.getScript() === "Hrkt" || this.locale.getScript() === "Jpan" || + this.locale.getScript() === "Hira" || this.locale.getScript() === "Kana" ) { + // simulate Asian languages by getting rid of all the spaces + ret = ret.replace(/ /g, ""); + } + + if (this.pseudomap["tall"] !== undefined) { + ret = this.pseudomap["tall"] + ret; + } + + // All strings are encapsulated in []. + ret = "[" + ret + "]"; + + return ret; + }, + + /** + * Escape html characters in the output. + * @private + */ + _escapeXml: function (str) { + str = str.replace(/&/g, '&'); + str = str.replace(//g, '>'); + return str; + }, + + /** + * @private + * @param {string} str the string to unescape + */ + _unescapeXml: function (str) { + str = str.replace(/&/g, '&'); + str = str.replace(/</g, '<'); + str = str.replace(/>/g, '>'); + return str; + }, + + /** + * Create a key name out of a source string. All this does so far is + * compress sequences of white space into a single space on the assumption + * that this doesn't really change the meaning of the string, and therefore + * all such strings that compress to the same thing should share the same + * translation. + * @private + * @param {null|string=} source the source string to make a key out of + */ + _makeKey: function (source) { + if (!source) return undefined; + var key = source.replace(/\s+/gm, ' '); + return (this.type === "xml" || this.type === "html") ? this._unescapeXml(key) : key; + }, + + /** + * @private + */ + _getStringSingle: function(source, key, escapeMode) { + if (!source && !key) return new IString(""); + + var trans; + if (this.locale.isPseudo()) { + var str = source ? source : this.map[key]; + trans = this._pseudo(str || key); + } else { + var keyName = key || this._makeKey(source); + if (typeof(this.map[keyName]) !== 'undefined') { + trans = this.map[keyName]; + } else if (this.missing === "pseudo") { + trans = this._pseudo(source || key); + } else if (this.missing === "empty") { + trans = ""; + } else { + trans = source; + } + } + + if (escapeMode && escapeMode !== "none") { + if (escapeMode === "default") { + escapeMode = this.type; + } + if (escapeMode === "xml" || escapeMode === "html") { + trans = this._escapeXml(trans); + } else if (escapeMode === "js" || escapeMode === "attribute") { + trans = trans.replace(/'/g, "\\\'").replace(/"/g, "\\\""); + } + } + if (trans === undefined) { + return undefined; + } else { + var ret = new IString(trans); + ret.setLocale(this.locale.getSpec(), true, this.loadParams); // no callback + return ret; + } + }, + + /** + * Return a localized string, array, or object. This method can localize individual + * strings or arrays of strings.

+ * + * If the source parameter is a string, the translation of that string is looked + * up and returned. If the source parameter is an array of strings, then the translation + * of each of the elements of that array is looked up, and an array of translated strings + * is returned.

+ * + * If any string is not found in the loaded set of + * resources, the original source string is returned. If the key is not given, + * then the source string itself is used as the key. In the case where the + * source string is used as the key, the whitespace is compressed down to 1 space + * each, and the whitespace at the beginning and end of the string is trimmed.

+ * + * The escape mode specifies what type of output you are escaping the returned + * string for. Modes are similar to the types: + * + *

    + *
  • "html" -- prevents HTML injection by escaping the characters < > and & + *
  • "xml" -- currently same as "html" mode + *
  • "js" -- prevents breaking Javascript syntax by backslash escaping all quote and + * double-quote characters + *
  • "attribute" -- meant for HTML attribute values. Currently this is the same as + * "js" escape mode. + *
  • "default" -- use the type parameter from the constructor as the escape mode as well + *
  • "none" or undefined -- no escaping at all. + *
+ * + * The type parameter of the constructor specifies what type of strings this bundle + * is operating upon. This allows pseudo-translation and automatic key generation + * to happen properly by telling this class how to parse the string. The escape mode + * for this method is different in that it specifies how this string will be used in + * the calling code and therefore how to escape it properly.

+ * + * For example, a section of Javascript code may be constructing an HTML snippet in a + * string to add to the web page. In this case, the type parameter in the constructor should + * be "html" so that the source string can be parsed properly, but the escape mode should + * be "js" so that the output string can be used in Javascript without causing syntax + * errors. + * + * @param {?string|Array.=} source the source string or strings to translate + * @param {?string|Array.=} key optional name of the key, if any + * @param {?string=} escapeMode escape mode, if any + * @return {IString|Array.|undefined} the translation of the given source/key or undefined + * if the translation is not found and the source is undefined + */ + getString: function (source, key, escapeMode) { + if (!source && !key) return new IString(""); + + //if (typeof(source) === "object") { + // TODO localize objects + //} else + + if (ilib.isArray(source)) { + return source.map(ilib.bind(this, function(str) { + return typeof(str) === "string" ? this._getStringSingle(str, key, escapeMode) : str; + })); + } else { + return this._getStringSingle(source, key, escapeMode); + } + }, + + /** + * Return a localized string as an intrinsic Javascript String object. This does the same thing as + * the getString() method, but it returns a regular Javascript string instead of + * and IString instance. This means it cannot be formatted with the format() + * method without being wrapped in an IString instance first. + * + * @param {?string|Array.=} source the source string to translate + * @param {?string|Array.=} key optional name of the key, if any + * @param {?string=} escapeMode escape mode, if any + * @return {string|Array.|undefined} the translation of the given source/key or undefined + * if the translation is not found and the source is undefined + */ + getStringJS: function(source, key, escapeMode) { + if (typeof(source) === 'undefined' && typeof(key) === 'undefined') { + return undefined; + } + //if (typeof(source) === "object") { + // TODO localize objects + //} else + + if (ilib.isArray(source)) { + return this.getString(source, key, escapeMode).map(function(str) { + return (str && str instanceof IString) ? str.toString() : str; + }); + } else { + var s = this.getString(source, key, escapeMode); + return s ? s.toString() : undefined; + } + }, + + /** + * Return true if the current bundle contains a translation for the given key and + * source. The + * getString method will always return a string for any given key and source + * combination, so it cannot be used to tell if a translation exists. Either one + * or both of the source and key must be specified. If both are not specified, + * this method will return false. + * + * @param {?string=} source source string to look up + * @param {?string=} key key to look up + * @return {boolean} true if this bundle contains a translation for the key, and + * false otherwise + */ + containsKey: function(source, key) { + if (typeof(source) === 'undefined' && typeof(key) === 'undefined') { + return false; + } + + var keyName = key || this._makeKey(source); + return typeof(this.map[keyName]) !== 'undefined'; + }, + + /** + * Return the merged resources as an entire object. When loading resources for a + * locale that are not just a set of translated strings, but instead an entire + * structured javascript object, you can gain access to that object via this call. This method + * will ensure that all the of the parts of the object are correct for the locale.

+ * + * For pre-assembled data, it starts by loading ilib.data[name], where + * name is the base name for this set of resources. Then, it successively + * merges objects in the base data using progressively more locale-specific data. + * It loads it in this order from ilib.data: + * + *

    + *
  1. language + *
  2. region + *
  3. language_script + *
  4. language_region + *
  5. region_variant + *
  6. language_script_region + *
  7. language_region_variant + *
  8. language_script_region_variant + *
+ * + * For dynamically loaded data, the code attempts to load the same sequence as + * above, but with slash path separators instead of underscores.

+ * + * Loading the resources this way allows the program to share resources between all + * locales that share a common language, region, or script. As a + * general rule-of-thumb, resources should be as generic as possible in order to + * cover as many locales as possible. + * + * @return {Object} returns the object that is the basis for this resources instance + */ + getResObj: function () { + return this.map; + } +}; + + +/* + * DurationFmt.js - Date formatter definition + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data dateformats sysres + + + + + + + + + + +/** + * @class + * Create a new duration formatter instance. The duration formatter is immutable once + * it is created, but can format as many different durations as needed with the same + * options. Create different duration formatter instances for different purposes + * and then keep them cached for use later if you have more than one duration to + * format.

+ * + * Duration formatters format lengths of time. The duration formatter is meant to format + * durations of such things as the length of a song or a movie or a meeting, or the + * current position in that song or movie while playing it. If you wish to format a + * period of time that has a specific start and end date/time, then use a + * [DateRngFmt] instance instead and call its format method.

+ * + * The options may contain any of the following properties: + * + *

    + *
  • locale - locale to use when formatting the duration. If the locale is + * not specified, then the default locale of the app or web page will be used. + * + *
  • length - Specify the length of the format to use. The length is the approximate size of the + * formatted string. + * + *
      + *
    • short - use a short representation of the duration. This is the most compact format possible for the locale. eg. 1y 1m 1w 1d 1:01:01 + *
    • medium - use a medium length representation of the duration. This is a slightly longer format. eg. 1 yr 1 mo 1 wk 1 dy 1 hr 1 mi 1 se + *
    • long - use a long representation of the duration. This is a fully specified format, but some of the textual + * parts may still be abbreviated. eg. 1 yr 1 mo 1 wk 1 day 1 hr 1 min 1 sec + *
    • full - use a full representation of the duration. This is a fully specified format where all the textual + * parts are spelled out completely. eg. 1 year, 1 month, 1 week, 1 day, 1 hour, 1 minute and 1 second + *
    + * + *
  • style - whether hours, minutes, and seconds should be formatted as a text string + * or as a regular time as on a clock. eg. text is "1 hour, 15 minutes", whereas clock is "1:15:00". Valid + * values for this property are "text" or "clock". Default if this property is not specified + * is "text". + * + *
  • useNative - the flag used to determaine whether to use the native script settings + * for formatting the numbers . + * + *
  • onLoad - a callback function to call when the format data is fully + * loaded. When the onLoad option is given, this class will attempt to + * load any missing locale data using the ilib loader callback. + * When the constructor is done (even if the data is already preassembled), the + * onLoad function is called with the current instance as a parameter, so this + * callback can be used with preassembled or dynamic loading or a mix of the two. + * + *
  • sync - tell whether to load any missing locale data synchronously or + * asynchronously. If this option is given as "false", then the "onLoad" + * callback must be given, as the instance returned from this constructor will + * not be usable for a while. + * + *
  • loadParams - an object containing parameters to pass to the + * loader callback function when locale data is missing. The parameters are not + * interpretted or modified in any way. They are simply passed along. The object + * may contain any property/value pairs as long as the calling code is in + * agreement with the loader callback function as to what those parameters mean. + *
+ *

+ * + * + * @constructor + * @param {?Object} options options governing the way this date formatter instance works + */ +var DurationFmt = function(options) { + var sync = true; + var loadParams = undefined; + + this.locale = new Locale(); + this.length = "short"; + this.style = "text"; + + if (options) { + if (options.locale) { + this.locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; + } + + if (options.length) { + if (options.length === 'short' || + options.length === 'medium' || + options.length === 'long' || + options.length === 'full') { + this.length = options.length; + } + } + + if (options.style) { + if (options.style === 'text' || options.style === 'clock') { + this.style = options.style; + } + } + + if (typeof(options.sync) !== 'undefined') { + sync = !!options.sync; + } + + if (typeof(options.useNative) === 'boolean') { + this.useNative = options.useNative; + } + + loadParams = options.loadParams; + } + options = options || {sync: true}; + + new LocaleInfo(this.locale, { + sync: sync, + loadParams: loadParams, + onLoad: ilib.bind(this, function (li) { + this.script = li.getScript(); + new ResBundle({ + locale: this.locale, + name: "sysres", + sync: sync, + loadParams: loadParams, + onLoad: ilib.bind(this, function (sysres) { + IString.loadPlurals(sync, this.locale, loadParams, ilib.bind(this, function() { + if (this.length === 'medium' && !(this.script === 'Latn' || this.script ==='Grek' || this.script ==='Cyrl')) { + this.length = 'short'; + } + switch (this.length) { + case 'short': + this.components = { + year: sysres.getString("#{num}y"), + month: sysres.getString("#{num}m", "durationShortMonths"), + week: sysres.getString("#{num}w"), + day: sysres.getString("#{num}d"), + hour: sysres.getString("#{num}h"), + minute: sysres.getString("#{num}m", "durationShortMinutes"), + second: sysres.getString("#{num}s"), + millisecond: sysres.getString("#{num}m", "durationShortMillis"), + separator: sysres.getString(" ", "separatorShort"), + finalSeparator: "" // not used at this length + }; + break; + + case 'medium': + this.components = { + year: sysres.getString("1#1 yr|#{num} yrs", "durationMediumYears"), + month: sysres.getString("1#1 mo|#{num} mos"), + week: sysres.getString("1#1 wk|#{num} wks", "durationMediumWeeks"), + day: sysres.getString("1#1 dy|#{num} dys"), + hour: sysres.getString("1#1 hr|#{num} hrs", "durationMediumHours"), + minute: sysres.getString("1#1 mi|#{num} min"), + second: sysres.getString("1#1 se|#{num} sec"), + millisecond: sysres.getString("#{num} ms", "durationMediumMillis"), + separator: sysres.getString(" ", "separatorMedium"), + finalSeparator: "" // not used at this length + }; + break; + + case 'long': + this.components = { + year: sysres.getString("1#1 yr|#{num} yrs"), + month: sysres.getString("1#1 mon|#{num} mons"), + week: sysres.getString("1#1 wk|#{num} wks"), + day: sysres.getString("1#1 day|#{num} days", "durationLongDays"), + hour: sysres.getString("1#1 hr|#{num} hrs"), + minute: sysres.getString("1#1 min|#{num} min"), + second: sysres.getString("1#1 sec|#{num} sec"), + millisecond: sysres.getString("#{num} ms"), + separator: sysres.getString(", ", "separatorLong"), + finalSeparator: "" // not used at this length + }; + break; + + case 'full': + this.components = { + year: sysres.getString("1#1 year|#{num} years"), + month: sysres.getString("1#1 month|#{num} months"), + week: sysres.getString("1#1 week|#{num} weeks"), + day: sysres.getString("1#1 day|#{num} days"), + hour: sysres.getString("1#1 hour|#{num} hours"), + minute: sysres.getString("1#1 minute|#{num} minutes"), + second: sysres.getString("1#1 second|#{num} seconds"), + millisecond: sysres.getString("1#1 millisecond|#{num} milliseconds"), + separator: sysres.getString(", ", "separatorFull"), + finalSeparator: sysres.getString(" and ", "finalSeparatorFull") + }; + break; + } + + if (this.style === 'clock') { + new DateFmt({ + locale: this.locale, + calendar: "gregorian", + type: "time", + time: "ms", + sync: sync, + loadParams: loadParams, + useNative: this.useNative, + onLoad: ilib.bind(this, function (fmtMS) { + this.timeFmtMS = fmtMS; + new DateFmt({ + locale: this.locale, + calendar: "gregorian", + type: "time", + time: "hm", + sync: sync, + loadParams: loadParams, + useNative: this.useNative, + onLoad: ilib.bind(this, function (fmtHM) { + this.timeFmtHM = fmtHM; + new DateFmt({ + locale: this.locale, + calendar: "gregorian", + type: "time", + time: "hms", + sync: sync, + loadParams: loadParams, + useNative: this.useNative, + onLoad: ilib.bind(this, function (fmtHMS) { + this.timeFmtHMS = fmtHMS; + + // munge with the template to make sure that the hours are not formatted mod 12 + this.timeFmtHM.template = this.timeFmtHM.template.replace(/hh?/, 'H'); + this.timeFmtHM.templateArr = this.timeFmtHM._tokenize(this.timeFmtHM.template); + this.timeFmtHMS.template = this.timeFmtHMS.template.replace(/hh?/, 'H'); + this.timeFmtHMS.templateArr = this.timeFmtHMS._tokenize(this.timeFmtHMS.template); + + this._init(this.timeFmtHM.locinfo, options); + }) + }); + }) + }); + }) + }); + return; + } + this._init(li, options); + })); + }) + }); + }) + }); +}; + +/** + * @private + * @static + */ +DurationFmt.complist = { + "text": ["year", "month", "week", "day", "hour", "minute", "second", "millisecond"], + "clock": ["year", "month", "week", "day"] +}; + +/** + * @private + */ +DurationFmt.prototype._mapDigits = function(str) { + if (this.useNative && this.digits) { + return JSUtils.mapString(str.toString(), this.digits); + } + return str; +}; + +/** + * @private + * @param {LocaleInfo} locinfo + * @param {Object|undefined} options + */ +DurationFmt.prototype._init = function(locinfo, options) { + var digits; + new ScriptInfo(locinfo.getScript(), { + sync: options.sync, + loadParams: options.loadParams, + onLoad: ilib.bind(this, function(scriptInfo) { + this.scriptDirection = scriptInfo.getScriptDirection(); + + if (typeof(this.useNative) === 'boolean') { + // if the caller explicitly said to use native or not, honour that despite what the locale data says... + if (this.useNative) { + digits = locinfo.getNativeDigits(); + if (digits) { + this.digits = digits; + } + } + } else if (locinfo.getDigitsStyle() === "native") { + // else if the locale usually uses native digits, then use them + digits = locinfo.getNativeDigits(); + if (digits) { + this.useNative = true; + this.digits = digits; + } + } // else use western digits always + + if (typeof(options.onLoad) === 'function') { + options.onLoad(this); + } + }) + }); +}; + +/** + * Format a duration according to the format template of this formatter instance.

+ * + * The components parameter should be an object that contains any or all of these + * numeric properties: + * + *

    + *
  • year + *
  • month + *
  • week + *
  • day + *
  • hour + *
  • minute + *
  • second + *
+ *

+ * + * When a property is left out of the components parameter or has a value of 0, it will not + * be formatted into the output string, except for times that include 0 minutes and 0 seconds. + * + * This formatter will not ensure that numbers for each component property is within the + * valid range for that component. This allows you to format durations that are longer + * than normal range. For example, you could format a duration has being "33 hours" rather + * than "1 day, 9 hours". + * + * @param {Object} components date/time components to be formatted into a duration string + * @return {IString} a string with the duration formatted according to the style and + * locale set up for this formatter instance. If the components parameter is empty or + * undefined, an empty string is returned. + */ +DurationFmt.prototype.format = function (components) { + var i, list, fmt, secondlast = true, str = ""; + + list = DurationFmt.complist[this.style]; + //for (i = 0; i < list.length; i++) { + for (i = list.length-1; i >= 0; i--) { + //console.log("Now dealing with " + list[i]); + if (typeof(components[list[i]]) !== 'undefined' && components[list[i]] !== 0) { + if (str.length > 0) { + str = ((this.length === 'full' && secondlast) ? this.components.finalSeparator : this.components.separator) + str; + secondlast = false; + } + str = this.components[list[i]].formatChoice(components[list[i]], {num: this._mapDigits(components[list[i]])}) + str; + } + } + + if (this.style === 'clock') { + if (typeof(components.hour) !== 'undefined') { + fmt = (typeof(components.second) !== 'undefined') ? this.timeFmtHMS : this.timeFmtHM; + } else { + fmt = this.timeFmtMS; + } + + if (str.length > 0) { + str += this.components.separator; + } + str += fmt._formatTemplate(components, fmt.templateArr); + } + + if (this.scriptDirection === 'rtl') { + str = "\u200F" + str; + } + return new IString(str); +}; + +/** + * Return the locale that was used to construct this duration formatter object. If the + * locale was not given as parameter to the constructor, this method returns the default + * locale of the system. + * + * @return {Locale} locale that this duration formatter was constructed with + */ +DurationFmt.prototype.getLocale = function () { + return this.locale; +}; + +/** + * Return the length that was used to construct this duration formatter object. If the + * length was not given as parameter to the constructor, this method returns the default + * length. Valid values are "short", "medium", "long", and "full". + * + * @return {string} length that this duration formatter was constructed with + */ +DurationFmt.prototype.getLength = function () { + return this.length; +}; + +/** + * Return the style that was used to construct this duration formatter object. Returns + * one of "text" or "clock". + * + * @return {string} style that this duration formatter was constructed with + */ +DurationFmt.prototype.getStyle = function () { + return this.style; +}; + + +/* + * DurationFmt.js - Date formatter definition + * + * Copyright © 2012-2015, 2018, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data dateformats sysres + + + + + + + + + + +/** + * @class + * Create a new duration formatter instance. The duration formatter is immutable once + * it is created, but can format as many different durations as needed with the same + * options. Create different duration formatter instances for different purposes + * and then keep them cached for use later if you have more than one duration to + * format.

+ * + * Duration formatters format lengths of time. The duration formatter is meant to format + * durations of such things as the length of a song or a movie or a meeting, or the + * current position in that song or movie while playing it. If you wish to format a + * period of time that has a specific start and end date/time, then use a + * [DateRngFmt] instance instead and call its format method.

+ * + * The options may contain any of the following properties: + * + *

    + *
  • locale - locale to use when formatting the duration. If the locale is + * not specified, then the default locale of the app or web page will be used. + * + *
  • length - Specify the length of the format to use. The length is the approximate size of the + * formatted string. + * + *
      + *
    • short - use a short representation of the duration. This is the most compact format possible for the locale. eg. 1y 1m 1w 1d 1:01:01 + *
    • medium - use a medium length representation of the duration. This is a slightly longer format. eg. 1 yr 1 mo 1 wk 1 dy 1 hr 1 mi 1 se + *
    • long - use a long representation of the duration. This is a fully specified format, but some of the textual + * parts may still be abbreviated. eg. 1 yr 1 mo 1 wk 1 day 1 hr 1 min 1 sec + *
    • full - use a full representation of the duration. This is a fully specified format where all the textual + * parts are spelled out completely. eg. 1 year, 1 month, 1 week, 1 day, 1 hour, 1 minute and 1 second + *
    + * + *
  • style - whether hours, minutes, and seconds should be formatted as a text string + * or as a regular time as on a clock. eg. text is "1 hour, 15 minutes", whereas clock is "1:15:00". Valid + * values for this property are "text" or "clock". Default if this property is not specified + * is "text". + * + *
  • useNative - the flag used to determaine whether to use the native script settings + * for formatting the numbers . + * + *
  • onLoad - a callback function to call when the format data is fully + * loaded. When the onLoad option is given, this class will attempt to + * load any missing locale data using the ilib loader callback. + * When the constructor is done (even if the data is already preassembled), the + * onLoad function is called with the current instance as a parameter, so this + * callback can be used with preassembled or dynamic loading or a mix of the two. + * + *
  • sync - tell whether to load any missing locale data synchronously or + * asynchronously. If this option is given as "false", then the "onLoad" + * callback must be given, as the instance returned from this constructor will + * not be usable for a while. + * + *
  • loadParams - an object containing parameters to pass to the + * loader callback function when locale data is missing. The parameters are not + * interpretted or modified in any way. They are simply passed along. The object + * may contain any property/value pairs as long as the calling code is in + * agreement with the loader callback function as to what those parameters mean. + *
+ *

+ * + * + * @constructor + * @param {?Object} options options governing the way this date formatter instance works + */ +var DurationFmt = function(options) { + var sync = true; + var loadParams = undefined; + + this.locale = new Locale(); + this.length = "short"; + this.style = "text"; + + if (options) { + if (options.locale) { + this.locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; + } + + if (options.length) { + if (options.length === 'short' || + options.length === 'medium' || + options.length === 'long' || + options.length === 'full') { + this.length = options.length; + } + } + + if (options.style) { + if (options.style === 'text' || options.style === 'clock') { + this.style = options.style; + } + } + + if (typeof(options.sync) !== 'undefined') { + sync = !!options.sync; + } + + if (typeof(options.useNative) === 'boolean') { + this.useNative = options.useNative; + } + + loadParams = options.loadParams; + } + options = options || {sync: true}; + + new LocaleInfo(this.locale, { + sync: sync, + loadParams: loadParams, + onLoad: ilib.bind(this, function (li) { + this.script = li.getScript(); + new ResBundle({ + locale: this.locale, + name: "sysres", + sync: sync, + loadParams: loadParams, + onLoad: ilib.bind(this, function (sysres) { + IString.loadPlurals(sync, this.locale, loadParams, ilib.bind(this, function() { + if (this.length === 'medium' && !(this.script === 'Latn' || this.script ==='Grek' || this.script ==='Cyrl')) { + this.length = 'short'; + } + switch (this.length) { + case 'short': + this.components = { + year: sysres.getString("#{num}y"), + month: sysres.getString("#{num}m", "durationShortMonths"), + week: sysres.getString("#{num}w"), + day: sysres.getString("#{num}d"), + hour: sysres.getString("#{num}h"), + minute: sysres.getString("#{num}m", "durationShortMinutes"), + second: sysres.getString("#{num}s"), + millisecond: sysres.getString("#{num}m", "durationShortMillis"), + separator: sysres.getString(" ", "separatorShort"), + finalSeparator: "" // not used at this length + }; + break; + + case 'medium': + this.components = { + year: sysres.getString("1#1 yr|#{num} yrs", "durationMediumYears"), + month: sysres.getString("1#1 mo|#{num} mos"), + week: sysres.getString("1#1 wk|#{num} wks", "durationMediumWeeks"), + day: sysres.getString("1#1 dy|#{num} dys"), + hour: sysres.getString("1#1 hr|#{num} hrs", "durationMediumHours"), + minute: sysres.getString("1#1 mi|#{num} min"), + second: sysres.getString("1#1 se|#{num} sec"), + millisecond: sysres.getString("#{num} ms", "durationMediumMillis"), + separator: sysres.getString(" ", "separatorMedium"), + finalSeparator: "" // not used at this length + }; + break; + + case 'long': + this.components = { + year: sysres.getString("1#1 yr|#{num} yrs"), + month: sysres.getString("1#1 mon|#{num} mons"), + week: sysres.getString("1#1 wk|#{num} wks"), + day: sysres.getString("1#1 day|#{num} days", "durationLongDays"), + hour: sysres.getString("1#1 hr|#{num} hrs"), + minute: sysres.getString("1#1 min|#{num} min"), + second: sysres.getString("1#1 sec|#{num} sec"), + millisecond: sysres.getString("#{num} ms"), + separator: sysres.getString(", ", "separatorLong"), + finalSeparator: "" // not used at this length + }; + break; + + case 'full': + this.components = { + year: sysres.getString("1#1 year|#{num} years"), + month: sysres.getString("1#1 month|#{num} months"), + week: sysres.getString("1#1 week|#{num} weeks"), + day: sysres.getString("1#1 day|#{num} days"), + hour: sysres.getString("1#1 hour|#{num} hours"), + minute: sysres.getString("1#1 minute|#{num} minutes"), + second: sysres.getString("1#1 second|#{num} seconds"), + millisecond: sysres.getString("1#1 millisecond|#{num} milliseconds"), + separator: sysres.getString(", ", "separatorFull"), + finalSeparator: sysres.getString(" and ", "finalSeparatorFull") + }; + break; + } + + if (this.style === 'clock') { + new DateFmt({ + locale: this.locale, + calendar: "gregorian", + type: "time", + time: "ms", + sync: sync, + loadParams: loadParams, + useNative: this.useNative, + onLoad: ilib.bind(this, function (fmtMS) { + this.timeFmtMS = fmtMS; + new DateFmt({ + locale: this.locale, + calendar: "gregorian", + type: "time", + time: "hm", + sync: sync, + loadParams: loadParams, + useNative: this.useNative, + onLoad: ilib.bind(this, function (fmtHM) { + this.timeFmtHM = fmtHM; + new DateFmt({ + locale: this.locale, + calendar: "gregorian", + type: "time", + time: "hms", + sync: sync, + loadParams: loadParams, + useNative: this.useNative, + onLoad: ilib.bind(this, function (fmtHMS) { + this.timeFmtHMS = fmtHMS; + + // munge with the template to make sure that the hours are not formatted mod 12 + this.timeFmtHM.template = this.timeFmtHM.template.replace(/hh?/, 'H'); + this.timeFmtHM.templateArr = this.timeFmtHM._tokenize(this.timeFmtHM.template); + this.timeFmtHMS.template = this.timeFmtHMS.template.replace(/hh?/, 'H'); + this.timeFmtHMS.templateArr = this.timeFmtHMS._tokenize(this.timeFmtHMS.template); + + this._init(this.timeFmtHM.locinfo, options); + }) + }); + }) + }); + }) + }); + return; + } + this._init(li, options); + })); + }) + }); + }) + }); +}; + +/** + * @private + * @static + */ +DurationFmt.complist = { + "text": ["year", "month", "week", "day", "hour", "minute", "second", "millisecond"], + "clock": ["year", "month", "week", "day"] +}; + +/** + * @private + */ +DurationFmt.prototype._mapDigits = function(str) { + if (this.useNative && this.digits) { + return JSUtils.mapString(str.toString(), this.digits); + } + return str; +}; + +/** + * @private + * @param {LocaleInfo} locinfo + * @param {Object|undefined} options + */ +DurationFmt.prototype._init = function(locinfo, options) { + var digits; + new ScriptInfo(locinfo.getScript(), { + sync: options.sync, + loadParams: options.loadParams, + onLoad: ilib.bind(this, function(scriptInfo) { + this.scriptDirection = scriptInfo.getScriptDirection(); + + if (typeof(this.useNative) === 'boolean') { + // if the caller explicitly said to use native or not, honour that despite what the locale data says... + if (this.useNative) { + digits = locinfo.getNativeDigits(); + if (digits) { + this.digits = digits; + } + } + } else if (locinfo.getDigitsStyle() === "native") { + // else if the locale usually uses native digits, then use them + digits = locinfo.getNativeDigits(); + if (digits) { + this.useNative = true; + this.digits = digits; + } + } // else use western digits always + + if (typeof(options.onLoad) === 'function') { + options.onLoad(this); + } + }) + }); +}; + +/** + * Format a duration according to the format template of this formatter instance.

+ * + * The components parameter should be an object that contains any or all of these + * numeric properties: + * + *

    + *
  • year + *
  • month + *
  • week + *
  • day + *
  • hour + *
  • minute + *
  • second + *
+ *

+ * + * When a property is left out of the components parameter or has a value of 0, it will not + * be formatted into the output string, except for times that include 0 minutes and 0 seconds. + * + * This formatter will not ensure that numbers for each component property is within the + * valid range for that component. This allows you to format durations that are longer + * than normal range. For example, you could format a duration has being "33 hours" rather + * than "1 day, 9 hours". + * + * @param {Object} components date/time components to be formatted into a duration string + * @return {IString} a string with the duration formatted according to the style and + * locale set up for this formatter instance. If the components parameter is empty or + * undefined, an empty string is returned. + */ +DurationFmt.prototype.format = function (components) { + var i, list, fmt, secondlast = true, str = ""; + + list = DurationFmt.complist[this.style]; + //for (i = 0; i < list.length; i++) { + for (i = list.length-1; i >= 0; i--) { + //console.log("Now dealing with " + list[i]); + if (typeof(components[list[i]]) !== 'undefined' && components[list[i]] !== 0) { + if (str.length > 0) { + str = ((this.length === 'full' && secondlast) ? this.components.finalSeparator : this.components.separator) + str; + secondlast = false; + } + str = this.components[list[i]].formatChoice(components[list[i]], {num: this._mapDigits(components[list[i]])}) + str; + } + } + + if (this.style === 'clock') { + if (typeof(components.hour) !== 'undefined') { + fmt = (typeof(components.second) !== 'undefined') ? this.timeFmtHMS : this.timeFmtHM; + } else { + fmt = this.timeFmtMS; + } + + if (str.length > 0) { + str += this.components.separator; + } + str += fmt._formatTemplate(components, fmt.templateArr); + } + + if (this.scriptDirection === 'rtl') { + str = "\u200F" + str; + } + return new IString(str); +}; + +/** + * Return the locale that was used to construct this duration formatter object. If the + * locale was not given as parameter to the constructor, this method returns the default + * locale of the system. + * + * @return {Locale} locale that this duration formatter was constructed with + */ +DurationFmt.prototype.getLocale = function () { + return this.locale; +}; + +/** + * Return the length that was used to construct this duration formatter object. If the + * length was not given as parameter to the constructor, this method returns the default + * length. Valid values are "short", "medium", "long", and "full". + * + * @return {string} length that this duration formatter was constructed with + */ +DurationFmt.prototype.getLength = function () { + return this.length; +}; + +/** + * Return the style that was used to construct this duration formatter object. Returns + * one of "text" or "clock". + * + * @return {string} style that this duration formatter was constructed with + */ +DurationFmt.prototype.getStyle = function () { + return this.style; +}; + + +/* + * Currency.js - Currency definition + * + * Copyright © 2012-2015, 2018, 2022 JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// !data currency + + + + + + + +/** + * @class + * Create a new currency information instance. Instances of this class encode + * information about a particular currency.

+ * + * Note: that if you are looking to format currency for display, please see + * the number formatting class {NumFmt}. This class only gives information + * about currencies.

+ * + * The options can contain any of the following properties: + * + *

    + *
  • locale - specify the locale for this instance + *
  • code - find info on a specific currency with the given ISO 4217 code + *
  • sign - search for a currency that uses this sign + *
  • onLoad - a callback function to call when the currency data is fully + * loaded. When the onLoad option is given, this class will attempt to + * load any missing locale data using the ilib loader callback. + * When the constructor is done (even if the data is already preassembled), the + * onLoad function is called with the current instance as a parameter, so this + * callback can be used with preassembled or dynamic loading or a mix of the two. + *
  • sync - tell whether to load any missing locale data synchronously or + * asynchronously. If this option is given as "false", then the "onLoad" + * callback must be given, as the instance returned from this constructor will + * not be usable for a while. + *
  • loadParams - an object containing parameters to pass to the + * loader callback function when locale data is missing. The parameters are not + * interpretted or modified in any way. They are simply passed along. The object + * may contain any property/value pairs as long as the calling code is in + * agreement with the loader callback function as to what those parameters mean. + *
+ * + * When searching for a currency by its sign, this class cannot guarantee + * that it will return info about a specific currency. The reason is that currency + * signs are sometimes shared between different currencies and the sign is + * therefore ambiguous. If you need a + * guarantee, find the currency using the code instead.

+ * + * The way this class finds a currency by sign is the following. If the sign is + * unambiguous, then + * the currency is returned. If there are multiple currencies that use the same + * sign, and the current locale uses that sign, then the default currency for + * the current locale is returned. If there are multiple, but the current locale + * does not use that sign, then the currency with the largest circulation is + * returned. For example, if you are in the en-GB locale, and the sign is "$", + * then this class will notice that there are multiple currencies with that + * sign (USD, CAD, AUD, HKD, MXP, etc.) Since "$" is not used in en-GB, it will + * pick the one with the largest circulation, which in this case is the US Dollar + * (USD).

+ * + * If neither the code or sign property is set, the currency that is most common + * for the locale + * will be used instead. If the locale is not set, the default locale will be used. + * If the code is given, but it is not found in the list of known currencies, this + * constructor will throw an exception. If the sign is given, but it is not found, + * this constructor will default to the currency for the current locale. If both + * the code and sign properties are given, then the sign property will be ignored + * and only the code property used. If the locale is given, but it is not a known + * locale, this class will default to the default locale instead.

+ * + * + * @constructor + * @param options {Object} a set of properties to govern how this instance is constructed. + * @throws "currency xxx is unknown" when the given currency code is not in the list of + * known currencies. xxx is replaced with the requested code. + */ +var Currency = function (options) { + if (options) { + if (options.code) { + this.code = options.code; + } + if (options.locale) { + this.locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; + } + if (options.sign) { + this.sign = options.sign; + } + if (options.loadParams) { + this.loadParams = options.loadParams; + } + options.sync = (typeof(options.sync) !== 'undefined') ? options.sync : true; + } else { + options = {sync: true}; + } + + this.locale = this.locale || new Locale(); + if (typeof(ilib.data.currency) === 'undefined') { + Utils.loadData({ + name: "currency.json", + object: "Currency", + locale: "-", + sync: options.sync, + loadParams: this.loadParams, + callback: ilib.bind(this, function(currency) { + ilib.data.currency = currency; + this._loadLocinfo(options); + }) + }); + } else { + this._loadLocinfo(options); + } +}; + +/** + * Return an array of the ids for all ISO 4217 currencies that + * this copy of ilib knows about. + * + * @static + * @return {Array.} an array of currency ids that this copy of ilib knows about. + */ +Currency.getAvailableCurrencies = function() { + var ret = [], + cur, + currencies = new ResBundle({ + name: "currency" + }).getResObj(); + + for (cur in currencies) { + if (cur && currencies[cur]) { + ret.push(cur); + } + } + + return ret; +}; + +Currency.prototype = { + /** + * @private + */ + _loadLocinfo: function(options) { + new LocaleInfo(this.locale, { + sync: options.sync, + loadParams: options.loadParams, + onLoad: ilib.bind(this, function (li) { + var currInfo; + + this.locinfo = li; + if (this.code) { + currInfo = ilib.data.currency[this.code]; + if (!currInfo) { + if (options.sync) { + throw "currency " + this.code + " is unknown"; + } else if (typeof(options.onLoad) === "function") { + options.onLoad(undefined); + return; + } + } + } else if (this.sign) { + currInfo = ilib.data.currency[this.sign]; // maybe it is really a code... + if (typeof(currInfo) !== 'undefined') { + this.code = this.sign; + } else { + this.code = this.locinfo.getCurrency(); + currInfo = ilib.data.currency[this.code]; + if (currInfo.sign !== this.sign) { + // current locale does not use the sign, so search for it + for (var cur in ilib.data.currency) { + if (cur && ilib.data.currency[cur]) { + currInfo = ilib.data.currency[cur]; + if (currInfo.sign === this.sign) { + // currency data is already ordered so that the currency with the + // largest circulation is at the beginning, so all we have to do + // is take the first one in the list that matches + this.code = cur; + break; + } + } + } + } + } + } + + if (!currInfo || !this.code) { + this.code = this.locinfo.getCurrency(); + currInfo = ilib.data.currency[this.code]; + } + + this.name = currInfo.name; + this.fractionDigits = currInfo.decimals; + this.sign = currInfo.sign; + + if (typeof(options.onLoad) === 'function') { + options.onLoad(this); + } + }) + }); + }, + + /** + * Return the ISO 4217 currency code for this instance. + * @return {string} the ISO 4217 currency code for this instance + */ + getCode: function () { + return this.code; + }, + + /** + * Return the default number of fraction digits that is typically used + * with this type of currency. + * @return {number} the number of fraction digits for this currency + */ + getFractionDigits: function () { + return this.fractionDigits; + }, + + /** + * Return the sign commonly used to represent this currency. + * @return {string} the sign commonly used to represent this currency + */ + getSign: function () { + return this.sign; + }, + + /** + * Return the name of the currency in English. + * @return {string} the name of the currency in English + */ + getName: function () { + return this.name; + }, + + /** + * Return the locale for this currency. If the options to the constructor + * included a locale property in order to find the currency that is appropriate + * for that locale, then the locale is returned here. If the options did not + * include a locale, then this method returns undefined. + * @return {Locale} the locale used in the constructor of this instance, + * or undefined if no locale was given in the constructor + */ + getLocale: function () { + return this.locale; + } +}; + + +/* + * Path.js - minimal pure js implementation of the nodejs path module + * + * Copyright © 2015, JEDLSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var Path = { + /** + * Return the parent directory of the given pathname + * similar to the dirname shell function. + * @static + * @param {string} pathname path to check + * @return {string} the parent dir of the given pathname + */ + dirname: function(pathname) { + if (!pathname) return pathname; + pathname = Path.normalize(pathname); + return (pathname === ".") ? ".." : Path.normalize(pathname + "/.."); + }, + + /** + * Return the normalized version of the given pathname. This + * cleans up things like double directory separators and such. + * @static + * @param {string} pathname path to check + * @return {string} the normalized version of the given pathname + */ + normalize: function(pathname) { + if (pathname) { + pathname = pathname.replace(/\\/g, "/"); + pathname = pathname.replace(/\/\//g, "/"); + pathname = pathname.replace(/\/\//g, "/"); + pathname = pathname.replace(/\/[^/]*[^\./]\/\.\./g, "/."); + pathname = pathname.replace(/^[^/]*[^\./]\/\.\./g, "."); + pathname = pathname.replace(/\/\.\//g, "/"); + pathname = pathname.replace(/^\.\//, ""); + pathname = pathname.replace(/\/\//g, "/"); + pathname = pathname.replace(/\/\.$/, ""); + pathname = pathname.replace(/\/\//g, "/"); + if (pathname.length > 1) pathname = pathname.replace(/\/$/, ""); + if (pathname.length === 0) pathname = '.'; + } + return pathname; + }, + + /** + * Return a path that is the concatenation of all the of the arguments + * which each name a path segment. + * @static + * @param {...string} var_args + * @return {string} the concatenated pathname + */ + join: function(var_args) { + var arr = []; + for (var i = 0; i < arguments.length; i++) { + arr.push(arguments[i] && arguments[i].length > 0 ? arguments[i] : "."); + } + return Path.normalize(arr.join("/")); + }, + + /** + * Return the base file name of the path. If the extension is given, + * with or without the leading dot, then the extension is removed from + * the base name. + * @param {string} pathname the path to take the base name of + * @param {string|undefined} extension the optional extension to remove + * @return {string} the base name of the file without the extension + */ + basename: function(pathname, extension) { + var base = pathname; + var slash = pathname.lastIndexOf("/"); + if (slash !== -1) { + base = pathname.substring(slash+1); + } + + if (extension) { + var ext = extension[0] === "." ? extension : "." + extension; + var index = base.lastIndexOf(ext); + if (index > -1) { + base = base.substring(0, index); + } + } + + return base; + } +}; + + +ilib.data.plurals = undefined; +ilib.data.localeinfo = { + "calendar": "gregorian", + "clock": "24", + "currency": "USD", + "delimiter": { + "alternateQuotationEnd": "’", + "alternateQuotationStart": "‘", + "quotationEnd": "”", + "quotationStart": "“" + }, + "firstDayOfWeek": 1, + "language.name": "Root", + "meridiems": "gregorian", + "numfmt": { + "currencyFormats": { + "common": "{s} {n}", + "commonNegative": "-{s} {n}" + }, + "decimalChar": ".", + "exponential": "E", + "groupChar": ",", + "negativenumFmt": "-{n}", + "negativepctFmt": "-{n}%", + "pctChar": "%", + "pctFmt": "{n}%", + "prigroupSize": 3, + "roundingMode": "halfdown", + "script": "Latn", + "useNative": false + }, + "paperSizes": { + "regular": "A4" + }, + "timezone": "Etc/UTC", + "units": "metric", + "weekendEnd": 0, + "weekendStart": 6 +}; +ilib.data.localematch = { + "likelyLocales": { + "002": "en-Latn-NG", + "003": "en-Latn-US", + "005": "pt-Latn-BR", + "009": "en-Latn-AU", + "011": "en-Latn-NG", + "013": "es-Latn-MX", + "014": "sw-Latn-TZ", + "015": "ar-Arab-EG", + "017": "sw-Latn-CD", + "018": "en-Latn-ZA", + "019": "en-Latn-US", + "021": "en-Latn-US", + "029": "es-Latn-CU", + "030": "zh-Hans-CN", + "034": "hi-Deva-IN", + "035": "id-Latn-ID", + "039": "it-Latn-IT", + "053": "en-Latn-AU", + "054": "en-Latn-PG", + "057": "en-Latn-GU", + "061": "sm-Latn-WS", + "142": "zh-Hans-CN", + "143": "uz-Latn-UZ", + "145": "ar-Arab-SA", + "150": "ru-Cyrl-RU", + "151": "ru-Cyrl-RU", + "154": "en-Latn-GB", + "155": "de-Latn-DE", + "202": "en-Latn-NG", + "419": "es-Latn-419", + "AC": "en-Latn-AC", + "AD": "ca-Latn-AD", + "AE": "ar-Arab-AE", + "AF": "fa-Arab-AF", + "AG": "en-Latn-AG", + "AI": "en-Latn-AI", + "AL": "sq-Latn-AL", + "AM": "hy-Armn-AM", + "AO": "pt-Latn-AO", + "AQ": "en-Latn-AQ", + "AR": "es-Latn-AR", + "AS": "sm-Latn-AS", + "AT": "de-Latn-AT", + "AU": "en-Latn-AU", + "AW": "nl-Latn-AW", + "AX": "sv-Latn-AX", + "AZ": "az-Latn-AZ", + "Adlm": "ff-Adlm-GN", + "Afak": "djk-Afak-SR", + "Afak-SR": "djk-Afak-SR", + "Aghb": "xag-Aghb-AZ", + "Ahom": "aho-Ahom-IN", + "Arab": "ar-Arab-EG", + "Arab-AE": "ar-Arab-AE", + "Arab-AF": "fa-Arab-AF", + "Arab-BH": "ar-Arab-BH", + "Arab-BN": "ms-Arab-BN", + "Arab-CC": "ms-Arab-CC", + "Arab-CN": "ug-Arab-CN", + "Arab-DJ": "ar-Arab-DJ", + "Arab-DZ": "ar-Arab-DZ", + "Arab-EG": "ar-Arab-EG", + "Arab-EH": "ar-Arab-EH", + "Arab-GB": "ur-Arab-GB", + "Arab-ID": "ms-Arab-ID", + "Arab-IN": "ur-Arab-IN", + "Arab-IQ": "ar-Arab-IQ", + "Arab-IR": "fa-Arab-IR", + "Arab-JO": "ar-Arab-JO", + "Arab-KH": "cja-Arab-KH", + "Arab-KM": "ar-Arab-KM", + "Arab-KW": "ar-Arab-KW", + "Arab-LB": "ar-Arab-LB", + "Arab-LY": "ar-Arab-LY", + "Arab-MA": "ar-Arab-MA", + "Arab-MM": "rhg-Arab-MM", + "Arab-MN": "kk-Arab-MN", + "Arab-MR": "ar-Arab-MR", + "Arab-MU": "ur-Arab-MU", + "Arab-NG": "ha-Arab-NG", + "Arab-OM": "ar-Arab-OM", + "Arab-PK": "ur-Arab-PK", + "Arab-PS": "ar-Arab-PS", + "Arab-QA": "ar-Arab-QA", + "Arab-SA": "ar-Arab-SA", + "Arab-SD": "ar-Arab-SD", + "Arab-SY": "ar-Arab-SY", + "Arab-TD": "shu-Arab-TD", + "Arab-TG": "apd-Arab-TG", + "Arab-TH": "mfa-Arab-TH", + "Arab-TJ": "fa-Arab-TJ", + "Arab-TN": "ar-Arab-TN", + "Arab-TR": "apc-Arab-TR", + "Arab-YE": "ar-Arab-YE", + "Arab-YT": "swb-Arab-YT", + "Aran": "fa-Aran-IR", + "Aran-IR": "fa-Aran-IR", + "Armi": "arc-Armi-IR", + "Armn": "hy-Armn-AM", + "Avst": "ae-Avst-IR", + "BA": "bs-Latn-BA", + "BB": "en-Latn-BB", + "BD": "bn-Beng-BD", + "BE": "nl-Latn-BE", + "BF": "fr-Latn-BF", + "BG": "bg-Cyrl-BG", + "BH": "ar-Arab-BH", + "BI": "rn-Latn-BI", + "BJ": "fr-Latn-BJ", + "BL": "fr-Latn-BL", + "BM": "en-Latn-BM", + "BN": "ms-Latn-BN", + "BO": "es-Latn-BO", + "BQ": "pap-Latn-BQ", + "BR": "pt-Latn-BR", + "BS": "en-Latn-BS", + "BT": "dz-Tibt-BT", + "BV": "no-Latn-BV", + "BW": "en-Latn-BW", + "BY": "be-Cyrl-BY", + "BZ": "en-Latn-BZ", + "Bali": "ban-Bali-ID", + "Bamu": "bax-Bamu-CM", + "Bass": "bsq-Bass-LR", + "Batk": "bbc-Batk-ID", + "Beng": "bn-Beng-BD", + "Beng-BD": "bn-Beng-BD", + "Bhks": "sa-Bhks-IN", + "Bopo": "zh-Bopo-TW", + "Brah": "pka-Brah-IN", + "Brai": "fr-Brai-FR", + "Bugi": "bug-Bugi-ID", + "Buhd": "bku-Buhd-PH", + "CA": "en-Latn-CA", + "CC": "ms-Arab-CC", + "CD": "sw-Latn-CD", + "CF": "fr-Latn-CF", + "CG": "fr-Latn-CG", + "CH": "de-Latn-CH", + "CI": "fr-Latn-CI", + "CK": "en-Latn-CK", + "CL": "es-Latn-CL", + "CM": "fr-Latn-CM", + "CN": "zh-Hans-CN", + "CO": "es-Latn-CO", + "CP": "en-Latn-CP", + "CQ": "en-Latn-CQ", + "CR": "es-Latn-CR", + "CU": "es-Latn-CU", + "CV": "pt-Latn-CV", + "CW": "pap-Latn-CW", + "CX": "en-Latn-CX", + "CY": "el-Grek-CY", + "CZ": "cs-Latn-CZ", + "Cakm": "ccp-Cakm-BD", + "Cans": "iu-Cans-CA", + "Cari": "xcr-Cari-TR", + "Cham": "cjm-Cham-VN", + "Cher": "chr-Cher-US", + "Chrs": "xco-Chrs-UZ", + "Copt": "cop-Copt-EG", + "Cpmn": "und-Cpmn-CY", + "Cprt": "grc-Cprt-CY", + "Cyrl": "ru-Cyrl-RU", + "Cyrl-AF": "kaa-Cyrl-AF", + "Cyrl-AL": "mk-Cyrl-AL", + "Cyrl-AZ": "az-Cyrl-AZ", + "Cyrl-BA": "sr-Cyrl-BA", + "Cyrl-BG": "bg-Cyrl-BG", + "Cyrl-BY": "be-Cyrl-BY", + "Cyrl-GE": "ab-Cyrl-GE", + "Cyrl-GR": "mk-Cyrl-GR", + "Cyrl-IR": "kaa-Cyrl-IR", + "Cyrl-KG": "ky-Cyrl-KG", + "Cyrl-KZ": "kk-Cyrl-KZ", + "Cyrl-MD": "uk-Cyrl-MD", + "Cyrl-ME": "sr-Cyrl-ME", + "Cyrl-MK": "mk-Cyrl-MK", + "Cyrl-MN": "mn-Cyrl-MN", + "Cyrl-RO": "bg-Cyrl-RO", + "Cyrl-RS": "sr-Cyrl-RS", + "Cyrl-RU": "ru-Cyrl-RU", + "Cyrl-SK": "uk-Cyrl-SK", + "Cyrl-TJ": "tg-Cyrl-TJ", + "Cyrl-TR": "kbd-Cyrl-TR", + "Cyrl-UA": "uk-Cyrl-UA", + "Cyrl-UZ": "uz-Cyrl-UZ", + "Cyrl-XK": "sr-Cyrl-XK", + "Cyrs": "ru-Cyrs-RU", + "Cyrs-RU": "ru-Cyrs-RU", + "DE": "de-Latn-DE", + "DG": "en-Latn-DG", + "DJ": "aa-Latn-DJ", + "DK": "da-Latn-DK", + "DM": "en-Latn-DM", + "DO": "es-Latn-DO", + "DZ": "ar-Arab-DZ", + "Deva": "hi-Deva-IN", + "Deva-BT": "ne-Deva-BT", + "Deva-FJ": "hif-Deva-FJ", + "Deva-MU": "bho-Deva-MU", + "Deva-NP": "ne-Deva-NP", + "Deva-PK": "btv-Deva-PK", + "Diak": "dv-Diak-MV", + "Dogr": "doi-Dogr-IN", + "Dogr-IN": "doi-Dogr-IN", + "Dsrt": "en-Dsrt-US", + "Dsrt-US": "en-Dsrt-US", + "Dupl": "fr-Dupl-FR", + "EA": "es-Latn-EA", + "EC": "es-Latn-EC", + "EE": "et-Latn-EE", + "EG": "ar-Arab-EG", + "EH": "ar-Arab-EH", + "ER": "ti-Ethi-ER", + "ES": "es-Latn-ES", + "ET": "am-Ethi-ET", + "Egyp": "egy-Egyp-EG", + "Elba": "sq-Elba-AL", + "Elym": "arc-Elym-IR", + "Ethi": "am-Ethi-ET", + "Ethi-ER": "ti-Ethi-ER", + "Ethi-ET": "am-Ethi-ET", + "FI": "fi-Latn-FI", + "FJ": "en-Latn-FJ", + "FK": "en-Latn-FK", + "FM": "en-Latn-FM", + "FO": "fo-Latn-FO", + "FR": "fr-Latn-FR", + "GA": "fr-Latn-GA", + "GB": "en-Latn-GB", + "GD": "en-Latn-GD", + "GE": "ka-Geor-GE", + "GF": "fr-Latn-GF", + "GG": "en-Latn-GG", + "GH": "ak-Latn-GH", + "GI": "en-Latn-GI", + "GL": "kl-Latn-GL", + "GM": "en-Latn-GM", + "GN": "fr-Latn-GN", + "GP": "fr-Latn-GP", + "GQ": "es-Latn-GQ", + "GR": "el-Grek-GR", + "GS": "en-Latn-GS", + "GT": "es-Latn-GT", + "GU": "en-Latn-GU", + "GW": "pt-Latn-GW", + "GY": "en-Latn-GY", + "Gara": "wo-Gara-SN", + "Geok": "ka-Geok-GE", + "Geok-GE": "ka-Geok-GE", + "Geor": "ka-Geor-GE", + "Geor-GE": "ka-Geor-GE", + "Glag": "cu-Glag-BG", + "Gong": "wsg-Gong-IN", + "Gong-GE": "ka-Gong-GE", + "Gonm": "esg-Gonm-IN", + "Goth": "got-Goth-UA", + "Gran": "sa-Gran-IN", + "Grek": "el-Grek-GR", + "Grek-GR": "el-Grek-GR", + "Grek-TR": "bgx-Grek-TR", + "Gujr": "gu-Gujr-IN", + "Gukh": "gvr-Gukh-NP", + "Guru": "pa-Guru-IN", + "Guru-IN": "pa-Guru-IN", + "HK": "zh-Hant-HK", + "HM": "en-Latn-HM", + "HN": "es-Latn-HN", + "HR": "hr-Latn-HR", + "HT": "ht-Latn-HT", + "HU": "hu-Latn-HU", + "Hanb": "zh-Hanb-TW", + "Hang": "ko-Hang-KR", + "Hani": "zh-Hani-CN", + "Hano": "hnn-Hano-PH", + "Hans": "zh-Hans-CN", + "Hans-CN": "zh-Hans-CN", + "Hant": "zh-Hant-TW", + "Hant-CA": "yue-Hant-CA", + "Hant-CN": "yue-Hant-CN", + "Hant-MO": "zh-Hant-MO", + "Hatr": "arc-Hatr-IQ", + "Hebr": "he-Hebr-IL", + "Hebr-IL": "he-Hebr-IL", + "Hebr-SE": "yi-Hebr-SE", + "Hebr-UA": "yi-Hebr-UA", + "Hebr-US": "yi-Hebr-US", + "Hira": "ja-Hira-JP", + "Hluw": "hlu-Hluw-TR", + "Hmng": "hnj-Hmng-LA", + "Hmnp": "hnj-Hmnp-US", + "Hrkt": "ja-Hrkt-JP", + "Hrkt-JP": "ja-Hrkt-JP", + "Hung": "hu-Hung-HU", + "IC": "es-Latn-IC", + "ID": "id-Latn-ID", + "IE": "en-Latn-IE", + "IL": "he-Hebr-IL", + "IM": "en-Latn-IM", + "IN": "hi-Deva-IN", + "IO": "en-Latn-IO", + "IQ": "ar-Arab-IQ", + "IR": "fa-Arab-IR", + "IS": "is-Latn-IS", + "IT": "it-Latn-IT", + "Ital": "ett-Ital-IT", + "JE": "en-Latn-JE", + "JM": "en-Latn-JM", + "JO": "ar-Arab-JO", + "JP": "ja-Jpan-JP", + "Jamo": "ko-Jamo-KR", + "Java": "jv-Java-ID", + "Jpan": "ja-Jpan-JP", + "Jpan-JP": "ja-Jpan-JP", + "KE": "sw-Latn-KE", + "KG": "ky-Cyrl-KG", + "KH": "km-Khmr-KH", + "KI": "en-Latn-KI", + "KM": "ar-Arab-KM", + "KN": "en-Latn-KN", + "KP": "ko-Kore-KP", + "KR": "ko-Kore-KR", + "KW": "ar-Arab-KW", + "KY": "en-Latn-KY", + "KZ": "ru-Cyrl-KZ", + "Kali": "eky-Kali-MM", + "Kana": "ja-Kana-JP", + "Kawi": "kaw-Kawi-ID", + "Khar": "pra-Khar-PK", + "Khmr": "km-Khmr-KH", + "Khmr-KH": "km-Khmr-KH", + "Khmr-MM": "my-Khmr-MM", + "Khmr-MV": "bh-Khmr-MV", + "Khoj": "sd-Khoj-IN", + "Kits": "zkt-Kits-CN", + "Knda": "kn-Knda-IN", + "Kore": "ko-Kore-KR", + "Kore-KP": "ko-Kore-KP", + "Kore-KR": "ko-Kore-KR", + "Krai": "bap-Krai-IN", + "Kthi": "bho-Kthi-IN", + "LA": "lo-Laoo-LA", + "LB": "ar-Arab-LB", + "LC": "en-Latn-LC", + "LI": "de-Latn-LI", + "LK": "si-Sinh-LK", + "LR": "en-Latn-LR", + "LS": "st-Latn-LS", + "LT": "lt-Latn-LT", + "LU": "fr-Latn-LU", + "LV": "lv-Latn-LV", + "LY": "ar-Arab-LY", + "Lana": "nod-Lana-TH", + "Laoo": "lo-Laoo-LA", + "Laoo-AU": "hnj-Laoo-AU", + "Laoo-CN": "hnj-Laoo-CN", + "Laoo-FR": "hnj-Laoo-FR", + "Laoo-GF": "hnj-Laoo-GF", + "Laoo-LA": "lo-Laoo-LA", + "Laoo-MM": "hnj-Laoo-MM", + "Laoo-SR": "hnj-Laoo-SR", + "Laoo-TH": "hnj-Laoo-TH", + "Laoo-US": "hnj-Laoo-US", + "Laoo-VN": "hnj-Laoo-VN", + "Latn": "en-Latn-US", + "Latn-419": "es-Latn-419", + "Latn-AC": "en-Latn-AC", + "Latn-AD": "ca-Latn-AD", + "Latn-AE": "en-Latn-AE", + "Latn-AF": "tk-Latn-AF", + "Latn-AG": "en-Latn-AG", + "Latn-AI": "en-Latn-AI", + "Latn-AL": "sq-Latn-AL", + "Latn-AM": "ku-Latn-AM", + "Latn-AO": "pt-Latn-AO", + "Latn-AQ": "en-Latn-AQ", + "Latn-AR": "es-Latn-AR", + "Latn-AS": "sm-Latn-AS", + "Latn-AT": "de-Latn-AT", + "Latn-AU": "en-Latn-AU", + "Latn-AW": "nl-Latn-AW", + "Latn-AX": "sv-Latn-AX", + "Latn-AZ": "az-Latn-AZ", + "Latn-BA": "bs-Latn-BA", + "Latn-BB": "en-Latn-BB", + "Latn-BD": "en-Latn-BD", + "Latn-BE": "nl-Latn-BE", + "Latn-BF": "fr-Latn-BF", + "Latn-BG": "en-Latn-BG", + "Latn-BI": "fr-Latn-BI", + "Latn-BJ": "fr-Latn-BJ", + "Latn-BL": "fr-Latn-BL", + "Latn-BM": "en-Latn-BM", + "Latn-BN": "id-Latn-BN", + "Latn-BO": "es-Latn-BO", + "Latn-BQ": "nl-Latn-BQ", + "Latn-BR": "pt-Latn-BR", + "Latn-BS": "en-Latn-BS", + "Latn-BT": "en-Latn-BT", + "Latn-BV": "no-Latn-BV", + "Latn-BW": "en-Latn-BW", + "Latn-BZ": "en-Latn-BZ", + "Latn-CA": "en-Latn-CA", + "Latn-CC": "en-Latn-CC", + "Latn-CD": "fr-Latn-CD", + "Latn-CF": "fr-Latn-CF", + "Latn-CG": "fr-Latn-CG", + "Latn-CH": "de-Latn-CH", + "Latn-CI": "fr-Latn-CI", + "Latn-CK": "en-Latn-CK", + "Latn-CL": "es-Latn-CL", + "Latn-CM": "fr-Latn-CM", + "Latn-CN": "za-Latn-CN", + "Latn-CO": "es-Latn-CO", + "Latn-CP": "en-Latn-CP", + "Latn-CQ": "en-Latn-CQ", + "Latn-CR": "es-Latn-CR", + "Latn-CU": "es-Latn-CU", + "Latn-CV": "pt-Latn-CV", + "Latn-CW": "nl-Latn-CW", + "Latn-CX": "en-Latn-CX", + "Latn-CY": "tr-Latn-CY", + "Latn-CZ": "cs-Latn-CZ", + "Latn-DE": "de-Latn-DE", + "Latn-DG": "en-Latn-DG", + "Latn-DJ": "so-Latn-DJ", + "Latn-DK": "da-Latn-DK", + "Latn-DM": "en-Latn-DM", + "Latn-DO": "es-Latn-DO", + "Latn-DZ": "fr-Latn-DZ", + "Latn-EA": "es-Latn-EA", + "Latn-EC": "es-Latn-EC", + "Latn-EE": "et-Latn-EE", + "Latn-EG": "en-Latn-EG", + "Latn-ER": "en-Latn-ER", + "Latn-ES": "es-Latn-ES", + "Latn-ET": "en-Latn-ET", + "Latn-FI": "fi-Latn-FI", + "Latn-FJ": "en-Latn-FJ", + "Latn-FK": "en-Latn-FK", + "Latn-FM": "en-Latn-FM", + "Latn-FO": "fo-Latn-FO", + "Latn-FR": "fr-Latn-FR", + "Latn-GA": "fr-Latn-GA", + "Latn-GB": "en-Latn-GB", + "Latn-GD": "en-Latn-GD", + "Latn-GE": "ku-Latn-GE", + "Latn-GF": "fr-Latn-GF", + "Latn-GG": "en-Latn-GG", + "Latn-GH": "en-Latn-GH", + "Latn-GI": "en-Latn-GI", + "Latn-GL": "kl-Latn-GL", + "Latn-GM": "en-Latn-GM", + "Latn-GN": "fr-Latn-GN", + "Latn-GP": "fr-Latn-GP", + "Latn-GQ": "es-Latn-GQ", + "Latn-GR": "en-Latn-GR", + "Latn-GS": "en-Latn-GS", + "Latn-GT": "es-Latn-GT", + "Latn-GU": "en-Latn-GU", + "Latn-GW": "pt-Latn-GW", + "Latn-GY": "en-Latn-GY", + "Latn-HK": "en-Latn-HK", + "Latn-HM": "en-Latn-HM", + "Latn-HN": "es-Latn-HN", + "Latn-HR": "hr-Latn-HR", + "Latn-HT": "fr-Latn-HT", + "Latn-HU": "hu-Latn-HU", + "Latn-IC": "es-Latn-IC", + "Latn-ID": "id-Latn-ID", + "Latn-IE": "en-Latn-IE", + "Latn-IL": "en-Latn-IL", + "Latn-IM": "en-Latn-IM", + "Latn-IN": "en-Latn-IN", + "Latn-IO": "en-Latn-IO", + "Latn-IQ": "en-Latn-IQ", + "Latn-IR": "tk-Latn-IR", + "Latn-IS": "is-Latn-IS", + "Latn-IT": "it-Latn-IT", + "Latn-JE": "en-Latn-JE", + "Latn-JM": "en-Latn-JM", + "Latn-JO": "en-Latn-JO", + "Latn-JP": "en-Latn-JP", + "Latn-KE": "en-Latn-KE", + "Latn-KI": "en-Latn-KI", + "Latn-KM": "fr-Latn-KM", + "Latn-KN": "en-Latn-KN", + "Latn-KY": "en-Latn-KY", + "Latn-KZ": "en-Latn-KZ", + "Latn-LB": "en-Latn-LB", + "Latn-LC": "en-Latn-LC", + "Latn-LI": "de-Latn-LI", + "Latn-LK": "en-Latn-LK", + "Latn-LR": "en-Latn-LR", + "Latn-LS": "st-Latn-LS", + "Latn-LT": "lt-Latn-LT", + "Latn-LU": "lb-Latn-LU", + "Latn-LV": "lv-Latn-LV", + "Latn-MA": "fr-Latn-MA", + "Latn-MC": "fr-Latn-MC", + "Latn-MD": "ro-Latn-MD", + "Latn-ME": "hr-Latn-ME", + "Latn-MF": "fr-Latn-MF", + "Latn-MG": "mg-Latn-MG", + "Latn-MH": "en-Latn-MH", + "Latn-MK": "sq-Latn-MK", + "Latn-ML": "fr-Latn-ML", + "Latn-MM": "kac-Latn-MM", + "Latn-MO": "pt-Latn-MO", + "Latn-MP": "en-Latn-MP", + "Latn-MQ": "fr-Latn-MQ", + "Latn-MR": "fr-Latn-MR", + "Latn-MS": "en-Latn-MS", + "Latn-MT": "en-Latn-MT", + "Latn-MU": "en-Latn-MU", + "Latn-MV": "en-Latn-MV", + "Latn-MW": "en-Latn-MW", + "Latn-MX": "es-Latn-MX", + "Latn-MY": "ms-Latn-MY", + "Latn-MZ": "pt-Latn-MZ", + "Latn-NA": "en-Latn-NA", + "Latn-NC": "fr-Latn-NC", + "Latn-NE": "fr-Latn-NE", + "Latn-NF": "en-Latn-NF", + "Latn-NG": "en-Latn-NG", + "Latn-NI": "es-Latn-NI", + "Latn-NL": "nl-Latn-NL", + "Latn-NO": "no-Latn-NO", + "Latn-NP": "en-Latn-NP", + "Latn-NR": "na-Latn-NR", + "Latn-NU": "en-Latn-NU", + "Latn-NZ": "en-Latn-NZ", + "Latn-PA": "es-Latn-PA", + "Latn-PE": "es-Latn-PE", + "Latn-PF": "fr-Latn-PF", + "Latn-PG": "en-Latn-PG", + "Latn-PH": "tl-Latn-PH", + "Latn-PK": "en-Latn-PK", + "Latn-PL": "pl-Latn-PL", + "Latn-PM": "fr-Latn-PM", + "Latn-PN": "en-Latn-PN", + "Latn-PR": "es-Latn-PR", + "Latn-PT": "pt-Latn-PT", + "Latn-PW": "en-Latn-PW", + "Latn-PY": "es-Latn-PY", + "Latn-RE": "fr-Latn-RE", + "Latn-RO": "ro-Latn-RO", + "Latn-RS": "sr-Latn-RS", + "Latn-RU": "krl-Latn-RU", + "Latn-RW": "rw-Latn-RW", + "Latn-SB": "en-Latn-SB", + "Latn-SC": "crs-Latn-SC", + "Latn-SD": "en-Latn-SD", + "Latn-SE": "sv-Latn-SE", + "Latn-SG": "en-Latn-SG", + "Latn-SH": "en-Latn-SH", + "Latn-SI": "sl-Latn-SI", + "Latn-SJ": "no-Latn-SJ", + "Latn-SK": "sk-Latn-SK", + "Latn-SL": "en-Latn-SL", + "Latn-SM": "it-Latn-SM", + "Latn-SN": "fr-Latn-SN", + "Latn-SO": "so-Latn-SO", + "Latn-SR": "nl-Latn-SR", + "Latn-SS": "en-Latn-SS", + "Latn-ST": "pt-Latn-ST", + "Latn-SV": "es-Latn-SV", + "Latn-SX": "en-Latn-SX", + "Latn-SY": "fr-Latn-SY", + "Latn-SZ": "ss-Latn-SZ", + "Latn-TA": "en-Latn-TA", + "Latn-TC": "en-Latn-TC", + "Latn-TD": "fr-Latn-TD", + "Latn-TF": "fr-Latn-TF", + "Latn-TG": "fr-Latn-TG", + "Latn-TH": "en-Latn-TH", + "Latn-TK": "en-Latn-TK", + "Latn-TL": "tet-Latn-TL", + "Latn-TM": "tk-Latn-TM", + "Latn-TN": "fr-Latn-TN", + "Latn-TO": "to-Latn-TO", + "Latn-TR": "tr-Latn-TR", + "Latn-TT": "en-Latn-TT", + "Latn-TV": "en-Latn-TV", + "Latn-TW": "trv-Latn-TW", + "Latn-TZ": "sw-Latn-TZ", + "Latn-UA": "pl-Latn-UA", + "Latn-UG": "en-Latn-UG", + "Latn-UM": "en-Latn-UM", + "Latn-US": "en-Latn-US", + "Latn-UY": "es-Latn-UY", + "Latn-UZ": "uz-Latn-UZ", + "Latn-VA": "it-Latn-VA", + "Latn-VC": "en-Latn-VC", + "Latn-VE": "es-Latn-VE", + "Latn-VG": "en-Latn-VG", + "Latn-VI": "en-Latn-VI", + "Latn-VN": "vi-Latn-VN", + "Latn-VU": "bi-Latn-VU", + "Latn-WF": "fr-Latn-WF", + "Latn-WS": "sm-Latn-WS", + "Latn-XK": "sq-Latn-XK", + "Latn-XX": "zxx-Latn-XX", + "Latn-YE": "en-Latn-YE", + "Latn-YT": "fr-Latn-YT", + "Latn-ZA": "en-Latn-ZA", + "Latn-ZM": "en-Latn-ZM", + "Latn-ZW": "sn-Latn-ZW", + "Lepc": "lep-Lepc-IN", + "Limb": "lif-Limb-IN", + "Lina": "lab-Lina-GR", + "Linb": "grc-Linb-GR", + "Lisu": "lis-Lisu-CN", + "Lyci": "xlc-Lyci-TR", + "Lydi": "xld-Lydi-TR", + "MA": "ar-Arab-MA", + "MC": "fr-Latn-MC", + "MD": "ro-Latn-MD", + "ME": "sr-Latn-ME", + "MF": "fr-Latn-MF", + "MG": "mg-Latn-MG", + "MH": "en-Latn-MH", + "MK": "mk-Cyrl-MK", + "ML": "bm-Latn-ML", + "MM": "my-Mymr-MM", + "MN": "mn-Cyrl-MN", + "MO": "zh-Hant-MO", + "MP": "en-Latn-MP", + "MQ": "fr-Latn-MQ", + "MR": "ar-Arab-MR", + "MS": "en-Latn-MS", + "MT": "mt-Latn-MT", + "MU": "mfe-Latn-MU", + "MV": "dv-Thaa-MV", + "MW": "en-Latn-MW", + "MX": "es-Latn-MX", + "MY": "ms-Latn-MY", + "MZ": "pt-Latn-MZ", + "Mahj": "hi-Mahj-IN", + "Maka": "mak-Maka-ID", + "Mand": "myz-Mand-IR", + "Mani": "xmn-Mani-CN", + "Marc": "bo-Marc-CN", + "Medf": "dmf-Medf-NG", + "Mend": "men-Mend-SL", + "Merc": "xmr-Merc-SD", + "Mero": "xmr-Mero-SD", + "Mlym": "ml-Mlym-IN", + "Modi": "mr-Modi-IN", + "Mong": "mn-Mong-CN", + "Mroo": "mro-Mroo-BD", + "Mtei": "mni-Mtei-IN", + "Mult": "skr-Mult-PK", + "Mymr": "my-Mymr-MM", + "Mymr-IN": "kht-Mymr-IN", + "Mymr-TH": "mnw-Mymr-TH", + "NA": "af-Latn-NA", + "NC": "fr-Latn-NC", + "NE": "ha-Latn-NE", + "NF": "en-Latn-NF", + "NG": "en-Latn-NG", + "NI": "es-Latn-NI", + "NL": "nl-Latn-NL", + "NO": "nb-Latn-NO", + "NP": "ne-Deva-NP", + "NR": "na-Latn-NR", + "NU": "en-Latn-NU", + "NZ": "en-Latn-NZ", + "Nagm": "unr-Nagm-IN", + "Nand": "sa-Nand-IN", + "Narb": "xna-Narb-SA", + "Nbat": "arc-Nbat-JO", + "Newa": "new-Newa-NP", + "Nkoo": "man-Nkoo-GN", + "Nkoo-ML": "bm-Nkoo-ML", + "Nshu": "zhx-Nshu-CN", + "OM": "ar-Arab-OM", + "Ogam": "sga-Ogam-IE", + "Olck": "sat-Olck-IN", + "Onao": "unr-Onao-IN", + "Orkh": "otk-Orkh-MN", + "Orya": "or-Orya-IN", + "Osge": "osa-Osge-US", + "Osma": "so-Osma-SO", + "Ougr": "oui-Ougr-CN", + "PA": "es-Latn-PA", + "PE": "es-Latn-PE", + "PF": "fr-Latn-PF", + "PG": "tpi-Latn-PG", + "PH": "fil-Latn-PH", + "PK": "ur-Arab-PK", + "PL": "pl-Latn-PL", + "PM": "fr-Latn-PM", + "PN": "en-Latn-PN", + "PR": "es-Latn-PR", + "PS": "ar-Arab-PS", + "PT": "pt-Latn-PT", + "PW": "pau-Latn-PW", + "PY": "gn-Latn-PY", + "Palm": "arc-Palm-SY", + "Pauc": "ctd-Pauc-MM", + "Perm": "kv-Perm-RU", + "Phag": "lzh-Phag-CN", + "Phli": "pal-Phli-IR", + "Phlp": "pal-Phlp-CN", + "Phnx": "phn-Phnx-LB", + "Piqd": "tlh-Piqd-XX", + "Piqd-XX": "tlh-Piqd-XX", + "Plrd": "hmd-Plrd-CN", + "Prti": "xpr-Prti-IR", + "QA": "ar-Arab-QA", + "RE": "fr-Latn-RE", + "RO": "ro-Latn-RO", + "RS": "sr-Cyrl-RS", + "RU": "ru-Cyrl-RU", + "RW": "rw-Latn-RW", + "Rjng": "rej-Rjng-ID", + "Rohg": "rhg-Rohg-MM", + "Runr": "non-Runr-SE", + "SA": "ar-Arab-SA", + "SB": "en-Latn-SB", + "SC": "fr-Latn-SC", + "SD": "ar-Arab-SD", + "SE": "sv-Latn-SE", + "SG": "en-Latn-SG", + "SH": "en-Latn-SH", + "SI": "sl-Latn-SI", + "SJ": "nb-Latn-SJ", + "SK": "sk-Latn-SK", + "SL": "kri-Latn-SL", + "SM": "it-Latn-SM", + "SN": "fr-Latn-SN", + "SO": "so-Latn-SO", + "SR": "nl-Latn-SR", + "SS": "ar-Arab-SS", + "ST": "pt-Latn-ST", + "SV": "es-Latn-SV", + "SX": "en-Latn-SX", + "SY": "ar-Arab-SY", + "SZ": "ss-Latn-SZ", + "Samr": "smp-Samr-IL", + "Sarb": "xsa-Sarb-YE", + "Saur": "saz-Saur-IN", + "Sgnw": "ase-Sgnw-US", + "Shaw": "en-Shaw-GB", + "Shrd": "sa-Shrd-IN", + "Sidd": "sa-Sidd-IN", + "Sind": "sd-Sind-IN", + "Sinh": "si-Sinh-LK", + "Sinh-LK": "si-Sinh-LK", + "Sogd": "sog-Sogd-UZ", + "Sogo": "sog-Sogo-UZ", + "Sora": "srb-Sora-IN", + "Soyo": "cmg-Soyo-MN", + "Sund": "su-Sund-ID", + "Sunu": "suz-Sunu-NP", + "Sylo": "syl-Sylo-BD", + "Syrc": "syr-Syrc-IQ", + "TA": "en-Latn-TA", + "TC": "en-Latn-TC", + "TD": "fr-Latn-TD", + "TF": "fr-Latn-TF", + "TG": "fr-Latn-TG", + "TH": "th-Thai-TH", + "TJ": "tg-Cyrl-TJ", + "TK": "tkl-Latn-TK", + "TL": "pt-Latn-TL", + "TM": "tk-Latn-TM", + "TN": "ar-Arab-TN", + "TO": "to-Latn-TO", + "TR": "tr-Latn-TR", + "TT": "en-Latn-TT", + "TV": "tvl-Latn-TV", + "TW": "zh-Hant-TW", + "TZ": "sw-Latn-TZ", + "Tagb": "tbw-Tagb-PH", + "Takr": "doi-Takr-IN", + "Tale": "tdd-Tale-CN", + "Talu": "khb-Talu-CN", + "Taml": "ta-Taml-IN", + "Tang": "txg-Tang-CN", + "Tavt": "blt-Tavt-VN", + "Telu": "te-Telu-IN", + "Tfng": "zgh-Tfng-MA", + "Tglg": "fil-Tglg-PH", + "Thaa": "dv-Thaa-MV", + "Thai": "th-Thai-TH", + "Thai-CN": "lcp-Thai-CN", + "Thai-KH": "kdt-Thai-KH", + "Thai-LA": "kdt-Thai-LA", + "Thai-TH": "th-Thai-TH", + "Tibt": "bo-Tibt-CN", + "Tibt-BT": "dz-Tibt-BT", + "Tirh": "mai-Tirh-IN", + "Tnsa": "nst-Tnsa-IN", + "Todr": "sq-Todr-AL", + "Toto": "txo-Toto-IN", + "Tutg": "sa-Tutg-IN", + "UA": "uk-Cyrl-UA", + "UG": "sw-Latn-UG", + "UM": "en-Latn-UM", + "US": "en-Latn-US", + "UY": "es-Latn-UY", + "UZ": "uz-Latn-UZ", + "Ugar": "uga-Ugar-SY", + "VA": "it-Latn-VA", + "VC": "en-Latn-VC", + "VE": "es-Latn-VE", + "VG": "en-Latn-VG", + "VI": "en-Latn-VI", + "VN": "vi-Latn-VN", + "VU": "bi-Latn-VU", + "Vaii": "vai-Vaii-LR", + "Vith": "sq-Vith-AL", + "WF": "fr-Latn-WF", + "WS": "sm-Latn-WS", + "Wara": "hoc-Wara-IN", + "Wcho": "nnp-Wcho-IN", + "XK": "sq-Latn-XK", + "XX": "zxx-Latn-XX", + "Xpeo": "peo-Xpeo-IR", + "Xsux": "akk-Xsux-IQ", + "YE": "ar-Arab-YE", + "YT": "fr-Latn-YT", + "Yezi": "ku-Yezi-GE", + "Yiii": "ii-Yiii-CN", + "ZA": "en-Latn-ZA", + "ZM": "bem-Latn-ZM", + "ZW": "sn-Latn-ZW", + "Zanb": "cmg-Zanb-MN", + "aa": "aa-Latn-ET", + "aa-DJ": "aa-Latn-DJ", + "aa-ET": "aa-Latn-ET", + "aa-Latn": "aa-Latn-ET", + "aaa": "aaa-Latn-NG", + "aaa-Latn": "aaa-Latn-NG", + "aaa-NG": "aaa-Latn-NG", + "aab": "aab-Latn-NG", + "aab-Latn": "aab-Latn-NG", + "aab-NG": "aab-Latn-NG", + "aac": "aac-Latn-PG", + "aac-Latn": "aac-Latn-PG", + "aac-PG": "aac-Latn-PG", + "aad": "aad-Latn-PG", + "aad-Latn": "aad-Latn-PG", + "aad-PG": "aad-Latn-PG", + "aae": "aae-Latn-IT", + "aae-IT": "aae-Latn-IT", + "aae-Latn": "aae-Latn-IT", + "aaf": "aaf-Mlym-IN", + "aaf-IN": "aaf-Mlym-IN", + "aaf-Mlym": "aaf-Mlym-IN", + "aag": "aag-Latn-PG", + "aag-Latn": "aag-Latn-PG", + "aag-PG": "aag-Latn-PG", + "aah": "aah-Latn-PG", + "aah-Latn": "aah-Latn-PG", + "aah-PG": "aah-Latn-PG", + "aai": "aai-Latn-PG", + "aai-Latn": "aai-Latn-PG", + "aai-PG": "aai-Latn-PG", + "aak": "aak-Latn-PG", + "aak-Latn": "aak-Latn-PG", + "aak-PG": "aak-Latn-PG", + "aal": "aal-Latn-CM", + "aal-CM": "aal-Latn-CM", + "aal-Latn": "aal-Latn-CM", + "aan": "aan-Latn-BR", + "aan-BR": "aan-Latn-BR", + "aan-Latn": "aan-Latn-BR", + "aao": "aao-Arab-DZ", + "aao-Arab": "aao-Arab-DZ", + "aao-DZ": "aao-Arab-DZ", + "aap": "aap-Latn-BR", + "aap-BR": "aap-Latn-BR", + "aap-Latn": "aap-Latn-BR", + "aaq": "aaq-Latn-US", + "aaq-Latn": "aaq-Latn-US", + "aaq-US": "aaq-Latn-US", + "aas": "aas-Latn-TZ", + "aas-Latn": "aas-Latn-TZ", + "aas-TZ": "aas-Latn-TZ", + "aat": "aat-Grek-GR", + "aat-GR": "aat-Grek-GR", + "aat-Grek": "aat-Grek-GR", + "aau": "aau-Latn-PG", + "aau-Latn": "aau-Latn-PG", + "aau-PG": "aau-Latn-PG", + "aaw": "aaw-Latn-PG", + "aaw-Latn": "aaw-Latn-PG", + "aaw-PG": "aaw-Latn-PG", + "aax": "aax-Latn-ID", + "aax-ID": "aax-Latn-ID", + "aax-Latn": "aax-Latn-ID", + "aaz": "aaz-Latn-ID", + "aaz-ID": "aaz-Latn-ID", + "aaz-Latn": "aaz-Latn-ID", + "ab": "ab-Cyrl-GE", + "ab-Cyrl": "ab-Cyrl-GE", + "ab-Cyrl-GE": "ab-Cyrl-GE", + "ab-GE": "ab-Cyrl-GE", + "aba": "aba-Latn-CI", + "aba-CI": "aba-Latn-CI", + "aba-Latn": "aba-Latn-CI", + "abb": "abb-Latn-CM", + "abb-CM": "abb-Latn-CM", + "abb-Latn": "abb-Latn-CM", + "abc": "abc-Latn-PH", + "abc-Latn": "abc-Latn-PH", + "abc-PH": "abc-Latn-PH", + "abd": "abd-Latn-PH", + "abd-Latn": "abd-Latn-PH", + "abd-PH": "abd-Latn-PH", + "abe": "abe-Latn-CA", + "abe-CA": "abe-Latn-CA", + "abe-Latn": "abe-Latn-CA", + "abf": "abf-Latn-MY", + "abf-Latn": "abf-Latn-MY", + "abf-MY": "abf-Latn-MY", + "abg": "abg-Latn-PG", + "abg-Latn": "abg-Latn-PG", + "abg-PG": "abg-Latn-PG", + "abh": "abh-Arab-TJ", + "abh-Arab": "abh-Arab-TJ", + "abh-TJ": "abh-Arab-TJ", + "abi": "abi-Latn-CI", + "abi-CI": "abi-Latn-CI", + "abi-Latn": "abi-Latn-CI", + "abl": "abl-Rjng-ID", + "abl-ID": "abl-Rjng-ID", + "abl-Rjng": "abl-Rjng-ID", + "abm": "abm-Latn-NG", + "abm-Latn": "abm-Latn-NG", + "abm-NG": "abm-Latn-NG", + "abn": "abn-Latn-NG", + "abn-Latn": "abn-Latn-NG", + "abn-NG": "abn-Latn-NG", + "abo": "abo-Latn-NG", + "abo-Latn": "abo-Latn-NG", + "abo-NG": "abo-Latn-NG", + "abp": "abp-Latn-PH", + "abp-Latn": "abp-Latn-PH", + "abp-PH": "abp-Latn-PH", + "abr": "abr-Latn-GH", + "abr-GH": "abr-Latn-GH", + "abr-Latn": "abr-Latn-GH", + "abs": "abs-Latn-ID", + "abs-ID": "abs-Latn-ID", + "abs-Latn": "abs-Latn-ID", + "abt": "abt-Latn-PG", + "abt-Latn": "abt-Latn-PG", + "abt-PG": "abt-Latn-PG", + "abu": "abu-Latn-CI", + "abu-CI": "abu-Latn-CI", + "abu-Latn": "abu-Latn-CI", + "abv": "abv-Arab-BH", + "abv-Arab": "abv-Arab-BH", + "abv-BH": "abv-Arab-BH", + "abw": "abw-Latn-PG", + "abw-Latn": "abw-Latn-PG", + "abw-PG": "abw-Latn-PG", + "abx": "abx-Latn-PH", + "abx-Latn": "abx-Latn-PH", + "abx-PH": "abx-Latn-PH", + "aby": "aby-Latn-PG", + "aby-Latn": "aby-Latn-PG", + "aby-PG": "aby-Latn-PG", + "abz": "abz-Latn-ID", + "abz-ID": "abz-Latn-ID", + "abz-Latn": "abz-Latn-ID", + "aca": "aca-Latn-CO", + "aca-CO": "aca-Latn-CO", + "aca-Latn": "aca-Latn-CO", + "acb": "acb-Latn-NG", + "acb-Latn": "acb-Latn-NG", + "acb-NG": "acb-Latn-NG", + "acd": "acd-Latn-GH", + "acd-GH": "acd-Latn-GH", + "acd-Latn": "acd-Latn-GH", + "ace": "ace-Latn-ID", + "ace-ID": "ace-Latn-ID", + "ace-Latn": "ace-Latn-ID", + "acf": "acf-Latn-LC", + "acf-LC": "acf-Latn-LC", + "acf-Latn": "acf-Latn-LC", + "ach": "ach-Latn-UG", + "ach-Latn": "ach-Latn-UG", + "ach-UG": "ach-Latn-UG", + "acm": "acm-Arab-IQ", + "acm-Arab": "acm-Arab-IQ", + "acm-IQ": "acm-Arab-IQ", + "acn": "acn-Latn-CN", + "acn-CN": "acn-Latn-CN", + "acn-Latn": "acn-Latn-CN", + "acp": "acp-Latn-NG", + "acp-Latn": "acp-Latn-NG", + "acp-NG": "acp-Latn-NG", + "acq": "acq-Arab-YE", + "acq-Arab": "acq-Arab-YE", + "acq-YE": "acq-Arab-YE", + "acr": "acr-Latn-GT", + "acr-GT": "acr-Latn-GT", + "acr-Latn": "acr-Latn-GT", + "acs": "acs-Latn-BR", + "acs-BR": "acs-Latn-BR", + "acs-Latn": "acs-Latn-BR", + "act": "act-Latn-NL", + "act-Latn": "act-Latn-NL", + "act-NL": "act-Latn-NL", + "acu": "acu-Latn-EC", + "acu-EC": "acu-Latn-EC", + "acu-Latn": "acu-Latn-EC", + "acv": "acv-Latn-US", + "acv-Latn": "acv-Latn-US", + "acv-US": "acv-Latn-US", + "acw": "acw-Arab-SA", + "acw-Arab": "acw-Arab-SA", + "acw-SA": "acw-Arab-SA", + "acx": "acx-Arab-OM", + "acx-Arab": "acx-Arab-OM", + "acx-OM": "acx-Arab-OM", + "acy": "acy-Latn-CY", + "acy-CY": "acy-Latn-CY", + "acy-Latn": "acy-Latn-CY", + "acz": "acz-Latn-SD", + "acz-Latn": "acz-Latn-SD", + "acz-SD": "acz-Latn-SD", + "ada": "ada-Latn-GH", + "ada-GH": "ada-Latn-GH", + "ada-Latn": "ada-Latn-GH", + "adb": "adb-Latn-TL", + "adb-Latn": "adb-Latn-TL", + "adb-TL": "adb-Latn-TL", + "add": "add-Latn-CM", + "add-CM": "add-Latn-CM", + "add-Latn": "add-Latn-CM", + "ade": "ade-Latn-TG", + "ade-Latn": "ade-Latn-TG", + "ade-TG": "ade-Latn-TG", + "adf": "adf-Arab-OM", + "adf-Arab": "adf-Arab-OM", + "adf-OM": "adf-Arab-OM", + "adg": "adg-Latn-AU", + "adg-AU": "adg-Latn-AU", + "adg-Latn": "adg-Latn-AU", + "adh": "adh-Latn-UG", + "adh-Latn": "adh-Latn-UG", + "adh-UG": "adh-Latn-UG", + "adi": "adi-Latn-IN", + "adi-IN": "adi-Latn-IN", + "adi-Latn": "adi-Latn-IN", + "adj": "adj-Latn-CI", + "adj-CI": "adj-Latn-CI", + "adj-Latn": "adj-Latn-CI", + "adl": "adl-Latn-IN", + "adl-IN": "adl-Latn-IN", + "adl-Latn": "adl-Latn-IN", + "adn": "adn-Latn-ID", + "adn-ID": "adn-Latn-ID", + "adn-Latn": "adn-Latn-ID", + "ado": "ado-Latn-PG", + "ado-Latn": "ado-Latn-PG", + "ado-PG": "ado-Latn-PG", + "adq": "adq-Latn-GH", + "adq-GH": "adq-Latn-GH", + "adq-Latn": "adq-Latn-GH", + "adr": "adr-Latn-ID", + "adr-ID": "adr-Latn-ID", + "adr-Latn": "adr-Latn-ID", + "adt": "adt-Latn-AU", + "adt-AU": "adt-Latn-AU", + "adt-Latn": "adt-Latn-AU", + "adu": "adu-Latn-NG", + "adu-Latn": "adu-Latn-NG", + "adu-NG": "adu-Latn-NG", + "adw": "adw-Latn-BR", + "adw-BR": "adw-Latn-BR", + "adw-Latn": "adw-Latn-BR", + "adx": "adx-Tibt-CN", + "adx-CN": "adx-Tibt-CN", + "adx-Tibt": "adx-Tibt-CN", + "ady": "ady-Cyrl-RU", + "ady-Cyrl": "ady-Cyrl-RU", + "ady-RU": "ady-Cyrl-RU", + "adz": "adz-Latn-PG", + "adz-Latn": "adz-Latn-PG", + "adz-PG": "adz-Latn-PG", + "ae": "ae-Avst-IR", + "ae-Avst": "ae-Avst-IR", + "ae-IR": "ae-Avst-IR", + "aea": "aea-Latn-AU", + "aea-AU": "aea-Latn-AU", + "aea-Latn": "aea-Latn-AU", + "aeb": "aeb-Arab-TN", + "aeb-Arab": "aeb-Arab-TN", + "aeb-TN": "aeb-Arab-TN", + "aec": "aec-Arab-EG", + "aec-Arab": "aec-Arab-EG", + "aec-EG": "aec-Arab-EG", + "aee": "aee-Arab-AF", + "aee-AF": "aee-Arab-AF", + "aee-Arab": "aee-Arab-AF", + "aek": "aek-Latn-NC", + "aek-Latn": "aek-Latn-NC", + "aek-NC": "aek-Latn-NC", + "ael": "ael-Latn-CM", + "ael-CM": "ael-Latn-CM", + "ael-Latn": "ael-Latn-CM", + "aem": "aem-Latn-VN", + "aem-Latn": "aem-Latn-VN", + "aem-VN": "aem-Latn-VN", + "aeq": "aeq-Arab-PK", + "aeq-Arab": "aeq-Arab-PK", + "aeq-PK": "aeq-Arab-PK", + "aer": "aer-Latn-AU", + "aer-AU": "aer-Latn-AU", + "aer-Latn": "aer-Latn-AU", + "aeu": "aeu-Latn-CN", + "aeu-CN": "aeu-Latn-CN", + "aeu-Latn": "aeu-Latn-CN", + "aew": "aew-Latn-PG", + "aew-Latn": "aew-Latn-PG", + "aew-PG": "aew-Latn-PG", + "aey": "aey-Latn-PG", + "aey-Latn": "aey-Latn-PG", + "aey-PG": "aey-Latn-PG", + "aez": "aez-Latn-PG", + "aez-Latn": "aez-Latn-PG", + "aez-PG": "aez-Latn-PG", + "af": "af-Latn-ZA", + "af-Latn": "af-Latn-ZA", + "af-NA": "af-Latn-NA", + "af-ZA": "af-Latn-ZA", + "afb": "afb-Arab-KW", + "afb-Arab": "afb-Arab-KW", + "afb-KW": "afb-Arab-KW", + "afd": "afd-Latn-PG", + "afd-Latn": "afd-Latn-PG", + "afd-PG": "afd-Latn-PG", + "afe": "afe-Latn-NG", + "afe-Latn": "afe-Latn-NG", + "afe-NG": "afe-Latn-NG", + "afh": "afh-Latn-GH", + "afh-GH": "afh-Latn-GH", + "afh-Latn": "afh-Latn-GH", + "afi": "afi-Latn-PG", + "afi-Latn": "afi-Latn-PG", + "afi-PG": "afi-Latn-PG", + "afk": "afk-Latn-PG", + "afk-Latn": "afk-Latn-PG", + "afk-PG": "afk-Latn-PG", + "afn": "afn-Latn-NG", + "afn-Latn": "afn-Latn-NG", + "afn-NG": "afn-Latn-NG", + "afo": "afo-Latn-NG", + "afo-Latn": "afo-Latn-NG", + "afo-NG": "afo-Latn-NG", + "afp": "afp-Latn-PG", + "afp-Latn": "afp-Latn-PG", + "afp-PG": "afp-Latn-PG", + "afs": "afs-Latn-MX", + "afs-Latn": "afs-Latn-MX", + "afs-MX": "afs-Latn-MX", + "afu": "afu-Latn-GH", + "afu-GH": "afu-Latn-GH", + "afu-Latn": "afu-Latn-GH", + "afz": "afz-Latn-ID", + "afz-ID": "afz-Latn-ID", + "afz-Latn": "afz-Latn-ID", + "aga": "aga-Latn-PE", + "aga-Latn": "aga-Latn-PE", + "aga-PE": "aga-Latn-PE", + "agb": "agb-Latn-NG", + "agb-Latn": "agb-Latn-NG", + "agb-NG": "agb-Latn-NG", + "agc": "agc-Latn-NG", + "agc-Latn": "agc-Latn-NG", + "agc-NG": "agc-Latn-NG", + "agd": "agd-Latn-PG", + "agd-Latn": "agd-Latn-PG", + "agd-PG": "agd-Latn-PG", + "age": "age-Latn-PG", + "age-Latn": "age-Latn-PG", + "age-PG": "age-Latn-PG", + "agf": "agf-Latn-ID", + "agf-ID": "agf-Latn-ID", + "agf-Latn": "agf-Latn-ID", + "agg": "agg-Latn-PG", + "agg-Latn": "agg-Latn-PG", + "agg-PG": "agg-Latn-PG", + "agh": "agh-Latn-CD", + "agh-CD": "agh-Latn-CD", + "agh-Latn": "agh-Latn-CD", + "agi": "agi-Deva-IN", + "agi-Deva": "agi-Deva-IN", + "agi-IN": "agi-Deva-IN", + "agj": "agj-Ethi-ET", + "agj-ET": "agj-Ethi-ET", + "agj-Ethi": "agj-Ethi-ET", + "agk": "agk-Latn-PH", + "agk-Latn": "agk-Latn-PH", + "agk-PH": "agk-Latn-PH", + "agl": "agl-Latn-PG", + "agl-Latn": "agl-Latn-PG", + "agl-PG": "agl-Latn-PG", + "agm": "agm-Latn-PG", + "agm-Latn": "agm-Latn-PG", + "agm-PG": "agm-Latn-PG", + "agn": "agn-Latn-PH", + "agn-Latn": "agn-Latn-PH", + "agn-PH": "agn-Latn-PH", + "ago": "ago-Latn-PG", + "ago-Latn": "ago-Latn-PG", + "ago-PG": "ago-Latn-PG", + "agq": "agq-Latn-CM", + "agq-CM": "agq-Latn-CM", + "agq-Latn": "agq-Latn-CM", + "agr": "agr-Latn-PE", + "agr-Latn": "agr-Latn-PE", + "agr-PE": "agr-Latn-PE", + "ags": "ags-Latn-CM", + "ags-CM": "ags-Latn-CM", + "ags-Latn": "ags-Latn-CM", + "agt": "agt-Latn-PH", + "agt-Latn": "agt-Latn-PH", + "agt-PH": "agt-Latn-PH", + "agu": "agu-Latn-GT", + "agu-GT": "agu-Latn-GT", + "agu-Latn": "agu-Latn-GT", + "agv": "agv-Latn-PH", + "agv-Latn": "agv-Latn-PH", + "agv-PH": "agv-Latn-PH", + "agw": "agw-Latn-SB", + "agw-Latn": "agw-Latn-SB", + "agw-SB": "agw-Latn-SB", + "agx": "agx-Cyrl-RU", + "agx-Cyrl": "agx-Cyrl-RU", + "agx-RU": "agx-Cyrl-RU", + "agy": "agy-Latn-PH", + "agy-Latn": "agy-Latn-PH", + "agy-PH": "agy-Latn-PH", + "agz": "agz-Latn-PH", + "agz-Latn": "agz-Latn-PH", + "agz-PH": "agz-Latn-PH", + "aha": "aha-Latn-GH", + "aha-GH": "aha-Latn-GH", + "aha-Latn": "aha-Latn-GH", + "ahb": "ahb-Latn-VU", + "ahb-Latn": "ahb-Latn-VU", + "ahb-VU": "ahb-Latn-VU", + "ahg": "ahg-Ethi-ET", + "ahg-ET": "ahg-Ethi-ET", + "ahg-Ethi": "ahg-Ethi-ET", + "ahh": "ahh-Latn-ID", + "ahh-ID": "ahh-Latn-ID", + "ahh-Latn": "ahh-Latn-ID", + "ahi": "ahi-Latn-CI", + "ahi-CI": "ahi-Latn-CI", + "ahi-Latn": "ahi-Latn-CI", + "ahk": "ahk-Latn-MM", + "ahk-Latn": "ahk-Latn-MM", + "ahk-MM": "ahk-Latn-MM", + "ahl": "ahl-Latn-TG", + "ahl-Latn": "ahl-Latn-TG", + "ahl-TG": "ahl-Latn-TG", + "ahm": "ahm-Latn-CI", + "ahm-CI": "ahm-Latn-CI", + "ahm-Latn": "ahm-Latn-CI", + "ahn": "ahn-Latn-NG", + "ahn-Latn": "ahn-Latn-NG", + "ahn-NG": "ahn-Latn-NG", + "aho": "aho-Ahom-IN", + "aho-Ahom": "aho-Ahom-IN", + "aho-IN": "aho-Ahom-IN", + "ahp": "ahp-Latn-CI", + "ahp-CI": "ahp-Latn-CI", + "ahp-Latn": "ahp-Latn-CI", + "ahr": "ahr-Deva-IN", + "ahr-Deva": "ahr-Deva-IN", + "ahr-IN": "ahr-Deva-IN", + "ahs": "ahs-Latn-NG", + "ahs-Latn": "ahs-Latn-NG", + "ahs-NG": "ahs-Latn-NG", + "aht": "aht-Latn-US", + "aht-Latn": "aht-Latn-US", + "aht-US": "aht-Latn-US", + "aia": "aia-Latn-SB", + "aia-Latn": "aia-Latn-SB", + "aia-SB": "aia-Latn-SB", + "aib": "aib-Arab-CN", + "aib-Arab": "aib-Arab-CN", + "aib-CN": "aib-Arab-CN", + "aic": "aic-Latn-PG", + "aic-Latn": "aic-Latn-PG", + "aic-PG": "aic-Latn-PG", + "aid": "aid-Latn-AU", + "aid-AU": "aid-Latn-AU", + "aid-Latn": "aid-Latn-AU", + "aie": "aie-Latn-PG", + "aie-Latn": "aie-Latn-PG", + "aie-PG": "aie-Latn-PG", + "aif": "aif-Latn-PG", + "aif-Latn": "aif-Latn-PG", + "aif-PG": "aif-Latn-PG", + "aig": "aig-Latn-AG", + "aig-AG": "aig-Latn-AG", + "aig-Latn": "aig-Latn-AG", + "aii": "aii-Syrc-IQ", + "aii-IQ": "aii-Syrc-IQ", + "aii-Syrc": "aii-Syrc-IQ", + "aij": "aij-Hebr-IL", + "aij-Hebr": "aij-Hebr-IL", + "aij-IL": "aij-Hebr-IL", + "aik": "aik-Latn-NG", + "aik-Latn": "aik-Latn-NG", + "aik-NG": "aik-Latn-NG", + "ail": "ail-Latn-PG", + "ail-Latn": "ail-Latn-PG", + "ail-PG": "ail-Latn-PG", + "aim": "aim-Latn-IN", + "aim-IN": "aim-Latn-IN", + "aim-Latn": "aim-Latn-IN", + "ain": "ain-Kana-JP", + "ain-JP": "ain-Kana-JP", + "ain-Kana": "ain-Kana-JP", + "aio": "aio-Mymr-IN", + "aio-IN": "aio-Mymr-IN", + "aio-Mymr": "aio-Mymr-IN", + "aip": "aip-Latn-ID", + "aip-ID": "aip-Latn-ID", + "aip-Latn": "aip-Latn-ID", + "aiq": "aiq-Arab-AF", + "aiq-AF": "aiq-Arab-AF", + "aiq-Arab": "aiq-Arab-AF", + "air": "air-Latn-ID", + "air-ID": "air-Latn-ID", + "air-Latn": "air-Latn-ID", + "ait": "ait-Latn-BR", + "ait-BR": "ait-Latn-BR", + "ait-Latn": "ait-Latn-BR", + "aiw": "aiw-Latn-ET", + "aiw-ET": "aiw-Latn-ET", + "aiw-Latn": "aiw-Latn-ET", + "aix": "aix-Latn-PG", + "aix-Latn": "aix-Latn-PG", + "aix-PG": "aix-Latn-PG", + "aiy": "aiy-Latn-CF", + "aiy-CF": "aiy-Latn-CF", + "aiy-Latn": "aiy-Latn-CF", + "aja": "aja-Latn-SS", + "aja-Latn": "aja-Latn-SS", + "aja-SS": "aja-Latn-SS", + "ajg": "ajg-Latn-BJ", + "ajg-BJ": "ajg-Latn-BJ", + "ajg-Latn": "ajg-Latn-BJ", + "aji": "aji-Latn-NC", + "aji-Latn": "aji-Latn-NC", + "aji-NC": "aji-Latn-NC", + "ajn": "ajn-Latn-AU", + "ajn-AU": "ajn-Latn-AU", + "ajn-Latn": "ajn-Latn-AU", + "ajw": "ajw-Latn-NG", + "ajw-Latn": "ajw-Latn-NG", + "ajw-NG": "ajw-Latn-NG", + "ajz": "ajz-Latn-IN", + "ajz-IN": "ajz-Latn-IN", + "ajz-Latn": "ajz-Latn-IN", + "ak": "ak-Latn-GH", + "ak-GH": "ak-Latn-GH", + "ak-Latn": "ak-Latn-GH", + "akb": "akb-Latn-ID", + "akb-ID": "akb-Latn-ID", + "akb-Latn": "akb-Latn-ID", + "akc": "akc-Latn-ID", + "akc-ID": "akc-Latn-ID", + "akc-Latn": "akc-Latn-ID", + "akd": "akd-Latn-NG", + "akd-Latn": "akd-Latn-NG", + "akd-NG": "akd-Latn-NG", + "ake": "ake-Latn-GY", + "ake-GY": "ake-Latn-GY", + "ake-Latn": "ake-Latn-GY", + "akf": "akf-Latn-NG", + "akf-Latn": "akf-Latn-NG", + "akf-NG": "akf-Latn-NG", + "akg": "akg-Latn-ID", + "akg-ID": "akg-Latn-ID", + "akg-Latn": "akg-Latn-ID", + "akh": "akh-Latn-PG", + "akh-Latn": "akh-Latn-PG", + "akh-PG": "akh-Latn-PG", + "aki": "aki-Latn-PG", + "aki-Latn": "aki-Latn-PG", + "aki-PG": "aki-Latn-PG", + "akk": "akk-Xsux-IQ", + "akk-IQ": "akk-Xsux-IQ", + "akk-Xsux": "akk-Xsux-IQ", + "akl": "akl-Latn-PH", + "akl-Latn": "akl-Latn-PH", + "akl-PH": "akl-Latn-PH", + "ako": "ako-Latn-SR", + "ako-Latn": "ako-Latn-SR", + "ako-SR": "ako-Latn-SR", + "akp": "akp-Latn-GH", + "akp-GH": "akp-Latn-GH", + "akp-Latn": "akp-Latn-GH", + "akq": "akq-Latn-PG", + "akq-Latn": "akq-Latn-PG", + "akq-PG": "akq-Latn-PG", + "akr": "akr-Latn-VU", + "akr-Latn": "akr-Latn-VU", + "akr-VU": "akr-Latn-VU", + "aks": "aks-Latn-TG", + "aks-Latn": "aks-Latn-TG", + "aks-TG": "aks-Latn-TG", + "akt": "akt-Latn-PG", + "akt-Latn": "akt-Latn-PG", + "akt-PG": "akt-Latn-PG", + "aku": "aku-Latn-CM", + "aku-CM": "aku-Latn-CM", + "aku-Latn": "aku-Latn-CM", + "akv": "akv-Cyrl-RU", + "akv-Cyrl": "akv-Cyrl-RU", + "akv-RU": "akv-Cyrl-RU", + "akw": "akw-Latn-CG", + "akw-CG": "akw-Latn-CG", + "akw-Latn": "akw-Latn-CG", + "akz": "akz-Latn-US", + "akz-Latn": "akz-Latn-US", + "akz-US": "akz-Latn-US", + "ala": "ala-Latn-NG", + "ala-Latn": "ala-Latn-NG", + "ala-NG": "ala-Latn-NG", + "alc": "alc-Latn-CL", + "alc-CL": "alc-Latn-CL", + "alc-Latn": "alc-Latn-CL", + "ald": "ald-Latn-CI", + "ald-CI": "ald-Latn-CI", + "ald-Latn": "ald-Latn-CI", + "ale": "ale-Latn-US", + "ale-Latn": "ale-Latn-US", + "ale-US": "ale-Latn-US", + "alf": "alf-Latn-NG", + "alf-Latn": "alf-Latn-NG", + "alf-NG": "alf-Latn-NG", + "alh": "alh-Latn-AU", + "alh-AU": "alh-Latn-AU", + "alh-Latn": "alh-Latn-AU", + "ali": "ali-Latn-PG", + "ali-Latn": "ali-Latn-PG", + "ali-PG": "ali-Latn-PG", + "alj": "alj-Latn-PH", + "alj-Latn": "alj-Latn-PH", + "alj-PH": "alj-Latn-PH", + "alk": "alk-Laoo-LA", + "alk-LA": "alk-Laoo-LA", + "alk-Laoo": "alk-Laoo-LA", + "all": "all-Mlym-IN", + "all-IN": "all-Mlym-IN", + "all-Mlym": "all-Mlym-IN", + "alm": "alm-Latn-VU", + "alm-Latn": "alm-Latn-VU", + "alm-VU": "alm-Latn-VU", + "aln": "aln-Latn-XK", + "aln-Latn": "aln-Latn-XK", + "aln-XK": "aln-Latn-XK", + "alo": "alo-Latn-ID", + "alo-ID": "alo-Latn-ID", + "alo-Latn": "alo-Latn-ID", + "alp": "alp-Latn-ID", + "alp-ID": "alp-Latn-ID", + "alp-Latn": "alp-Latn-ID", + "alq": "alq-Latn-CA", + "alq-CA": "alq-Latn-CA", + "alq-Latn": "alq-Latn-CA", + "alr": "alr-Cyrl-RU", + "alr-Cyrl": "alr-Cyrl-RU", + "alr-RU": "alr-Cyrl-RU", + "alt": "alt-Cyrl-RU", + "alt-Cyrl": "alt-Cyrl-RU", + "alt-RU": "alt-Cyrl-RU", + "alu": "alu-Latn-SB", + "alu-Latn": "alu-Latn-SB", + "alu-SB": "alu-Latn-SB", + "alw": "alw-Ethi-ET", + "alw-ET": "alw-Ethi-ET", + "alw-Ethi": "alw-Ethi-ET", + "alx": "alx-Latn-PG", + "alx-Latn": "alx-Latn-PG", + "alx-PG": "alx-Latn-PG", + "aly": "aly-Latn-AU", + "aly-AU": "aly-Latn-AU", + "aly-Latn": "aly-Latn-AU", + "alz": "alz-Latn-CD", + "alz-CD": "alz-Latn-CD", + "alz-Latn": "alz-Latn-CD", + "am": "am-Ethi-ET", + "am-ET": "am-Ethi-ET", + "am-Ethi": "am-Ethi-ET", + "am-XX": "am-Ethi-XX", + "ama": "ama-Latn-BR", + "ama-BR": "ama-Latn-BR", + "ama-Latn": "ama-Latn-BR", + "amb": "amb-Latn-NG", + "amb-Latn": "amb-Latn-NG", + "amb-NG": "amb-Latn-NG", + "amc": "amc-Latn-PE", + "amc-Latn": "amc-Latn-PE", + "amc-PE": "amc-Latn-PE", + "ame": "ame-Latn-PE", + "ame-Latn": "ame-Latn-PE", + "ame-PE": "ame-Latn-PE", + "amf": "amf-Latn-ET", + "amf-ET": "amf-Latn-ET", + "amf-Latn": "amf-Latn-ET", + "amg": "amg-Latn-AU", + "amg-AU": "amg-Latn-AU", + "amg-Latn": "amg-Latn-AU", + "ami": "ami-Latn-TW", + "ami-Latn": "ami-Latn-TW", + "ami-TW": "ami-Latn-TW", + "amj": "amj-Latn-TD", + "amj-Latn": "amj-Latn-TD", + "amj-TD": "amj-Latn-TD", + "amk": "amk-Latn-ID", + "amk-ID": "amk-Latn-ID", + "amk-Latn": "amk-Latn-ID", + "amm": "amm-Latn-PG", + "amm-Latn": "amm-Latn-PG", + "amm-PG": "amm-Latn-PG", + "amn": "amn-Latn-PG", + "amn-Latn": "amn-Latn-PG", + "amn-PG": "amn-Latn-PG", + "amo": "amo-Latn-NG", + "amo-Latn": "amo-Latn-NG", + "amo-NG": "amo-Latn-NG", + "amp": "amp-Latn-PG", + "amp-Latn": "amp-Latn-PG", + "amp-PG": "amp-Latn-PG", + "amq": "amq-Latn-ID", + "amq-ID": "amq-Latn-ID", + "amq-Latn": "amq-Latn-ID", + "amr": "amr-Latn-PE", + "amr-Latn": "amr-Latn-PE", + "amr-PE": "amr-Latn-PE", + "ams": "ams-Jpan-JP", + "ams-JP": "ams-Jpan-JP", + "ams-Jpan": "ams-Jpan-JP", + "amt": "amt-Latn-PG", + "amt-Latn": "amt-Latn-PG", + "amt-PG": "amt-Latn-PG", + "amu": "amu-Latn-MX", + "amu-Latn": "amu-Latn-MX", + "amu-MX": "amu-Latn-MX", + "amv": "amv-Latn-ID", + "amv-ID": "amv-Latn-ID", + "amv-Latn": "amv-Latn-ID", + "amw": "amw-Syrc-SY", + "amw-SY": "amw-Syrc-SY", + "amw-Syrc": "amw-Syrc-SY", + "amx": "amx-Latn-AU", + "amx-AU": "amx-Latn-AU", + "amx-Latn": "amx-Latn-AU", + "amy": "amy-Latn-AU", + "amy-AU": "amy-Latn-AU", + "amy-Latn": "amy-Latn-AU", + "amz": "amz-Latn-AU", + "amz-AU": "amz-Latn-AU", + "amz-Latn": "amz-Latn-AU", + "an": "an-Latn-ES", + "an-ES": "an-Latn-ES", + "an-Latn": "an-Latn-ES", + "ana": "ana-Latn-CO", + "ana-CO": "ana-Latn-CO", + "ana-Latn": "ana-Latn-CO", + "anb": "anb-Latn-PE", + "anb-Latn": "anb-Latn-PE", + "anb-PE": "anb-Latn-PE", + "anc": "anc-Latn-NG", + "anc-Latn": "anc-Latn-NG", + "anc-NG": "anc-Latn-NG", + "and": "and-Latn-ID", + "and-ID": "and-Latn-ID", + "and-Latn": "and-Latn-ID", + "ane": "ane-Latn-NC", + "ane-Latn": "ane-Latn-NC", + "ane-NC": "ane-Latn-NC", + "anf": "anf-Latn-GH", + "anf-GH": "anf-Latn-GH", + "anf-Latn": "anf-Latn-GH", + "ang": "ang-Latn-GB", + "ang-GB": "ang-Latn-GB", + "ang-Latn": "ang-Latn-GB", + "anh": "anh-Latn-PG", + "anh-Latn": "anh-Latn-PG", + "anh-PG": "anh-Latn-PG", + "ani": "ani-Cyrl-RU", + "ani-Cyrl": "ani-Cyrl-RU", + "ani-RU": "ani-Cyrl-RU", + "anj": "anj-Latn-PG", + "anj-Latn": "anj-Latn-PG", + "anj-PG": "anj-Latn-PG", + "ank": "ank-Latn-NG", + "ank-Latn": "ank-Latn-NG", + "ank-NG": "ank-Latn-NG", + "anl": "anl-Latn-MM", + "anl-Latn": "anl-Latn-MM", + "anl-MM": "anl-Latn-MM", + "anm": "anm-Latn-IN", + "anm-IN": "anm-Latn-IN", + "anm-Latn": "anm-Latn-IN", + "ann": "ann-Latn-NG", + "ann-Latn": "ann-Latn-NG", + "ann-NG": "ann-Latn-NG", + "ano": "ano-Latn-CO", + "ano-CO": "ano-Latn-CO", + "ano-Latn": "ano-Latn-CO", + "anp": "anp-Deva-IN", + "anp-Deva": "anp-Deva-IN", + "anp-IN": "anp-Deva-IN", + "anq": "anq-Deva-IN", + "anq-Deva": "anq-Deva-IN", + "anq-IN": "anq-Deva-IN", + "anr": "anr-Deva-IN", + "anr-Deva": "anr-Deva-IN", + "anr-IN": "anr-Deva-IN", + "ans": "ans-Latn-CO", + "ans-CO": "ans-Latn-CO", + "ans-Latn": "ans-Latn-CO", + "ant": "ant-Latn-AU", + "ant-AU": "ant-Latn-AU", + "ant-Latn": "ant-Latn-AU", + "anu": "anu-Ethi-ET", + "anu-ET": "anu-Ethi-ET", + "anu-Ethi": "anu-Ethi-ET", + "anv": "anv-Latn-CM", + "anv-CM": "anv-Latn-CM", + "anv-Latn": "anv-Latn-CM", + "anw": "anw-Latn-NG", + "anw-Latn": "anw-Latn-NG", + "anw-NG": "anw-Latn-NG", + "anx": "anx-Latn-PG", + "anx-Latn": "anx-Latn-PG", + "anx-PG": "anx-Latn-PG", + "any": "any-Latn-CI", + "any-CI": "any-Latn-CI", + "any-Latn": "any-Latn-CI", + "anz": "anz-Latn-PG", + "anz-Latn": "anz-Latn-PG", + "anz-PG": "anz-Latn-PG", + "aoa": "aoa-Latn-ST", + "aoa-Latn": "aoa-Latn-ST", + "aoa-ST": "aoa-Latn-ST", + "aob": "aob-Latn-PG", + "aob-Latn": "aob-Latn-PG", + "aob-PG": "aob-Latn-PG", + "aoc": "aoc-Latn-VE", + "aoc-Latn": "aoc-Latn-VE", + "aoc-VE": "aoc-Latn-VE", + "aod": "aod-Latn-PG", + "aod-Latn": "aod-Latn-PG", + "aod-PG": "aod-Latn-PG", + "aoe": "aoe-Latn-PG", + "aoe-Latn": "aoe-Latn-PG", + "aoe-PG": "aoe-Latn-PG", + "aof": "aof-Latn-PG", + "aof-Latn": "aof-Latn-PG", + "aof-PG": "aof-Latn-PG", + "aog": "aog-Latn-PG", + "aog-Latn": "aog-Latn-PG", + "aog-PG": "aog-Latn-PG", + "aoi": "aoi-Latn-AU", + "aoi-AU": "aoi-Latn-AU", + "aoi-Latn": "aoi-Latn-AU", + "aoj": "aoj-Latn-PG", + "aoj-Latn": "aoj-Latn-PG", + "aoj-PG": "aoj-Latn-PG", + "aok": "aok-Latn-NC", + "aok-Latn": "aok-Latn-NC", + "aok-NC": "aok-Latn-NC", + "aol": "aol-Latn-ID", + "aol-ID": "aol-Latn-ID", + "aol-Latn": "aol-Latn-ID", + "aom": "aom-Latn-PG", + "aom-Latn": "aom-Latn-PG", + "aom-PG": "aom-Latn-PG", + "aon": "aon-Latn-PG", + "aon-Latn": "aon-Latn-PG", + "aon-PG": "aon-Latn-PG", + "aor": "aor-Latn-VU", + "aor-Latn": "aor-Latn-VU", + "aor-VU": "aor-Latn-VU", + "aos": "aos-Latn-ID", + "aos-ID": "aos-Latn-ID", + "aos-Latn": "aos-Latn-ID", + "aot": "aot-Beng-BD", + "aot-BD": "aot-Beng-BD", + "aot-Beng": "aot-Beng-BD", + "aox": "aox-Latn-GY", + "aox-GY": "aox-Latn-GY", + "aox-Latn": "aox-Latn-GY", + "aoz": "aoz-Latn-ID", + "aoz-ID": "aoz-Latn-ID", + "aoz-Latn": "aoz-Latn-ID", + "apb": "apb-Latn-SB", + "apb-Latn": "apb-Latn-SB", + "apb-SB": "apb-Latn-SB", + "apc": "apc-Arab-SY", + "apc-Arab": "apc-Arab-SY", + "apc-Arab-TR": "apc-Arab-TR", + "apc-SY": "apc-Arab-SY", + "apd": "apd-Arab-TG", + "apd-Arab": "apd-Arab-TG", + "apd-Arab-TG": "apd-Arab-TG", + "apd-TG": "apd-Arab-TG", + "ape": "ape-Latn-PG", + "ape-Latn": "ape-Latn-PG", + "ape-PG": "ape-Latn-PG", + "apf": "apf-Latn-PH", + "apf-Latn": "apf-Latn-PH", + "apf-PH": "apf-Latn-PH", + "apg": "apg-Latn-ID", + "apg-ID": "apg-Latn-ID", + "apg-Latn": "apg-Latn-ID", + "aph": "aph-Deva-NP", + "aph-Deva": "aph-Deva-NP", + "aph-NP": "aph-Deva-NP", + "api": "api-Latn-BR", + "api-BR": "api-Latn-BR", + "api-Latn": "api-Latn-BR", + "apj": "apj-Latn-US", + "apj-Latn": "apj-Latn-US", + "apj-US": "apj-Latn-US", + "apk": "apk-Latn-US", + "apk-Latn": "apk-Latn-US", + "apk-US": "apk-Latn-US", + "apl": "apl-Latn-US", + "apl-Latn": "apl-Latn-US", + "apl-US": "apl-Latn-US", + "apm": "apm-Latn-US", + "apm-Latn": "apm-Latn-US", + "apm-US": "apm-Latn-US", + "apn": "apn-Latn-BR", + "apn-BR": "apn-Latn-BR", + "apn-Latn": "apn-Latn-BR", + "apo": "apo-Latn-PG", + "apo-Latn": "apo-Latn-PG", + "apo-PG": "apo-Latn-PG", + "app": "app-Latn-VU", + "app-Latn": "app-Latn-VU", + "app-VU": "app-Latn-VU", + "apr": "apr-Latn-PG", + "apr-Latn": "apr-Latn-PG", + "apr-PG": "apr-Latn-PG", + "aps": "aps-Latn-PG", + "aps-Latn": "aps-Latn-PG", + "aps-PG": "aps-Latn-PG", + "apt": "apt-Latn-IN", + "apt-IN": "apt-Latn-IN", + "apt-Latn": "apt-Latn-IN", + "apu": "apu-Latn-BR", + "apu-BR": "apu-Latn-BR", + "apu-Latn": "apu-Latn-BR", + "apv": "apv-Latn-BR", + "apv-BR": "apv-Latn-BR", + "apv-Latn": "apv-Latn-BR", + "apw": "apw-Latn-US", + "apw-Latn": "apw-Latn-US", + "apw-US": "apw-Latn-US", + "apx": "apx-Latn-ID", + "apx-ID": "apx-Latn-ID", + "apx-Latn": "apx-Latn-ID", + "apy": "apy-Latn-BR", + "apy-BR": "apy-Latn-BR", + "apy-Latn": "apy-Latn-BR", + "apz": "apz-Latn-PG", + "apz-Latn": "apz-Latn-PG", + "apz-PG": "apz-Latn-PG", + "aqc": "aqc-Cyrl-RU", + "aqc-Cyrl": "aqc-Cyrl-RU", + "aqc-RU": "aqc-Cyrl-RU", + "aqd": "aqd-Latn-ML", + "aqd-Latn": "aqd-Latn-ML", + "aqd-ML": "aqd-Latn-ML", + "aqg": "aqg-Latn-NG", + "aqg-Latn": "aqg-Latn-NG", + "aqg-NG": "aqg-Latn-NG", + "aqk": "aqk-Latn-NG", + "aqk-Latn": "aqk-Latn-NG", + "aqk-NG": "aqk-Latn-NG", + "aqm": "aqm-Latn-ID", + "aqm-ID": "aqm-Latn-ID", + "aqm-Latn": "aqm-Latn-ID", + "aqn": "aqn-Latn-PH", + "aqn-Latn": "aqn-Latn-PH", + "aqn-PH": "aqn-Latn-PH", + "aqr": "aqr-Latn-NC", + "aqr-Latn": "aqr-Latn-NC", + "aqr-NC": "aqr-Latn-NC", + "aqt": "aqt-Latn-PY", + "aqt-Latn": "aqt-Latn-PY", + "aqt-PY": "aqt-Latn-PY", + "aqz": "aqz-Latn-BR", + "aqz-BR": "aqz-Latn-BR", + "aqz-Latn": "aqz-Latn-BR", + "ar": "ar-Arab-EG", + "ar-AE": "ar-Arab-AE", + "ar-Arab": "ar-Arab-EG", + "ar-BH": "ar-Arab-BH", + "ar-DJ": "ar-Arab-DJ", + "ar-DZ": "ar-Arab-DZ", + "ar-EG": "ar-Arab-EG", + "ar-EH": "ar-Arab-EH", + "ar-Hebr": "ar-Hebr-IL", + "ar-IL": "ar-Hebr-IL", + "ar-IQ": "ar-Arab-IQ", + "ar-JO": "ar-Arab-JO", + "ar-KM": "ar-Arab-KM", + "ar-KW": "ar-Arab-KW", + "ar-LB": "ar-Arab-LB", + "ar-LY": "ar-Arab-LY", + "ar-MA": "ar-Arab-MA", + "ar-MR": "ar-Arab-MR", + "ar-OM": "ar-Arab-OM", + "ar-PS": "ar-Arab-PS", + "ar-QA": "ar-Arab-QA", + "ar-SA": "ar-Arab-SA", + "ar-SD": "ar-Arab-SD", + "ar-SS": "ar-Arab-SS", + "ar-SY": "ar-Arab-SY", + "ar-TN": "ar-Arab-TN", + "ar-YE": "ar-Arab-YE", + "arc": "arc-Armi-IR", + "arc-Armi": "arc-Armi-IR", + "arc-Elym": "arc-Elym-IR", + "arc-Hatr": "arc-Hatr-IQ", + "arc-IR": "arc-Armi-IR", + "arc-Nbat": "arc-Nbat-JO", + "arc-Palm": "arc-Palm-SY", + "ard": "ard-Latn-AU", + "ard-AU": "ard-Latn-AU", + "ard-Latn": "ard-Latn-AU", + "are": "are-Latn-AU", + "are-AU": "are-Latn-AU", + "are-Latn": "are-Latn-AU", + "arh": "arh-Latn-CO", + "arh-CO": "arh-Latn-CO", + "arh-Latn": "arh-Latn-CO", + "ari": "ari-Latn-US", + "ari-Latn": "ari-Latn-US", + "ari-US": "ari-Latn-US", + "arj": "arj-Latn-BR", + "arj-BR": "arj-Latn-BR", + "arj-Latn": "arj-Latn-BR", + "ark": "ark-Latn-BR", + "ark-BR": "ark-Latn-BR", + "ark-Latn": "ark-Latn-BR", + "arl": "arl-Latn-PE", + "arl-Latn": "arl-Latn-PE", + "arl-PE": "arl-Latn-PE", + "arn": "arn-Latn-CL", + "arn-CL": "arn-Latn-CL", + "arn-Latn": "arn-Latn-CL", + "aro": "aro-Latn-BO", + "aro-BO": "aro-Latn-BO", + "aro-Latn": "aro-Latn-BO", + "arp": "arp-Latn-US", + "arp-Latn": "arp-Latn-US", + "arp-US": "arp-Latn-US", + "arq": "arq-Arab-DZ", + "arq-Arab": "arq-Arab-DZ", + "arq-DZ": "arq-Arab-DZ", + "arr": "arr-Latn-BR", + "arr-BR": "arr-Latn-BR", + "arr-Latn": "arr-Latn-BR", + "ars": "ars-Arab-SA", + "ars-Arab": "ars-Arab-SA", + "ars-SA": "ars-Arab-SA", + "aru": "aru-Latn-BR", + "aru-BR": "aru-Latn-BR", + "aru-Latn": "aru-Latn-BR", + "arw": "arw-Latn-SR", + "arw-Latn": "arw-Latn-SR", + "arw-SR": "arw-Latn-SR", + "arx": "arx-Latn-BR", + "arx-BR": "arx-Latn-BR", + "arx-Latn": "arx-Latn-BR", + "ary": "ary-Arab-MA", + "ary-Arab": "ary-Arab-MA", + "ary-MA": "ary-Arab-MA", + "arz": "arz-Arab-EG", + "arz-Arab": "arz-Arab-EG", + "arz-EG": "arz-Arab-EG", + "as": "as-Beng-IN", + "as-Beng": "as-Beng-IN", + "as-IN": "as-Beng-IN", + "as-XX": "as-Beng-XX", + "asa": "asa-Latn-TZ", + "asa-Latn": "asa-Latn-TZ", + "asa-TZ": "asa-Latn-TZ", + "asb": "asb-Latn-CA", + "asb-CA": "asb-Latn-CA", + "asb-Latn": "asb-Latn-CA", + "asc": "asc-Latn-ID", + "asc-ID": "asc-Latn-ID", + "asc-Latn": "asc-Latn-ID", + "ase": "ase-Sgnw-US", + "ase-Sgnw": "ase-Sgnw-US", + "ase-US": "ase-Sgnw-US", + "asg": "asg-Latn-NG", + "asg-Latn": "asg-Latn-NG", + "asg-NG": "asg-Latn-NG", + "ash": "ash-Latn-PE", + "ash-Latn": "ash-Latn-PE", + "ash-PE": "ash-Latn-PE", + "asi": "asi-Latn-ID", + "asi-ID": "asi-Latn-ID", + "asi-Latn": "asi-Latn-ID", + "asj": "asj-Latn-CM", + "asj-CM": "asj-Latn-CM", + "asj-Latn": "asj-Latn-CM", + "ask": "ask-Arab-AF", + "ask-AF": "ask-Arab-AF", + "ask-Arab": "ask-Arab-AF", + "asl": "asl-Latn-ID", + "asl-ID": "asl-Latn-ID", + "asl-Latn": "asl-Latn-ID", + "asn": "asn-Latn-BR", + "asn-BR": "asn-Latn-BR", + "asn-Latn": "asn-Latn-BR", + "aso": "aso-Latn-PG", + "aso-Latn": "aso-Latn-PG", + "aso-PG": "aso-Latn-PG", + "asr": "asr-Deva-IN", + "asr-Deva": "asr-Deva-IN", + "asr-IN": "asr-Deva-IN", + "ass": "ass-Latn-CM", + "ass-CM": "ass-Latn-CM", + "ass-Latn": "ass-Latn-CM", + "ast": "ast-Latn-ES", + "ast-ES": "ast-Latn-ES", + "ast-Latn": "ast-Latn-ES", + "asu": "asu-Latn-BR", + "asu-BR": "asu-Latn-BR", + "asu-Latn": "asu-Latn-BR", + "asv": "asv-Latn-CD", + "asv-CD": "asv-Latn-CD", + "asv-Latn": "asv-Latn-CD", + "asx": "asx-Latn-PG", + "asx-Latn": "asx-Latn-PG", + "asx-PG": "asx-Latn-PG", + "asy": "asy-Latn-ID", + "asy-ID": "asy-Latn-ID", + "asy-Latn": "asy-Latn-ID", + "asz": "asz-Latn-ID", + "asz-ID": "asz-Latn-ID", + "asz-Latn": "asz-Latn-ID", + "ata": "ata-Latn-PG", + "ata-Latn": "ata-Latn-PG", + "ata-PG": "ata-Latn-PG", + "atb": "atb-Latn-CN", + "atb-CN": "atb-Latn-CN", + "atb-Latn": "atb-Latn-CN", + "atc": "atc-Latn-PE", + "atc-Latn": "atc-Latn-PE", + "atc-PE": "atc-Latn-PE", + "atd": "atd-Latn-PH", + "atd-Latn": "atd-Latn-PH", + "atd-PH": "atd-Latn-PH", + "ate": "ate-Latn-PG", + "ate-Latn": "ate-Latn-PG", + "ate-PG": "ate-Latn-PG", + "atg": "atg-Latn-NG", + "atg-Latn": "atg-Latn-NG", + "atg-NG": "atg-Latn-NG", + "ati": "ati-Latn-CI", + "ati-CI": "ati-Latn-CI", + "ati-Latn": "ati-Latn-CI", + "atj": "atj-Latn-CA", + "atj-CA": "atj-Latn-CA", + "atj-Latn": "atj-Latn-CA", + "atk": "atk-Latn-PH", + "atk-Latn": "atk-Latn-PH", + "atk-PH": "atk-Latn-PH", + "atl": "atl-Latn-PH", + "atl-Latn": "atl-Latn-PH", + "atl-PH": "atl-Latn-PH", + "atm": "atm-Latn-PH", + "atm-Latn": "atm-Latn-PH", + "atm-PH": "atm-Latn-PH", + "atn": "atn-Arab-IR", + "atn-Arab": "atn-Arab-IR", + "atn-IR": "atn-Arab-IR", + "ato": "ato-Latn-CM", + "ato-CM": "ato-Latn-CM", + "ato-Latn": "ato-Latn-CM", + "atp": "atp-Latn-PH", + "atp-Latn": "atp-Latn-PH", + "atp-PH": "atp-Latn-PH", + "atq": "atq-Latn-ID", + "atq-ID": "atq-Latn-ID", + "atq-Latn": "atq-Latn-ID", + "atr": "atr-Latn-BR", + "atr-BR": "atr-Latn-BR", + "atr-Latn": "atr-Latn-BR", + "ats": "ats-Latn-US", + "ats-Latn": "ats-Latn-US", + "ats-US": "ats-Latn-US", + "att": "att-Latn-PH", + "att-Latn": "att-Latn-PH", + "att-PH": "att-Latn-PH", + "atu": "atu-Latn-SS", + "atu-Latn": "atu-Latn-SS", + "atu-SS": "atu-Latn-SS", + "atv": "atv-Cyrl-RU", + "atv-Cyrl": "atv-Cyrl-RU", + "atv-RU": "atv-Cyrl-RU", + "atw": "atw-Latn-US", + "atw-Latn": "atw-Latn-US", + "atw-US": "atw-Latn-US", + "atx": "atx-Latn-BR", + "atx-BR": "atx-Latn-BR", + "atx-Latn": "atx-Latn-BR", + "aty": "aty-Latn-VU", + "aty-Latn": "aty-Latn-VU", + "aty-VU": "aty-Latn-VU", + "atz": "atz-Latn-PH", + "atz-Latn": "atz-Latn-PH", + "atz-PH": "atz-Latn-PH", + "aua": "aua-Latn-SB", + "aua-Latn": "aua-Latn-SB", + "aua-SB": "aua-Latn-SB", + "auc": "auc-Latn-EC", + "auc-EC": "auc-Latn-EC", + "auc-Latn": "auc-Latn-EC", + "aud": "aud-Latn-SB", + "aud-Latn": "aud-Latn-SB", + "aud-SB": "aud-Latn-SB", + "aug": "aug-Latn-BJ", + "aug-BJ": "aug-Latn-BJ", + "aug-Latn": "aug-Latn-BJ", + "auh": "auh-Latn-ZM", + "auh-Latn": "auh-Latn-ZM", + "auh-ZM": "auh-Latn-ZM", + "aui": "aui-Latn-PG", + "aui-Latn": "aui-Latn-PG", + "aui-PG": "aui-Latn-PG", + "auj": "auj-Arab-LY", + "auj-Arab": "auj-Arab-LY", + "auj-LY": "auj-Arab-LY", + "auk": "auk-Latn-PG", + "auk-Latn": "auk-Latn-PG", + "auk-PG": "auk-Latn-PG", + "aul": "aul-Latn-VU", + "aul-Latn": "aul-Latn-VU", + "aul-VU": "aul-Latn-VU", + "aum": "aum-Latn-NG", + "aum-Latn": "aum-Latn-NG", + "aum-NG": "aum-Latn-NG", + "aun": "aun-Latn-PG", + "aun-Latn": "aun-Latn-PG", + "aun-PG": "aun-Latn-PG", + "auo": "auo-Latn-NG", + "auo-Latn": "auo-Latn-NG", + "auo-NG": "auo-Latn-NG", + "aup": "aup-Latn-PG", + "aup-Latn": "aup-Latn-PG", + "aup-PG": "aup-Latn-PG", + "auq": "auq-Latn-ID", + "auq-ID": "auq-Latn-ID", + "auq-Latn": "auq-Latn-ID", + "aur": "aur-Latn-PG", + "aur-Latn": "aur-Latn-PG", + "aur-PG": "aur-Latn-PG", + "aut": "aut-Latn-PF", + "aut-Latn": "aut-Latn-PF", + "aut-PF": "aut-Latn-PF", + "auu": "auu-Latn-ID", + "auu-ID": "auu-Latn-ID", + "auu-Latn": "auu-Latn-ID", + "auw": "auw-Latn-ID", + "auw-ID": "auw-Latn-ID", + "auw-Latn": "auw-Latn-ID", + "auy": "auy-Latn-PG", + "auy-Latn": "auy-Latn-PG", + "auy-PG": "auy-Latn-PG", + "auz": "auz-Arab-UZ", + "auz-Arab": "auz-Arab-UZ", + "auz-UZ": "auz-Arab-UZ", + "av": "av-Cyrl-RU", + "av-Cyrl": "av-Cyrl-RU", + "av-RU": "av-Cyrl-RU", + "avb": "avb-Latn-PG", + "avb-Latn": "avb-Latn-PG", + "avb-PG": "avb-Latn-PG", + "avd": "avd-Arab-IR", + "avd-Arab": "avd-Arab-IR", + "avd-IR": "avd-Arab-IR", + "avi": "avi-Latn-CI", + "avi-CI": "avi-Latn-CI", + "avi-Latn": "avi-Latn-CI", + "avk": "avk-Latn-001", + "avk-001": "avk-Latn-001", + "avk-Latn": "avk-Latn-001", + "avl": "avl-Arab-EG", + "avl-Arab": "avl-Arab-EG", + "avl-EG": "avl-Arab-EG", + "avm": "avm-Latn-AU", + "avm-AU": "avm-Latn-AU", + "avm-Latn": "avm-Latn-AU", + "avn": "avn-Latn-GH", + "avn-GH": "avn-Latn-GH", + "avn-Latn": "avn-Latn-GH", + "avo": "avo-Latn-BR", + "avo-BR": "avo-Latn-BR", + "avo-Latn": "avo-Latn-BR", + "avs": "avs-Latn-PE", + "avs-Latn": "avs-Latn-PE", + "avs-PE": "avs-Latn-PE", + "avt": "avt-Latn-PG", + "avt-Latn": "avt-Latn-PG", + "avt-PG": "avt-Latn-PG", + "avu": "avu-Latn-SS", + "avu-Latn": "avu-Latn-SS", + "avu-SS": "avu-Latn-SS", + "avv": "avv-Latn-BR", + "avv-BR": "avv-Latn-BR", + "avv-Latn": "avv-Latn-BR", + "awa": "awa-Deva-IN", + "awa-Deva": "awa-Deva-IN", + "awa-IN": "awa-Deva-IN", + "awb": "awb-Latn-PG", + "awb-Latn": "awb-Latn-PG", + "awb-PG": "awb-Latn-PG", + "awc": "awc-Latn-NG", + "awc-Latn": "awc-Latn-NG", + "awc-NG": "awc-Latn-NG", + "awe": "awe-Latn-BR", + "awe-BR": "awe-Latn-BR", + "awe-Latn": "awe-Latn-BR", + "awg": "awg-Latn-AU", + "awg-AU": "awg-Latn-AU", + "awg-Latn": "awg-Latn-AU", + "awh": "awh-Latn-ID", + "awh-ID": "awh-Latn-ID", + "awh-Latn": "awh-Latn-ID", + "awi": "awi-Latn-PG", + "awi-Latn": "awi-Latn-PG", + "awi-PG": "awi-Latn-PG", + "awk": "awk-Latn-AU", + "awk-AU": "awk-Latn-AU", + "awk-Latn": "awk-Latn-AU", + "awm": "awm-Latn-PG", + "awm-Latn": "awm-Latn-PG", + "awm-PG": "awm-Latn-PG", + "awn": "awn-Ethi-ET", + "awn-ET": "awn-Ethi-ET", + "awn-Ethi": "awn-Ethi-ET", + "awo": "awo-Latn-NG", + "awo-Latn": "awo-Latn-NG", + "awo-NG": "awo-Latn-NG", + "awr": "awr-Latn-ID", + "awr-ID": "awr-Latn-ID", + "awr-Latn": "awr-Latn-ID", + "aws": "aws-Latn-ID", + "aws-ID": "aws-Latn-ID", + "aws-Latn": "aws-Latn-ID", + "awt": "awt-Latn-BR", + "awt-BR": "awt-Latn-BR", + "awt-Latn": "awt-Latn-BR", + "awu": "awu-Latn-ID", + "awu-ID": "awu-Latn-ID", + "awu-Latn": "awu-Latn-ID", + "awv": "awv-Latn-ID", + "awv-ID": "awv-Latn-ID", + "awv-Latn": "awv-Latn-ID", + "aww": "aww-Latn-PG", + "aww-Latn": "aww-Latn-PG", + "aww-PG": "aww-Latn-PG", + "awx": "awx-Latn-PG", + "awx-Latn": "awx-Latn-PG", + "awx-PG": "awx-Latn-PG", + "awy": "awy-Latn-ID", + "awy-ID": "awy-Latn-ID", + "awy-Latn": "awy-Latn-ID", + "axb": "axb-Latn-AR", + "axb-AR": "axb-Latn-AR", + "axb-Latn": "axb-Latn-AR", + "axe": "axe-Latn-AU", + "axe-AU": "axe-Latn-AU", + "axe-Latn": "axe-Latn-AU", + "axg": "axg-Latn-BR", + "axg-BR": "axg-Latn-BR", + "axg-Latn": "axg-Latn-BR", + "axk": "axk-Latn-CF", + "axk-CF": "axk-Latn-CF", + "axk-Latn": "axk-Latn-CF", + "axl": "axl-Latn-AU", + "axl-AU": "axl-Latn-AU", + "axl-Latn": "axl-Latn-AU", + "axm": "axm-Armn-AM", + "axm-AM": "axm-Armn-AM", + "axm-Armn": "axm-Armn-AM", + "axx": "axx-Latn-NC", + "axx-Latn": "axx-Latn-NC", + "axx-NC": "axx-Latn-NC", + "ay": "ay-Latn-BO", + "ay-BO": "ay-Latn-BO", + "ay-Latn": "ay-Latn-BO", + "aya": "aya-Latn-PG", + "aya-Latn": "aya-Latn-PG", + "aya-PG": "aya-Latn-PG", + "ayb": "ayb-Latn-BJ", + "ayb-BJ": "ayb-Latn-BJ", + "ayb-Latn": "ayb-Latn-BJ", + "ayc": "ayc-Latn-PE", + "ayc-Latn": "ayc-Latn-PE", + "ayc-PE": "ayc-Latn-PE", + "ayd": "ayd-Latn-AU", + "ayd-AU": "ayd-Latn-AU", + "ayd-Latn": "ayd-Latn-AU", + "aye": "aye-Latn-NG", + "aye-Latn": "aye-Latn-NG", + "aye-NG": "aye-Latn-NG", + "ayg": "ayg-Latn-TG", + "ayg-Latn": "ayg-Latn-TG", + "ayg-TG": "ayg-Latn-TG", + "ayh": "ayh-Arab-YE", + "ayh-Arab": "ayh-Arab-YE", + "ayh-YE": "ayh-Arab-YE", + "ayi": "ayi-Latn-NG", + "ayi-Latn": "ayi-Latn-NG", + "ayi-NG": "ayi-Latn-NG", + "ayk": "ayk-Latn-NG", + "ayk-Latn": "ayk-Latn-NG", + "ayk-NG": "ayk-Latn-NG", + "ayl": "ayl-Arab-LY", + "ayl-Arab": "ayl-Arab-LY", + "ayl-LY": "ayl-Arab-LY", + "ayn": "ayn-Arab-YE", + "ayn-Arab": "ayn-Arab-YE", + "ayn-YE": "ayn-Arab-YE", + "ayo": "ayo-Latn-PY", + "ayo-Latn": "ayo-Latn-PY", + "ayo-PY": "ayo-Latn-PY", + "ayp": "ayp-Arab-IQ", + "ayp-Arab": "ayp-Arab-IQ", + "ayp-IQ": "ayp-Arab-IQ", + "ayq": "ayq-Latn-PG", + "ayq-Latn": "ayq-Latn-PG", + "ayq-PG": "ayq-Latn-PG", + "ays": "ays-Latn-PH", + "ays-Latn": "ays-Latn-PH", + "ays-PH": "ays-Latn-PH", + "ayt": "ayt-Latn-PH", + "ayt-Latn": "ayt-Latn-PH", + "ayt-PH": "ayt-Latn-PH", + "ayu": "ayu-Latn-NG", + "ayu-Latn": "ayu-Latn-NG", + "ayu-NG": "ayu-Latn-NG", + "ayz": "ayz-Latn-ID", + "ayz-ID": "ayz-Latn-ID", + "ayz-Latn": "ayz-Latn-ID", + "az": "az-Latn-AZ", + "az-AZ": "az-Latn-AZ", + "az-Arab": "az-Arab-IR", + "az-Cyrl-AZ": "az-Cyrl-AZ", + "az-IQ": "az-Arab-IQ", + "az-IR": "az-Arab-IR", + "az-Latn": "az-Latn-AZ", + "az-RU": "az-Cyrl-RU", + "azb": "azb-Arab-IR", + "azb-Arab": "azb-Arab-IR", + "azb-IR": "azb-Arab-IR", + "azd": "azd-Latn-MX", + "azd-Latn": "azd-Latn-MX", + "azd-MX": "azd-Latn-MX", + "azg": "azg-Latn-MX", + "azg-Latn": "azg-Latn-MX", + "azg-MX": "azg-Latn-MX", + "azm": "azm-Latn-MX", + "azm-Latn": "azm-Latn-MX", + "azm-MX": "azm-Latn-MX", + "azn": "azn-Latn-MX", + "azn-Latn": "azn-Latn-MX", + "azn-MX": "azn-Latn-MX", + "azo": "azo-Latn-CM", + "azo-CM": "azo-Latn-CM", + "azo-Latn": "azo-Latn-CM", + "azt": "azt-Latn-PH", + "azt-Latn": "azt-Latn-PH", + "azt-PH": "azt-Latn-PH", + "azz": "azz-Latn-MX", + "azz-Latn": "azz-Latn-MX", + "azz-MX": "azz-Latn-MX", + "ba": "ba-Cyrl-RU", + "ba-Cyrl": "ba-Cyrl-RU", + "ba-RU": "ba-Cyrl-RU", + "baa": "baa-Latn-SB", + "baa-Latn": "baa-Latn-SB", + "baa-SB": "baa-Latn-SB", + "bab": "bab-Latn-GW", + "bab-GW": "bab-Latn-GW", + "bab-Latn": "bab-Latn-GW", + "bac": "bac-Latn-ID", + "bac-ID": "bac-Latn-ID", + "bac-Latn": "bac-Latn-ID", + "bae": "bae-Latn-VE", + "bae-Latn": "bae-Latn-VE", + "bae-VE": "bae-Latn-VE", + "baf": "baf-Latn-CM", + "baf-CM": "baf-Latn-CM", + "baf-Latn": "baf-Latn-CM", + "bag": "bag-Latn-CM", + "bag-CM": "bag-Latn-CM", + "bag-Latn": "bag-Latn-CM", + "bah": "bah-Latn-BS", + "bah-BS": "bah-Latn-BS", + "bah-Latn": "bah-Latn-BS", + "baj": "baj-Latn-ID", + "baj-ID": "baj-Latn-ID", + "baj-Latn": "baj-Latn-ID", + "bal": "bal-Arab-PK", + "bal-Arab": "bal-Arab-PK", + "bal-PK": "bal-Arab-PK", + "ban": "ban-Latn-ID", + "ban-Bali": "ban-Bali-ID", + "ban-ID": "ban-Latn-ID", + "ban-Latn": "ban-Latn-ID", + "bao": "bao-Latn-CO", + "bao-CO": "bao-Latn-CO", + "bao-Latn": "bao-Latn-CO", + "bap": "bap-Deva-NP", + "bap-Deva": "bap-Deva-NP", + "bap-Krai": "bap-Krai-IN", + "bap-NP": "bap-Deva-NP", + "bar": "bar-Latn-AT", + "bar-AT": "bar-Latn-AT", + "bar-Latn": "bar-Latn-AT", + "bas": "bas-Latn-CM", + "bas-CM": "bas-Latn-CM", + "bas-Latn": "bas-Latn-CM", + "bau": "bau-Latn-NG", + "bau-Latn": "bau-Latn-NG", + "bau-NG": "bau-Latn-NG", + "bav": "bav-Latn-CM", + "bav-CM": "bav-Latn-CM", + "bav-Latn": "bav-Latn-CM", + "baw": "baw-Latn-CM", + "baw-CM": "baw-Latn-CM", + "baw-Latn": "baw-Latn-CM", + "bax": "bax-Bamu-CM", + "bax-Bamu": "bax-Bamu-CM", + "bax-CM": "bax-Bamu-CM", + "bay": "bay-Latn-ID", + "bay-ID": "bay-Latn-ID", + "bay-Latn": "bay-Latn-ID", + "bba": "bba-Latn-BJ", + "bba-BJ": "bba-Latn-BJ", + "bba-Latn": "bba-Latn-BJ", + "bbb": "bbb-Latn-PG", + "bbb-Latn": "bbb-Latn-PG", + "bbb-PG": "bbb-Latn-PG", + "bbc": "bbc-Latn-ID", + "bbc-Batk": "bbc-Batk-ID", + "bbc-ID": "bbc-Latn-ID", + "bbc-Latn": "bbc-Latn-ID", + "bbd": "bbd-Latn-PG", + "bbd-Latn": "bbd-Latn-PG", + "bbd-PG": "bbd-Latn-PG", + "bbe": "bbe-Latn-CD", + "bbe-CD": "bbe-Latn-CD", + "bbe-Latn": "bbe-Latn-CD", + "bbf": "bbf-Latn-PG", + "bbf-Latn": "bbf-Latn-PG", + "bbf-PG": "bbf-Latn-PG", + "bbg": "bbg-Latn-GA", + "bbg-GA": "bbg-Latn-GA", + "bbg-Latn": "bbg-Latn-GA", + "bbi": "bbi-Latn-CM", + "bbi-CM": "bbi-Latn-CM", + "bbi-Latn": "bbi-Latn-CM", + "bbj": "bbj-Latn-CM", + "bbj-CM": "bbj-Latn-CM", + "bbj-Latn": "bbj-Latn-CM", + "bbk": "bbk-Latn-CM", + "bbk-CM": "bbk-Latn-CM", + "bbk-Latn": "bbk-Latn-CM", + "bbl": "bbl-Geor-GE", + "bbl-GE": "bbl-Geor-GE", + "bbl-Geor": "bbl-Geor-GE", + "bbm": "bbm-Latn-CD", + "bbm-CD": "bbm-Latn-CD", + "bbm-Latn": "bbm-Latn-CD", + "bbn": "bbn-Latn-PG", + "bbn-Latn": "bbn-Latn-PG", + "bbn-PG": "bbn-Latn-PG", + "bbo": "bbo-Latn-BF", + "bbo-BF": "bbo-Latn-BF", + "bbo-Latn": "bbo-Latn-BF", + "bbp": "bbp-Latn-CF", + "bbp-CF": "bbp-Latn-CF", + "bbp-Latn": "bbp-Latn-CF", + "bbq": "bbq-Latn-CM", + "bbq-CM": "bbq-Latn-CM", + "bbq-Latn": "bbq-Latn-CM", + "bbr": "bbr-Latn-PG", + "bbr-Latn": "bbr-Latn-PG", + "bbr-PG": "bbr-Latn-PG", + "bbs": "bbs-Latn-NG", + "bbs-Latn": "bbs-Latn-NG", + "bbs-NG": "bbs-Latn-NG", + "bbt": "bbt-Latn-NG", + "bbt-Latn": "bbt-Latn-NG", + "bbt-NG": "bbt-Latn-NG", + "bbu": "bbu-Latn-NG", + "bbu-Latn": "bbu-Latn-NG", + "bbu-NG": "bbu-Latn-NG", + "bbv": "bbv-Latn-PG", + "bbv-Latn": "bbv-Latn-PG", + "bbv-PG": "bbv-Latn-PG", + "bbw": "bbw-Latn-CM", + "bbw-CM": "bbw-Latn-CM", + "bbw-Latn": "bbw-Latn-CM", + "bbx": "bbx-Latn-CM", + "bbx-CM": "bbx-Latn-CM", + "bbx-Latn": "bbx-Latn-CM", + "bby": "bby-Latn-CM", + "bby-CM": "bby-Latn-CM", + "bby-Latn": "bby-Latn-CM", + "bca": "bca-Latn-CN", + "bca-CN": "bca-Latn-CN", + "bca-Latn": "bca-Latn-CN", + "bcb": "bcb-Latn-SN", + "bcb-Latn": "bcb-Latn-SN", + "bcb-SN": "bcb-Latn-SN", + "bcd": "bcd-Latn-ID", + "bcd-ID": "bcd-Latn-ID", + "bcd-Latn": "bcd-Latn-ID", + "bce": "bce-Latn-CM", + "bce-CM": "bce-Latn-CM", + "bce-Latn": "bce-Latn-CM", + "bcf": "bcf-Latn-PG", + "bcf-Latn": "bcf-Latn-PG", + "bcf-PG": "bcf-Latn-PG", + "bcg": "bcg-Latn-GN", + "bcg-GN": "bcg-Latn-GN", + "bcg-Latn": "bcg-Latn-GN", + "bch": "bch-Latn-PG", + "bch-Latn": "bch-Latn-PG", + "bch-PG": "bch-Latn-PG", + "bci": "bci-Latn-CI", + "bci-CI": "bci-Latn-CI", + "bci-Latn": "bci-Latn-CI", + "bcj": "bcj-Latn-AU", + "bcj-AU": "bcj-Latn-AU", + "bcj-Latn": "bcj-Latn-AU", + "bck": "bck-Latn-AU", + "bck-AU": "bck-Latn-AU", + "bck-Latn": "bck-Latn-AU", + "bcm": "bcm-Latn-PG", + "bcm-Latn": "bcm-Latn-PG", + "bcm-PG": "bcm-Latn-PG", + "bcn": "bcn-Latn-NG", + "bcn-Latn": "bcn-Latn-NG", + "bcn-NG": "bcn-Latn-NG", + "bco": "bco-Latn-PG", + "bco-Latn": "bco-Latn-PG", + "bco-PG": "bco-Latn-PG", + "bcp": "bcp-Latn-CD", + "bcp-CD": "bcp-Latn-CD", + "bcp-Latn": "bcp-Latn-CD", + "bcq": "bcq-Ethi-ET", + "bcq-ET": "bcq-Ethi-ET", + "bcq-Ethi": "bcq-Ethi-ET", + "bcr": "bcr-Latn-CA", + "bcr-CA": "bcr-Latn-CA", + "bcr-Latn": "bcr-Latn-CA", + "bcs": "bcs-Latn-NG", + "bcs-Latn": "bcs-Latn-NG", + "bcs-NG": "bcs-Latn-NG", + "bct": "bct-Latn-CD", + "bct-CD": "bct-Latn-CD", + "bct-Latn": "bct-Latn-CD", + "bcu": "bcu-Latn-PG", + "bcu-Latn": "bcu-Latn-PG", + "bcu-PG": "bcu-Latn-PG", + "bcv": "bcv-Latn-NG", + "bcv-Latn": "bcv-Latn-NG", + "bcv-NG": "bcv-Latn-NG", + "bcw": "bcw-Latn-CM", + "bcw-CM": "bcw-Latn-CM", + "bcw-Latn": "bcw-Latn-CM", + "bcy": "bcy-Latn-NG", + "bcy-Latn": "bcy-Latn-NG", + "bcy-NG": "bcy-Latn-NG", + "bcz": "bcz-Latn-SN", + "bcz-Latn": "bcz-Latn-SN", + "bcz-SN": "bcz-Latn-SN", + "bda": "bda-Latn-SN", + "bda-Latn": "bda-Latn-SN", + "bda-SN": "bda-Latn-SN", + "bdb": "bdb-Latn-ID", + "bdb-ID": "bdb-Latn-ID", + "bdb-Latn": "bdb-Latn-ID", + "bdc": "bdc-Latn-CO", + "bdc-CO": "bdc-Latn-CO", + "bdc-Latn": "bdc-Latn-CO", + "bdd": "bdd-Latn-PG", + "bdd-Latn": "bdd-Latn-PG", + "bdd-PG": "bdd-Latn-PG", + "bde": "bde-Latn-NG", + "bde-Latn": "bde-Latn-NG", + "bde-NG": "bde-Latn-NG", + "bdf": "bdf-Latn-PG", + "bdf-Latn": "bdf-Latn-PG", + "bdf-PG": "bdf-Latn-PG", + "bdg": "bdg-Latn-MY", + "bdg-Latn": "bdg-Latn-MY", + "bdg-MY": "bdg-Latn-MY", + "bdh": "bdh-Latn-SS", + "bdh-Latn": "bdh-Latn-SS", + "bdh-SS": "bdh-Latn-SS", + "bdi": "bdi-Latn-SD", + "bdi-Latn": "bdi-Latn-SD", + "bdi-SD": "bdi-Latn-SD", + "bdj": "bdj-Latn-SS", + "bdj-Latn": "bdj-Latn-SS", + "bdj-SS": "bdj-Latn-SS", + "bdk": "bdk-Latn-AZ", + "bdk-AZ": "bdk-Latn-AZ", + "bdk-Latn": "bdk-Latn-AZ", + "bdl": "bdl-Latn-ID", + "bdl-ID": "bdl-Latn-ID", + "bdl-Latn": "bdl-Latn-ID", + "bdm": "bdm-Latn-TD", + "bdm-Latn": "bdm-Latn-TD", + "bdm-TD": "bdm-Latn-TD", + "bdn": "bdn-Latn-CM", + "bdn-CM": "bdn-Latn-CM", + "bdn-Latn": "bdn-Latn-CM", + "bdo": "bdo-Latn-TD", + "bdo-Latn": "bdo-Latn-TD", + "bdo-TD": "bdo-Latn-TD", + "bdp": "bdp-Latn-TZ", + "bdp-Latn": "bdp-Latn-TZ", + "bdp-TZ": "bdp-Latn-TZ", + "bdq": "bdq-Latn-VN", + "bdq-Latn": "bdq-Latn-VN", + "bdq-VN": "bdq-Latn-VN", + "bdr": "bdr-Latn-MY", + "bdr-Latn": "bdr-Latn-MY", + "bdr-MY": "bdr-Latn-MY", + "bds": "bds-Latn-TZ", + "bds-Latn": "bds-Latn-TZ", + "bds-TZ": "bds-Latn-TZ", + "bdt": "bdt-Latn-CF", + "bdt-CF": "bdt-Latn-CF", + "bdt-Latn": "bdt-Latn-CF", + "bdu": "bdu-Latn-CM", + "bdu-CM": "bdu-Latn-CM", + "bdu-Latn": "bdu-Latn-CM", + "bdv": "bdv-Orya-IN", + "bdv-IN": "bdv-Orya-IN", + "bdv-Orya": "bdv-Orya-IN", + "bdw": "bdw-Latn-ID", + "bdw-ID": "bdw-Latn-ID", + "bdw-Latn": "bdw-Latn-ID", + "bdx": "bdx-Latn-ID", + "bdx-ID": "bdx-Latn-ID", + "bdx-Latn": "bdx-Latn-ID", + "bdy": "bdy-Latn-AU", + "bdy-AU": "bdy-Latn-AU", + "bdy-Latn": "bdy-Latn-AU", + "bdz": "bdz-Arab-PK", + "bdz-Arab": "bdz-Arab-PK", + "bdz-PK": "bdz-Arab-PK", + "be": "be-Cyrl-BY", + "be-BY": "be-Cyrl-BY", + "be-Cyrl": "be-Cyrl-BY", + "be-Cyrl-BY": "be-Cyrl-BY", + "bea": "bea-Latn-CA", + "bea-CA": "bea-Latn-CA", + "bea-Latn": "bea-Latn-CA", + "beb": "beb-Latn-CM", + "beb-CM": "beb-Latn-CM", + "beb-Latn": "beb-Latn-CM", + "bec": "bec-Latn-CM", + "bec-CM": "bec-Latn-CM", + "bec-Latn": "bec-Latn-CM", + "bed": "bed-Latn-ID", + "bed-ID": "bed-Latn-ID", + "bed-Latn": "bed-Latn-ID", + "bee": "bee-Deva-IN", + "bee-Deva": "bee-Deva-IN", + "bee-IN": "bee-Deva-IN", + "bef": "bef-Latn-PG", + "bef-Latn": "bef-Latn-PG", + "bef-PG": "bef-Latn-PG", + "beh": "beh-Latn-BJ", + "beh-BJ": "beh-Latn-BJ", + "beh-Latn": "beh-Latn-BJ", + "bei": "bei-Latn-ID", + "bei-ID": "bei-Latn-ID", + "bei-Latn": "bei-Latn-ID", + "bej": "bej-Arab-SD", + "bej-Arab": "bej-Arab-SD", + "bej-SD": "bej-Arab-SD", + "bek": "bek-Latn-PG", + "bek-Latn": "bek-Latn-PG", + "bek-PG": "bek-Latn-PG", + "bem": "bem-Latn-ZM", + "bem-Latn": "bem-Latn-ZM", + "bem-ZM": "bem-Latn-ZM", + "beo": "beo-Latn-PG", + "beo-Latn": "beo-Latn-PG", + "beo-PG": "beo-Latn-PG", + "bep": "bep-Latn-ID", + "bep-ID": "bep-Latn-ID", + "bep-Latn": "bep-Latn-ID", + "beq": "beq-Latn-CG", + "beq-CG": "beq-Latn-CG", + "beq-Latn": "beq-Latn-CG", + "bes": "bes-Latn-TD", + "bes-Latn": "bes-Latn-TD", + "bes-TD": "bes-Latn-TD", + "bet": "bet-Latn-CI", + "bet-CI": "bet-Latn-CI", + "bet-Latn": "bet-Latn-CI", + "beu": "beu-Latn-ID", + "beu-ID": "beu-Latn-ID", + "beu-Latn": "beu-Latn-ID", + "bev": "bev-Latn-CI", + "bev-CI": "bev-Latn-CI", + "bev-Latn": "bev-Latn-CI", + "bew": "bew-Latn-ID", + "bew-ID": "bew-Latn-ID", + "bew-Latn": "bew-Latn-ID", + "bex": "bex-Latn-SS", + "bex-Latn": "bex-Latn-SS", + "bex-SS": "bex-Latn-SS", + "bey": "bey-Latn-PG", + "bey-Latn": "bey-Latn-PG", + "bey-PG": "bey-Latn-PG", + "bez": "bez-Latn-TZ", + "bez-Latn": "bez-Latn-TZ", + "bez-TZ": "bez-Latn-TZ", + "bfa": "bfa-Latn-SS", + "bfa-Latn": "bfa-Latn-SS", + "bfa-SS": "bfa-Latn-SS", + "bfb": "bfb-Deva-IN", + "bfb-Deva": "bfb-Deva-IN", + "bfb-IN": "bfb-Deva-IN", + "bfc": "bfc-Latn-CN", + "bfc-CN": "bfc-Latn-CN", + "bfc-Latn": "bfc-Latn-CN", + "bfd": "bfd-Latn-CM", + "bfd-CM": "bfd-Latn-CM", + "bfd-Latn": "bfd-Latn-CM", + "bfe": "bfe-Latn-ID", + "bfe-ID": "bfe-Latn-ID", + "bfe-Latn": "bfe-Latn-ID", + "bff": "bff-Latn-CF", + "bff-CF": "bff-Latn-CF", + "bff-Latn": "bff-Latn-CF", + "bfg": "bfg-Latn-ID", + "bfg-ID": "bfg-Latn-ID", + "bfg-Latn": "bfg-Latn-ID", + "bfh": "bfh-Latn-PG", + "bfh-Latn": "bfh-Latn-PG", + "bfh-PG": "bfh-Latn-PG", + "bfj": "bfj-Latn-CM", + "bfj-CM": "bfj-Latn-CM", + "bfj-Latn": "bfj-Latn-CM", + "bfl": "bfl-Latn-CF", + "bfl-CF": "bfl-Latn-CF", + "bfl-Latn": "bfl-Latn-CF", + "bfm": "bfm-Latn-CM", + "bfm-CM": "bfm-Latn-CM", + "bfm-Latn": "bfm-Latn-CM", + "bfn": "bfn-Latn-TL", + "bfn-Latn": "bfn-Latn-TL", + "bfn-TL": "bfn-Latn-TL", + "bfo": "bfo-Latn-BF", + "bfo-BF": "bfo-Latn-BF", + "bfo-Latn": "bfo-Latn-BF", + "bfp": "bfp-Latn-CM", + "bfp-CM": "bfp-Latn-CM", + "bfp-Latn": "bfp-Latn-CM", + "bfq": "bfq-Taml-IN", + "bfq-IN": "bfq-Taml-IN", + "bfq-Taml": "bfq-Taml-IN", + "bfs": "bfs-Latn-CN", + "bfs-CN": "bfs-Latn-CN", + "bfs-Latn": "bfs-Latn-CN", + "bft": "bft-Arab-PK", + "bft-Arab": "bft-Arab-PK", + "bft-PK": "bft-Arab-PK", + "bfu": "bfu-Tibt-IN", + "bfu-IN": "bfu-Tibt-IN", + "bfu-Tibt": "bfu-Tibt-IN", + "bfw": "bfw-Orya-IN", + "bfw-IN": "bfw-Orya-IN", + "bfw-Orya": "bfw-Orya-IN", + "bfx": "bfx-Latn-PH", + "bfx-Latn": "bfx-Latn-PH", + "bfx-PH": "bfx-Latn-PH", + "bfy": "bfy-Deva-IN", + "bfy-Deva": "bfy-Deva-IN", + "bfy-IN": "bfy-Deva-IN", + "bfz": "bfz-Deva-IN", + "bfz-Deva": "bfz-Deva-IN", + "bfz-IN": "bfz-Deva-IN", + "bg": "bg-Cyrl-BG", + "bg-BG": "bg-Cyrl-BG", + "bg-Cyrl": "bg-Cyrl-BG", + "bg-Cyrl-BG": "bg-Cyrl-BG", + "bg-Cyrl-RO": "bg-Cyrl-RO", + "bga": "bga-Latn-NG", + "bga-Latn": "bga-Latn-NG", + "bga-NG": "bga-Latn-NG", + "bgb": "bgb-Latn-ID", + "bgb-ID": "bgb-Latn-ID", + "bgb-Latn": "bgb-Latn-ID", + "bgc": "bgc-Deva-IN", + "bgc-Deva": "bgc-Deva-IN", + "bgc-IN": "bgc-Deva-IN", + "bgd": "bgd-Deva-IN", + "bgd-Deva": "bgd-Deva-IN", + "bgd-IN": "bgd-Deva-IN", + "bgf": "bgf-Latn-CM", + "bgf-CM": "bgf-Latn-CM", + "bgf-Latn": "bgf-Latn-CM", + "bgg": "bgg-Latn-IN", + "bgg-IN": "bgg-Latn-IN", + "bgg-Latn": "bgg-Latn-IN", + "bgi": "bgi-Latn-PH", + "bgi-Latn": "bgi-Latn-PH", + "bgi-PH": "bgi-Latn-PH", + "bgj": "bgj-Latn-CM", + "bgj-CM": "bgj-Latn-CM", + "bgj-Latn": "bgj-Latn-CM", + "bgn": "bgn-Arab-PK", + "bgn-Arab": "bgn-Arab-PK", + "bgn-PK": "bgn-Arab-PK", + "bgo": "bgo-Latn-GN", + "bgo-GN": "bgo-Latn-GN", + "bgo-Latn": "bgo-Latn-GN", + "bgp": "bgp-Arab-PK", + "bgp-Arab": "bgp-Arab-PK", + "bgp-PK": "bgp-Arab-PK", + "bgq": "bgq-Deva-IN", + "bgq-Deva": "bgq-Deva-IN", + "bgq-IN": "bgq-Deva-IN", + "bgr": "bgr-Latn-IN", + "bgr-IN": "bgr-Latn-IN", + "bgr-Latn": "bgr-Latn-IN", + "bgs": "bgs-Latn-PH", + "bgs-Latn": "bgs-Latn-PH", + "bgs-PH": "bgs-Latn-PH", + "bgt": "bgt-Latn-SB", + "bgt-Latn": "bgt-Latn-SB", + "bgt-SB": "bgt-Latn-SB", + "bgu": "bgu-Latn-NG", + "bgu-Latn": "bgu-Latn-NG", + "bgu-NG": "bgu-Latn-NG", + "bgv": "bgv-Latn-ID", + "bgv-ID": "bgv-Latn-ID", + "bgv-Latn": "bgv-Latn-ID", + "bgw": "bgw-Deva-IN", + "bgw-Deva": "bgw-Deva-IN", + "bgw-IN": "bgw-Deva-IN", + "bgx": "bgx-Grek-TR", + "bgx-Grek": "bgx-Grek-TR", + "bgx-Grek-TR": "bgx-Grek-TR", + "bgx-TR": "bgx-Grek-TR", + "bgy": "bgy-Latn-ID", + "bgy-ID": "bgy-Latn-ID", + "bgy-Latn": "bgy-Latn-ID", + "bgz": "bgz-Latn-ID", + "bgz-ID": "bgz-Latn-ID", + "bgz-Latn": "bgz-Latn-ID", + "bh": "bh-Khmr-MV", + "bh-Khmr": "bh-Khmr-MV", + "bh-MV": "bh-Khmr-MV", + "bha": "bha-Deva-IN", + "bha-Deva": "bha-Deva-IN", + "bha-IN": "bha-Deva-IN", + "bhb": "bhb-Deva-IN", + "bhb-Deva": "bhb-Deva-IN", + "bhb-IN": "bhb-Deva-IN", + "bhc": "bhc-Latn-ID", + "bhc-ID": "bhc-Latn-ID", + "bhc-Latn": "bhc-Latn-ID", + "bhd": "bhd-Deva-IN", + "bhd-Deva": "bhd-Deva-IN", + "bhd-IN": "bhd-Deva-IN", + "bhe": "bhe-Arab-PK", + "bhe-Arab": "bhe-Arab-PK", + "bhe-PK": "bhe-Arab-PK", + "bhf": "bhf-Latn-PG", + "bhf-Latn": "bhf-Latn-PG", + "bhf-PG": "bhf-Latn-PG", + "bhg": "bhg-Latn-PG", + "bhg-Latn": "bhg-Latn-PG", + "bhg-PG": "bhg-Latn-PG", + "bhh": "bhh-Cyrl-IL", + "bhh-Cyrl": "bhh-Cyrl-IL", + "bhh-IL": "bhh-Cyrl-IL", + "bhi": "bhi-Deva-IN", + "bhi-Deva": "bhi-Deva-IN", + "bhi-IN": "bhi-Deva-IN", + "bhj": "bhj-Deva-NP", + "bhj-Deva": "bhj-Deva-NP", + "bhj-NP": "bhj-Deva-NP", + "bhl": "bhl-Latn-PG", + "bhl-Latn": "bhl-Latn-PG", + "bhl-PG": "bhl-Latn-PG", + "bhm": "bhm-Arab-OM", + "bhm-Arab": "bhm-Arab-OM", + "bhm-OM": "bhm-Arab-OM", + "bhn": "bhn-Syrc-GE", + "bhn-GE": "bhn-Syrc-GE", + "bhn-Syrc": "bhn-Syrc-GE", + "bho": "bho-Deva-IN", + "bho-Deva": "bho-Deva-IN", + "bho-Deva-MU": "bho-Deva-MU", + "bho-IN": "bho-Deva-IN", + "bho-Kthi": "bho-Kthi-IN", + "bhp": "bhp-Latn-ID", + "bhp-ID": "bhp-Latn-ID", + "bhp-Latn": "bhp-Latn-ID", + "bhq": "bhq-Latn-ID", + "bhq-ID": "bhq-Latn-ID", + "bhq-Latn": "bhq-Latn-ID", + "bhr": "bhr-Latn-MG", + "bhr-Latn": "bhr-Latn-MG", + "bhr-MG": "bhr-Latn-MG", + "bhs": "bhs-Latn-CM", + "bhs-CM": "bhs-Latn-CM", + "bhs-Latn": "bhs-Latn-CM", + "bht": "bht-Deva-IN", + "bht-Deva": "bht-Deva-IN", + "bht-IN": "bht-Deva-IN", + "bhu": "bhu-Deva-IN", + "bhu-Deva": "bhu-Deva-IN", + "bhu-IN": "bhu-Deva-IN", + "bhv": "bhv-Latn-ID", + "bhv-ID": "bhv-Latn-ID", + "bhv-Latn": "bhv-Latn-ID", + "bhw": "bhw-Latn-ID", + "bhw-ID": "bhw-Latn-ID", + "bhw-Latn": "bhw-Latn-ID", + "bhy": "bhy-Latn-CD", + "bhy-CD": "bhy-Latn-CD", + "bhy-Latn": "bhy-Latn-CD", + "bhz": "bhz-Latn-ID", + "bhz-ID": "bhz-Latn-ID", + "bhz-Latn": "bhz-Latn-ID", + "bi": "bi-Latn-VU", + "bi-Latn": "bi-Latn-VU", + "bi-VU": "bi-Latn-VU", + "bia": "bia-Latn-AU", + "bia-AU": "bia-Latn-AU", + "bia-Latn": "bia-Latn-AU", + "bib": "bib-Latn-BF", + "bib-BF": "bib-Latn-BF", + "bib-Latn": "bib-Latn-BF", + "bid": "bid-Latn-TD", + "bid-Latn": "bid-Latn-TD", + "bid-TD": "bid-Latn-TD", + "bie": "bie-Latn-PG", + "bie-Latn": "bie-Latn-PG", + "bie-PG": "bie-Latn-PG", + "bif": "bif-Latn-GW", + "bif-GW": "bif-Latn-GW", + "bif-Latn": "bif-Latn-GW", + "big": "big-Latn-PG", + "big-Latn": "big-Latn-PG", + "big-PG": "big-Latn-PG", + "bik": "bik-Latn-PH", + "bik-Latn": "bik-Latn-PH", + "bik-PH": "bik-Latn-PH", + "bil": "bil-Latn-NG", + "bil-Latn": "bil-Latn-NG", + "bil-NG": "bil-Latn-NG", + "bim": "bim-Latn-GH", + "bim-GH": "bim-Latn-GH", + "bim-Latn": "bim-Latn-GH", + "bin": "bin-Latn-NG", + "bin-Latn": "bin-Latn-NG", + "bin-NG": "bin-Latn-NG", + "bio": "bio-Latn-PG", + "bio-Latn": "bio-Latn-PG", + "bio-PG": "bio-Latn-PG", + "bip": "bip-Latn-CD", + "bip-CD": "bip-Latn-CD", + "bip-Latn": "bip-Latn-CD", + "biq": "biq-Latn-PG", + "biq-Latn": "biq-Latn-PG", + "biq-PG": "biq-Latn-PG", + "bir": "bir-Latn-PG", + "bir-Latn": "bir-Latn-PG", + "bir-PG": "bir-Latn-PG", + "bit": "bit-Latn-PG", + "bit-Latn": "bit-Latn-PG", + "bit-PG": "bit-Latn-PG", + "biu": "biu-Latn-IN", + "biu-IN": "biu-Latn-IN", + "biu-Latn": "biu-Latn-IN", + "biv": "biv-Latn-GH", + "biv-GH": "biv-Latn-GH", + "biv-Latn": "biv-Latn-GH", + "biw": "biw-Latn-CM", + "biw-CM": "biw-Latn-CM", + "biw-Latn": "biw-Latn-CM", + "biy": "biy-Deva-IN", + "biy-Deva": "biy-Deva-IN", + "biy-IN": "biy-Deva-IN", + "biz": "biz-Latn-CD", + "biz-CD": "biz-Latn-CD", + "biz-Latn": "biz-Latn-CD", + "bja": "bja-Latn-CD", + "bja-CD": "bja-Latn-CD", + "bja-Latn": "bja-Latn-CD", + "bjb": "bjb-Latn-AU", + "bjb-AU": "bjb-Latn-AU", + "bjb-Latn": "bjb-Latn-AU", + "bjc": "bjc-Latn-PG", + "bjc-Latn": "bjc-Latn-PG", + "bjc-PG": "bjc-Latn-PG", + "bjf": "bjf-Syrc-IL", + "bjf-IL": "bjf-Syrc-IL", + "bjf-Syrc": "bjf-Syrc-IL", + "bjg": "bjg-Latn-GW", + "bjg-GW": "bjg-Latn-GW", + "bjg-Latn": "bjg-Latn-GW", + "bjh": "bjh-Latn-PG", + "bjh-Latn": "bjh-Latn-PG", + "bjh-PG": "bjh-Latn-PG", + "bji": "bji-Latn-ET", + "bji-ET": "bji-Latn-ET", + "bji-Latn": "bji-Latn-ET", + "bjj": "bjj-Deva-IN", + "bjj-Deva": "bjj-Deva-IN", + "bjj-IN": "bjj-Deva-IN", + "bjk": "bjk-Latn-PG", + "bjk-Latn": "bjk-Latn-PG", + "bjk-PG": "bjk-Latn-PG", + "bjl": "bjl-Latn-PG", + "bjl-Latn": "bjl-Latn-PG", + "bjl-PG": "bjl-Latn-PG", + "bjm": "bjm-Arab-IQ", + "bjm-Arab": "bjm-Arab-IQ", + "bjm-IQ": "bjm-Arab-IQ", + "bjn": "bjn-Latn-ID", + "bjn-ID": "bjn-Latn-ID", + "bjn-Latn": "bjn-Latn-ID", + "bjo": "bjo-Latn-CF", + "bjo-CF": "bjo-Latn-CF", + "bjo-Latn": "bjo-Latn-CF", + "bjp": "bjp-Latn-PG", + "bjp-Latn": "bjp-Latn-PG", + "bjp-PG": "bjp-Latn-PG", + "bjr": "bjr-Latn-PG", + "bjr-Latn": "bjr-Latn-PG", + "bjr-PG": "bjr-Latn-PG", + "bjs": "bjs-Latn-BB", + "bjs-BB": "bjs-Latn-BB", + "bjs-Latn": "bjs-Latn-BB", + "bjt": "bjt-Latn-SN", + "bjt-Latn": "bjt-Latn-SN", + "bjt-SN": "bjt-Latn-SN", + "bju": "bju-Latn-CM", + "bju-CM": "bju-Latn-CM", + "bju-Latn": "bju-Latn-CM", + "bjv": "bjv-Latn-TD", + "bjv-Latn": "bjv-Latn-TD", + "bjv-TD": "bjv-Latn-TD", + "bjw": "bjw-Latn-CI", + "bjw-CI": "bjw-Latn-CI", + "bjw-Latn": "bjw-Latn-CI", + "bjx": "bjx-Latn-PH", + "bjx-Latn": "bjx-Latn-PH", + "bjx-PH": "bjx-Latn-PH", + "bjy": "bjy-Latn-AU", + "bjy-AU": "bjy-Latn-AU", + "bjy-Latn": "bjy-Latn-AU", + "bjz": "bjz-Latn-PG", + "bjz-Latn": "bjz-Latn-PG", + "bjz-PG": "bjz-Latn-PG", + "bka": "bka-Latn-NG", + "bka-Latn": "bka-Latn-NG", + "bka-NG": "bka-Latn-NG", + "bkc": "bkc-Latn-CM", + "bkc-CM": "bkc-Latn-CM", + "bkc-Latn": "bkc-Latn-CM", + "bkd": "bkd-Latn-PH", + "bkd-Latn": "bkd-Latn-PH", + "bkd-PH": "bkd-Latn-PH", + "bkf": "bkf-Latn-CD", + "bkf-CD": "bkf-Latn-CD", + "bkf-Latn": "bkf-Latn-CD", + "bkg": "bkg-Latn-CF", + "bkg-CF": "bkg-Latn-CF", + "bkg-Latn": "bkg-Latn-CF", + "bkh": "bkh-Latn-CM", + "bkh-CM": "bkh-Latn-CM", + "bkh-Latn": "bkh-Latn-CM", + "bki": "bki-Latn-VU", + "bki-Latn": "bki-Latn-VU", + "bki-VU": "bki-Latn-VU", + "bkj": "bkj-Latn-CF", + "bkj-CF": "bkj-Latn-CF", + "bkj-Latn": "bkj-Latn-CF", + "bkk": "bkk-Tibt-IN", + "bkk-IN": "bkk-Tibt-IN", + "bkk-Tibt": "bkk-Tibt-IN", + "bkl": "bkl-Latn-ID", + "bkl-ID": "bkl-Latn-ID", + "bkl-Latn": "bkl-Latn-ID", + "bkm": "bkm-Latn-CM", + "bkm-CM": "bkm-Latn-CM", + "bkm-Latn": "bkm-Latn-CM", + "bkn": "bkn-Latn-ID", + "bkn-ID": "bkn-Latn-ID", + "bkn-Latn": "bkn-Latn-ID", + "bko": "bko-Latn-CM", + "bko-CM": "bko-Latn-CM", + "bko-Latn": "bko-Latn-CM", + "bkp": "bkp-Latn-CD", + "bkp-CD": "bkp-Latn-CD", + "bkp-Latn": "bkp-Latn-CD", + "bkq": "bkq-Latn-BR", + "bkq-BR": "bkq-Latn-BR", + "bkq-Latn": "bkq-Latn-BR", + "bkr": "bkr-Latn-ID", + "bkr-ID": "bkr-Latn-ID", + "bkr-Latn": "bkr-Latn-ID", + "bks": "bks-Latn-PH", + "bks-Latn": "bks-Latn-PH", + "bks-PH": "bks-Latn-PH", + "bkt": "bkt-Latn-CD", + "bkt-CD": "bkt-Latn-CD", + "bkt-Latn": "bkt-Latn-CD", + "bku": "bku-Latn-PH", + "bku-Buhd": "bku-Buhd-PH", + "bku-Latn": "bku-Latn-PH", + "bku-PH": "bku-Latn-PH", + "bkv": "bkv-Latn-NG", + "bkv-Latn": "bkv-Latn-NG", + "bkv-NG": "bkv-Latn-NG", + "bkw": "bkw-Latn-CG", + "bkw-CG": "bkw-Latn-CG", + "bkw-Latn": "bkw-Latn-CG", + "bkx": "bkx-Latn-TL", + "bkx-Latn": "bkx-Latn-TL", + "bkx-TL": "bkx-Latn-TL", + "bky": "bky-Latn-NG", + "bky-Latn": "bky-Latn-NG", + "bky-NG": "bky-Latn-NG", + "bkz": "bkz-Latn-ID", + "bkz-ID": "bkz-Latn-ID", + "bkz-Latn": "bkz-Latn-ID", + "bla": "bla-Latn-CA", + "bla-CA": "bla-Latn-CA", + "bla-Latn": "bla-Latn-CA", + "blb": "blb-Latn-SB", + "blb-Latn": "blb-Latn-SB", + "blb-SB": "blb-Latn-SB", + "blc": "blc-Latn-CA", + "blc-CA": "blc-Latn-CA", + "blc-Latn": "blc-Latn-CA", + "bld": "bld-Latn-ID", + "bld-ID": "bld-Latn-ID", + "bld-Latn": "bld-Latn-ID", + "ble": "ble-Latn-GW", + "ble-GW": "ble-Latn-GW", + "ble-Latn": "ble-Latn-GW", + "blf": "blf-Latn-ID", + "blf-ID": "blf-Latn-ID", + "blf-Latn": "blf-Latn-ID", + "blh": "blh-Latn-LR", + "blh-LR": "blh-Latn-LR", + "blh-Latn": "blh-Latn-LR", + "bli": "bli-Latn-CD", + "bli-CD": "bli-Latn-CD", + "bli-Latn": "bli-Latn-CD", + "blj": "blj-Latn-ID", + "blj-ID": "blj-Latn-ID", + "blj-Latn": "blj-Latn-ID", + "blk": "blk-Mymr-MM", + "blk-MM": "blk-Mymr-MM", + "blk-Mymr": "blk-Mymr-MM", + "blm": "blm-Latn-SS", + "blm-Latn": "blm-Latn-SS", + "blm-SS": "blm-Latn-SS", + "bln": "bln-Latn-PH", + "bln-Latn": "bln-Latn-PH", + "bln-PH": "bln-Latn-PH", + "blo": "blo-Latn-BJ", + "blo-BJ": "blo-Latn-BJ", + "blo-Latn": "blo-Latn-BJ", + "blp": "blp-Latn-SB", + "blp-Latn": "blp-Latn-SB", + "blp-SB": "blp-Latn-SB", + "blq": "blq-Latn-PG", + "blq-Latn": "blq-Latn-PG", + "blq-PG": "blq-Latn-PG", + "blr": "blr-Latn-CN", + "blr-CN": "blr-Latn-CN", + "blr-Latn": "blr-Latn-CN", + "bls": "bls-Latn-ID", + "bls-ID": "bls-Latn-ID", + "bls-Latn": "bls-Latn-ID", + "blt": "blt-Tavt-VN", + "blt-Tavt": "blt-Tavt-VN", + "blt-VN": "blt-Tavt-VN", + "blv": "blv-Latn-AO", + "blv-AO": "blv-Latn-AO", + "blv-Latn": "blv-Latn-AO", + "blw": "blw-Latn-PH", + "blw-Latn": "blw-Latn-PH", + "blw-PH": "blw-Latn-PH", + "blx": "blx-Latn-PH", + "blx-Latn": "blx-Latn-PH", + "blx-PH": "blx-Latn-PH", + "bly": "bly-Latn-BJ", + "bly-BJ": "bly-Latn-BJ", + "bly-Latn": "bly-Latn-BJ", + "blz": "blz-Latn-ID", + "blz-ID": "blz-Latn-ID", + "blz-Latn": "blz-Latn-ID", + "bm": "bm-Latn-ML", + "bm-Latn": "bm-Latn-ML", + "bm-ML": "bm-Latn-ML", + "bm-Nkoo-ML": "bm-Nkoo-ML", + "bma": "bma-Latn-NG", + "bma-Latn": "bma-Latn-NG", + "bma-NG": "bma-Latn-NG", + "bmb": "bmb-Latn-CD", + "bmb-CD": "bmb-Latn-CD", + "bmb-Latn": "bmb-Latn-CD", + "bmc": "bmc-Latn-PG", + "bmc-Latn": "bmc-Latn-PG", + "bmc-PG": "bmc-Latn-PG", + "bmd": "bmd-Latn-GN", + "bmd-GN": "bmd-Latn-GN", + "bmd-Latn": "bmd-Latn-GN", + "bme": "bme-Latn-CF", + "bme-CF": "bme-Latn-CF", + "bme-Latn": "bme-Latn-CF", + "bmf": "bmf-Latn-SL", + "bmf-Latn": "bmf-Latn-SL", + "bmf-SL": "bmf-Latn-SL", + "bmg": "bmg-Latn-CD", + "bmg-CD": "bmg-Latn-CD", + "bmg-Latn": "bmg-Latn-CD", + "bmh": "bmh-Latn-PG", + "bmh-Latn": "bmh-Latn-PG", + "bmh-PG": "bmh-Latn-PG", + "bmi": "bmi-Latn-TD", + "bmi-Latn": "bmi-Latn-TD", + "bmi-TD": "bmi-Latn-TD", + "bmj": "bmj-Deva-NP", + "bmj-Deva": "bmj-Deva-NP", + "bmj-NP": "bmj-Deva-NP", + "bmk": "bmk-Latn-PG", + "bmk-Latn": "bmk-Latn-PG", + "bmk-PG": "bmk-Latn-PG", + "bml": "bml-Latn-CD", + "bml-CD": "bml-Latn-CD", + "bml-Latn": "bml-Latn-CD", + "bmm": "bmm-Latn-MG", + "bmm-Latn": "bmm-Latn-MG", + "bmm-MG": "bmm-Latn-MG", + "bmn": "bmn-Latn-PG", + "bmn-Latn": "bmn-Latn-PG", + "bmn-PG": "bmn-Latn-PG", + "bmo": "bmo-Latn-CM", + "bmo-CM": "bmo-Latn-CM", + "bmo-Latn": "bmo-Latn-CM", + "bmp": "bmp-Latn-PG", + "bmp-Latn": "bmp-Latn-PG", + "bmp-PG": "bmp-Latn-PG", + "bmq": "bmq-Latn-ML", + "bmq-Latn": "bmq-Latn-ML", + "bmq-ML": "bmq-Latn-ML", + "bmr": "bmr-Latn-CO", + "bmr-CO": "bmr-Latn-CO", + "bmr-Latn": "bmr-Latn-CO", + "bms": "bms-Latn-NE", + "bms-Latn": "bms-Latn-NE", + "bms-NE": "bms-Latn-NE", + "bmu": "bmu-Latn-PG", + "bmu-Latn": "bmu-Latn-PG", + "bmu-PG": "bmu-Latn-PG", + "bmv": "bmv-Latn-CM", + "bmv-CM": "bmv-Latn-CM", + "bmv-Latn": "bmv-Latn-CM", + "bmw": "bmw-Latn-CG", + "bmw-CG": "bmw-Latn-CG", + "bmw-Latn": "bmw-Latn-CG", + "bmx": "bmx-Latn-PG", + "bmx-Latn": "bmx-Latn-PG", + "bmx-PG": "bmx-Latn-PG", + "bmz": "bmz-Latn-PG", + "bmz-Latn": "bmz-Latn-PG", + "bmz-PG": "bmz-Latn-PG", + "bn": "bn-Beng-BD", + "bn-BD": "bn-Beng-BD", + "bn-Beng": "bn-Beng-BD", + "bn-IN": "bn-Beng-IN", + "bn-XX": "bn-Beng-XX", + "bna": "bna-Latn-ID", + "bna-ID": "bna-Latn-ID", + "bna-Latn": "bna-Latn-ID", + "bnb": "bnb-Latn-MY", + "bnb-Latn": "bnb-Latn-MY", + "bnb-MY": "bnb-Latn-MY", + "bnc": "bnc-Latn-PH", + "bnc-Latn": "bnc-Latn-PH", + "bnc-PH": "bnc-Latn-PH", + "bnd": "bnd-Latn-ID", + "bnd-ID": "bnd-Latn-ID", + "bnd-Latn": "bnd-Latn-ID", + "bne": "bne-Latn-ID", + "bne-ID": "bne-Latn-ID", + "bne-Latn": "bne-Latn-ID", + "bnf": "bnf-Latn-ID", + "bnf-ID": "bnf-Latn-ID", + "bnf-Latn": "bnf-Latn-ID", + "bng": "bng-Latn-GQ", + "bng-GQ": "bng-Latn-GQ", + "bng-Latn": "bng-Latn-GQ", + "bni": "bni-Latn-CD", + "bni-CD": "bni-Latn-CD", + "bni-Latn": "bni-Latn-CD", + "bnj": "bnj-Latn-PH", + "bnj-Latn": "bnj-Latn-PH", + "bnj-PH": "bnj-Latn-PH", + "bnk": "bnk-Latn-VU", + "bnk-Latn": "bnk-Latn-VU", + "bnk-VU": "bnk-Latn-VU", + "bnm": "bnm-Latn-GQ", + "bnm-GQ": "bnm-Latn-GQ", + "bnm-Latn": "bnm-Latn-GQ", + "bnn": "bnn-Latn-TW", + "bnn-Latn": "bnn-Latn-TW", + "bnn-TW": "bnn-Latn-TW", + "bno": "bno-Latn-PH", + "bno-Latn": "bno-Latn-PH", + "bno-PH": "bno-Latn-PH", + "bnp": "bnp-Latn-PG", + "bnp-Latn": "bnp-Latn-PG", + "bnp-PG": "bnp-Latn-PG", + "bnq": "bnq-Latn-ID", + "bnq-ID": "bnq-Latn-ID", + "bnq-Latn": "bnq-Latn-ID", + "bnr": "bnr-Latn-VU", + "bnr-Latn": "bnr-Latn-VU", + "bnr-VU": "bnr-Latn-VU", + "bns": "bns-Deva-IN", + "bns-Deva": "bns-Deva-IN", + "bns-IN": "bns-Deva-IN", + "bnu": "bnu-Latn-ID", + "bnu-ID": "bnu-Latn-ID", + "bnu-Latn": "bnu-Latn-ID", + "bnv": "bnv-Latn-ID", + "bnv-ID": "bnv-Latn-ID", + "bnv-Latn": "bnv-Latn-ID", + "bnw": "bnw-Latn-PG", + "bnw-Latn": "bnw-Latn-PG", + "bnw-PG": "bnw-Latn-PG", + "bnx": "bnx-Latn-CD", + "bnx-CD": "bnx-Latn-CD", + "bnx-Latn": "bnx-Latn-CD", + "bny": "bny-Latn-MY", + "bny-Latn": "bny-Latn-MY", + "bny-MY": "bny-Latn-MY", + "bnz": "bnz-Latn-CM", + "bnz-CM": "bnz-Latn-CM", + "bnz-Latn": "bnz-Latn-CM", + "bo": "bo-Tibt-CN", + "bo-CN": "bo-Tibt-CN", + "bo-Marc": "bo-Marc-CN", + "bo-Tibt": "bo-Tibt-CN", + "boa": "boa-Latn-PE", + "boa-Latn": "boa-Latn-PE", + "boa-PE": "boa-Latn-PE", + "bob": "bob-Latn-KE", + "bob-KE": "bob-Latn-KE", + "bob-Latn": "bob-Latn-KE", + "boe": "boe-Latn-CM", + "boe-CM": "boe-Latn-CM", + "boe-Latn": "boe-Latn-CM", + "bof": "bof-Latn-BF", + "bof-BF": "bof-Latn-BF", + "bof-Latn": "bof-Latn-BF", + "boh": "boh-Latn-CD", + "boh-CD": "boh-Latn-CD", + "boh-Latn": "boh-Latn-CD", + "boj": "boj-Latn-PG", + "boj-Latn": "boj-Latn-PG", + "boj-PG": "boj-Latn-PG", + "bok": "bok-Latn-CG", + "bok-CG": "bok-Latn-CG", + "bok-Latn": "bok-Latn-CG", + "bol": "bol-Latn-NG", + "bol-Latn": "bol-Latn-NG", + "bol-NG": "bol-Latn-NG", + "bom": "bom-Latn-NG", + "bom-Latn": "bom-Latn-NG", + "bom-NG": "bom-Latn-NG", + "bon": "bon-Latn-PG", + "bon-Latn": "bon-Latn-PG", + "bon-PG": "bon-Latn-PG", + "boo": "boo-Latn-ML", + "boo-Latn": "boo-Latn-ML", + "boo-ML": "boo-Latn-ML", + "bop": "bop-Latn-PG", + "bop-Latn": "bop-Latn-PG", + "bop-PG": "bop-Latn-PG", + "boq": "boq-Latn-PG", + "boq-Latn": "boq-Latn-PG", + "boq-PG": "boq-Latn-PG", + "bor": "bor-Latn-BR", + "bor-BR": "bor-Latn-BR", + "bor-Latn": "bor-Latn-BR", + "bot": "bot-Latn-SS", + "bot-Latn": "bot-Latn-SS", + "bot-SS": "bot-Latn-SS", + "bou": "bou-Latn-TZ", + "bou-Latn": "bou-Latn-TZ", + "bou-TZ": "bou-Latn-TZ", + "bov": "bov-Latn-GH", + "bov-GH": "bov-Latn-GH", + "bov-Latn": "bov-Latn-GH", + "bow": "bow-Latn-PG", + "bow-Latn": "bow-Latn-PG", + "bow-PG": "bow-Latn-PG", + "box": "box-Latn-BF", + "box-BF": "box-Latn-BF", + "box-Latn": "box-Latn-BF", + "boy": "boy-Latn-CF", + "boy-CF": "boy-Latn-CF", + "boy-Latn": "boy-Latn-CF", + "boz": "boz-Latn-ML", + "boz-Latn": "boz-Latn-ML", + "boz-ML": "boz-Latn-ML", + "bpa": "bpa-Latn-VU", + "bpa-Latn": "bpa-Latn-VU", + "bpa-VU": "bpa-Latn-VU", + "bpc": "bpc-Latn-CM", + "bpc-CM": "bpc-Latn-CM", + "bpc-Latn": "bpc-Latn-CM", + "bpd": "bpd-Latn-CF", + "bpd-CF": "bpd-Latn-CF", + "bpd-Latn": "bpd-Latn-CF", + "bpe": "bpe-Latn-PG", + "bpe-Latn": "bpe-Latn-PG", + "bpe-PG": "bpe-Latn-PG", + "bpg": "bpg-Latn-ID", + "bpg-ID": "bpg-Latn-ID", + "bpg-Latn": "bpg-Latn-ID", + "bph": "bph-Cyrl-RU", + "bph-Cyrl": "bph-Cyrl-RU", + "bph-RU": "bph-Cyrl-RU", + "bpi": "bpi-Latn-PG", + "bpi-Latn": "bpi-Latn-PG", + "bpi-PG": "bpi-Latn-PG", + "bpj": "bpj-Latn-CD", + "bpj-CD": "bpj-Latn-CD", + "bpj-Latn": "bpj-Latn-CD", + "bpk": "bpk-Latn-NC", + "bpk-Latn": "bpk-Latn-NC", + "bpk-NC": "bpk-Latn-NC", + "bpl": "bpl-Latn-AU", + "bpl-AU": "bpl-Latn-AU", + "bpl-Latn": "bpl-Latn-AU", + "bpm": "bpm-Latn-PG", + "bpm-Latn": "bpm-Latn-PG", + "bpm-PG": "bpm-Latn-PG", + "bpo": "bpo-Latn-ID", + "bpo-ID": "bpo-Latn-ID", + "bpo-Latn": "bpo-Latn-ID", + "bpp": "bpp-Latn-ID", + "bpp-ID": "bpp-Latn-ID", + "bpp-Latn": "bpp-Latn-ID", + "bpq": "bpq-Latn-ID", + "bpq-ID": "bpq-Latn-ID", + "bpq-Latn": "bpq-Latn-ID", + "bpr": "bpr-Latn-PH", + "bpr-Latn": "bpr-Latn-PH", + "bpr-PH": "bpr-Latn-PH", + "bps": "bps-Latn-PH", + "bps-Latn": "bps-Latn-PH", + "bps-PH": "bps-Latn-PH", + "bpt": "bpt-Latn-AU", + "bpt-AU": "bpt-Latn-AU", + "bpt-Latn": "bpt-Latn-AU", + "bpu": "bpu-Latn-PG", + "bpu-Latn": "bpu-Latn-PG", + "bpu-PG": "bpu-Latn-PG", + "bpv": "bpv-Latn-ID", + "bpv-ID": "bpv-Latn-ID", + "bpv-Latn": "bpv-Latn-ID", + "bpw": "bpw-Latn-PG", + "bpw-Latn": "bpw-Latn-PG", + "bpw-PG": "bpw-Latn-PG", + "bpx": "bpx-Deva-IN", + "bpx-Deva": "bpx-Deva-IN", + "bpx-IN": "bpx-Deva-IN", + "bpy": "bpy-Beng-IN", + "bpy-Beng": "bpy-Beng-IN", + "bpy-IN": "bpy-Beng-IN", + "bpz": "bpz-Latn-ID", + "bpz-ID": "bpz-Latn-ID", + "bpz-Latn": "bpz-Latn-ID", + "bqa": "bqa-Latn-BJ", + "bqa-BJ": "bqa-Latn-BJ", + "bqa-Latn": "bqa-Latn-BJ", + "bqb": "bqb-Latn-ID", + "bqb-ID": "bqb-Latn-ID", + "bqb-Latn": "bqb-Latn-ID", + "bqc": "bqc-Latn-BJ", + "bqc-BJ": "bqc-Latn-BJ", + "bqc-Latn": "bqc-Latn-BJ", + "bqd": "bqd-Latn-CM", + "bqd-CM": "bqd-Latn-CM", + "bqd-Latn": "bqd-Latn-CM", + "bqf": "bqf-Latn-GN", + "bqf-GN": "bqf-Latn-GN", + "bqf-Latn": "bqf-Latn-GN", + "bqg": "bqg-Latn-TG", + "bqg-Latn": "bqg-Latn-TG", + "bqg-TG": "bqg-Latn-TG", + "bqi": "bqi-Arab-IR", + "bqi-Arab": "bqi-Arab-IR", + "bqi-IR": "bqi-Arab-IR", + "bqj": "bqj-Latn-SN", + "bqj-Latn": "bqj-Latn-SN", + "bqj-SN": "bqj-Latn-SN", + "bqk": "bqk-Latn-CF", + "bqk-CF": "bqk-Latn-CF", + "bqk-Latn": "bqk-Latn-CF", + "bql": "bql-Latn-PG", + "bql-Latn": "bql-Latn-PG", + "bql-PG": "bql-Latn-PG", + "bqm": "bqm-Latn-CM", + "bqm-CM": "bqm-Latn-CM", + "bqm-Latn": "bqm-Latn-CM", + "bqo": "bqo-Latn-CM", + "bqo-CM": "bqo-Latn-CM", + "bqo-Latn": "bqo-Latn-CM", + "bqp": "bqp-Latn-NG", + "bqp-Latn": "bqp-Latn-NG", + "bqp-NG": "bqp-Latn-NG", + "bqq": "bqq-Latn-ID", + "bqq-ID": "bqq-Latn-ID", + "bqq-Latn": "bqq-Latn-ID", + "bqr": "bqr-Latn-ID", + "bqr-ID": "bqr-Latn-ID", + "bqr-Latn": "bqr-Latn-ID", + "bqs": "bqs-Latn-PG", + "bqs-Latn": "bqs-Latn-PG", + "bqs-PG": "bqs-Latn-PG", + "bqt": "bqt-Latn-CM", + "bqt-CM": "bqt-Latn-CM", + "bqt-Latn": "bqt-Latn-CM", + "bqu": "bqu-Latn-CD", + "bqu-CD": "bqu-Latn-CD", + "bqu-Latn": "bqu-Latn-CD", + "bqv": "bqv-Latn-CI", + "bqv-CI": "bqv-Latn-CI", + "bqv-Latn": "bqv-Latn-CI", + "bqw": "bqw-Latn-NG", + "bqw-Latn": "bqw-Latn-NG", + "bqw-NG": "bqw-Latn-NG", + "bqx": "bqx-Latn-NG", + "bqx-Latn": "bqx-Latn-NG", + "bqx-NG": "bqx-Latn-NG", + "bqz": "bqz-Latn-CM", + "bqz-CM": "bqz-Latn-CM", + "bqz-Latn": "bqz-Latn-CM", + "br": "br-Latn-FR", + "br-FR": "br-Latn-FR", + "br-Latn": "br-Latn-FR", + "bra": "bra-Deva-IN", + "bra-Deva": "bra-Deva-IN", + "bra-IN": "bra-Deva-IN", + "brb": "brb-Khmr-KH", + "brb-KH": "brb-Khmr-KH", + "brb-Khmr": "brb-Khmr-KH", + "brc": "brc-Latn-GY", + "brc-GY": "brc-Latn-GY", + "brc-Latn": "brc-Latn-GY", + "brd": "brd-Deva-NP", + "brd-Deva": "brd-Deva-NP", + "brd-NP": "brd-Deva-NP", + "brf": "brf-Latn-CD", + "brf-CD": "brf-Latn-CD", + "brf-Latn": "brf-Latn-CD", + "brg": "brg-Latn-BO", + "brg-BO": "brg-Latn-BO", + "brg-Latn": "brg-Latn-BO", + "brh": "brh-Arab-PK", + "brh-Arab": "brh-Arab-PK", + "brh-PK": "brh-Arab-PK", + "bri": "bri-Latn-CM", + "bri-CM": "bri-Latn-CM", + "bri-Latn": "bri-Latn-CM", + "brj": "brj-Latn-VU", + "brj-Latn": "brj-Latn-VU", + "brj-VU": "brj-Latn-VU", + "brk": "brk-Arab-SD", + "brk-Arab": "brk-Arab-SD", + "brk-SD": "brk-Arab-SD", + "brl": "brl-Latn-BW", + "brl-BW": "brl-Latn-BW", + "brl-Latn": "brl-Latn-BW", + "brm": "brm-Latn-CD", + "brm-CD": "brm-Latn-CD", + "brm-Latn": "brm-Latn-CD", + "brn": "brn-Latn-CR", + "brn-CR": "brn-Latn-CR", + "brn-Latn": "brn-Latn-CR", + "bro": "bro-Tibt-BT", + "bro-BT": "bro-Tibt-BT", + "bro-Tibt": "bro-Tibt-BT", + "brp": "brp-Latn-ID", + "brp-ID": "brp-Latn-ID", + "brp-Latn": "brp-Latn-ID", + "brq": "brq-Latn-PG", + "brq-Latn": "brq-Latn-PG", + "brq-PG": "brq-Latn-PG", + "brr": "brr-Latn-SB", + "brr-Latn": "brr-Latn-SB", + "brr-SB": "brr-Latn-SB", + "brs": "brs-Latn-ID", + "brs-ID": "brs-Latn-ID", + "brs-Latn": "brs-Latn-ID", + "brt": "brt-Latn-NG", + "brt-Latn": "brt-Latn-NG", + "brt-NG": "brt-Latn-NG", + "bru": "bru-Latn-VN", + "bru-Latn": "bru-Latn-VN", + "bru-VN": "bru-Latn-VN", + "brv": "brv-Laoo-LA", + "brv-LA": "brv-Laoo-LA", + "brv-Laoo": "brv-Laoo-LA", + "brw": "brw-Knda-IN", + "brw-IN": "brw-Knda-IN", + "brw-Knda": "brw-Knda-IN", + "brx": "brx-Deva-IN", + "brx-Deva": "brx-Deva-IN", + "brx-IN": "brx-Deva-IN", + "bry": "bry-Latn-PG", + "bry-Latn": "bry-Latn-PG", + "bry-PG": "bry-Latn-PG", + "brz": "brz-Latn-PG", + "brz-Latn": "brz-Latn-PG", + "brz-PG": "brz-Latn-PG", + "bs": "bs-Latn-BA", + "bs-BA": "bs-Latn-BA", + "bs-Latn": "bs-Latn-BA", + "bsa": "bsa-Latn-ID", + "bsa-ID": "bsa-Latn-ID", + "bsa-Latn": "bsa-Latn-ID", + "bsb": "bsb-Latn-BN", + "bsb-BN": "bsb-Latn-BN", + "bsb-Latn": "bsb-Latn-BN", + "bsc": "bsc-Latn-SN", + "bsc-Latn": "bsc-Latn-SN", + "bsc-SN": "bsc-Latn-SN", + "bse": "bse-Latn-CM", + "bse-CM": "bse-Latn-CM", + "bse-Latn": "bse-Latn-CM", + "bsf": "bsf-Latn-NG", + "bsf-Latn": "bsf-Latn-NG", + "bsf-NG": "bsf-Latn-NG", + "bsh": "bsh-Arab-AF", + "bsh-AF": "bsh-Arab-AF", + "bsh-Arab": "bsh-Arab-AF", + "bsi": "bsi-Latn-CM", + "bsi-CM": "bsi-Latn-CM", + "bsi-Latn": "bsi-Latn-CM", + "bsj": "bsj-Latn-NG", + "bsj-Latn": "bsj-Latn-NG", + "bsj-NG": "bsj-Latn-NG", + "bsk": "bsk-Arab-PK", + "bsk-Arab": "bsk-Arab-PK", + "bsk-PK": "bsk-Arab-PK", + "bsl": "bsl-Latn-NG", + "bsl-Latn": "bsl-Latn-NG", + "bsl-NG": "bsl-Latn-NG", + "bsm": "bsm-Latn-ID", + "bsm-ID": "bsm-Latn-ID", + "bsm-Latn": "bsm-Latn-ID", + "bsn": "bsn-Latn-CO", + "bsn-CO": "bsn-Latn-CO", + "bsn-Latn": "bsn-Latn-CO", + "bso": "bso-Latn-TD", + "bso-Latn": "bso-Latn-TD", + "bso-TD": "bso-Latn-TD", + "bsp": "bsp-Latn-GN", + "bsp-GN": "bsp-Latn-GN", + "bsp-Latn": "bsp-Latn-GN", + "bsq": "bsq-Bass-LR", + "bsq-Bass": "bsq-Bass-LR", + "bsq-LR": "bsq-Bass-LR", + "bsr": "bsr-Latn-NG", + "bsr-Latn": "bsr-Latn-NG", + "bsr-NG": "bsr-Latn-NG", + "bss": "bss-Latn-CM", + "bss-CM": "bss-Latn-CM", + "bss-Latn": "bss-Latn-CM", + "bst": "bst-Ethi-ET", + "bst-ET": "bst-Ethi-ET", + "bst-Ethi": "bst-Ethi-ET", + "bsu": "bsu-Latn-ID", + "bsu-ID": "bsu-Latn-ID", + "bsu-Latn": "bsu-Latn-ID", + "bsv": "bsv-Latn-GN", + "bsv-GN": "bsv-Latn-GN", + "bsv-Latn": "bsv-Latn-GN", + "bsw": "bsw-Latn-ET", + "bsw-ET": "bsw-Latn-ET", + "bsw-Latn": "bsw-Latn-ET", + "bsx": "bsx-Latn-NG", + "bsx-Latn": "bsx-Latn-NG", + "bsx-NG": "bsx-Latn-NG", + "bsy": "bsy-Latn-MY", + "bsy-Latn": "bsy-Latn-MY", + "bsy-MY": "bsy-Latn-MY", + "bta": "bta-Latn-NG", + "bta-Latn": "bta-Latn-NG", + "bta-NG": "bta-Latn-NG", + "btc": "btc-Latn-CM", + "btc-CM": "btc-Latn-CM", + "btc-Latn": "btc-Latn-CM", + "btd": "btd-Batk-ID", + "btd-Batk": "btd-Batk-ID", + "btd-ID": "btd-Batk-ID", + "bte": "bte-Latn-NG", + "bte-Latn": "bte-Latn-NG", + "bte-NG": "bte-Latn-NG", + "btf": "btf-Latn-TD", + "btf-Latn": "btf-Latn-TD", + "btf-TD": "btf-Latn-TD", + "btg": "btg-Latn-CI", + "btg-CI": "btg-Latn-CI", + "btg-Latn": "btg-Latn-CI", + "bth": "bth-Latn-MY", + "bth-Latn": "bth-Latn-MY", + "bth-MY": "bth-Latn-MY", + "bti": "bti-Latn-ID", + "bti-ID": "bti-Latn-ID", + "bti-Latn": "bti-Latn-ID", + "btj": "btj-Latn-ID", + "btj-ID": "btj-Latn-ID", + "btj-Latn": "btj-Latn-ID", + "btm": "btm-Batk-ID", + "btm-Batk": "btm-Batk-ID", + "btm-ID": "btm-Batk-ID", + "btn": "btn-Latn-PH", + "btn-Latn": "btn-Latn-PH", + "btn-PH": "btn-Latn-PH", + "bto": "bto-Latn-PH", + "bto-Latn": "bto-Latn-PH", + "bto-PH": "bto-Latn-PH", + "btp": "btp-Latn-PG", + "btp-Latn": "btp-Latn-PG", + "btp-PG": "btp-Latn-PG", + "btq": "btq-Latn-MY", + "btq-Latn": "btq-Latn-MY", + "btq-MY": "btq-Latn-MY", + "btr": "btr-Latn-VU", + "btr-Latn": "btr-Latn-VU", + "btr-VU": "btr-Latn-VU", + "bts": "bts-Latn-ID", + "bts-ID": "bts-Latn-ID", + "bts-Latn": "bts-Latn-ID", + "btt": "btt-Latn-NG", + "btt-Latn": "btt-Latn-NG", + "btt-NG": "btt-Latn-NG", + "btu": "btu-Latn-NG", + "btu-Latn": "btu-Latn-NG", + "btu-NG": "btu-Latn-NG", + "btv": "btv-Deva-PK", + "btv-Deva": "btv-Deva-PK", + "btv-Deva-PK": "btv-Deva-PK", + "btv-PK": "btv-Deva-PK", + "btw": "btw-Latn-PH", + "btw-Latn": "btw-Latn-PH", + "btw-PH": "btw-Latn-PH", + "btx": "btx-Latn-ID", + "btx-ID": "btx-Latn-ID", + "btx-Latn": "btx-Latn-ID", + "bty": "bty-Latn-ID", + "bty-ID": "bty-Latn-ID", + "bty-Latn": "bty-Latn-ID", + "btz": "btz-Latn-ID", + "btz-ID": "btz-Latn-ID", + "btz-Latn": "btz-Latn-ID", + "bua": "bua-Cyrl-RU", + "bua-Cyrl": "bua-Cyrl-RU", + "bua-RU": "bua-Cyrl-RU", + "bub": "bub-Latn-TD", + "bub-Latn": "bub-Latn-TD", + "bub-TD": "bub-Latn-TD", + "buc": "buc-Latn-YT", + "buc-Latn": "buc-Latn-YT", + "buc-YT": "buc-Latn-YT", + "bud": "bud-Latn-TG", + "bud-Latn": "bud-Latn-TG", + "bud-TG": "bud-Latn-TG", + "bue": "bue-Latn-CA", + "bue-CA": "bue-Latn-CA", + "bue-Latn": "bue-Latn-CA", + "buf": "buf-Latn-CD", + "buf-CD": "buf-Latn-CD", + "buf-Latn": "buf-Latn-CD", + "bug": "bug-Latn-ID", + "bug-Bugi": "bug-Bugi-ID", + "bug-ID": "bug-Latn-ID", + "bug-Latn": "bug-Latn-ID", + "buh": "buh-Latn-CN", + "buh-CN": "buh-Latn-CN", + "buh-Latn": "buh-Latn-CN", + "bui": "bui-Latn-CG", + "bui-CG": "bui-Latn-CG", + "bui-Latn": "bui-Latn-CG", + "buj": "buj-Latn-NG", + "buj-Latn": "buj-Latn-NG", + "buj-NG": "buj-Latn-NG", + "buk": "buk-Latn-PG", + "buk-Latn": "buk-Latn-PG", + "buk-PG": "buk-Latn-PG", + "bum": "bum-Latn-CM", + "bum-CM": "bum-Latn-CM", + "bum-Latn": "bum-Latn-CM", + "bun": "bun-Latn-SL", + "bun-Latn": "bun-Latn-SL", + "bun-SL": "bun-Latn-SL", + "buo": "buo-Latn-PG", + "buo-Latn": "buo-Latn-PG", + "buo-PG": "buo-Latn-PG", + "bup": "bup-Latn-ID", + "bup-ID": "bup-Latn-ID", + "bup-Latn": "bup-Latn-ID", + "buq": "buq-Latn-PG", + "buq-Latn": "buq-Latn-PG", + "buq-PG": "buq-Latn-PG", + "bus": "bus-Latn-NG", + "bus-Latn": "bus-Latn-NG", + "bus-NG": "bus-Latn-NG", + "but": "but-Latn-PG", + "but-Latn": "but-Latn-PG", + "but-PG": "but-Latn-PG", + "buu": "buu-Latn-CD", + "buu-CD": "buu-Latn-CD", + "buu-Latn": "buu-Latn-CD", + "buv": "buv-Latn-PG", + "buv-Latn": "buv-Latn-PG", + "buv-PG": "buv-Latn-PG", + "buw": "buw-Latn-GA", + "buw-GA": "buw-Latn-GA", + "buw-Latn": "buw-Latn-GA", + "bux": "bux-Latn-NG", + "bux-Latn": "bux-Latn-NG", + "bux-NG": "bux-Latn-NG", + "buy": "buy-Latn-SL", + "buy-Latn": "buy-Latn-SL", + "buy-SL": "buy-Latn-SL", + "buz": "buz-Latn-NG", + "buz-Latn": "buz-Latn-NG", + "buz-NG": "buz-Latn-NG", + "bva": "bva-Latn-TD", + "bva-Latn": "bva-Latn-TD", + "bva-TD": "bva-Latn-TD", + "bvb": "bvb-Latn-GQ", + "bvb-GQ": "bvb-Latn-GQ", + "bvb-Latn": "bvb-Latn-GQ", + "bvc": "bvc-Latn-SB", + "bvc-Latn": "bvc-Latn-SB", + "bvc-SB": "bvc-Latn-SB", + "bvd": "bvd-Latn-SB", + "bvd-Latn": "bvd-Latn-SB", + "bvd-SB": "bvd-Latn-SB", + "bve": "bve-Latn-ID", + "bve-ID": "bve-Latn-ID", + "bve-Latn": "bve-Latn-ID", + "bvf": "bvf-Latn-TD", + "bvf-Latn": "bvf-Latn-TD", + "bvf-TD": "bvf-Latn-TD", + "bvg": "bvg-Latn-CM", + "bvg-CM": "bvg-Latn-CM", + "bvg-Latn": "bvg-Latn-CM", + "bvh": "bvh-Latn-NG", + "bvh-Latn": "bvh-Latn-NG", + "bvh-NG": "bvh-Latn-NG", + "bvi": "bvi-Latn-SS", + "bvi-Latn": "bvi-Latn-SS", + "bvi-SS": "bvi-Latn-SS", + "bvj": "bvj-Latn-NG", + "bvj-Latn": "bvj-Latn-NG", + "bvj-NG": "bvj-Latn-NG", + "bvk": "bvk-Latn-ID", + "bvk-ID": "bvk-Latn-ID", + "bvk-Latn": "bvk-Latn-ID", + "bvm": "bvm-Latn-CM", + "bvm-CM": "bvm-Latn-CM", + "bvm-Latn": "bvm-Latn-CM", + "bvn": "bvn-Latn-PG", + "bvn-Latn": "bvn-Latn-PG", + "bvn-PG": "bvn-Latn-PG", + "bvo": "bvo-Latn-TD", + "bvo-Latn": "bvo-Latn-TD", + "bvo-TD": "bvo-Latn-TD", + "bvq": "bvq-Latn-CF", + "bvq-CF": "bvq-Latn-CF", + "bvq-Latn": "bvq-Latn-CF", + "bvr": "bvr-Latn-AU", + "bvr-AU": "bvr-Latn-AU", + "bvr-Latn": "bvr-Latn-AU", + "bvt": "bvt-Latn-ID", + "bvt-ID": "bvt-Latn-ID", + "bvt-Latn": "bvt-Latn-ID", + "bvu": "bvu-Latn-ID", + "bvu-ID": "bvu-Latn-ID", + "bvu-Latn": "bvu-Latn-ID", + "bvv": "bvv-Latn-VE", + "bvv-Latn": "bvv-Latn-VE", + "bvv-VE": "bvv-Latn-VE", + "bvw": "bvw-Latn-NG", + "bvw-Latn": "bvw-Latn-NG", + "bvw-NG": "bvw-Latn-NG", + "bvx": "bvx-Latn-CG", + "bvx-CG": "bvx-Latn-CG", + "bvx-Latn": "bvx-Latn-CG", + "bvy": "bvy-Latn-PH", + "bvy-Latn": "bvy-Latn-PH", + "bvy-PH": "bvy-Latn-PH", + "bvz": "bvz-Latn-ID", + "bvz-ID": "bvz-Latn-ID", + "bvz-Latn": "bvz-Latn-ID", + "bwa": "bwa-Latn-NC", + "bwa-Latn": "bwa-Latn-NC", + "bwa-NC": "bwa-Latn-NC", + "bwb": "bwb-Latn-FJ", + "bwb-FJ": "bwb-Latn-FJ", + "bwb-Latn": "bwb-Latn-FJ", + "bwc": "bwc-Latn-ZM", + "bwc-Latn": "bwc-Latn-ZM", + "bwc-ZM": "bwc-Latn-ZM", + "bwd": "bwd-Latn-PG", + "bwd-Latn": "bwd-Latn-PG", + "bwd-PG": "bwd-Latn-PG", + "bwe": "bwe-Mymr-MM", + "bwe-MM": "bwe-Mymr-MM", + "bwe-Mymr": "bwe-Mymr-MM", + "bwf": "bwf-Latn-PG", + "bwf-Latn": "bwf-Latn-PG", + "bwf-PG": "bwf-Latn-PG", + "bwg": "bwg-Latn-MZ", + "bwg-Latn": "bwg-Latn-MZ", + "bwg-MZ": "bwg-Latn-MZ", + "bwh": "bwh-Latn-CM", + "bwh-CM": "bwh-Latn-CM", + "bwh-Latn": "bwh-Latn-CM", + "bwi": "bwi-Latn-VE", + "bwi-Latn": "bwi-Latn-VE", + "bwi-VE": "bwi-Latn-VE", + "bwj": "bwj-Latn-BF", + "bwj-BF": "bwj-Latn-BF", + "bwj-Latn": "bwj-Latn-BF", + "bwk": "bwk-Latn-PG", + "bwk-Latn": "bwk-Latn-PG", + "bwk-PG": "bwk-Latn-PG", + "bwl": "bwl-Latn-CD", + "bwl-CD": "bwl-Latn-CD", + "bwl-Latn": "bwl-Latn-CD", + "bwm": "bwm-Latn-PG", + "bwm-Latn": "bwm-Latn-PG", + "bwm-PG": "bwm-Latn-PG", + "bwo": "bwo-Latn-ET", + "bwo-ET": "bwo-Latn-ET", + "bwo-Latn": "bwo-Latn-ET", + "bwp": "bwp-Latn-ID", + "bwp-ID": "bwp-Latn-ID", + "bwp-Latn": "bwp-Latn-ID", + "bwq": "bwq-Latn-BF", + "bwq-BF": "bwq-Latn-BF", + "bwq-Latn": "bwq-Latn-BF", + "bwr": "bwr-Latn-NG", + "bwr-Latn": "bwr-Latn-NG", + "bwr-NG": "bwr-Latn-NG", + "bws": "bws-Latn-CD", + "bws-CD": "bws-Latn-CD", + "bws-Latn": "bws-Latn-CD", + "bwt": "bwt-Latn-CM", + "bwt-CM": "bwt-Latn-CM", + "bwt-Latn": "bwt-Latn-CM", + "bwu": "bwu-Latn-GH", + "bwu-GH": "bwu-Latn-GH", + "bwu-Latn": "bwu-Latn-GH", + "bww": "bww-Latn-CD", + "bww-CD": "bww-Latn-CD", + "bww-Latn": "bww-Latn-CD", + "bwx": "bwx-Latn-CN", + "bwx-CN": "bwx-Latn-CN", + "bwx-Latn": "bwx-Latn-CN", + "bwy": "bwy-Latn-BF", + "bwy-BF": "bwy-Latn-BF", + "bwy-Latn": "bwy-Latn-BF", + "bwz": "bwz-Latn-CG", + "bwz-CG": "bwz-Latn-CG", + "bwz-Latn": "bwz-Latn-CG", + "bxa": "bxa-Latn-SB", + "bxa-Latn": "bxa-Latn-SB", + "bxa-SB": "bxa-Latn-SB", + "bxb": "bxb-Latn-SS", + "bxb-Latn": "bxb-Latn-SS", + "bxb-SS": "bxb-Latn-SS", + "bxc": "bxc-Latn-GQ", + "bxc-GQ": "bxc-Latn-GQ", + "bxc-Latn": "bxc-Latn-GQ", + "bxf": "bxf-Latn-PG", + "bxf-Latn": "bxf-Latn-PG", + "bxf-PG": "bxf-Latn-PG", + "bxg": "bxg-Latn-CD", + "bxg-CD": "bxg-Latn-CD", + "bxg-Latn": "bxg-Latn-CD", + "bxh": "bxh-Latn-PG", + "bxh-Latn": "bxh-Latn-PG", + "bxh-PG": "bxh-Latn-PG", + "bxi": "bxi-Latn-AU", + "bxi-AU": "bxi-Latn-AU", + "bxi-Latn": "bxi-Latn-AU", + "bxj": "bxj-Latn-AU", + "bxj-AU": "bxj-Latn-AU", + "bxj-Latn": "bxj-Latn-AU", + "bxl": "bxl-Latn-BF", + "bxl-BF": "bxl-Latn-BF", + "bxl-Latn": "bxl-Latn-BF", + "bxm": "bxm-Cyrl-MN", + "bxm-Cyrl": "bxm-Cyrl-MN", + "bxm-MN": "bxm-Cyrl-MN", + "bxn": "bxn-Latn-AU", + "bxn-AU": "bxn-Latn-AU", + "bxn-Latn": "bxn-Latn-AU", + "bxo": "bxo-Latn-NG", + "bxo-Latn": "bxo-Latn-NG", + "bxo-NG": "bxo-Latn-NG", + "bxp": "bxp-Latn-CM", + "bxp-CM": "bxp-Latn-CM", + "bxp-Latn": "bxp-Latn-CM", + "bxq": "bxq-Latn-NG", + "bxq-Latn": "bxq-Latn-NG", + "bxq-NG": "bxq-Latn-NG", + "bxs": "bxs-Latn-CM", + "bxs-CM": "bxs-Latn-CM", + "bxs-Latn": "bxs-Latn-CM", + "bxu": "bxu-Mong-CN", + "bxu-CN": "bxu-Mong-CN", + "bxu-Mong": "bxu-Mong-CN", + "bxv": "bxv-Latn-TD", + "bxv-Latn": "bxv-Latn-TD", + "bxv-TD": "bxv-Latn-TD", + "bxw": "bxw-Latn-ML", + "bxw-Latn": "bxw-Latn-ML", + "bxw-ML": "bxw-Latn-ML", + "bxz": "bxz-Latn-PG", + "bxz-Latn": "bxz-Latn-PG", + "bxz-PG": "bxz-Latn-PG", + "bya": "bya-Latn-PH", + "bya-Latn": "bya-Latn-PH", + "bya-PH": "bya-Latn-PH", + "byb": "byb-Latn-CM", + "byb-CM": "byb-Latn-CM", + "byb-Latn": "byb-Latn-CM", + "byc": "byc-Latn-NG", + "byc-Latn": "byc-Latn-NG", + "byc-NG": "byc-Latn-NG", + "byd": "byd-Latn-ID", + "byd-ID": "byd-Latn-ID", + "byd-Latn": "byd-Latn-ID", + "bye": "bye-Latn-PG", + "bye-Latn": "bye-Latn-PG", + "bye-PG": "bye-Latn-PG", + "byf": "byf-Latn-NG", + "byf-Latn": "byf-Latn-NG", + "byf-NG": "byf-Latn-NG", + "byh": "byh-Deva-NP", + "byh-Deva": "byh-Deva-NP", + "byh-NP": "byh-Deva-NP", + "byi": "byi-Latn-CD", + "byi-CD": "byi-Latn-CD", + "byi-Latn": "byi-Latn-CD", + "byj": "byj-Latn-NG", + "byj-Latn": "byj-Latn-NG", + "byj-NG": "byj-Latn-NG", + "byk": "byk-Latn-CN", + "byk-CN": "byk-Latn-CN", + "byk-Latn": "byk-Latn-CN", + "byl": "byl-Latn-ID", + "byl-ID": "byl-Latn-ID", + "byl-Latn": "byl-Latn-ID", + "bym": "bym-Latn-AU", + "bym-AU": "bym-Latn-AU", + "bym-Latn": "bym-Latn-AU", + "byn": "byn-Ethi-ER", + "byn-ER": "byn-Ethi-ER", + "byn-Ethi": "byn-Ethi-ER", + "byp": "byp-Latn-NG", + "byp-Latn": "byp-Latn-NG", + "byp-NG": "byp-Latn-NG", + "byr": "byr-Latn-PG", + "byr-Latn": "byr-Latn-PG", + "byr-PG": "byr-Latn-PG", + "bys": "bys-Latn-NG", + "bys-Latn": "bys-Latn-NG", + "bys-NG": "bys-Latn-NG", + "byv": "byv-Latn-CM", + "byv-CM": "byv-Latn-CM", + "byv-Latn": "byv-Latn-CM", + "byw": "byw-Deva-NP", + "byw-Deva": "byw-Deva-NP", + "byw-NP": "byw-Deva-NP", + "byx": "byx-Latn-PG", + "byx-Latn": "byx-Latn-PG", + "byx-PG": "byx-Latn-PG", + "byz": "byz-Latn-PG", + "byz-Latn": "byz-Latn-PG", + "byz-PG": "byz-Latn-PG", + "bza": "bza-Latn-LR", + "bza-LR": "bza-Latn-LR", + "bza-Latn": "bza-Latn-LR", + "bzb": "bzb-Latn-ID", + "bzb-ID": "bzb-Latn-ID", + "bzb-Latn": "bzb-Latn-ID", + "bzc": "bzc-Latn-MG", + "bzc-Latn": "bzc-Latn-MG", + "bzc-MG": "bzc-Latn-MG", + "bzd": "bzd-Latn-CR", + "bzd-CR": "bzd-Latn-CR", + "bzd-Latn": "bzd-Latn-CR", + "bze": "bze-Latn-ML", + "bze-Latn": "bze-Latn-ML", + "bze-ML": "bze-Latn-ML", + "bzf": "bzf-Latn-PG", + "bzf-Latn": "bzf-Latn-PG", + "bzf-PG": "bzf-Latn-PG", + "bzh": "bzh-Latn-PG", + "bzh-Latn": "bzh-Latn-PG", + "bzh-PG": "bzh-Latn-PG", + "bzi": "bzi-Thai-TH", + "bzi-TH": "bzi-Thai-TH", + "bzi-Thai": "bzi-Thai-TH", + "bzj": "bzj-Latn-BZ", + "bzj-BZ": "bzj-Latn-BZ", + "bzj-Latn": "bzj-Latn-BZ", + "bzk": "bzk-Latn-NI", + "bzk-Latn": "bzk-Latn-NI", + "bzk-NI": "bzk-Latn-NI", + "bzl": "bzl-Latn-ID", + "bzl-ID": "bzl-Latn-ID", + "bzl-Latn": "bzl-Latn-ID", + "bzm": "bzm-Latn-CD", + "bzm-CD": "bzm-Latn-CD", + "bzm-Latn": "bzm-Latn-CD", + "bzn": "bzn-Latn-ID", + "bzn-ID": "bzn-Latn-ID", + "bzn-Latn": "bzn-Latn-ID", + "bzo": "bzo-Latn-CD", + "bzo-CD": "bzo-Latn-CD", + "bzo-Latn": "bzo-Latn-CD", + "bzp": "bzp-Latn-ID", + "bzp-ID": "bzp-Latn-ID", + "bzp-Latn": "bzp-Latn-ID", + "bzq": "bzq-Latn-ID", + "bzq-ID": "bzq-Latn-ID", + "bzq-Latn": "bzq-Latn-ID", + "bzr": "bzr-Latn-AU", + "bzr-AU": "bzr-Latn-AU", + "bzr-Latn": "bzr-Latn-AU", + "bzt": "bzt-Latn-001", + "bzt-001": "bzt-Latn-001", + "bzt-Latn": "bzt-Latn-001", + "bzu": "bzu-Latn-ID", + "bzu-ID": "bzu-Latn-ID", + "bzu-Latn": "bzu-Latn-ID", + "bzv": "bzv-Latn-CM", + "bzv-CM": "bzv-Latn-CM", + "bzv-Latn": "bzv-Latn-CM", + "bzw": "bzw-Latn-NG", + "bzw-Latn": "bzw-Latn-NG", + "bzw-NG": "bzw-Latn-NG", + "bzx": "bzx-Latn-ML", + "bzx-Latn": "bzx-Latn-ML", + "bzx-ML": "bzx-Latn-ML", + "bzy": "bzy-Latn-NG", + "bzy-Latn": "bzy-Latn-NG", + "bzy-NG": "bzy-Latn-NG", + "bzz": "bzz-Latn-NG", + "bzz-Latn": "bzz-Latn-NG", + "bzz-NG": "bzz-Latn-NG", + "ca": "ca-Latn-ES", + "ca-AD": "ca-Latn-AD", + "ca-ES": "ca-Latn-ES", + "ca-Latn": "ca-Latn-ES", + "caa": "caa-Latn-GT", + "caa-GT": "caa-Latn-GT", + "caa-Latn": "caa-Latn-GT", + "cab": "cab-Latn-HN", + "cab-HN": "cab-Latn-HN", + "cab-Latn": "cab-Latn-HN", + "cac": "cac-Latn-GT", + "cac-GT": "cac-Latn-GT", + "cac-Latn": "cac-Latn-GT", + "cad": "cad-Latn-US", + "cad-Latn": "cad-Latn-US", + "cad-US": "cad-Latn-US", + "cae": "cae-Latn-SN", + "cae-Latn": "cae-Latn-SN", + "cae-SN": "cae-Latn-SN", + "caf": "caf-Latn-CA", + "caf-CA": "caf-Latn-CA", + "caf-Latn": "caf-Latn-CA", + "cag": "cag-Latn-PY", + "cag-Latn": "cag-Latn-PY", + "cag-PY": "cag-Latn-PY", + "cah": "cah-Latn-PE", + "cah-Latn": "cah-Latn-PE", + "cah-PE": "cah-Latn-PE", + "caj": "caj-Latn-BO", + "caj-BO": "caj-Latn-BO", + "caj-Latn": "caj-Latn-BO", + "cak": "cak-Latn-GT", + "cak-GT": "cak-Latn-GT", + "cak-Latn": "cak-Latn-GT", + "cal": "cal-Latn-MP", + "cal-Latn": "cal-Latn-MP", + "cal-MP": "cal-Latn-MP", + "cam": "cam-Latn-NC", + "cam-Latn": "cam-Latn-NC", + "cam-NC": "cam-Latn-NC", + "can": "can-Latn-PG", + "can-Latn": "can-Latn-PG", + "can-PG": "can-Latn-PG", + "cao": "cao-Latn-BO", + "cao-BO": "cao-Latn-BO", + "cao-Latn": "cao-Latn-BO", + "cap": "cap-Latn-BO", + "cap-BO": "cap-Latn-BO", + "cap-Latn": "cap-Latn-BO", + "caq": "caq-Latn-IN", + "caq-IN": "caq-Latn-IN", + "caq-Latn": "caq-Latn-IN", + "car": "car-Latn-VE", + "car-Latn": "car-Latn-VE", + "car-VE": "car-Latn-VE", + "cas": "cas-Latn-BO", + "cas-BO": "cas-Latn-BO", + "cas-Latn": "cas-Latn-BO", + "cav": "cav-Latn-BO", + "cav-BO": "cav-Latn-BO", + "cav-Latn": "cav-Latn-BO", + "caw": "caw-Latn-BO", + "caw-BO": "caw-Latn-BO", + "caw-Latn": "caw-Latn-BO", + "cax": "cax-Latn-BO", + "cax-BO": "cax-Latn-BO", + "cax-Latn": "cax-Latn-BO", + "cay": "cay-Latn-CA", + "cay-CA": "cay-Latn-CA", + "cay-Latn": "cay-Latn-CA", + "caz": "caz-Latn-BO", + "caz-BO": "caz-Latn-BO", + "caz-Latn": "caz-Latn-BO", + "cbb": "cbb-Latn-CO", + "cbb-CO": "cbb-Latn-CO", + "cbb-Latn": "cbb-Latn-CO", + "cbc": "cbc-Latn-CO", + "cbc-CO": "cbc-Latn-CO", + "cbc-Latn": "cbc-Latn-CO", + "cbd": "cbd-Latn-CO", + "cbd-CO": "cbd-Latn-CO", + "cbd-Latn": "cbd-Latn-CO", + "cbg": "cbg-Latn-CO", + "cbg-CO": "cbg-Latn-CO", + "cbg-Latn": "cbg-Latn-CO", + "cbi": "cbi-Latn-EC", + "cbi-EC": "cbi-Latn-EC", + "cbi-Latn": "cbi-Latn-EC", + "cbj": "cbj-Latn-BJ", + "cbj-BJ": "cbj-Latn-BJ", + "cbj-Latn": "cbj-Latn-BJ", + "cbk": "cbk-Latn-PH", + "cbk-Latn": "cbk-Latn-PH", + "cbk-PH": "cbk-Latn-PH", + "cbl": "cbl-Latn-MM", + "cbl-Latn": "cbl-Latn-MM", + "cbl-MM": "cbl-Latn-MM", + "cbn": "cbn-Thai-TH", + "cbn-TH": "cbn-Thai-TH", + "cbn-Thai": "cbn-Thai-TH", + "cbo": "cbo-Latn-NG", + "cbo-Latn": "cbo-Latn-NG", + "cbo-NG": "cbo-Latn-NG", + "cbq": "cbq-Latn-NG", + "cbq-Latn": "cbq-Latn-NG", + "cbq-NG": "cbq-Latn-NG", + "cbr": "cbr-Latn-PE", + "cbr-Latn": "cbr-Latn-PE", + "cbr-PE": "cbr-Latn-PE", + "cbs": "cbs-Latn-PE", + "cbs-Latn": "cbs-Latn-PE", + "cbs-PE": "cbs-Latn-PE", + "cbt": "cbt-Latn-PE", + "cbt-Latn": "cbt-Latn-PE", + "cbt-PE": "cbt-Latn-PE", + "cbu": "cbu-Latn-PE", + "cbu-Latn": "cbu-Latn-PE", + "cbu-PE": "cbu-Latn-PE", + "cbv": "cbv-Latn-CO", + "cbv-CO": "cbv-Latn-CO", + "cbv-Latn": "cbv-Latn-CO", + "cbw": "cbw-Latn-PH", + "cbw-Latn": "cbw-Latn-PH", + "cbw-PH": "cbw-Latn-PH", + "cby": "cby-Latn-CO", + "cby-CO": "cby-Latn-CO", + "cby-Latn": "cby-Latn-CO", + "ccc": "ccc-Latn-PE", + "ccc-Latn": "ccc-Latn-PE", + "ccc-PE": "ccc-Latn-PE", + "ccd": "ccd-Latn-BR", + "ccd-BR": "ccd-Latn-BR", + "ccd-Latn": "ccd-Latn-BR", + "cce": "cce-Latn-MZ", + "cce-Latn": "cce-Latn-MZ", + "cce-MZ": "cce-Latn-MZ", + "ccg": "ccg-Latn-NG", + "ccg-Latn": "ccg-Latn-NG", + "ccg-NG": "ccg-Latn-NG", + "cch": "cch-Latn-NG", + "cch-Latn": "cch-Latn-NG", + "cch-NG": "cch-Latn-NG", + "ccj": "ccj-Latn-GW", + "ccj-GW": "ccj-Latn-GW", + "ccj-Latn": "ccj-Latn-GW", + "ccl": "ccl-Latn-TZ", + "ccl-Latn": "ccl-Latn-TZ", + "ccl-TZ": "ccl-Latn-TZ", + "ccm": "ccm-Latn-MY", + "ccm-Latn": "ccm-Latn-MY", + "ccm-MY": "ccm-Latn-MY", + "cco": "cco-Latn-MX", + "cco-Latn": "cco-Latn-MX", + "cco-MX": "cco-Latn-MX", + "ccp": "ccp-Cakm-BD", + "ccp-BD": "ccp-Cakm-BD", + "ccp-Cakm": "ccp-Cakm-BD", + "ccr": "ccr-Latn-SV", + "ccr-Latn": "ccr-Latn-SV", + "ccr-SV": "ccr-Latn-SV", + "cde": "cde-Telu-IN", + "cde-IN": "cde-Telu-IN", + "cde-Telu": "cde-Telu-IN", + "cdf": "cdf-Latn-IN", + "cdf-IN": "cdf-Latn-IN", + "cdf-Latn": "cdf-Latn-IN", + "cdh": "cdh-Deva-IN", + "cdh-Deva": "cdh-Deva-IN", + "cdh-IN": "cdh-Deva-IN", + "cdi": "cdi-Gujr-IN", + "cdi-Gujr": "cdi-Gujr-IN", + "cdi-IN": "cdi-Gujr-IN", + "cdj": "cdj-Deva-IN", + "cdj-Deva": "cdj-Deva-IN", + "cdj-IN": "cdj-Deva-IN", + "cdm": "cdm-Deva-NP", + "cdm-Deva": "cdm-Deva-NP", + "cdm-NP": "cdm-Deva-NP", + "cdo": "cdo-Hans-CN", + "cdo-CN": "cdo-Hans-CN", + "cdo-Hans": "cdo-Hans-CN", + "cdr": "cdr-Latn-NG", + "cdr-Latn": "cdr-Latn-NG", + "cdr-NG": "cdr-Latn-NG", + "cdz": "cdz-Beng-IN", + "cdz-Beng": "cdz-Beng-IN", + "cdz-IN": "cdz-Beng-IN", + "ce": "ce-Cyrl-RU", + "ce-Cyrl": "ce-Cyrl-RU", + "ce-RU": "ce-Cyrl-RU", + "cea": "cea-Latn-US", + "cea-Latn": "cea-Latn-US", + "cea-US": "cea-Latn-US", + "ceb": "ceb-Latn-PH", + "ceb-Latn": "ceb-Latn-PH", + "ceb-PH": "ceb-Latn-PH", + "ceg": "ceg-Latn-PY", + "ceg-Latn": "ceg-Latn-PY", + "ceg-PY": "ceg-Latn-PY", + "cek": "cek-Latn-MM", + "cek-Latn": "cek-Latn-MM", + "cek-MM": "cek-Latn-MM", + "cen": "cen-Latn-NG", + "cen-Latn": "cen-Latn-NG", + "cen-NG": "cen-Latn-NG", + "cet": "cet-Latn-NG", + "cet-Latn": "cet-Latn-NG", + "cet-NG": "cet-Latn-NG", + "cey": "cey-Latn-MM", + "cey-Latn": "cey-Latn-MM", + "cey-MM": "cey-Latn-MM", + "cfa": "cfa-Latn-NG", + "cfa-Latn": "cfa-Latn-NG", + "cfa-NG": "cfa-Latn-NG", + "cfd": "cfd-Latn-NG", + "cfd-Latn": "cfd-Latn-NG", + "cfd-NG": "cfd-Latn-NG", + "cfg": "cfg-Latn-NG", + "cfg-Latn": "cfg-Latn-NG", + "cfg-NG": "cfg-Latn-NG", + "cfm": "cfm-Latn-MM", + "cfm-Latn": "cfm-Latn-MM", + "cfm-MM": "cfm-Latn-MM", + "cga": "cga-Latn-PG", + "cga-Latn": "cga-Latn-PG", + "cga-PG": "cga-Latn-PG", + "cgc": "cgc-Latn-PH", + "cgc-Latn": "cgc-Latn-PH", + "cgc-PH": "cgc-Latn-PH", + "cgg": "cgg-Latn-UG", + "cgg-Latn": "cgg-Latn-UG", + "cgg-UG": "cgg-Latn-UG", + "cgk": "cgk-Tibt-BT", + "cgk-BT": "cgk-Tibt-BT", + "cgk-Tibt": "cgk-Tibt-BT", + "ch": "ch-Latn-GU", + "ch-GU": "ch-Latn-GU", + "ch-Latn": "ch-Latn-GU", + "chb": "chb-Latn-CO", + "chb-CO": "chb-Latn-CO", + "chb-Latn": "chb-Latn-CO", + "chd": "chd-Latn-MX", + "chd-Latn": "chd-Latn-MX", + "chd-MX": "chd-Latn-MX", + "chf": "chf-Latn-MX", + "chf-Latn": "chf-Latn-MX", + "chf-MX": "chf-Latn-MX", + "chg": "chg-Arab-TM", + "chg-Arab": "chg-Arab-TM", + "chg-TM": "chg-Arab-TM", + "chh": "chh-Latn-US", + "chh-Latn": "chh-Latn-US", + "chh-US": "chh-Latn-US", + "chj": "chj-Latn-MX", + "chj-Latn": "chj-Latn-MX", + "chj-MX": "chj-Latn-MX", + "chk": "chk-Latn-FM", + "chk-FM": "chk-Latn-FM", + "chk-Latn": "chk-Latn-FM", + "chl": "chl-Latn-US", + "chl-Latn": "chl-Latn-US", + "chl-US": "chl-Latn-US", + "chm": "chm-Cyrl-RU", + "chm-Cyrl": "chm-Cyrl-RU", + "chm-RU": "chm-Cyrl-RU", + "chn": "chn-Latn-US", + "chn-Latn": "chn-Latn-US", + "chn-US": "chn-Latn-US", + "cho": "cho-Latn-US", + "cho-Latn": "cho-Latn-US", + "cho-US": "cho-Latn-US", + "chp": "chp-Latn-CA", + "chp-CA": "chp-Latn-CA", + "chp-Latn": "chp-Latn-CA", + "chq": "chq-Latn-MX", + "chq-Latn": "chq-Latn-MX", + "chq-MX": "chq-Latn-MX", + "chr": "chr-Cher-US", + "chr-Cher": "chr-Cher-US", + "chr-US": "chr-Cher-US", + "cht": "cht-Latn-PE", + "cht-Latn": "cht-Latn-PE", + "cht-PE": "cht-Latn-PE", + "chw": "chw-Latn-MZ", + "chw-Latn": "chw-Latn-MZ", + "chw-MZ": "chw-Latn-MZ", + "chx": "chx-Deva-NP", + "chx-Deva": "chx-Deva-NP", + "chx-NP": "chx-Deva-NP", + "chy": "chy-Latn-US", + "chy-Latn": "chy-Latn-US", + "chy-US": "chy-Latn-US", + "chz": "chz-Latn-MX", + "chz-Latn": "chz-Latn-MX", + "chz-MX": "chz-Latn-MX", + "cia": "cia-Latn-ID", + "cia-ID": "cia-Latn-ID", + "cia-Latn": "cia-Latn-ID", + "cib": "cib-Latn-BJ", + "cib-BJ": "cib-Latn-BJ", + "cib-Latn": "cib-Latn-BJ", + "cic": "cic-Latn-US", + "cic-Latn": "cic-Latn-US", + "cic-US": "cic-Latn-US", + "cie": "cie-Latn-NG", + "cie-Latn": "cie-Latn-NG", + "cie-NG": "cie-Latn-NG", + "cih": "cih-Deva-IN", + "cih-Deva": "cih-Deva-IN", + "cih-IN": "cih-Deva-IN", + "cim": "cim-Latn-IT", + "cim-IT": "cim-Latn-IT", + "cim-Latn": "cim-Latn-IT", + "cin": "cin-Latn-BR", + "cin-BR": "cin-Latn-BR", + "cin-Latn": "cin-Latn-BR", + "cip": "cip-Latn-MX", + "cip-Latn": "cip-Latn-MX", + "cip-MX": "cip-Latn-MX", + "cir": "cir-Latn-NC", + "cir-Latn": "cir-Latn-NC", + "cir-NC": "cir-Latn-NC", + "ciw": "ciw-Latn-US", + "ciw-Latn": "ciw-Latn-US", + "ciw-US": "ciw-Latn-US", + "ciy": "ciy-Latn-VE", + "ciy-Latn": "ciy-Latn-VE", + "ciy-VE": "ciy-Latn-VE", + "cja": "cja-Arab-KH", + "cja-Arab": "cja-Arab-KH", + "cja-Arab-KH": "cja-Arab-KH", + "cja-KH": "cja-Arab-KH", + "cje": "cje-Latn-VN", + "cje-Latn": "cje-Latn-VN", + "cje-VN": "cje-Latn-VN", + "cjh": "cjh-Latn-US", + "cjh-Latn": "cjh-Latn-US", + "cjh-US": "cjh-Latn-US", + "cji": "cji-Cyrl-RU", + "cji-Cyrl": "cji-Cyrl-RU", + "cji-RU": "cji-Cyrl-RU", + "cjk": "cjk-Latn-AO", + "cjk-AO": "cjk-Latn-AO", + "cjk-Latn": "cjk-Latn-AO", + "cjm": "cjm-Cham-VN", + "cjm-Cham": "cjm-Cham-VN", + "cjm-VN": "cjm-Cham-VN", + "cjn": "cjn-Latn-PG", + "cjn-Latn": "cjn-Latn-PG", + "cjn-PG": "cjn-Latn-PG", + "cjo": "cjo-Latn-PE", + "cjo-Latn": "cjo-Latn-PE", + "cjo-PE": "cjo-Latn-PE", + "cjp": "cjp-Latn-CR", + "cjp-CR": "cjp-Latn-CR", + "cjp-Latn": "cjp-Latn-CR", + "cjs": "cjs-Latn-RU", + "cjs-Latn": "cjs-Latn-RU", + "cjs-RU": "cjs-Latn-RU", + "cjv": "cjv-Latn-PG", + "cjv-Latn": "cjv-Latn-PG", + "cjv-PG": "cjv-Latn-PG", + "cjy": "cjy-Hans-CN", + "cjy-CN": "cjy-Hans-CN", + "cjy-Hans": "cjy-Hans-CN", + "ckb": "ckb-Arab-IQ", + "ckb-Arab": "ckb-Arab-IQ", + "ckb-IQ": "ckb-Arab-IQ", + "ckl": "ckl-Latn-NG", + "ckl-Latn": "ckl-Latn-NG", + "ckl-NG": "ckl-Latn-NG", + "ckm": "ckm-Latn-HR", + "ckm-HR": "ckm-Latn-HR", + "ckm-Latn": "ckm-Latn-HR", + "ckn": "ckn-Latn-MM", + "ckn-Latn": "ckn-Latn-MM", + "ckn-MM": "ckn-Latn-MM", + "cko": "cko-Latn-GH", + "cko-GH": "cko-Latn-GH", + "cko-Latn": "cko-Latn-GH", + "ckq": "ckq-Latn-TD", + "ckq-Latn": "ckq-Latn-TD", + "ckq-TD": "ckq-Latn-TD", + "ckr": "ckr-Latn-PG", + "ckr-Latn": "ckr-Latn-PG", + "ckr-PG": "ckr-Latn-PG", + "cks": "cks-Latn-NC", + "cks-Latn": "cks-Latn-NC", + "cks-NC": "cks-Latn-NC", + "ckt": "ckt-Cyrl-RU", + "ckt-Cyrl": "ckt-Cyrl-RU", + "ckt-RU": "ckt-Cyrl-RU", + "cku": "cku-Latn-US", + "cku-Latn": "cku-Latn-US", + "cku-US": "cku-Latn-US", + "ckv": "ckv-Latn-TW", + "ckv-Latn": "ckv-Latn-TW", + "ckv-TW": "ckv-Latn-TW", + "ckx": "ckx-Latn-CM", + "ckx-CM": "ckx-Latn-CM", + "ckx-Latn": "ckx-Latn-CM", + "cky": "cky-Latn-NG", + "cky-Latn": "cky-Latn-NG", + "cky-NG": "cky-Latn-NG", + "ckz": "ckz-Latn-GT", + "ckz-GT": "ckz-Latn-GT", + "ckz-Latn": "ckz-Latn-GT", + "cla": "cla-Latn-NG", + "cla-Latn": "cla-Latn-NG", + "cla-NG": "cla-Latn-NG", + "clc": "clc-Latn-CA", + "clc-CA": "clc-Latn-CA", + "clc-Latn": "clc-Latn-CA", + "cle": "cle-Latn-MX", + "cle-Latn": "cle-Latn-MX", + "cle-MX": "cle-Latn-MX", + "clh": "clh-Arab-PK", + "clh-Arab": "clh-Arab-PK", + "clh-PK": "clh-Arab-PK", + "cli": "cli-Latn-GH", + "cli-GH": "cli-Latn-GH", + "cli-Latn": "cli-Latn-GH", + "clj": "clj-Latn-MM", + "clj-Latn": "clj-Latn-MM", + "clj-MM": "clj-Latn-MM", + "clk": "clk-Latn-IN", + "clk-IN": "clk-Latn-IN", + "clk-Latn": "clk-Latn-IN", + "cll": "cll-Latn-GH", + "cll-GH": "cll-Latn-GH", + "cll-Latn": "cll-Latn-GH", + "clm": "clm-Latn-US", + "clm-Latn": "clm-Latn-US", + "clm-US": "clm-Latn-US", + "clo": "clo-Latn-MX", + "clo-Latn": "clo-Latn-MX", + "clo-MX": "clo-Latn-MX", + "clt": "clt-Latn-MM", + "clt-Latn": "clt-Latn-MM", + "clt-MM": "clt-Latn-MM", + "clu": "clu-Latn-PH", + "clu-Latn": "clu-Latn-PH", + "clu-PH": "clu-Latn-PH", + "clw": "clw-Cyrl-RU", + "clw-Cyrl": "clw-Cyrl-RU", + "clw-RU": "clw-Cyrl-RU", + "cly": "cly-Latn-MX", + "cly-Latn": "cly-Latn-MX", + "cly-MX": "cly-Latn-MX", + "cma": "cma-Latn-VN", + "cma-Latn": "cma-Latn-VN", + "cma-VN": "cma-Latn-VN", + "cme": "cme-Latn-BF", + "cme-BF": "cme-Latn-BF", + "cme-Latn": "cme-Latn-BF", + "cmg": "cmg-Soyo-MN", + "cmg-MN": "cmg-Soyo-MN", + "cmg-Soyo": "cmg-Soyo-MN", + "cmg-Zanb": "cmg-Zanb-MN", + "cmi": "cmi-Latn-CO", + "cmi-CO": "cmi-Latn-CO", + "cmi-Latn": "cmi-Latn-CO", + "cml": "cml-Latn-ID", + "cml-ID": "cml-Latn-ID", + "cml-Latn": "cml-Latn-ID", + "cmo": "cmo-Latn-VN", + "cmo-Latn": "cmo-Latn-VN", + "cmo-VN": "cmo-Latn-VN", + "cmr": "cmr-Latn-MM", + "cmr-Latn": "cmr-Latn-MM", + "cmr-MM": "cmr-Latn-MM", + "cms": "cms-Latn-IT", + "cms-IT": "cms-Latn-IT", + "cms-Latn": "cms-Latn-IT", + "cmt": "cmt-Latn-ZA", + "cmt-Latn": "cmt-Latn-ZA", + "cmt-ZA": "cmt-Latn-ZA", + "cna": "cna-Tibt-IN", + "cna-IN": "cna-Tibt-IN", + "cna-Tibt": "cna-Tibt-IN", + "cnb": "cnb-Latn-MM", + "cnb-Latn": "cnb-Latn-MM", + "cnb-MM": "cnb-Latn-MM", + "cnc": "cnc-Latn-VN", + "cnc-Latn": "cnc-Latn-VN", + "cnc-VN": "cnc-Latn-VN", + "cng": "cng-Latn-CN", + "cng-CN": "cng-Latn-CN", + "cng-Latn": "cng-Latn-CN", + "cnh": "cnh-Latn-MM", + "cnh-Latn": "cnh-Latn-MM", + "cnh-MM": "cnh-Latn-MM", + "cni": "cni-Latn-PE", + "cni-Latn": "cni-Latn-PE", + "cni-PE": "cni-Latn-PE", + "cnk": "cnk-Latn-MM", + "cnk-Latn": "cnk-Latn-MM", + "cnk-MM": "cnk-Latn-MM", + "cnl": "cnl-Latn-MX", + "cnl-Latn": "cnl-Latn-MX", + "cnl-MX": "cnl-Latn-MX", + "cnp": "cnp-Hans-CN", + "cnp-CN": "cnp-Hans-CN", + "cnp-Hans": "cnp-Hans-CN", + "cnq": "cnq-Latn-CM", + "cnq-CM": "cnq-Latn-CM", + "cnq-Latn": "cnq-Latn-CM", + "cnr": "cnr-Cyrl-ME", + "cnr-Cyrl": "cnr-Cyrl-ME", + "cnr-ME": "cnr-Cyrl-ME", + "cns": "cns-Latn-ID", + "cns-ID": "cns-Latn-ID", + "cns-Latn": "cns-Latn-ID", + "cnt": "cnt-Latn-MX", + "cnt-Latn": "cnt-Latn-MX", + "cnt-MX": "cnt-Latn-MX", + "cnw": "cnw-Latn-MM", + "cnw-Latn": "cnw-Latn-MM", + "cnw-MM": "cnw-Latn-MM", + "cnx": "cnx-Latn-GB", + "cnx-GB": "cnx-Latn-GB", + "cnx-Latn": "cnx-Latn-GB", + "co": "co-Latn-FR", + "co-FR": "co-Latn-FR", + "co-Latn": "co-Latn-FR", + "coa": "coa-Latn-AU", + "coa-AU": "coa-Latn-AU", + "coa-Latn": "coa-Latn-AU", + "cob": "cob-Latn-MX", + "cob-Latn": "cob-Latn-MX", + "cob-MX": "cob-Latn-MX", + "coc": "coc-Latn-MX", + "coc-Latn": "coc-Latn-MX", + "coc-MX": "coc-Latn-MX", + "cod": "cod-Latn-PE", + "cod-Latn": "cod-Latn-PE", + "cod-PE": "cod-Latn-PE", + "coe": "coe-Latn-CO", + "coe-CO": "coe-Latn-CO", + "coe-Latn": "coe-Latn-CO", + "cof": "cof-Latn-EC", + "cof-EC": "cof-Latn-EC", + "cof-Latn": "cof-Latn-EC", + "cog": "cog-Thai-TH", + "cog-TH": "cog-Thai-TH", + "cog-Thai": "cog-Thai-TH", + "coh": "coh-Latn-KE", + "coh-KE": "coh-Latn-KE", + "coh-Latn": "coh-Latn-KE", + "coj": "coj-Latn-MX", + "coj-Latn": "coj-Latn-MX", + "coj-MX": "coj-Latn-MX", + "cok": "cok-Latn-MX", + "cok-Latn": "cok-Latn-MX", + "cok-MX": "cok-Latn-MX", + "col": "col-Latn-US", + "col-Latn": "col-Latn-US", + "col-US": "col-Latn-US", + "com": "com-Latn-US", + "com-Latn": "com-Latn-US", + "com-US": "com-Latn-US", + "coo": "coo-Latn-CA", + "coo-CA": "coo-Latn-CA", + "coo-Latn": "coo-Latn-CA", + "cop": "cop-Copt-EG", + "cop-Copt": "cop-Copt-EG", + "cop-EG": "cop-Copt-EG", + "coq": "coq-Latn-US", + "coq-Latn": "coq-Latn-US", + "coq-US": "coq-Latn-US", + "cot": "cot-Latn-PE", + "cot-Latn": "cot-Latn-PE", + "cot-PE": "cot-Latn-PE", + "cou": "cou-Latn-SN", + "cou-Latn": "cou-Latn-SN", + "cou-SN": "cou-Latn-SN", + "cox": "cox-Latn-PE", + "cox-Latn": "cox-Latn-PE", + "cox-PE": "cox-Latn-PE", + "coz": "coz-Latn-MX", + "coz-Latn": "coz-Latn-MX", + "coz-MX": "coz-Latn-MX", + "cpa": "cpa-Latn-MX", + "cpa-Latn": "cpa-Latn-MX", + "cpa-MX": "cpa-Latn-MX", + "cpb": "cpb-Latn-PE", + "cpb-Latn": "cpb-Latn-PE", + "cpb-PE": "cpb-Latn-PE", + "cpc": "cpc-Latn-PE", + "cpc-Latn": "cpc-Latn-PE", + "cpc-PE": "cpc-Latn-PE", + "cpg": "cpg-Grek-GR", + "cpg-GR": "cpg-Grek-GR", + "cpg-Grek": "cpg-Grek-GR", + "cpi": "cpi-Latn-NR", + "cpi-Latn": "cpi-Latn-NR", + "cpi-NR": "cpi-Latn-NR", + "cpn": "cpn-Latn-GH", + "cpn-GH": "cpn-Latn-GH", + "cpn-Latn": "cpn-Latn-GH", + "cpo": "cpo-Latn-BF", + "cpo-BF": "cpo-Latn-BF", + "cpo-Latn": "cpo-Latn-BF", + "cps": "cps-Latn-PH", + "cps-Latn": "cps-Latn-PH", + "cps-PH": "cps-Latn-PH", + "cpu": "cpu-Latn-PE", + "cpu-Latn": "cpu-Latn-PE", + "cpu-PE": "cpu-Latn-PE", + "cpx": "cpx-Latn-CN", + "cpx-CN": "cpx-Latn-CN", + "cpx-Latn": "cpx-Latn-CN", + "cpy": "cpy-Latn-PE", + "cpy-Latn": "cpy-Latn-PE", + "cpy-PE": "cpy-Latn-PE", + "cqd": "cqd-Latn-CN", + "cqd-CN": "cqd-Latn-CN", + "cqd-Latn": "cqd-Latn-CN", + "cr": "cr-Cans-CA", + "cr-CA": "cr-Cans-CA", + "cr-Cans": "cr-Cans-CA", + "cra": "cra-Latn-ET", + "cra-ET": "cra-Latn-ET", + "cra-Latn": "cra-Latn-ET", + "crb": "crb-Latn-VC", + "crb-Latn": "crb-Latn-VC", + "crb-VC": "crb-Latn-VC", + "crc": "crc-Latn-VU", + "crc-Latn": "crc-Latn-VU", + "crc-VU": "crc-Latn-VU", + "crd": "crd-Latn-US", + "crd-Latn": "crd-Latn-US", + "crd-US": "crd-Latn-US", + "crf": "crf-Latn-CO", + "crf-CO": "crf-Latn-CO", + "crf-Latn": "crf-Latn-CO", + "crg": "crg-Latn-CA", + "crg-CA": "crg-Latn-CA", + "crg-Latn": "crg-Latn-CA", + "crh": "crh-Cyrl-UA", + "crh-Cyrl": "crh-Cyrl-UA", + "crh-UA": "crh-Cyrl-UA", + "cri": "cri-Latn-ST", + "cri-Latn": "cri-Latn-ST", + "cri-ST": "cri-Latn-ST", + "crj": "crj-Cans-CA", + "crj-CA": "crj-Cans-CA", + "crj-Cans": "crj-Cans-CA", + "crk": "crk-Cans-CA", + "crk-CA": "crk-Cans-CA", + "crk-Cans": "crk-Cans-CA", + "crl": "crl-Cans-CA", + "crl-CA": "crl-Cans-CA", + "crl-Cans": "crl-Cans-CA", + "crm": "crm-Cans-CA", + "crm-CA": "crm-Cans-CA", + "crm-Cans": "crm-Cans-CA", + "crn": "crn-Latn-MX", + "crn-Latn": "crn-Latn-MX", + "crn-MX": "crn-Latn-MX", + "cro": "cro-Latn-US", + "cro-Latn": "cro-Latn-US", + "cro-US": "cro-Latn-US", + "crq": "crq-Latn-AR", + "crq-AR": "crq-Latn-AR", + "crq-Latn": "crq-Latn-AR", + "crs": "crs-Latn-SC", + "crs-Latn": "crs-Latn-SC", + "crs-SC": "crs-Latn-SC", + "crt": "crt-Latn-AR", + "crt-AR": "crt-Latn-AR", + "crt-Latn": "crt-Latn-AR", + "crv": "crv-Latn-IN", + "crv-IN": "crv-Latn-IN", + "crv-Latn": "crv-Latn-IN", + "crw": "crw-Latn-VN", + "crw-Latn": "crw-Latn-VN", + "crw-VN": "crw-Latn-VN", + "crx": "crx-Latn-CA", + "crx-CA": "crx-Latn-CA", + "crx-Latn": "crx-Latn-CA", + "cry": "cry-Latn-NG", + "cry-Latn": "cry-Latn-NG", + "cry-NG": "cry-Latn-NG", + "crz": "crz-Latn-US", + "crz-Latn": "crz-Latn-US", + "crz-US": "crz-Latn-US", + "cs": "cs-Latn-CZ", + "cs-CZ": "cs-Latn-CZ", + "cs-Latn": "cs-Latn-CZ", + "csa": "csa-Latn-MX", + "csa-Latn": "csa-Latn-MX", + "csa-MX": "csa-Latn-MX", + "csb": "csb-Latn-PL", + "csb-Latn": "csb-Latn-PL", + "csb-PL": "csb-Latn-PL", + "csh": "csh-Mymr-MM", + "csh-MM": "csh-Mymr-MM", + "csh-Mymr": "csh-Mymr-MM", + "csj": "csj-Latn-MM", + "csj-Latn": "csj-Latn-MM", + "csj-MM": "csj-Latn-MM", + "csk": "csk-Latn-SN", + "csk-Latn": "csk-Latn-SN", + "csk-SN": "csk-Latn-SN", + "csm": "csm-Latn-US", + "csm-Latn": "csm-Latn-US", + "csm-US": "csm-Latn-US", + "cso": "cso-Latn-MX", + "cso-Latn": "cso-Latn-MX", + "cso-MX": "cso-Latn-MX", + "csp": "csp-Hans-CN", + "csp-CN": "csp-Hans-CN", + "csp-Hans": "csp-Hans-CN", + "css": "css-Latn-US", + "css-Latn": "css-Latn-US", + "css-US": "css-Latn-US", + "cst": "cst-Latn-US", + "cst-Latn": "cst-Latn-US", + "cst-US": "cst-Latn-US", + "csv": "csv-Latn-MM", + "csv-Latn": "csv-Latn-MM", + "csv-MM": "csv-Latn-MM", + "csw": "csw-Cans-CA", + "csw-CA": "csw-Cans-CA", + "csw-Cans": "csw-Cans-CA", + "csy": "csy-Latn-MM", + "csy-Latn": "csy-Latn-MM", + "csy-MM": "csy-Latn-MM", + "csz": "csz-Latn-US", + "csz-Latn": "csz-Latn-US", + "csz-US": "csz-Latn-US", + "cta": "cta-Latn-MX", + "cta-Latn": "cta-Latn-MX", + "cta-MX": "cta-Latn-MX", + "ctc": "ctc-Latn-US", + "ctc-Latn": "ctc-Latn-US", + "ctc-US": "ctc-Latn-US", + "ctd": "ctd-Pauc-MM", + "ctd-MM": "ctd-Pauc-MM", + "ctd-Pauc": "ctd-Pauc-MM", + "cte": "cte-Latn-MX", + "cte-Latn": "cte-Latn-MX", + "cte-MX": "cte-Latn-MX", + "ctg": "ctg-Beng-BD", + "ctg-BD": "ctg-Beng-BD", + "ctg-Beng": "ctg-Beng-BD", + "cth": "cth-Latn-MM", + "cth-Latn": "cth-Latn-MM", + "cth-MM": "cth-Latn-MM", + "ctl": "ctl-Latn-MX", + "ctl-Latn": "ctl-Latn-MX", + "ctl-MX": "ctl-Latn-MX", + "ctm": "ctm-Latn-US", + "ctm-Latn": "ctm-Latn-US", + "ctm-US": "ctm-Latn-US", + "ctn": "ctn-Deva-NP", + "ctn-Deva": "ctn-Deva-NP", + "ctn-NP": "ctn-Deva-NP", + "cto": "cto-Latn-CO", + "cto-CO": "cto-Latn-CO", + "cto-Latn": "cto-Latn-CO", + "ctp": "ctp-Latn-MX", + "ctp-Latn": "ctp-Latn-MX", + "ctp-MX": "ctp-Latn-MX", + "cts": "cts-Latn-PH", + "cts-Latn": "cts-Latn-PH", + "cts-PH": "cts-Latn-PH", + "ctt": "ctt-Taml-IN", + "ctt-IN": "ctt-Taml-IN", + "ctt-Taml": "ctt-Taml-IN", + "ctu": "ctu-Latn-MX", + "ctu-Latn": "ctu-Latn-MX", + "ctu-MX": "ctu-Latn-MX", + "cty": "cty-Taml-IN", + "cty-IN": "cty-Taml-IN", + "cty-Taml": "cty-Taml-IN", + "ctz": "ctz-Latn-MX", + "ctz-Latn": "ctz-Latn-MX", + "ctz-MX": "ctz-Latn-MX", + "cu": "cu-Cyrl-RU", + "cu-Cyrl": "cu-Cyrl-RU", + "cu-Glag": "cu-Glag-BG", + "cu-RU": "cu-Cyrl-RU", + "cua": "cua-Latn-VN", + "cua-Latn": "cua-Latn-VN", + "cua-VN": "cua-Latn-VN", + "cub": "cub-Latn-CO", + "cub-CO": "cub-Latn-CO", + "cub-Latn": "cub-Latn-CO", + "cuc": "cuc-Latn-MX", + "cuc-Latn": "cuc-Latn-MX", + "cuc-MX": "cuc-Latn-MX", + "cuh": "cuh-Latn-KE", + "cuh-KE": "cuh-Latn-KE", + "cuh-Latn": "cuh-Latn-KE", + "cui": "cui-Latn-CO", + "cui-CO": "cui-Latn-CO", + "cui-Latn": "cui-Latn-CO", + "cuj": "cuj-Latn-PE", + "cuj-Latn": "cuj-Latn-PE", + "cuj-PE": "cuj-Latn-PE", + "cuk": "cuk-Latn-PA", + "cuk-Latn": "cuk-Latn-PA", + "cuk-PA": "cuk-Latn-PA", + "cul": "cul-Latn-BR", + "cul-BR": "cul-Latn-BR", + "cul-Latn": "cul-Latn-BR", + "cuo": "cuo-Latn-VE", + "cuo-Latn": "cuo-Latn-VE", + "cuo-VE": "cuo-Latn-VE", + "cup": "cup-Latn-US", + "cup-Latn": "cup-Latn-US", + "cup-US": "cup-Latn-US", + "cut": "cut-Latn-MX", + "cut-Latn": "cut-Latn-MX", + "cut-MX": "cut-Latn-MX", + "cuu": "cuu-Lana-CN", + "cuu-CN": "cuu-Lana-CN", + "cuu-Lana": "cuu-Lana-CN", + "cuv": "cuv-Latn-CM", + "cuv-CM": "cuv-Latn-CM", + "cuv-Latn": "cuv-Latn-CM", + "cux": "cux-Latn-MX", + "cux-Latn": "cux-Latn-MX", + "cux-MX": "cux-Latn-MX", + "cuy": "cuy-Latn-MX", + "cuy-Latn": "cuy-Latn-MX", + "cuy-MX": "cuy-Latn-MX", + "cv": "cv-Cyrl-RU", + "cv-Cyrl": "cv-Cyrl-RU", + "cv-RU": "cv-Cyrl-RU", + "cvg": "cvg-Latn-IN", + "cvg-IN": "cvg-Latn-IN", + "cvg-Latn": "cvg-Latn-IN", + "cvn": "cvn-Latn-MX", + "cvn-Latn": "cvn-Latn-MX", + "cvn-MX": "cvn-Latn-MX", + "cwa": "cwa-Latn-TZ", + "cwa-Latn": "cwa-Latn-TZ", + "cwa-TZ": "cwa-Latn-TZ", + "cwb": "cwb-Latn-MZ", + "cwb-Latn": "cwb-Latn-MZ", + "cwb-MZ": "cwb-Latn-MZ", + "cwe": "cwe-Latn-TZ", + "cwe-Latn": "cwe-Latn-TZ", + "cwe-TZ": "cwe-Latn-TZ", + "cwg": "cwg-Latn-MY", + "cwg-Latn": "cwg-Latn-MY", + "cwg-MY": "cwg-Latn-MY", + "cwt": "cwt-Latn-SN", + "cwt-Latn": "cwt-Latn-SN", + "cwt-SN": "cwt-Latn-SN", + "cxh": "cxh-Latn-NG", + "cxh-Latn": "cxh-Latn-NG", + "cxh-NG": "cxh-Latn-NG", + "cy": "cy-Latn-GB", + "cy-GB": "cy-Latn-GB", + "cy-Latn": "cy-Latn-GB", + "cya": "cya-Latn-MX", + "cya-Latn": "cya-Latn-MX", + "cya-MX": "cya-Latn-MX", + "cyb": "cyb-Latn-BO", + "cyb-BO": "cyb-Latn-BO", + "cyb-Latn": "cyb-Latn-BO", + "cyo": "cyo-Latn-PH", + "cyo-Latn": "cyo-Latn-PH", + "cyo-PH": "cyo-Latn-PH", + "czh": "czh-Hans-CN", + "czh-CN": "czh-Hans-CN", + "czh-Hans": "czh-Hans-CN", + "czk": "czk-Hebr-CZ", + "czk-CZ": "czk-Hebr-CZ", + "czk-Hebr": "czk-Hebr-CZ", + "czn": "czn-Latn-MX", + "czn-Latn": "czn-Latn-MX", + "czn-MX": "czn-Latn-MX", + "czt": "czt-Latn-MM", + "czt-Latn": "czt-Latn-MM", + "czt-MM": "czt-Latn-MM", + "da": "da-Latn-DK", + "da-DK": "da-Latn-DK", + "da-Latn": "da-Latn-DK", + "daa": "daa-Latn-TD", + "daa-Latn": "daa-Latn-TD", + "daa-TD": "daa-Latn-TD", + "dac": "dac-Latn-PG", + "dac-Latn": "dac-Latn-PG", + "dac-PG": "dac-Latn-PG", + "dad": "dad-Latn-PG", + "dad-Latn": "dad-Latn-PG", + "dad-PG": "dad-Latn-PG", + "dae": "dae-Latn-CM", + "dae-CM": "dae-Latn-CM", + "dae-Latn": "dae-Latn-CM", + "dag": "dag-Latn-GH", + "dag-GH": "dag-Latn-GH", + "dag-Latn": "dag-Latn-GH", + "dah": "dah-Latn-PG", + "dah-Latn": "dah-Latn-PG", + "dah-PG": "dah-Latn-PG", + "dai": "dai-Latn-TD", + "dai-Latn": "dai-Latn-TD", + "dai-TD": "dai-Latn-TD", + "daj": "daj-Latn-SD", + "daj-Latn": "daj-Latn-SD", + "daj-SD": "daj-Latn-SD", + "dak": "dak-Latn-US", + "dak-Latn": "dak-Latn-US", + "dak-US": "dak-Latn-US", + "dal": "dal-Latn-KE", + "dal-KE": "dal-Latn-KE", + "dal-Latn": "dal-Latn-KE", + "dam": "dam-Latn-NG", + "dam-Latn": "dam-Latn-NG", + "dam-NG": "dam-Latn-NG", + "dao": "dao-Latn-MM", + "dao-Latn": "dao-Latn-MM", + "dao-MM": "dao-Latn-MM", + "daq": "daq-Deva-IN", + "daq-Deva": "daq-Deva-IN", + "daq-IN": "daq-Deva-IN", + "dar": "dar-Cyrl-RU", + "dar-Cyrl": "dar-Cyrl-RU", + "dar-RU": "dar-Cyrl-RU", + "das": "das-Latn-CI", + "das-CI": "das-Latn-CI", + "das-Latn": "das-Latn-CI", + "dau": "dau-Latn-TD", + "dau-Latn": "dau-Latn-TD", + "dau-TD": "dau-Latn-TD", + "dav": "dav-Latn-KE", + "dav-KE": "dav-Latn-KE", + "dav-Latn": "dav-Latn-KE", + "daw": "daw-Latn-PH", + "daw-Latn": "daw-Latn-PH", + "daw-PH": "daw-Latn-PH", + "dax": "dax-Latn-AU", + "dax-AU": "dax-Latn-AU", + "dax-Latn": "dax-Latn-AU", + "daz": "daz-Latn-ID", + "daz-ID": "daz-Latn-ID", + "daz-Latn": "daz-Latn-ID", + "dba": "dba-Latn-ML", + "dba-Latn": "dba-Latn-ML", + "dba-ML": "dba-Latn-ML", + "dbb": "dbb-Latn-NG", + "dbb-Latn": "dbb-Latn-NG", + "dbb-NG": "dbb-Latn-NG", + "dbd": "dbd-Latn-NG", + "dbd-Latn": "dbd-Latn-NG", + "dbd-NG": "dbd-Latn-NG", + "dbe": "dbe-Latn-ID", + "dbe-ID": "dbe-Latn-ID", + "dbe-Latn": "dbe-Latn-ID", + "dbf": "dbf-Latn-ID", + "dbf-ID": "dbf-Latn-ID", + "dbf-Latn": "dbf-Latn-ID", + "dbg": "dbg-Latn-ML", + "dbg-Latn": "dbg-Latn-ML", + "dbg-ML": "dbg-Latn-ML", + "dbi": "dbi-Latn-NG", + "dbi-Latn": "dbi-Latn-NG", + "dbi-NG": "dbi-Latn-NG", + "dbj": "dbj-Latn-MY", + "dbj-Latn": "dbj-Latn-MY", + "dbj-MY": "dbj-Latn-MY", + "dbl": "dbl-Latn-AU", + "dbl-AU": "dbl-Latn-AU", + "dbl-Latn": "dbl-Latn-AU", + "dbm": "dbm-Latn-NG", + "dbm-Latn": "dbm-Latn-NG", + "dbm-NG": "dbm-Latn-NG", + "dbn": "dbn-Latn-ID", + "dbn-ID": "dbn-Latn-ID", + "dbn-Latn": "dbn-Latn-ID", + "dbo": "dbo-Latn-NG", + "dbo-Latn": "dbo-Latn-NG", + "dbo-NG": "dbo-Latn-NG", + "dbp": "dbp-Latn-NG", + "dbp-Latn": "dbp-Latn-NG", + "dbp-NG": "dbp-Latn-NG", + "dbq": "dbq-Latn-CM", + "dbq-CM": "dbq-Latn-CM", + "dbq-Latn": "dbq-Latn-CM", + "dbt": "dbt-Latn-ML", + "dbt-Latn": "dbt-Latn-ML", + "dbt-ML": "dbt-Latn-ML", + "dbu": "dbu-Latn-ML", + "dbu-Latn": "dbu-Latn-ML", + "dbu-ML": "dbu-Latn-ML", + "dbv": "dbv-Latn-NG", + "dbv-Latn": "dbv-Latn-NG", + "dbv-NG": "dbv-Latn-NG", + "dbw": "dbw-Latn-ML", + "dbw-Latn": "dbw-Latn-ML", + "dbw-ML": "dbw-Latn-ML", + "dby": "dby-Latn-PG", + "dby-Latn": "dby-Latn-PG", + "dby-PG": "dby-Latn-PG", + "dcc": "dcc-Arab-IN", + "dcc-Arab": "dcc-Arab-IN", + "dcc-IN": "dcc-Arab-IN", + "dcr": "dcr-Latn-VI", + "dcr-Latn": "dcr-Latn-VI", + "dcr-VI": "dcr-Latn-VI", + "dda": "dda-Latn-AU", + "dda-AU": "dda-Latn-AU", + "dda-Latn": "dda-Latn-AU", + "ddd": "ddd-Latn-SS", + "ddd-Latn": "ddd-Latn-SS", + "ddd-SS": "ddd-Latn-SS", + "dde": "dde-Latn-CG", + "dde-CG": "dde-Latn-CG", + "dde-Latn": "dde-Latn-CG", + "ddg": "ddg-Latn-TL", + "ddg-Latn": "ddg-Latn-TL", + "ddg-TL": "ddg-Latn-TL", + "ddi": "ddi-Latn-PG", + "ddi-Latn": "ddi-Latn-PG", + "ddi-PG": "ddi-Latn-PG", + "ddj": "ddj-Latn-AU", + "ddj-AU": "ddj-Latn-AU", + "ddj-Latn": "ddj-Latn-AU", + "ddn": "ddn-Latn-BJ", + "ddn-BJ": "ddn-Latn-BJ", + "ddn-Latn": "ddn-Latn-BJ", + "ddo": "ddo-Cyrl-RU", + "ddo-Cyrl": "ddo-Cyrl-RU", + "ddo-RU": "ddo-Cyrl-RU", + "ddr": "ddr-Latn-AU", + "ddr-AU": "ddr-Latn-AU", + "ddr-Latn": "ddr-Latn-AU", + "dds": "dds-Latn-ML", + "dds-Latn": "dds-Latn-ML", + "dds-ML": "dds-Latn-ML", + "ddw": "ddw-Latn-ID", + "ddw-ID": "ddw-Latn-ID", + "ddw-Latn": "ddw-Latn-ID", + "de": "de-Latn-DE", + "de-AT": "de-Latn-AT", + "de-CH": "de-Latn-CH", + "de-DE": "de-Latn-DE", + "de-LI": "de-Latn-LI", + "de-LU": "de-Latn-LU", + "de-Latn": "de-Latn-DE", + "dec": "dec-Latn-SD", + "dec-Latn": "dec-Latn-SD", + "dec-SD": "dec-Latn-SD", + "ded": "ded-Latn-PG", + "ded-Latn": "ded-Latn-PG", + "ded-PG": "ded-Latn-PG", + "dee": "dee-Latn-LR", + "dee-LR": "dee-Latn-LR", + "dee-Latn": "dee-Latn-LR", + "def": "def-Arab-IR", + "def-Arab": "def-Arab-IR", + "def-IR": "def-Arab-IR", + "deg": "deg-Latn-NG", + "deg-Latn": "deg-Latn-NG", + "deg-NG": "deg-Latn-NG", + "deh": "deh-Arab-PK", + "deh-Arab": "deh-Arab-PK", + "deh-PK": "deh-Arab-PK", + "dei": "dei-Latn-ID", + "dei-ID": "dei-Latn-ID", + "dei-Latn": "dei-Latn-ID", + "dek": "dek-Latn-CM", + "dek-CM": "dek-Latn-CM", + "dek-Latn": "dek-Latn-CM", + "del": "del-Latn-US", + "del-Latn": "del-Latn-US", + "del-US": "del-Latn-US", + "dem": "dem-Latn-ID", + "dem-ID": "dem-Latn-ID", + "dem-Latn": "dem-Latn-ID", + "den": "den-Latn-CA", + "den-CA": "den-Latn-CA", + "den-Latn": "den-Latn-CA", + "deq": "deq-Latn-CF", + "deq-CF": "deq-Latn-CF", + "deq-Latn": "deq-Latn-CF", + "der": "der-Beng-IN", + "der-Beng": "der-Beng-IN", + "der-IN": "der-Beng-IN", + "des": "des-Latn-BR", + "des-BR": "des-Latn-BR", + "des-Latn": "des-Latn-BR", + "dev": "dev-Latn-PG", + "dev-Latn": "dev-Latn-PG", + "dev-PG": "dev-Latn-PG", + "dez": "dez-Latn-CD", + "dez-CD": "dez-Latn-CD", + "dez-Latn": "dez-Latn-CD", + "dga": "dga-Latn-GH", + "dga-GH": "dga-Latn-GH", + "dga-Latn": "dga-Latn-GH", + "dgb": "dgb-Latn-ML", + "dgb-Latn": "dgb-Latn-ML", + "dgb-ML": "dgb-Latn-ML", + "dgc": "dgc-Latn-PH", + "dgc-Latn": "dgc-Latn-PH", + "dgc-PH": "dgc-Latn-PH", + "dgd": "dgd-Latn-BF", + "dgd-BF": "dgd-Latn-BF", + "dgd-Latn": "dgd-Latn-BF", + "dge": "dge-Latn-PG", + "dge-Latn": "dge-Latn-PG", + "dge-PG": "dge-Latn-PG", + "dgg": "dgg-Latn-PG", + "dgg-Latn": "dgg-Latn-PG", + "dgg-PG": "dgg-Latn-PG", + "dgh": "dgh-Latn-NG", + "dgh-Latn": "dgh-Latn-NG", + "dgh-NG": "dgh-Latn-NG", + "dgi": "dgi-Latn-BF", + "dgi-BF": "dgi-Latn-BF", + "dgi-Latn": "dgi-Latn-BF", + "dgk": "dgk-Latn-CF", + "dgk-CF": "dgk-Latn-CF", + "dgk-Latn": "dgk-Latn-CF", + "dgl": "dgl-Arab-SD", + "dgl-Arab": "dgl-Arab-SD", + "dgl-SD": "dgl-Arab-SD", + "dgn": "dgn-Latn-AU", + "dgn-AU": "dgn-Latn-AU", + "dgn-Latn": "dgn-Latn-AU", + "dgr": "dgr-Latn-CA", + "dgr-CA": "dgr-Latn-CA", + "dgr-Latn": "dgr-Latn-CA", + "dgs": "dgs-Latn-BF", + "dgs-BF": "dgs-Latn-BF", + "dgs-Latn": "dgs-Latn-BF", + "dgt": "dgt-Latn-AU", + "dgt-AU": "dgt-Latn-AU", + "dgt-Latn": "dgt-Latn-AU", + "dgw": "dgw-Latn-AU", + "dgw-AU": "dgw-Latn-AU", + "dgw-Latn": "dgw-Latn-AU", + "dgx": "dgx-Latn-PG", + "dgx-Latn": "dgx-Latn-PG", + "dgx-PG": "dgx-Latn-PG", + "dgz": "dgz-Latn-PG", + "dgz-Latn": "dgz-Latn-PG", + "dgz-PG": "dgz-Latn-PG", + "dhg": "dhg-Latn-AU", + "dhg-AU": "dhg-Latn-AU", + "dhg-Latn": "dhg-Latn-AU", + "dhi": "dhi-Deva-NP", + "dhi-Deva": "dhi-Deva-NP", + "dhi-NP": "dhi-Deva-NP", + "dhl": "dhl-Latn-AU", + "dhl-AU": "dhl-Latn-AU", + "dhl-Latn": "dhl-Latn-AU", + "dhm": "dhm-Latn-AO", + "dhm-AO": "dhm-Latn-AO", + "dhm-Latn": "dhm-Latn-AO", + "dhn": "dhn-Gujr-IN", + "dhn-Gujr": "dhn-Gujr-IN", + "dhn-IN": "dhn-Gujr-IN", + "dho": "dho-Deva-IN", + "dho-Deva": "dho-Deva-IN", + "dho-IN": "dho-Deva-IN", + "dhr": "dhr-Latn-AU", + "dhr-AU": "dhr-Latn-AU", + "dhr-Latn": "dhr-Latn-AU", + "dhs": "dhs-Latn-TZ", + "dhs-Latn": "dhs-Latn-TZ", + "dhs-TZ": "dhs-Latn-TZ", + "dhu": "dhu-Latn-AU", + "dhu-AU": "dhu-Latn-AU", + "dhu-Latn": "dhu-Latn-AU", + "dhv": "dhv-Latn-NC", + "dhv-Latn": "dhv-Latn-NC", + "dhv-NC": "dhv-Latn-NC", + "dhw": "dhw-Deva-NP", + "dhw-Deva": "dhw-Deva-NP", + "dhw-NP": "dhw-Deva-NP", + "dhx": "dhx-Latn-AU", + "dhx-AU": "dhx-Latn-AU", + "dhx-Latn": "dhx-Latn-AU", + "dia": "dia-Latn-PG", + "dia-Latn": "dia-Latn-PG", + "dia-PG": "dia-Latn-PG", + "dib": "dib-Latn-SS", + "dib-Latn": "dib-Latn-SS", + "dib-SS": "dib-Latn-SS", + "dic": "dic-Latn-CI", + "dic-CI": "dic-Latn-CI", + "dic-Latn": "dic-Latn-CI", + "did": "did-Latn-SS", + "did-Latn": "did-Latn-SS", + "did-SS": "did-Latn-SS", + "dif": "dif-Latn-AU", + "dif-AU": "dif-Latn-AU", + "dif-Latn": "dif-Latn-AU", + "dig": "dig-Latn-KE", + "dig-KE": "dig-Latn-KE", + "dig-Latn": "dig-Latn-KE", + "dih": "dih-Latn-MX", + "dih-Latn": "dih-Latn-MX", + "dih-MX": "dih-Latn-MX", + "dii": "dii-Latn-CM", + "dii-CM": "dii-Latn-CM", + "dii-Latn": "dii-Latn-CM", + "dij": "dij-Latn-ID", + "dij-ID": "dij-Latn-ID", + "dij-Latn": "dij-Latn-ID", + "dil": "dil-Latn-SD", + "dil-Latn": "dil-Latn-SD", + "dil-SD": "dil-Latn-SD", + "din": "din-Latn-SS", + "din-Latn": "din-Latn-SS", + "din-SS": "din-Latn-SS", + "dio": "dio-Latn-NG", + "dio-Latn": "dio-Latn-NG", + "dio-NG": "dio-Latn-NG", + "dip": "dip-Latn-SS", + "dip-Latn": "dip-Latn-SS", + "dip-SS": "dip-Latn-SS", + "dir": "dir-Latn-NG", + "dir-Latn": "dir-Latn-NG", + "dir-NG": "dir-Latn-NG", + "dis": "dis-Latn-IN", + "dis-IN": "dis-Latn-IN", + "dis-Latn": "dis-Latn-IN", + "diu": "diu-Latn-NA", + "diu-Latn": "diu-Latn-NA", + "diu-NA": "diu-Latn-NA", + "diw": "diw-Latn-SS", + "diw-Latn": "diw-Latn-SS", + "diw-SS": "diw-Latn-SS", + "dix": "dix-Latn-VU", + "dix-Latn": "dix-Latn-VU", + "dix-VU": "dix-Latn-VU", + "diy": "diy-Latn-ID", + "diy-ID": "diy-Latn-ID", + "diy-Latn": "diy-Latn-ID", + "diz": "diz-Latn-CD", + "diz-CD": "diz-Latn-CD", + "diz-Latn": "diz-Latn-CD", + "dja": "dja-Latn-AU", + "dja-AU": "dja-Latn-AU", + "dja-Latn": "dja-Latn-AU", + "djb": "djb-Latn-AU", + "djb-AU": "djb-Latn-AU", + "djb-Latn": "djb-Latn-AU", + "djc": "djc-Latn-TD", + "djc-Latn": "djc-Latn-TD", + "djc-TD": "djc-Latn-TD", + "djd": "djd-Latn-AU", + "djd-AU": "djd-Latn-AU", + "djd-Latn": "djd-Latn-AU", + "dje": "dje-Latn-NE", + "dje-Latn": "dje-Latn-NE", + "dje-NE": "dje-Latn-NE", + "djf": "djf-Latn-AU", + "djf-AU": "djf-Latn-AU", + "djf-Latn": "djf-Latn-AU", + "dji": "dji-Latn-AU", + "dji-AU": "dji-Latn-AU", + "dji-Latn": "dji-Latn-AU", + "djj": "djj-Latn-AU", + "djj-AU": "djj-Latn-AU", + "djj-Latn": "djj-Latn-AU", + "djk": "djk-Latn-SR", + "djk-Afak": "djk-Afak-SR", + "djk-Latn": "djk-Latn-SR", + "djk-SR": "djk-Latn-SR", + "djm": "djm-Latn-ML", + "djm-Latn": "djm-Latn-ML", + "djm-ML": "djm-Latn-ML", + "djn": "djn-Latn-AU", + "djn-AU": "djn-Latn-AU", + "djn-Latn": "djn-Latn-AU", + "djo": "djo-Latn-ID", + "djo-ID": "djo-Latn-ID", + "djo-Latn": "djo-Latn-ID", + "djr": "djr-Latn-AU", + "djr-AU": "djr-Latn-AU", + "djr-Latn": "djr-Latn-AU", + "dju": "dju-Latn-PG", + "dju-Latn": "dju-Latn-PG", + "dju-PG": "dju-Latn-PG", + "djw": "djw-Latn-AU", + "djw-AU": "djw-Latn-AU", + "djw-Latn": "djw-Latn-AU", + "dka": "dka-Tibt-BT", + "dka-BT": "dka-Tibt-BT", + "dka-Tibt": "dka-Tibt-BT", + "dkg": "dkg-Latn-NG", + "dkg-Latn": "dkg-Latn-NG", + "dkg-NG": "dkg-Latn-NG", + "dkk": "dkk-Latn-ID", + "dkk-ID": "dkk-Latn-ID", + "dkk-Latn": "dkk-Latn-ID", + "dkr": "dkr-Latn-MY", + "dkr-Latn": "dkr-Latn-MY", + "dkr-MY": "dkr-Latn-MY", + "dks": "dks-Latn-SS", + "dks-Latn": "dks-Latn-SS", + "dks-SS": "dks-Latn-SS", + "dkx": "dkx-Latn-CM", + "dkx-CM": "dkx-Latn-CM", + "dkx-Latn": "dkx-Latn-CM", + "dlg": "dlg-Cyrl-RU", + "dlg-Cyrl": "dlg-Cyrl-RU", + "dlg-RU": "dlg-Cyrl-RU", + "dlm": "dlm-Latn-HR", + "dlm-HR": "dlm-Latn-HR", + "dlm-Latn": "dlm-Latn-HR", + "dln": "dln-Latn-IN", + "dln-IN": "dln-Latn-IN", + "dln-Latn": "dln-Latn-IN", + "dma": "dma-Latn-GA", + "dma-GA": "dma-Latn-GA", + "dma-Latn": "dma-Latn-GA", + "dmb": "dmb-Latn-ML", + "dmb-Latn": "dmb-Latn-ML", + "dmb-ML": "dmb-Latn-ML", + "dmc": "dmc-Latn-PG", + "dmc-Latn": "dmc-Latn-PG", + "dmc-PG": "dmc-Latn-PG", + "dmd": "dmd-Latn-AU", + "dmd-AU": "dmd-Latn-AU", + "dmd-Latn": "dmd-Latn-AU", + "dme": "dme-Latn-CM", + "dme-CM": "dme-Latn-CM", + "dme-Latn": "dme-Latn-CM", + "dmf": "dmf-Medf-NG", + "dmf-Medf": "dmf-Medf-NG", + "dmf-NG": "dmf-Medf-NG", + "dmg": "dmg-Latn-MY", + "dmg-Latn": "dmg-Latn-MY", + "dmg-MY": "dmg-Latn-MY", + "dmk": "dmk-Arab-PK", + "dmk-Arab": "dmk-Arab-PK", + "dmk-PK": "dmk-Arab-PK", + "dml": "dml-Arab-PK", + "dml-Arab": "dml-Arab-PK", + "dml-PK": "dml-Arab-PK", + "dmm": "dmm-Latn-CM", + "dmm-CM": "dmm-Latn-CM", + "dmm-Latn": "dmm-Latn-CM", + "dmo": "dmo-Latn-CM", + "dmo-CM": "dmo-Latn-CM", + "dmo-Latn": "dmo-Latn-CM", + "dmr": "dmr-Latn-ID", + "dmr-ID": "dmr-Latn-ID", + "dmr-Latn": "dmr-Latn-ID", + "dms": "dms-Latn-ID", + "dms-ID": "dms-Latn-ID", + "dms-Latn": "dms-Latn-ID", + "dmu": "dmu-Latn-ID", + "dmu-ID": "dmu-Latn-ID", + "dmu-Latn": "dmu-Latn-ID", + "dmv": "dmv-Latn-MY", + "dmv-Latn": "dmv-Latn-MY", + "dmv-MY": "dmv-Latn-MY", + "dmw": "dmw-Latn-AU", + "dmw-AU": "dmw-Latn-AU", + "dmw-Latn": "dmw-Latn-AU", + "dmx": "dmx-Latn-MZ", + "dmx-Latn": "dmx-Latn-MZ", + "dmx-MZ": "dmx-Latn-MZ", + "dmy": "dmy-Latn-ID", + "dmy-ID": "dmy-Latn-ID", + "dmy-Latn": "dmy-Latn-ID", + "dna": "dna-Latn-ID", + "dna-ID": "dna-Latn-ID", + "dna-Latn": "dna-Latn-ID", + "dnd": "dnd-Latn-PG", + "dnd-Latn": "dnd-Latn-PG", + "dnd-PG": "dnd-Latn-PG", + "dne": "dne-Latn-TZ", + "dne-Latn": "dne-Latn-TZ", + "dne-TZ": "dne-Latn-TZ", + "dng": "dng-Cyrl-KG", + "dng-Cyrl": "dng-Cyrl-KG", + "dng-KG": "dng-Cyrl-KG", + "dni": "dni-Latn-ID", + "dni-ID": "dni-Latn-ID", + "dni-Latn": "dni-Latn-ID", + "dnj": "dnj-Latn-CI", + "dnj-CI": "dnj-Latn-CI", + "dnj-Latn": "dnj-Latn-CI", + "dnk": "dnk-Latn-ID", + "dnk-ID": "dnk-Latn-ID", + "dnk-Latn": "dnk-Latn-ID", + "dnn": "dnn-Latn-BF", + "dnn-BF": "dnn-Latn-BF", + "dnn-Latn": "dnn-Latn-BF", + "dno": "dno-Latn-CD", + "dno-CD": "dno-Latn-CD", + "dno-Latn": "dno-Latn-CD", + "dnr": "dnr-Latn-PG", + "dnr-Latn": "dnr-Latn-PG", + "dnr-PG": "dnr-Latn-PG", + "dnt": "dnt-Latn-ID", + "dnt-ID": "dnt-Latn-ID", + "dnt-Latn": "dnt-Latn-ID", + "dnu": "dnu-Mymr-MM", + "dnu-MM": "dnu-Mymr-MM", + "dnu-Mymr": "dnu-Mymr-MM", + "dnv": "dnv-Mymr-MM", + "dnv-MM": "dnv-Mymr-MM", + "dnv-Mymr": "dnv-Mymr-MM", + "dnw": "dnw-Latn-ID", + "dnw-ID": "dnw-Latn-ID", + "dnw-Latn": "dnw-Latn-ID", + "dny": "dny-Latn-BR", + "dny-BR": "dny-Latn-BR", + "dny-Latn": "dny-Latn-BR", + "doa": "doa-Latn-PG", + "doa-Latn": "doa-Latn-PG", + "doa-PG": "doa-Latn-PG", + "dob": "dob-Latn-PG", + "dob-Latn": "dob-Latn-PG", + "dob-PG": "dob-Latn-PG", + "doc": "doc-Latn-CN", + "doc-CN": "doc-Latn-CN", + "doc-Latn": "doc-Latn-CN", + "doe": "doe-Latn-TZ", + "doe-Latn": "doe-Latn-TZ", + "doe-TZ": "doe-Latn-TZ", + "dof": "dof-Latn-PG", + "dof-Latn": "dof-Latn-PG", + "dof-PG": "dof-Latn-PG", + "doh": "doh-Latn-NG", + "doh-Latn": "doh-Latn-NG", + "doh-NG": "doh-Latn-NG", + "doi": "doi-Deva-IN", + "doi-Deva": "doi-Deva-IN", + "doi-Dogr": "doi-Dogr-IN", + "doi-IN": "doi-Deva-IN", + "doi-Takr": "doi-Takr-IN", + "dok": "dok-Latn-ID", + "dok-ID": "dok-Latn-ID", + "dok-Latn": "dok-Latn-ID", + "dol": "dol-Latn-PG", + "dol-Latn": "dol-Latn-PG", + "dol-PG": "dol-Latn-PG", + "don": "don-Latn-PG", + "don-Latn": "don-Latn-PG", + "don-PG": "don-Latn-PG", + "doo": "doo-Latn-CD", + "doo-CD": "doo-Latn-CD", + "doo-Latn": "doo-Latn-CD", + "dop": "dop-Latn-BJ", + "dop-BJ": "dop-Latn-BJ", + "dop-Latn": "dop-Latn-BJ", + "dor": "dor-Latn-SB", + "dor-Latn": "dor-Latn-SB", + "dor-SB": "dor-Latn-SB", + "dos": "dos-Latn-BF", + "dos-BF": "dos-Latn-BF", + "dos-Latn": "dos-Latn-BF", + "dot": "dot-Latn-NG", + "dot-Latn": "dot-Latn-NG", + "dot-NG": "dot-Latn-NG", + "dov": "dov-Latn-ZW", + "dov-Latn": "dov-Latn-ZW", + "dov-ZW": "dov-Latn-ZW", + "dow": "dow-Latn-CM", + "dow-CM": "dow-Latn-CM", + "dow-Latn": "dow-Latn-CM", + "dox": "dox-Ethi-ET", + "dox-ET": "dox-Ethi-ET", + "dox-Ethi": "dox-Ethi-ET", + "doy": "doy-Latn-GH", + "doy-GH": "doy-Latn-GH", + "doy-Latn": "doy-Latn-GH", + "dpp": "dpp-Latn-MY", + "dpp-Latn": "dpp-Latn-MY", + "dpp-MY": "dpp-Latn-MY", + "drc": "drc-Latn-PT", + "drc-Latn": "drc-Latn-PT", + "drc-PT": "drc-Latn-PT", + "dre": "dre-Tibt-NP", + "dre-NP": "dre-Tibt-NP", + "dre-Tibt": "dre-Tibt-NP", + "drg": "drg-Latn-MY", + "drg-Latn": "drg-Latn-MY", + "drg-MY": "drg-Latn-MY", + "dri": "dri-Latn-NG", + "dri-Latn": "dri-Latn-NG", + "dri-NG": "dri-Latn-NG", + "drl": "drl-Latn-AU", + "drl-AU": "drl-Latn-AU", + "drl-Latn": "drl-Latn-AU", + "drn": "drn-Latn-ID", + "drn-ID": "drn-Latn-ID", + "drn-Latn": "drn-Latn-ID", + "dro": "dro-Latn-MY", + "dro-Latn": "dro-Latn-MY", + "dro-MY": "dro-Latn-MY", + "drq": "drq-Deva-NP", + "drq-Deva": "drq-Deva-NP", + "drq-NP": "drq-Deva-NP", + "drs": "drs-Ethi-ET", + "drs-ET": "drs-Ethi-ET", + "drs-Ethi": "drs-Ethi-ET", + "drt": "drt-Latn-NL", + "drt-Latn": "drt-Latn-NL", + "drt-NL": "drt-Latn-NL", + "dru": "dru-Latn-TW", + "dru-Latn": "dru-Latn-TW", + "dru-TW": "dru-Latn-TW", + "dry": "dry-Deva-NP", + "dry-Deva": "dry-Deva-NP", + "dry-NP": "dry-Deva-NP", + "dsb": "dsb-Latn-DE", + "dsb-DE": "dsb-Latn-DE", + "dsb-Latn": "dsb-Latn-DE", + "dsh": "dsh-Latn-KE", + "dsh-KE": "dsh-Latn-KE", + "dsh-Latn": "dsh-Latn-KE", + "dsi": "dsi-Latn-TD", + "dsi-Latn": "dsi-Latn-TD", + "dsi-TD": "dsi-Latn-TD", + "dsk": "dsk-Latn-NG", + "dsk-Latn": "dsk-Latn-NG", + "dsk-NG": "dsk-Latn-NG", + "dsn": "dsn-Latn-ID", + "dsn-ID": "dsn-Latn-ID", + "dsn-Latn": "dsn-Latn-ID", + "dso": "dso-Orya-IN", + "dso-IN": "dso-Orya-IN", + "dso-Orya": "dso-Orya-IN", + "dsq": "dsq-Latn-ML", + "dsq-Latn": "dsq-Latn-ML", + "dsq-ML": "dsq-Latn-ML", + "dta": "dta-Latn-CN", + "dta-CN": "dta-Latn-CN", + "dta-Latn": "dta-Latn-CN", + "dtb": "dtb-Latn-MY", + "dtb-Latn": "dtb-Latn-MY", + "dtb-MY": "dtb-Latn-MY", + "dtd": "dtd-Latn-CA", + "dtd-CA": "dtd-Latn-CA", + "dtd-Latn": "dtd-Latn-CA", + "dth": "dth-Latn-AU", + "dth-AU": "dth-Latn-AU", + "dth-Latn": "dth-Latn-AU", + "dti": "dti-Latn-ML", + "dti-Latn": "dti-Latn-ML", + "dti-ML": "dti-Latn-ML", + "dtk": "dtk-Latn-ML", + "dtk-Latn": "dtk-Latn-ML", + "dtk-ML": "dtk-Latn-ML", + "dtm": "dtm-Latn-ML", + "dtm-Latn": "dtm-Latn-ML", + "dtm-ML": "dtm-Latn-ML", + "dto": "dto-Latn-ML", + "dto-Latn": "dto-Latn-ML", + "dto-ML": "dto-Latn-ML", + "dtp": "dtp-Latn-MY", + "dtp-Latn": "dtp-Latn-MY", + "dtp-MY": "dtp-Latn-MY", + "dtr": "dtr-Latn-MY", + "dtr-Latn": "dtr-Latn-MY", + "dtr-MY": "dtr-Latn-MY", + "dts": "dts-Latn-ML", + "dts-Latn": "dts-Latn-ML", + "dts-ML": "dts-Latn-ML", + "dtt": "dtt-Latn-ML", + "dtt-Latn": "dtt-Latn-ML", + "dtt-ML": "dtt-Latn-ML", + "dtu": "dtu-Latn-ML", + "dtu-Latn": "dtu-Latn-ML", + "dtu-ML": "dtu-Latn-ML", + "dty": "dty-Deva-NP", + "dty-Deva": "dty-Deva-NP", + "dty-NP": "dty-Deva-NP", + "dua": "dua-Latn-CM", + "dua-CM": "dua-Latn-CM", + "dua-Latn": "dua-Latn-CM", + "dub": "dub-Gujr-IN", + "dub-Gujr": "dub-Gujr-IN", + "dub-IN": "dub-Gujr-IN", + "duc": "duc-Latn-PG", + "duc-Latn": "duc-Latn-PG", + "duc-PG": "duc-Latn-PG", + "due": "due-Latn-PH", + "due-Latn": "due-Latn-PH", + "due-PH": "due-Latn-PH", + "duf": "duf-Latn-NC", + "duf-Latn": "duf-Latn-NC", + "duf-NC": "duf-Latn-NC", + "dug": "dug-Latn-KE", + "dug-KE": "dug-Latn-KE", + "dug-Latn": "dug-Latn-KE", + "duh": "duh-Deva-IN", + "duh-Deva": "duh-Deva-IN", + "duh-IN": "duh-Deva-IN", + "dui": "dui-Latn-PG", + "dui-Latn": "dui-Latn-PG", + "dui-PG": "dui-Latn-PG", + "duk": "duk-Latn-PG", + "duk-Latn": "duk-Latn-PG", + "duk-PG": "duk-Latn-PG", + "dul": "dul-Latn-PH", + "dul-Latn": "dul-Latn-PH", + "dul-PH": "dul-Latn-PH", + "dum": "dum-Latn-NL", + "dum-Latn": "dum-Latn-NL", + "dum-NL": "dum-Latn-NL", + "dun": "dun-Latn-ID", + "dun-ID": "dun-Latn-ID", + "dun-Latn": "dun-Latn-ID", + "duo": "duo-Latn-PH", + "duo-Latn": "duo-Latn-PH", + "duo-PH": "duo-Latn-PH", + "dup": "dup-Latn-ID", + "dup-ID": "dup-Latn-ID", + "dup-Latn": "dup-Latn-ID", + "duq": "duq-Latn-ID", + "duq-ID": "duq-Latn-ID", + "duq-Latn": "duq-Latn-ID", + "dur": "dur-Latn-CM", + "dur-CM": "dur-Latn-CM", + "dur-Latn": "dur-Latn-CM", + "dus": "dus-Deva-NP", + "dus-Deva": "dus-Deva-NP", + "dus-NP": "dus-Deva-NP", + "duu": "duu-Latn-CN", + "duu-CN": "duu-Latn-CN", + "duu-Latn": "duu-Latn-CN", + "duv": "duv-Latn-ID", + "duv-ID": "duv-Latn-ID", + "duv-Latn": "duv-Latn-ID", + "duw": "duw-Latn-ID", + "duw-ID": "duw-Latn-ID", + "duw-Latn": "duw-Latn-ID", + "dux": "dux-Latn-ML", + "dux-Latn": "dux-Latn-ML", + "dux-ML": "dux-Latn-ML", + "duy": "duy-Latn-PH", + "duy-Latn": "duy-Latn-PH", + "duy-PH": "duy-Latn-PH", + "duz": "duz-Latn-CM", + "duz-CM": "duz-Latn-CM", + "duz-Latn": "duz-Latn-CM", + "dv": "dv-Thaa-MV", + "dv-Diak": "dv-Diak-MV", + "dv-MV": "dv-Thaa-MV", + "dv-Thaa": "dv-Thaa-MV", + "dva": "dva-Latn-PG", + "dva-Latn": "dva-Latn-PG", + "dva-PG": "dva-Latn-PG", + "dwa": "dwa-Latn-NG", + "dwa-Latn": "dwa-Latn-NG", + "dwa-NG": "dwa-Latn-NG", + "dwk": "dwk-Orya-IN", + "dwk-IN": "dwk-Orya-IN", + "dwk-Orya": "dwk-Orya-IN", + "dwr": "dwr-Latn-ET", + "dwr-ET": "dwr-Latn-ET", + "dwr-Latn": "dwr-Latn-ET", + "dws": "dws-Latn-001", + "dws-001": "dws-Latn-001", + "dws-Latn": "dws-Latn-001", + "dwu": "dwu-Latn-AU", + "dwu-AU": "dwu-Latn-AU", + "dwu-Latn": "dwu-Latn-AU", + "dww": "dww-Latn-PG", + "dww-Latn": "dww-Latn-PG", + "dww-PG": "dww-Latn-PG", + "dwy": "dwy-Latn-AU", + "dwy-AU": "dwy-Latn-AU", + "dwy-Latn": "dwy-Latn-AU", + "dwz": "dwz-Deva-NP", + "dwz-Deva": "dwz-Deva-NP", + "dwz-NP": "dwz-Deva-NP", + "dya": "dya-Latn-BF", + "dya-BF": "dya-Latn-BF", + "dya-Latn": "dya-Latn-BF", + "dyb": "dyb-Latn-AU", + "dyb-AU": "dyb-Latn-AU", + "dyb-Latn": "dyb-Latn-AU", + "dyd": "dyd-Latn-AU", + "dyd-AU": "dyd-Latn-AU", + "dyd-Latn": "dyd-Latn-AU", + "dyg": "dyg-Latn-PH", + "dyg-Latn": "dyg-Latn-PH", + "dyg-PH": "dyg-Latn-PH", + "dyi": "dyi-Latn-CI", + "dyi-CI": "dyi-Latn-CI", + "dyi-Latn": "dyi-Latn-CI", + "dym": "dym-Latn-ML", + "dym-Latn": "dym-Latn-ML", + "dym-ML": "dym-Latn-ML", + "dyn": "dyn-Latn-AU", + "dyn-AU": "dyn-Latn-AU", + "dyn-Latn": "dyn-Latn-AU", + "dyo": "dyo-Latn-SN", + "dyo-Latn": "dyo-Latn-SN", + "dyo-SN": "dyo-Latn-SN", + "dyr": "dyr-Latn-NG", + "dyr-Latn": "dyr-Latn-NG", + "dyr-NG": "dyr-Latn-NG", + "dyu": "dyu-Latn-BF", + "dyu-BF": "dyu-Latn-BF", + "dyu-Latn": "dyu-Latn-BF", + "dyy": "dyy-Latn-AU", + "dyy-AU": "dyy-Latn-AU", + "dyy-Latn": "dyy-Latn-AU", + "dz": "dz-Tibt-BT", + "dz-BT": "dz-Tibt-BT", + "dz-Tibt": "dz-Tibt-BT", + "dz-Tibt-BT": "dz-Tibt-BT", + "dza": "dza-Latn-NG", + "dza-Latn": "dza-Latn-NG", + "dza-NG": "dza-Latn-NG", + "dzd": "dzd-Latn-NG", + "dzd-Latn": "dzd-Latn-NG", + "dzd-NG": "dzd-Latn-NG", + "dze": "dze-Latn-AU", + "dze-AU": "dze-Latn-AU", + "dze-Latn": "dze-Latn-AU", + "dzg": "dzg-Latn-TD", + "dzg-Latn": "dzg-Latn-TD", + "dzg-TD": "dzg-Latn-TD", + "dzl": "dzl-Tibt-BT", + "dzl-BT": "dzl-Tibt-BT", + "dzl-Tibt": "dzl-Tibt-BT", + "dzn": "dzn-Latn-CD", + "dzn-CD": "dzn-Latn-CD", + "dzn-Latn": "dzn-Latn-CD", + "eaa": "eaa-Latn-AU", + "eaa-AU": "eaa-Latn-AU", + "eaa-Latn": "eaa-Latn-AU", + "ebc": "ebc-Latn-ID", + "ebc-ID": "ebc-Latn-ID", + "ebc-Latn": "ebc-Latn-ID", + "ebg": "ebg-Latn-NG", + "ebg-Latn": "ebg-Latn-NG", + "ebg-NG": "ebg-Latn-NG", + "ebk": "ebk-Latn-PH", + "ebk-Latn": "ebk-Latn-PH", + "ebk-PH": "ebk-Latn-PH", + "ebo": "ebo-Latn-CG", + "ebo-CG": "ebo-Latn-CG", + "ebo-Latn": "ebo-Latn-CG", + "ebr": "ebr-Latn-CI", + "ebr-CI": "ebr-Latn-CI", + "ebr-Latn": "ebr-Latn-CI", + "ebu": "ebu-Latn-KE", + "ebu-KE": "ebu-Latn-KE", + "ebu-Latn": "ebu-Latn-KE", + "ecr": "ecr-Grek-GR", + "ecr-GR": "ecr-Grek-GR", + "ecr-Grek": "ecr-Grek-GR", + "ecy": "ecy-Cprt-CY", + "ecy-CY": "ecy-Cprt-CY", + "ecy-Cprt": "ecy-Cprt-CY", + "ee": "ee-Latn-GH", + "ee-GH": "ee-Latn-GH", + "ee-Latn": "ee-Latn-GH", + "efa": "efa-Latn-NG", + "efa-Latn": "efa-Latn-NG", + "efa-NG": "efa-Latn-NG", + "efe": "efe-Latn-CD", + "efe-CD": "efe-Latn-CD", + "efe-Latn": "efe-Latn-CD", + "efi": "efi-Latn-NG", + "efi-Latn": "efi-Latn-NG", + "efi-NG": "efi-Latn-NG", + "ega": "ega-Latn-CI", + "ega-CI": "ega-Latn-CI", + "ega-Latn": "ega-Latn-CI", + "egl": "egl-Latn-IT", + "egl-IT": "egl-Latn-IT", + "egl-Latn": "egl-Latn-IT", + "egm": "egm-Latn-TZ", + "egm-Latn": "egm-Latn-TZ", + "egm-TZ": "egm-Latn-TZ", + "ego": "ego-Latn-NG", + "ego-Latn": "ego-Latn-NG", + "ego-NG": "ego-Latn-NG", + "egy": "egy-Egyp-EG", + "egy-EG": "egy-Egyp-EG", + "egy-Egyp": "egy-Egyp-EG", + "ehu": "ehu-Latn-NG", + "ehu-Latn": "ehu-Latn-NG", + "ehu-NG": "ehu-Latn-NG", + "eip": "eip-Latn-ID", + "eip-ID": "eip-Latn-ID", + "eip-Latn": "eip-Latn-ID", + "eit": "eit-Latn-PG", + "eit-Latn": "eit-Latn-PG", + "eit-PG": "eit-Latn-PG", + "eiv": "eiv-Latn-PG", + "eiv-Latn": "eiv-Latn-PG", + "eiv-PG": "eiv-Latn-PG", + "eja": "eja-Latn-GW", + "eja-GW": "eja-Latn-GW", + "eja-Latn": "eja-Latn-GW", + "eka": "eka-Latn-NG", + "eka-Latn": "eka-Latn-NG", + "eka-NG": "eka-Latn-NG", + "eke": "eke-Latn-NG", + "eke-Latn": "eke-Latn-NG", + "eke-NG": "eke-Latn-NG", + "ekg": "ekg-Latn-ID", + "ekg-ID": "ekg-Latn-ID", + "ekg-Latn": "ekg-Latn-ID", + "eki": "eki-Latn-NG", + "eki-Latn": "eki-Latn-NG", + "eki-NG": "eki-Latn-NG", + "ekl": "ekl-Latn-BD", + "ekl-BD": "ekl-Latn-BD", + "ekl-Latn": "ekl-Latn-BD", + "ekm": "ekm-Latn-CM", + "ekm-CM": "ekm-Latn-CM", + "ekm-Latn": "ekm-Latn-CM", + "eko": "eko-Latn-MZ", + "eko-Latn": "eko-Latn-MZ", + "eko-MZ": "eko-Latn-MZ", + "ekp": "ekp-Latn-NG", + "ekp-Latn": "ekp-Latn-NG", + "ekp-NG": "ekp-Latn-NG", + "ekr": "ekr-Latn-NG", + "ekr-Latn": "ekr-Latn-NG", + "ekr-NG": "ekr-Latn-NG", + "eky": "eky-Kali-MM", + "eky-Kali": "eky-Kali-MM", + "eky-MM": "eky-Kali-MM", + "el": "el-Grek-GR", + "el-CY": "el-Grek-CY", + "el-GR": "el-Grek-GR", + "el-Grek": "el-Grek-GR", + "ele": "ele-Latn-PG", + "ele-Latn": "ele-Latn-PG", + "ele-PG": "ele-Latn-PG", + "elk": "elk-Latn-PG", + "elk-Latn": "elk-Latn-PG", + "elk-PG": "elk-Latn-PG", + "elm": "elm-Latn-NG", + "elm-Latn": "elm-Latn-NG", + "elm-NG": "elm-Latn-NG", + "elo": "elo-Latn-KE", + "elo-KE": "elo-Latn-KE", + "elo-Latn": "elo-Latn-KE", + "elu": "elu-Latn-PG", + "elu-Latn": "elu-Latn-PG", + "elu-PG": "elu-Latn-PG", + "ema": "ema-Latn-NG", + "ema-Latn": "ema-Latn-NG", + "ema-NG": "ema-Latn-NG", + "emb": "emb-Latn-ID", + "emb-ID": "emb-Latn-ID", + "emb-Latn": "emb-Latn-ID", + "eme": "eme-Latn-GF", + "eme-GF": "eme-Latn-GF", + "eme-Latn": "eme-Latn-GF", + "emg": "emg-Deva-NP", + "emg-Deva": "emg-Deva-NP", + "emg-NP": "emg-Deva-NP", + "emi": "emi-Latn-PG", + "emi-Latn": "emi-Latn-PG", + "emi-PG": "emi-Latn-PG", + "emm": "emm-Latn-MX", + "emm-Latn": "emm-Latn-MX", + "emm-MX": "emm-Latn-MX", + "emn": "emn-Latn-CM", + "emn-CM": "emn-Latn-CM", + "emn-Latn": "emn-Latn-CM", + "emp": "emp-Latn-PA", + "emp-Latn": "emp-Latn-PA", + "emp-PA": "emp-Latn-PA", + "ems": "ems-Latn-US", + "ems-Latn": "ems-Latn-US", + "ems-US": "ems-Latn-US", + "emu": "emu-Deva-IN", + "emu-Deva": "emu-Deva-IN", + "emu-IN": "emu-Deva-IN", + "emw": "emw-Latn-ID", + "emw-ID": "emw-Latn-ID", + "emw-Latn": "emw-Latn-ID", + "emx": "emx-Latn-FR", + "emx-FR": "emx-Latn-FR", + "emx-Latn": "emx-Latn-FR", + "emz": "emz-Latn-CM", + "emz-CM": "emz-Latn-CM", + "emz-Latn": "emz-Latn-CM", + "en": "en-Latn-US", + "en-AC": "en-Latn-AC", + "en-AG": "en-Latn-AG", + "en-AI": "en-Latn-AI", + "en-AM": "en-Latn-AM", + "en-AQ": "en-Latn-AQ", + "en-AU": "en-Latn-AU", + "en-AZ": "en-Latn-AZ", + "en-BB": "en-Latn-BB", + "en-BM": "en-Latn-BM", + "en-BS": "en-Latn-BS", + "en-BW": "en-Latn-BW", + "en-BZ": "en-Latn-BZ", + "en-CA": "en-Latn-CA", + "en-CC": "en-Latn-CC", + "en-CK": "en-Latn-CK", + "en-CN": "en-Latn-CN", + "en-CP": "en-Latn-CP", + "en-CQ": "en-Latn-CQ", + "en-CX": "en-Latn-CX", + "en-CY": "en-Latn-CY", + "en-DG": "en-Latn-DG", + "en-DM": "en-Latn-DM", + "en-Dsrt": "en-Dsrt-US", + "en-ET": "en-Latn-ET", + "en-FJ": "en-Latn-FJ", + "en-FK": "en-Latn-FK", + "en-FM": "en-Latn-FM", + "en-GB": "en-Latn-GB", + "en-GD": "en-Latn-GD", + "en-GE": "en-Latn-GE", + "en-GG": "en-Latn-GG", + "en-GH": "en-Latn-GH", + "en-GI": "en-Latn-GI", + "en-GM": "en-Latn-GM", + "en-GS": "en-Latn-GS", + "en-GU": "en-Latn-GU", + "en-GY": "en-Latn-GY", + "en-HK": "en-Latn-HK", + "en-HM": "en-Latn-HM", + "en-IE": "en-Latn-IE", + "en-IM": "en-Latn-IM", + "en-IN": "en-Latn-IN", + "en-IO": "en-Latn-IO", + "en-IS": "en-Latn-IS", + "en-JE": "en-Latn-JE", + "en-JM": "en-Latn-JM", + "en-JP": "en-Latn-JP", + "en-KE": "en-Latn-KE", + "en-KI": "en-Latn-KI", + "en-KN": "en-Latn-KN", + "en-KR": "en-Latn-KR", + "en-KY": "en-Latn-KY", + "en-LC": "en-Latn-LC", + "en-LK": "en-Latn-LK", + "en-LR": "en-Latn-LR", + "en-Latn": "en-Latn-US", + "en-Latn-AE": "en-Latn-AE", + "en-Latn-BD": "en-Latn-BD", + "en-Latn-BG": "en-Latn-BG", + "en-Latn-BT": "en-Latn-BT", + "en-Latn-CC": "en-Latn-CC", + "en-Latn-EG": "en-Latn-EG", + "en-Latn-ER": "en-Latn-ER", + "en-Latn-ET": "en-Latn-ET", + "en-Latn-GR": "en-Latn-GR", + "en-Latn-HK": "en-Latn-HK", + "en-Latn-IL": "en-Latn-IL", + "en-Latn-IN": "en-Latn-IN", + "en-Latn-IQ": "en-Latn-IQ", + "en-Latn-JO": "en-Latn-JO", + "en-Latn-KZ": "en-Latn-KZ", + "en-Latn-LB": "en-Latn-LB", + "en-Latn-LK": "en-Latn-LK", + "en-Latn-MV": "en-Latn-MV", + "en-Latn-NP": "en-Latn-NP", + "en-Latn-PK": "en-Latn-PK", + "en-Latn-SD": "en-Latn-SD", + "en-Latn-SS": "en-Latn-SS", + "en-Latn-TH": "en-Latn-TH", + "en-Latn-YE": "en-Latn-YE", + "en-MH": "en-Latn-MH", + "en-MM": "en-Latn-MM", + "en-MP": "en-Latn-MP", + "en-MS": "en-Latn-MS", + "en-MT": "en-Latn-MT", + "en-MU": "en-Latn-MU", + "en-MW": "en-Latn-MW", + "en-MX": "en-Latn-MX", + "en-MY": "en-Latn-MY", + "en-NA": "en-Latn-NA", + "en-NF": "en-Latn-NF", + "en-NG": "en-Latn-NG", + "en-NU": "en-Latn-NU", + "en-NZ": "en-Latn-NZ", + "en-PG": "en-Latn-PG", + "en-PH": "en-Latn-PH", + "en-PK": "en-Latn-PK", + "en-PN": "en-Latn-PN", + "en-PR": "en-Latn-PR", + "en-PW": "en-Latn-PW", + "en-RW": "en-Latn-RW", + "en-SB": "en-Latn-SB", + "en-SD": "en-Latn-SD", + "en-SG": "en-Latn-SG", + "en-SH": "en-Latn-SH", + "en-SL": "en-Latn-SL", + "en-SS": "en-Latn-SS", + "en-SX": "en-Latn-SX", + "en-Shaw": "en-Shaw-GB", + "en-TA": "en-Latn-TA", + "en-TC": "en-Latn-TC", + "en-TK": "en-Latn-TK", + "en-TT": "en-Latn-TT", + "en-TV": "en-Latn-TV", + "en-TW": "en-Latn-TW", + "en-TZ": "en-Latn-TZ", + "en-UG": "en-Latn-UG", + "en-UM": "en-Latn-UM", + "en-US": "en-Latn-US", + "en-VC": "en-Latn-VC", + "en-VG": "en-Latn-VG", + "en-VI": "en-Latn-VI", + "en-ZA": "en-Latn-ZA", + "en-ZM": "en-Latn-ZM", + "ena": "ena-Latn-PG", + "ena-Latn": "ena-Latn-PG", + "ena-PG": "ena-Latn-PG", + "enb": "enb-Latn-KE", + "enb-KE": "enb-Latn-KE", + "enb-Latn": "enb-Latn-KE", + "enc": "enc-Latn-VN", + "enc-Latn": "enc-Latn-VN", + "enc-VN": "enc-Latn-VN", + "end": "end-Latn-ID", + "end-ID": "end-Latn-ID", + "end-Latn": "end-Latn-ID", + "enf": "enf-Cyrl-RU", + "enf-Cyrl": "enf-Cyrl-RU", + "enf-RU": "enf-Cyrl-RU", + "enh": "enh-Cyrl-RU", + "enh-Cyrl": "enh-Cyrl-RU", + "enh-RU": "enh-Cyrl-RU", + "enl": "enl-Latn-PY", + "enl-Latn": "enl-Latn-PY", + "enl-PY": "enl-Latn-PY", + "enm": "enm-Latn-GB", + "enm-GB": "enm-Latn-GB", + "enm-Latn": "enm-Latn-GB", + "enn": "enn-Latn-NG", + "enn-Latn": "enn-Latn-NG", + "enn-NG": "enn-Latn-NG", + "eno": "eno-Latn-ID", + "eno-ID": "eno-Latn-ID", + "eno-Latn": "eno-Latn-ID", + "enq": "enq-Latn-PG", + "enq-Latn": "enq-Latn-PG", + "enq-PG": "enq-Latn-PG", + "enr": "enr-Latn-ID", + "enr-ID": "enr-Latn-ID", + "enr-Latn": "enr-Latn-ID", + "env": "env-Latn-NG", + "env-Latn": "env-Latn-NG", + "env-NG": "env-Latn-NG", + "enw": "enw-Latn-NG", + "enw-Latn": "enw-Latn-NG", + "enw-NG": "enw-Latn-NG", + "enx": "enx-Latn-PY", + "enx-Latn": "enx-Latn-PY", + "enx-PY": "enx-Latn-PY", + "eo": "eo-Latn-001", + "eo-001": "eo-Latn-001", + "eo-Latn": "eo-Latn-001", + "eot": "eot-Latn-CI", + "eot-CI": "eot-Latn-CI", + "eot-Latn": "eot-Latn-CI", + "epi": "epi-Latn-NG", + "epi-Latn": "epi-Latn-NG", + "epi-NG": "epi-Latn-NG", + "era": "era-Taml-IN", + "era-IN": "era-Taml-IN", + "era-Taml": "era-Taml-IN", + "erg": "erg-Latn-VU", + "erg-Latn": "erg-Latn-VU", + "erg-VU": "erg-Latn-VU", + "erh": "erh-Latn-NG", + "erh-Latn": "erh-Latn-NG", + "erh-NG": "erh-Latn-NG", + "eri": "eri-Latn-PG", + "eri-Latn": "eri-Latn-PG", + "eri-PG": "eri-Latn-PG", + "erk": "erk-Latn-VU", + "erk-Latn": "erk-Latn-VU", + "erk-VU": "erk-Latn-VU", + "err": "err-Latn-AU", + "err-AU": "err-Latn-AU", + "err-Latn": "err-Latn-AU", + "ers": "ers-Latn-CN", + "ers-CN": "ers-Latn-CN", + "ers-Latn": "ers-Latn-CN", + "ert": "ert-Latn-ID", + "ert-ID": "ert-Latn-ID", + "ert-Latn": "ert-Latn-ID", + "erw": "erw-Latn-ID", + "erw-ID": "erw-Latn-ID", + "erw-Latn": "erw-Latn-ID", + "es": "es-Latn-ES", + "es-419": "es-Latn-419", + "es-AR": "es-Latn-AR", + "es-BO": "es-Latn-BO", + "es-CA": "es-Latn-CA", + "es-CL": "es-Latn-CL", + "es-CO": "es-Latn-CO", + "es-CR": "es-Latn-CR", + "es-CU": "es-Latn-CU", + "es-DO": "es-Latn-DO", + "es-EA": "es-Latn-EA", + "es-EC": "es-Latn-EC", + "es-ES": "es-Latn-ES", + "es-GQ": "es-Latn-GQ", + "es-GT": "es-Latn-GT", + "es-HN": "es-Latn-HN", + "es-IC": "es-Latn-IC", + "es-Latn": "es-Latn-ES", + "es-MX": "es-Latn-MX", + "es-NI": "es-Latn-NI", + "es-PA": "es-Latn-PA", + "es-PE": "es-Latn-PE", + "es-PH": "es-Latn-PH", + "es-PR": "es-Latn-PR", + "es-PY": "es-Latn-PY", + "es-SV": "es-Latn-SV", + "es-US": "es-Latn-US", + "es-UY": "es-Latn-UY", + "es-VE": "es-Latn-VE", + "ese": "ese-Latn-BO", + "ese-BO": "ese-Latn-BO", + "ese-Latn": "ese-Latn-BO", + "esg": "esg-Gonm-IN", + "esg-Gonm": "esg-Gonm-IN", + "esg-IN": "esg-Gonm-IN", + "esh": "esh-Arab-IR", + "esh-Arab": "esh-Arab-IR", + "esh-IR": "esh-Arab-IR", + "esi": "esi-Latn-US", + "esi-Latn": "esi-Latn-US", + "esi-US": "esi-Latn-US", + "esm": "esm-Latn-CI", + "esm-CI": "esm-Latn-CI", + "esm-Latn": "esm-Latn-CI", + "ess": "ess-Latn-US", + "ess-Latn": "ess-Latn-US", + "ess-US": "ess-Latn-US", + "esu": "esu-Latn-US", + "esu-Latn": "esu-Latn-US", + "esu-US": "esu-Latn-US", + "esy": "esy-Latn-PH", + "esy-Latn": "esy-Latn-PH", + "esy-PH": "esy-Latn-PH", + "et": "et-Latn-EE", + "et-EE": "et-Latn-EE", + "et-Latn": "et-Latn-EE", + "etb": "etb-Latn-NG", + "etb-Latn": "etb-Latn-NG", + "etb-NG": "etb-Latn-NG", + "etn": "etn-Latn-VU", + "etn-Latn": "etn-Latn-VU", + "etn-VU": "etn-Latn-VU", + "eto": "eto-Latn-CM", + "eto-CM": "eto-Latn-CM", + "eto-Latn": "eto-Latn-CM", + "etr": "etr-Latn-PG", + "etr-Latn": "etr-Latn-PG", + "etr-PG": "etr-Latn-PG", + "ets": "ets-Latn-NG", + "ets-Latn": "ets-Latn-NG", + "ets-NG": "ets-Latn-NG", + "ett": "ett-Ital-IT", + "ett-IT": "ett-Ital-IT", + "ett-Ital": "ett-Ital-IT", + "etu": "etu-Latn-NG", + "etu-Latn": "etu-Latn-NG", + "etu-NG": "etu-Latn-NG", + "etx": "etx-Latn-NG", + "etx-Latn": "etx-Latn-NG", + "etx-NG": "etx-Latn-NG", + "etz": "etz-Latn-ID", + "etz-ID": "etz-Latn-ID", + "etz-Latn": "etz-Latn-ID", + "eu": "eu-Latn-ES", + "eu-ES": "eu-Latn-ES", + "eu-Latn": "eu-Latn-ES", + "eud": "eud-Latn-MX", + "eud-Latn": "eud-Latn-MX", + "eud-MX": "eud-Latn-MX", + "eve": "eve-Cyrl-RU", + "eve-Cyrl": "eve-Cyrl-RU", + "eve-RU": "eve-Cyrl-RU", + "evh": "evh-Latn-NG", + "evh-Latn": "evh-Latn-NG", + "evh-NG": "evh-Latn-NG", + "evn": "evn-Cyrl-RU", + "evn-Cyrl": "evn-Cyrl-RU", + "evn-RU": "evn-Cyrl-RU", + "ewo": "ewo-Latn-CM", + "ewo-CM": "ewo-Latn-CM", + "ewo-Latn": "ewo-Latn-CM", + "ext": "ext-Latn-ES", + "ext-ES": "ext-Latn-ES", + "ext-Latn": "ext-Latn-ES", + "eya": "eya-Latn-US", + "eya-Latn": "eya-Latn-US", + "eya-US": "eya-Latn-US", + "eyo": "eyo-Latn-KE", + "eyo-KE": "eyo-Latn-KE", + "eyo-Latn": "eyo-Latn-KE", + "eza": "eza-Latn-NG", + "eza-Latn": "eza-Latn-NG", + "eza-NG": "eza-Latn-NG", + "eze": "eze-Latn-NG", + "eze-Latn": "eze-Latn-NG", + "eze-NG": "eze-Latn-NG", + "fa": "fa-Arab-IR", + "fa-AF": "fa-Arab-AF", + "fa-Arab": "fa-Arab-IR", + "fa-Arab-AF": "fa-Arab-AF", + "fa-Arab-IR": "fa-Arab-IR", + "fa-Arab-TJ": "fa-Arab-TJ", + "fa-Aran": "fa-Aran-IR", + "fa-IR": "fa-Arab-IR", + "faa": "faa-Latn-PG", + "faa-Latn": "faa-Latn-PG", + "faa-PG": "faa-Latn-PG", + "fab": "fab-Latn-GQ", + "fab-GQ": "fab-Latn-GQ", + "fab-Latn": "fab-Latn-GQ", + "fad": "fad-Latn-PG", + "fad-Latn": "fad-Latn-PG", + "fad-PG": "fad-Latn-PG", + "faf": "faf-Latn-SB", + "faf-Latn": "faf-Latn-SB", + "faf-SB": "faf-Latn-SB", + "fag": "fag-Latn-PG", + "fag-Latn": "fag-Latn-PG", + "fag-PG": "fag-Latn-PG", + "fah": "fah-Latn-NG", + "fah-Latn": "fah-Latn-NG", + "fah-NG": "fah-Latn-NG", + "fai": "fai-Latn-PG", + "fai-Latn": "fai-Latn-PG", + "fai-PG": "fai-Latn-PG", + "faj": "faj-Latn-PG", + "faj-Latn": "faj-Latn-PG", + "faj-PG": "faj-Latn-PG", + "fak": "fak-Latn-CM", + "fak-CM": "fak-Latn-CM", + "fak-Latn": "fak-Latn-CM", + "fal": "fal-Latn-CM", + "fal-CM": "fal-Latn-CM", + "fal-Latn": "fal-Latn-CM", + "fam": "fam-Latn-NG", + "fam-Latn": "fam-Latn-NG", + "fam-NG": "fam-Latn-NG", + "fan": "fan-Latn-GQ", + "fan-GQ": "fan-Latn-GQ", + "fan-Latn": "fan-Latn-GQ", + "fap": "fap-Latn-SN", + "fap-Latn": "fap-Latn-SN", + "fap-SN": "fap-Latn-SN", + "far": "far-Latn-SB", + "far-Latn": "far-Latn-SB", + "far-SB": "far-Latn-SB", + "fau": "fau-Latn-ID", + "fau-ID": "fau-Latn-ID", + "fau-Latn": "fau-Latn-ID", + "fax": "fax-Latn-ES", + "fax-ES": "fax-Latn-ES", + "fax-Latn": "fax-Latn-ES", + "fay": "fay-Arab-IR", + "fay-Arab": "fay-Arab-IR", + "fay-IR": "fay-Arab-IR", + "faz": "faz-Arab-IR", + "faz-Arab": "faz-Arab-IR", + "faz-IR": "faz-Arab-IR", + "fbl": "fbl-Latn-PH", + "fbl-Latn": "fbl-Latn-PH", + "fbl-PH": "fbl-Latn-PH", + "fer": "fer-Latn-SS", + "fer-Latn": "fer-Latn-SS", + "fer-SS": "fer-Latn-SS", + "ff": "ff-Latn-SN", + "ff-Adlm": "ff-Adlm-GN", + "ff-Latn": "ff-Latn-SN", + "ff-SN": "ff-Latn-SN", + "ffi": "ffi-Latn-PG", + "ffi-Latn": "ffi-Latn-PG", + "ffi-PG": "ffi-Latn-PG", + "ffm": "ffm-Latn-ML", + "ffm-Latn": "ffm-Latn-ML", + "ffm-ML": "ffm-Latn-ML", + "fgr": "fgr-Latn-TD", + "fgr-Latn": "fgr-Latn-TD", + "fgr-TD": "fgr-Latn-TD", + "fi": "fi-Latn-FI", + "fi-FI": "fi-Latn-FI", + "fi-Latn": "fi-Latn-FI", + "fia": "fia-Arab-SD", + "fia-Arab": "fia-Arab-SD", + "fia-SD": "fia-Arab-SD", + "fie": "fie-Latn-NG", + "fie-Latn": "fie-Latn-NG", + "fie-NG": "fie-Latn-NG", + "fif": "fif-Latn-SA", + "fif-Latn": "fif-Latn-SA", + "fif-SA": "fif-Latn-SA", + "fil": "fil-Latn-PH", + "fil-Latn": "fil-Latn-PH", + "fil-PH": "fil-Latn-PH", + "fil-Tglg": "fil-Tglg-PH", + "fip": "fip-Latn-TZ", + "fip-Latn": "fip-Latn-TZ", + "fip-TZ": "fip-Latn-TZ", + "fir": "fir-Latn-NG", + "fir-Latn": "fir-Latn-NG", + "fir-NG": "fir-Latn-NG", + "fit": "fit-Latn-SE", + "fit-Latn": "fit-Latn-SE", + "fit-SE": "fit-Latn-SE", + "fiw": "fiw-Latn-PG", + "fiw-Latn": "fiw-Latn-PG", + "fiw-PG": "fiw-Latn-PG", + "fj": "fj-Latn-FJ", + "fj-FJ": "fj-Latn-FJ", + "fj-Latn": "fj-Latn-FJ", + "fkk": "fkk-Latn-NG", + "fkk-Latn": "fkk-Latn-NG", + "fkk-NG": "fkk-Latn-NG", + "fkv": "fkv-Latn-NO", + "fkv-Latn": "fkv-Latn-NO", + "fkv-NO": "fkv-Latn-NO", + "fla": "fla-Latn-US", + "fla-Latn": "fla-Latn-US", + "fla-US": "fla-Latn-US", + "flh": "flh-Latn-ID", + "flh-ID": "flh-Latn-ID", + "flh-Latn": "flh-Latn-ID", + "fli": "fli-Latn-NG", + "fli-Latn": "fli-Latn-NG", + "fli-NG": "fli-Latn-NG", + "fll": "fll-Latn-CM", + "fll-CM": "fll-Latn-CM", + "fll-Latn": "fll-Latn-CM", + "fln": "fln-Latn-AU", + "fln-AU": "fln-Latn-AU", + "fln-Latn": "fln-Latn-AU", + "flr": "flr-Latn-CD", + "flr-CD": "flr-Latn-CD", + "flr-Latn": "flr-Latn-CD", + "fly": "fly-Latn-ZA", + "fly-Latn": "fly-Latn-ZA", + "fly-ZA": "fly-Latn-ZA", + "fmp": "fmp-Latn-CM", + "fmp-CM": "fmp-Latn-CM", + "fmp-Latn": "fmp-Latn-CM", + "fmu": "fmu-Deva-IN", + "fmu-Deva": "fmu-Deva-IN", + "fmu-IN": "fmu-Deva-IN", + "fnb": "fnb-Latn-VU", + "fnb-Latn": "fnb-Latn-VU", + "fnb-VU": "fnb-Latn-VU", + "fng": "fng-Latn-ZA", + "fng-Latn": "fng-Latn-ZA", + "fng-ZA": "fng-Latn-ZA", + "fni": "fni-Latn-TD", + "fni-Latn": "fni-Latn-TD", + "fni-TD": "fni-Latn-TD", + "fo": "fo-Latn-FO", + "fo-FO": "fo-Latn-FO", + "fo-Latn": "fo-Latn-FO", + "fod": "fod-Latn-BJ", + "fod-BJ": "fod-Latn-BJ", + "fod-Latn": "fod-Latn-BJ", + "foi": "foi-Latn-PG", + "foi-Latn": "foi-Latn-PG", + "foi-PG": "foi-Latn-PG", + "fom": "fom-Latn-CD", + "fom-CD": "fom-Latn-CD", + "fom-Latn": "fom-Latn-CD", + "fon": "fon-Latn-BJ", + "fon-BJ": "fon-Latn-BJ", + "fon-Latn": "fon-Latn-BJ", + "for": "for-Latn-PG", + "for-Latn": "for-Latn-PG", + "for-PG": "for-Latn-PG", + "fos": "fos-Latn-TW", + "fos-Latn": "fos-Latn-TW", + "fos-TW": "fos-Latn-TW", + "fpe": "fpe-Latn-GQ", + "fpe-GQ": "fpe-Latn-GQ", + "fpe-Latn": "fpe-Latn-GQ", + "fqs": "fqs-Latn-PG", + "fqs-Latn": "fqs-Latn-PG", + "fqs-PG": "fqs-Latn-PG", + "fr": "fr-Latn-FR", + "fr-BE": "fr-Latn-BE", + "fr-BF": "fr-Latn-BF", + "fr-BI": "fr-Latn-BI", + "fr-BJ": "fr-Latn-BJ", + "fr-BL": "fr-Latn-BL", + "fr-Brai": "fr-Brai-FR", + "fr-CA": "fr-Latn-CA", + "fr-CD": "fr-Latn-CD", + "fr-CF": "fr-Latn-CF", + "fr-CG": "fr-Latn-CG", + "fr-CH": "fr-Latn-CH", + "fr-CI": "fr-Latn-CI", + "fr-CM": "fr-Latn-CM", + "fr-DJ": "fr-Latn-DJ", + "fr-DZ": "fr-Latn-DZ", + "fr-Dupl": "fr-Dupl-FR", + "fr-FR": "fr-Latn-FR", + "fr-GA": "fr-Latn-GA", + "fr-GF": "fr-Latn-GF", + "fr-GN": "fr-Latn-GN", + "fr-GP": "fr-Latn-GP", + "fr-GQ": "fr-Latn-GQ", + "fr-HT": "fr-Latn-HT", + "fr-LB": "fr-Latn-LB", + "fr-LU": "fr-Latn-LU", + "fr-Latn": "fr-Latn-FR", + "fr-Latn-DZ": "fr-Latn-DZ", + "fr-Latn-KM": "fr-Latn-KM", + "fr-Latn-MA": "fr-Latn-MA", + "fr-Latn-MR": "fr-Latn-MR", + "fr-Latn-SY": "fr-Latn-SY", + "fr-Latn-TN": "fr-Latn-TN", + "fr-MC": "fr-Latn-MC", + "fr-MF": "fr-Latn-MF", + "fr-ML": "fr-Latn-ML", + "fr-MQ": "fr-Latn-MQ", + "fr-NC": "fr-Latn-NC", + "fr-NE": "fr-Latn-NE", + "fr-NG": "fr-Latn-NG", + "fr-PF": "fr-Latn-PF", + "fr-PM": "fr-Latn-PM", + "fr-RE": "fr-Latn-RE", + "fr-RW": "fr-Latn-RW", + "fr-SC": "fr-Latn-SC", + "fr-SN": "fr-Latn-SN", + "fr-TD": "fr-Latn-TD", + "fr-TF": "fr-Latn-TF", + "fr-TG": "fr-Latn-TG", + "fr-WF": "fr-Latn-WF", + "fr-YT": "fr-Latn-YT", + "frc": "frc-Latn-US", + "frc-Latn": "frc-Latn-US", + "frc-US": "frc-Latn-US", + "frd": "frd-Latn-ID", + "frd-ID": "frd-Latn-ID", + "frd-Latn": "frd-Latn-ID", + "frk": "frk-Latn-DE", + "frk-DE": "frk-Latn-DE", + "frk-Latn": "frk-Latn-DE", + "frm": "frm-Latn-FR", + "frm-FR": "frm-Latn-FR", + "frm-Latn": "frm-Latn-FR", + "fro": "fro-Latn-FR", + "fro-FR": "fro-Latn-FR", + "fro-Latn": "fro-Latn-FR", + "frp": "frp-Latn-FR", + "frp-FR": "frp-Latn-FR", + "frp-Latn": "frp-Latn-FR", + "frq": "frq-Latn-PG", + "frq-Latn": "frq-Latn-PG", + "frq-PG": "frq-Latn-PG", + "frr": "frr-Latn-DE", + "frr-DE": "frr-Latn-DE", + "frr-Latn": "frr-Latn-DE", + "frs": "frs-Latn-DE", + "frs-DE": "frs-Latn-DE", + "frs-Latn": "frs-Latn-DE", + "frt": "frt-Latn-VU", + "frt-Latn": "frt-Latn-VU", + "frt-VU": "frt-Latn-VU", + "fub": "fub-Arab-CM", + "fub-Arab": "fub-Arab-CM", + "fub-CM": "fub-Arab-CM", + "fud": "fud-Latn-WF", + "fud-Latn": "fud-Latn-WF", + "fud-WF": "fud-Latn-WF", + "fue": "fue-Latn-BJ", + "fue-BJ": "fue-Latn-BJ", + "fue-Latn": "fue-Latn-BJ", + "fuf": "fuf-Latn-GN", + "fuf-GN": "fuf-Latn-GN", + "fuf-Latn": "fuf-Latn-GN", + "fuh": "fuh-Latn-NE", + "fuh-Latn": "fuh-Latn-NE", + "fuh-NE": "fuh-Latn-NE", + "fui": "fui-Latn-TD", + "fui-Latn": "fui-Latn-TD", + "fui-TD": "fui-Latn-TD", + "fum": "fum-Latn-NG", + "fum-Latn": "fum-Latn-NG", + "fum-NG": "fum-Latn-NG", + "fun": "fun-Latn-BR", + "fun-BR": "fun-Latn-BR", + "fun-Latn": "fun-Latn-BR", + "fuq": "fuq-Latn-NE", + "fuq-Latn": "fuq-Latn-NE", + "fuq-NE": "fuq-Latn-NE", + "fur": "fur-Latn-IT", + "fur-IT": "fur-Latn-IT", + "fur-Latn": "fur-Latn-IT", + "fut": "fut-Latn-VU", + "fut-Latn": "fut-Latn-VU", + "fut-VU": "fut-Latn-VU", + "fuu": "fuu-Latn-CD", + "fuu-CD": "fuu-Latn-CD", + "fuu-Latn": "fuu-Latn-CD", + "fuv": "fuv-Latn-NG", + "fuv-Latn": "fuv-Latn-NG", + "fuv-NG": "fuv-Latn-NG", + "fuy": "fuy-Latn-PG", + "fuy-Latn": "fuy-Latn-PG", + "fuy-PG": "fuy-Latn-PG", + "fvr": "fvr-Latn-SD", + "fvr-Latn": "fvr-Latn-SD", + "fvr-SD": "fvr-Latn-SD", + "fwa": "fwa-Latn-NC", + "fwa-Latn": "fwa-Latn-NC", + "fwa-NC": "fwa-Latn-NC", + "fwe": "fwe-Latn-NA", + "fwe-Latn": "fwe-Latn-NA", + "fwe-NA": "fwe-Latn-NA", + "fy": "fy-Latn-NL", + "fy-Latn": "fy-Latn-NL", + "fy-NL": "fy-Latn-NL", + "ga": "ga-Latn-IE", + "ga-IE": "ga-Latn-IE", + "ga-Latn": "ga-Latn-IE", + "gaa": "gaa-Latn-GH", + "gaa-GH": "gaa-Latn-GH", + "gaa-Latn": "gaa-Latn-GH", + "gab": "gab-Latn-TD", + "gab-Latn": "gab-Latn-TD", + "gab-TD": "gab-Latn-TD", + "gac": "gac-Latn-IN", + "gac-IN": "gac-Latn-IN", + "gac-Latn": "gac-Latn-IN", + "gad": "gad-Latn-PH", + "gad-Latn": "gad-Latn-PH", + "gad-PH": "gad-Latn-PH", + "gae": "gae-Latn-VE", + "gae-Latn": "gae-Latn-VE", + "gae-VE": "gae-Latn-VE", + "gaf": "gaf-Latn-PG", + "gaf-Latn": "gaf-Latn-PG", + "gaf-PG": "gaf-Latn-PG", + "gag": "gag-Latn-MD", + "gag-Latn": "gag-Latn-MD", + "gag-MD": "gag-Latn-MD", + "gah": "gah-Latn-PG", + "gah-Latn": "gah-Latn-PG", + "gah-PG": "gah-Latn-PG", + "gai": "gai-Latn-PG", + "gai-Latn": "gai-Latn-PG", + "gai-PG": "gai-Latn-PG", + "gaj": "gaj-Latn-PG", + "gaj-Latn": "gaj-Latn-PG", + "gaj-PG": "gaj-Latn-PG", + "gak": "gak-Latn-ID", + "gak-ID": "gak-Latn-ID", + "gak-Latn": "gak-Latn-ID", + "gal": "gal-Latn-TL", + "gal-Latn": "gal-Latn-TL", + "gal-TL": "gal-Latn-TL", + "gam": "gam-Latn-PG", + "gam-Latn": "gam-Latn-PG", + "gam-PG": "gam-Latn-PG", + "gan": "gan-Hans-CN", + "gan-CN": "gan-Hans-CN", + "gan-Hans": "gan-Hans-CN", + "gao": "gao-Latn-PG", + "gao-Latn": "gao-Latn-PG", + "gao-PG": "gao-Latn-PG", + "gap": "gap-Latn-PG", + "gap-Latn": "gap-Latn-PG", + "gap-PG": "gap-Latn-PG", + "gaq": "gaq-Orya-IN", + "gaq-IN": "gaq-Orya-IN", + "gaq-Orya": "gaq-Orya-IN", + "gar": "gar-Latn-PG", + "gar-Latn": "gar-Latn-PG", + "gar-PG": "gar-Latn-PG", + "gas": "gas-Gujr-IN", + "gas-Gujr": "gas-Gujr-IN", + "gas-IN": "gas-Gujr-IN", + "gat": "gat-Latn-PG", + "gat-Latn": "gat-Latn-PG", + "gat-PG": "gat-Latn-PG", + "gau": "gau-Telu-IN", + "gau-IN": "gau-Telu-IN", + "gau-Telu": "gau-Telu-IN", + "gaw": "gaw-Latn-PG", + "gaw-Latn": "gaw-Latn-PG", + "gaw-PG": "gaw-Latn-PG", + "gax": "gax-Latn-ET", + "gax-ET": "gax-Latn-ET", + "gax-Latn": "gax-Latn-ET", + "gay": "gay-Latn-ID", + "gay-ID": "gay-Latn-ID", + "gay-Latn": "gay-Latn-ID", + "gba": "gba-Latn-CF", + "gba-CF": "gba-Latn-CF", + "gba-Latn": "gba-Latn-CF", + "gbb": "gbb-Latn-AU", + "gbb-AU": "gbb-Latn-AU", + "gbb-Latn": "gbb-Latn-AU", + "gbd": "gbd-Latn-AU", + "gbd-AU": "gbd-Latn-AU", + "gbd-Latn": "gbd-Latn-AU", + "gbe": "gbe-Latn-PG", + "gbe-Latn": "gbe-Latn-PG", + "gbe-PG": "gbe-Latn-PG", + "gbf": "gbf-Latn-PG", + "gbf-Latn": "gbf-Latn-PG", + "gbf-PG": "gbf-Latn-PG", + "gbg": "gbg-Latn-CF", + "gbg-CF": "gbg-Latn-CF", + "gbg-Latn": "gbg-Latn-CF", + "gbh": "gbh-Latn-BJ", + "gbh-BJ": "gbh-Latn-BJ", + "gbh-Latn": "gbh-Latn-BJ", + "gbi": "gbi-Latn-ID", + "gbi-ID": "gbi-Latn-ID", + "gbi-Latn": "gbi-Latn-ID", + "gbj": "gbj-Orya-IN", + "gbj-IN": "gbj-Orya-IN", + "gbj-Orya": "gbj-Orya-IN", + "gbk": "gbk-Deva-IN", + "gbk-Deva": "gbk-Deva-IN", + "gbk-IN": "gbk-Deva-IN", + "gbl": "gbl-Gujr-IN", + "gbl-Gujr": "gbl-Gujr-IN", + "gbl-IN": "gbl-Gujr-IN", + "gbm": "gbm-Deva-IN", + "gbm-Deva": "gbm-Deva-IN", + "gbm-IN": "gbm-Deva-IN", + "gbn": "gbn-Latn-SS", + "gbn-Latn": "gbn-Latn-SS", + "gbn-SS": "gbn-Latn-SS", + "gbp": "gbp-Latn-CF", + "gbp-CF": "gbp-Latn-CF", + "gbp-Latn": "gbp-Latn-CF", + "gbq": "gbq-Latn-CF", + "gbq-CF": "gbq-Latn-CF", + "gbq-Latn": "gbq-Latn-CF", + "gbr": "gbr-Latn-NG", + "gbr-Latn": "gbr-Latn-NG", + "gbr-NG": "gbr-Latn-NG", + "gbs": "gbs-Latn-BJ", + "gbs-BJ": "gbs-Latn-BJ", + "gbs-Latn": "gbs-Latn-BJ", + "gbu": "gbu-Latn-AU", + "gbu-AU": "gbu-Latn-AU", + "gbu-Latn": "gbu-Latn-AU", + "gbv": "gbv-Latn-CF", + "gbv-CF": "gbv-Latn-CF", + "gbv-Latn": "gbv-Latn-CF", + "gbw": "gbw-Latn-AU", + "gbw-AU": "gbw-Latn-AU", + "gbw-Latn": "gbw-Latn-AU", + "gbx": "gbx-Latn-BJ", + "gbx-BJ": "gbx-Latn-BJ", + "gbx-Latn": "gbx-Latn-BJ", + "gby": "gby-Latn-NG", + "gby-Latn": "gby-Latn-NG", + "gby-NG": "gby-Latn-NG", + "gbz": "gbz-Arab-IR", + "gbz-Arab": "gbz-Arab-IR", + "gbz-IR": "gbz-Arab-IR", + "gcc": "gcc-Latn-PG", + "gcc-Latn": "gcc-Latn-PG", + "gcc-PG": "gcc-Latn-PG", + "gcd": "gcd-Latn-AU", + "gcd-AU": "gcd-Latn-AU", + "gcd-Latn": "gcd-Latn-AU", + "gcf": "gcf-Latn-GP", + "gcf-GP": "gcf-Latn-GP", + "gcf-Latn": "gcf-Latn-GP", + "gcl": "gcl-Latn-GD", + "gcl-GD": "gcl-Latn-GD", + "gcl-Latn": "gcl-Latn-GD", + "gcn": "gcn-Latn-PG", + "gcn-Latn": "gcn-Latn-PG", + "gcn-PG": "gcn-Latn-PG", + "gcr": "gcr-Latn-GF", + "gcr-GF": "gcr-Latn-GF", + "gcr-Latn": "gcr-Latn-GF", + "gct": "gct-Latn-VE", + "gct-Latn": "gct-Latn-VE", + "gct-VE": "gct-Latn-VE", + "gd": "gd-Latn-GB", + "gd-GB": "gd-Latn-GB", + "gd-Latn": "gd-Latn-GB", + "gdb": "gdb-Orya-IN", + "gdb-IN": "gdb-Orya-IN", + "gdb-Orya": "gdb-Orya-IN", + "gdc": "gdc-Latn-AU", + "gdc-AU": "gdc-Latn-AU", + "gdc-Latn": "gdc-Latn-AU", + "gdd": "gdd-Latn-PG", + "gdd-Latn": "gdd-Latn-PG", + "gdd-PG": "gdd-Latn-PG", + "gde": "gde-Latn-NG", + "gde-Latn": "gde-Latn-NG", + "gde-NG": "gde-Latn-NG", + "gdf": "gdf-Latn-NG", + "gdf-Latn": "gdf-Latn-NG", + "gdf-NG": "gdf-Latn-NG", + "gdg": "gdg-Latn-PH", + "gdg-Latn": "gdg-Latn-PH", + "gdg-PH": "gdg-Latn-PH", + "gdh": "gdh-Latn-AU", + "gdh-AU": "gdh-Latn-AU", + "gdh-Latn": "gdh-Latn-AU", + "gdi": "gdi-Latn-CF", + "gdi-CF": "gdi-Latn-CF", + "gdi-Latn": "gdi-Latn-CF", + "gdj": "gdj-Latn-AU", + "gdj-AU": "gdj-Latn-AU", + "gdj-Latn": "gdj-Latn-AU", + "gdk": "gdk-Latn-TD", + "gdk-Latn": "gdk-Latn-TD", + "gdk-TD": "gdk-Latn-TD", + "gdl": "gdl-Latn-ET", + "gdl-ET": "gdl-Latn-ET", + "gdl-Latn": "gdl-Latn-ET", + "gdm": "gdm-Latn-TD", + "gdm-Latn": "gdm-Latn-TD", + "gdm-TD": "gdm-Latn-TD", + "gdn": "gdn-Latn-PG", + "gdn-Latn": "gdn-Latn-PG", + "gdn-PG": "gdn-Latn-PG", + "gdo": "gdo-Cyrl-RU", + "gdo-Cyrl": "gdo-Cyrl-RU", + "gdo-RU": "gdo-Cyrl-RU", + "gdq": "gdq-Latn-YE", + "gdq-Latn": "gdq-Latn-YE", + "gdq-YE": "gdq-Latn-YE", + "gdr": "gdr-Latn-PG", + "gdr-Latn": "gdr-Latn-PG", + "gdr-PG": "gdr-Latn-PG", + "gdt": "gdt-Latn-AU", + "gdt-AU": "gdt-Latn-AU", + "gdt-Latn": "gdt-Latn-AU", + "gdu": "gdu-Latn-NG", + "gdu-Latn": "gdu-Latn-NG", + "gdu-NG": "gdu-Latn-NG", + "gdx": "gdx-Deva-IN", + "gdx-Deva": "gdx-Deva-IN", + "gdx-IN": "gdx-Deva-IN", + "gea": "gea-Latn-NG", + "gea-Latn": "gea-Latn-NG", + "gea-NG": "gea-Latn-NG", + "geb": "geb-Latn-PG", + "geb-Latn": "geb-Latn-PG", + "geb-PG": "geb-Latn-PG", + "gec": "gec-Latn-LR", + "gec-LR": "gec-Latn-LR", + "gec-Latn": "gec-Latn-LR", + "ged": "ged-Latn-NG", + "ged-Latn": "ged-Latn-NG", + "ged-NG": "ged-Latn-NG", + "gef": "gef-Latn-ID", + "gef-ID": "gef-Latn-ID", + "gef-Latn": "gef-Latn-ID", + "geg": "geg-Latn-NG", + "geg-Latn": "geg-Latn-NG", + "geg-NG": "geg-Latn-NG", + "geh": "geh-Latn-CA", + "geh-CA": "geh-Latn-CA", + "geh-Latn": "geh-Latn-CA", + "gei": "gei-Latn-ID", + "gei-ID": "gei-Latn-ID", + "gei-Latn": "gei-Latn-ID", + "gej": "gej-Latn-TG", + "gej-Latn": "gej-Latn-TG", + "gej-TG": "gej-Latn-TG", + "gek": "gek-Latn-NG", + "gek-Latn": "gek-Latn-NG", + "gek-NG": "gek-Latn-NG", + "gel": "gel-Latn-NG", + "gel-Latn": "gel-Latn-NG", + "gel-NG": "gel-Latn-NG", + "geq": "geq-Latn-CF", + "geq-CF": "geq-Latn-CF", + "geq-Latn": "geq-Latn-CF", + "ges": "ges-Latn-ID", + "ges-ID": "ges-Latn-ID", + "ges-Latn": "ges-Latn-ID", + "gev": "gev-Latn-GA", + "gev-GA": "gev-Latn-GA", + "gev-Latn": "gev-Latn-GA", + "gew": "gew-Latn-NG", + "gew-Latn": "gew-Latn-NG", + "gew-NG": "gew-Latn-NG", + "gex": "gex-Latn-SO", + "gex-Latn": "gex-Latn-SO", + "gex-SO": "gex-Latn-SO", + "gey": "gey-Latn-CD", + "gey-CD": "gey-Latn-CD", + "gey-Latn": "gey-Latn-CD", + "gez": "gez-Ethi-ET", + "gez-ET": "gez-Ethi-ET", + "gez-Ethi": "gez-Ethi-ET", + "gfk": "gfk-Latn-PG", + "gfk-Latn": "gfk-Latn-PG", + "gfk-PG": "gfk-Latn-PG", + "gga": "gga-Latn-SB", + "gga-Latn": "gga-Latn-SB", + "gga-SB": "gga-Latn-SB", + "ggb": "ggb-Latn-LR", + "ggb-LR": "ggb-Latn-LR", + "ggb-Latn": "ggb-Latn-LR", + "ggd": "ggd-Latn-AU", + "ggd-AU": "ggd-Latn-AU", + "ggd-Latn": "ggd-Latn-AU", + "gge": "gge-Latn-AU", + "gge-AU": "gge-Latn-AU", + "gge-Latn": "gge-Latn-AU", + "ggg": "ggg-Arab-PK", + "ggg-Arab": "ggg-Arab-PK", + "ggg-PK": "ggg-Arab-PK", + "ggk": "ggk-Latn-AU", + "ggk-AU": "ggk-Latn-AU", + "ggk-Latn": "ggk-Latn-AU", + "ggl": "ggl-Latn-PG", + "ggl-Latn": "ggl-Latn-PG", + "ggl-PG": "ggl-Latn-PG", + "ggt": "ggt-Latn-PG", + "ggt-Latn": "ggt-Latn-PG", + "ggt-PG": "ggt-Latn-PG", + "ggu": "ggu-Latn-CI", + "ggu-CI": "ggu-Latn-CI", + "ggu-Latn": "ggu-Latn-CI", + "ggw": "ggw-Latn-PG", + "ggw-Latn": "ggw-Latn-PG", + "ggw-PG": "ggw-Latn-PG", + "gha": "gha-Arab-LY", + "gha-Arab": "gha-Arab-LY", + "gha-LY": "gha-Arab-LY", + "ghc": "ghc-Latn-GB", + "ghc-GB": "ghc-Latn-GB", + "ghc-Latn": "ghc-Latn-GB", + "ghe": "ghe-Deva-NP", + "ghe-Deva": "ghe-Deva-NP", + "ghe-NP": "ghe-Deva-NP", + "ghk": "ghk-Latn-MM", + "ghk-Latn": "ghk-Latn-MM", + "ghk-MM": "ghk-Latn-MM", + "ghn": "ghn-Latn-SB", + "ghn-Latn": "ghn-Latn-SB", + "ghn-SB": "ghn-Latn-SB", + "gho": "gho-Tfng-MA", + "gho-MA": "gho-Tfng-MA", + "gho-Tfng": "gho-Tfng-MA", + "ghr": "ghr-Arab-PK", + "ghr-Arab": "ghr-Arab-PK", + "ghr-PK": "ghr-Arab-PK", + "ghs": "ghs-Latn-PG", + "ghs-Latn": "ghs-Latn-PG", + "ghs-PG": "ghs-Latn-PG", + "ght": "ght-Tibt-NP", + "ght-NP": "ght-Tibt-NP", + "ght-Tibt": "ght-Tibt-NP", + "gia": "gia-Latn-AU", + "gia-AU": "gia-Latn-AU", + "gia-Latn": "gia-Latn-AU", + "gib": "gib-Latn-NG", + "gib-Latn": "gib-Latn-NG", + "gib-NG": "gib-Latn-NG", + "gic": "gic-Latn-ZA", + "gic-Latn": "gic-Latn-ZA", + "gic-ZA": "gic-Latn-ZA", + "gid": "gid-Latn-CM", + "gid-CM": "gid-Latn-CM", + "gid-Latn": "gid-Latn-CM", + "gie": "gie-Latn-CI", + "gie-CI": "gie-Latn-CI", + "gie-Latn": "gie-Latn-CI", + "gig": "gig-Arab-PK", + "gig-Arab": "gig-Arab-PK", + "gig-PK": "gig-Arab-PK", + "gih": "gih-Latn-AU", + "gih-AU": "gih-Latn-AU", + "gih-Latn": "gih-Latn-AU", + "gil": "gil-Latn-KI", + "gil-KI": "gil-Latn-KI", + "gil-Latn": "gil-Latn-KI", + "gim": "gim-Latn-PG", + "gim-Latn": "gim-Latn-PG", + "gim-PG": "gim-Latn-PG", + "gin": "gin-Cyrl-RU", + "gin-Cyrl": "gin-Cyrl-RU", + "gin-RU": "gin-Cyrl-RU", + "gip": "gip-Latn-PG", + "gip-Latn": "gip-Latn-PG", + "gip-PG": "gip-Latn-PG", + "giq": "giq-Latn-VN", + "giq-Latn": "giq-Latn-VN", + "giq-VN": "giq-Latn-VN", + "gir": "gir-Latn-VN", + "gir-Latn": "gir-Latn-VN", + "gir-VN": "gir-Latn-VN", + "gis": "gis-Latn-CM", + "gis-CM": "gis-Latn-CM", + "gis-Latn": "gis-Latn-CM", + "git": "git-Latn-CA", + "git-CA": "git-Latn-CA", + "git-Latn": "git-Latn-CA", + "gix": "gix-Latn-CD", + "gix-CD": "gix-Latn-CD", + "gix-Latn": "gix-Latn-CD", + "giy": "giy-Latn-AU", + "giy-AU": "giy-Latn-AU", + "giy-Latn": "giy-Latn-AU", + "giz": "giz-Latn-CM", + "giz-CM": "giz-Latn-CM", + "giz-Latn": "giz-Latn-CM", + "gjk": "gjk-Arab-PK", + "gjk-Arab": "gjk-Arab-PK", + "gjk-PK": "gjk-Arab-PK", + "gjm": "gjm-Latn-AU", + "gjm-AU": "gjm-Latn-AU", + "gjm-Latn": "gjm-Latn-AU", + "gjn": "gjn-Latn-GH", + "gjn-GH": "gjn-Latn-GH", + "gjn-Latn": "gjn-Latn-GH", + "gjr": "gjr-Latn-AU", + "gjr-AU": "gjr-Latn-AU", + "gjr-Latn": "gjr-Latn-AU", + "gju": "gju-Arab-PK", + "gju-Arab": "gju-Arab-PK", + "gju-PK": "gju-Arab-PK", + "gka": "gka-Latn-PG", + "gka-Latn": "gka-Latn-PG", + "gka-PG": "gka-Latn-PG", + "gkd": "gkd-Latn-PG", + "gkd-Latn": "gkd-Latn-PG", + "gkd-PG": "gkd-Latn-PG", + "gke": "gke-Latn-CM", + "gke-CM": "gke-Latn-CM", + "gke-Latn": "gke-Latn-CM", + "gkn": "gkn-Latn-NG", + "gkn-Latn": "gkn-Latn-NG", + "gkn-NG": "gkn-Latn-NG", + "gko": "gko-Latn-AU", + "gko-AU": "gko-Latn-AU", + "gko-Latn": "gko-Latn-AU", + "gkp": "gkp-Latn-GN", + "gkp-GN": "gkp-Latn-GN", + "gkp-Latn": "gkp-Latn-GN", + "gku": "gku-Latn-ZA", + "gku-Latn": "gku-Latn-ZA", + "gku-ZA": "gku-Latn-ZA", + "gl": "gl-Latn-ES", + "gl-ES": "gl-Latn-ES", + "gl-Latn": "gl-Latn-ES", + "glb": "glb-Latn-NG", + "glb-Latn": "glb-Latn-NG", + "glb-NG": "glb-Latn-NG", + "glc": "glc-Latn-TD", + "glc-Latn": "glc-Latn-TD", + "glc-TD": "glc-Latn-TD", + "gld": "gld-Cyrl-RU", + "gld-Cyrl": "gld-Cyrl-RU", + "gld-RU": "gld-Cyrl-RU", + "glh": "glh-Arab-AF", + "glh-AF": "glh-Arab-AF", + "glh-Arab": "glh-Arab-AF", + "glj": "glj-Latn-TD", + "glj-Latn": "glj-Latn-TD", + "glj-TD": "glj-Latn-TD", + "glk": "glk-Arab-IR", + "glk-Arab": "glk-Arab-IR", + "glk-IR": "glk-Arab-IR", + "gll": "gll-Latn-AU", + "gll-AU": "gll-Latn-AU", + "gll-Latn": "gll-Latn-AU", + "glo": "glo-Latn-NG", + "glo-Latn": "glo-Latn-NG", + "glo-NG": "glo-Latn-NG", + "glr": "glr-Latn-LR", + "glr-LR": "glr-Latn-LR", + "glr-Latn": "glr-Latn-LR", + "glu": "glu-Latn-TD", + "glu-Latn": "glu-Latn-TD", + "glu-TD": "glu-Latn-TD", + "glw": "glw-Latn-NG", + "glw-Latn": "glw-Latn-NG", + "glw-NG": "glw-Latn-NG", + "gma": "gma-Latn-AU", + "gma-AU": "gma-Latn-AU", + "gma-Latn": "gma-Latn-AU", + "gmb": "gmb-Latn-SB", + "gmb-Latn": "gmb-Latn-SB", + "gmb-SB": "gmb-Latn-SB", + "gmd": "gmd-Latn-NG", + "gmd-Latn": "gmd-Latn-NG", + "gmd-NG": "gmd-Latn-NG", + "gmg": "gmg-Latn-PG", + "gmg-Latn": "gmg-Latn-PG", + "gmg-PG": "gmg-Latn-PG", + "gmh": "gmh-Latn-DE", + "gmh-DE": "gmh-Latn-DE", + "gmh-Latn": "gmh-Latn-DE", + "gml": "gml-Latf-DE", + "gml-DE": "gml-Latf-DE", + "gml-Latf": "gml-Latf-DE", + "gmm": "gmm-Latn-CM", + "gmm-CM": "gmm-Latn-CM", + "gmm-Latn": "gmm-Latn-CM", + "gmn": "gmn-Latn-CM", + "gmn-CM": "gmn-Latn-CM", + "gmn-Latn": "gmn-Latn-CM", + "gmr": "gmr-Latn-AU", + "gmr-AU": "gmr-Latn-AU", + "gmr-Latn": "gmr-Latn-AU", + "gmu": "gmu-Latn-PG", + "gmu-Latn": "gmu-Latn-PG", + "gmu-PG": "gmu-Latn-PG", + "gmv": "gmv-Ethi-ET", + "gmv-ET": "gmv-Ethi-ET", + "gmv-Ethi": "gmv-Ethi-ET", + "gmx": "gmx-Latn-TZ", + "gmx-Latn": "gmx-Latn-TZ", + "gmx-TZ": "gmx-Latn-TZ", + "gmy": "gmy-Linb-GR", + "gmy-GR": "gmy-Linb-GR", + "gmy-Linb": "gmy-Linb-GR", + "gmz": "gmz-Latn-NG", + "gmz-Latn": "gmz-Latn-NG", + "gmz-NG": "gmz-Latn-NG", + "gn": "gn-Latn-PY", + "gn-Latn": "gn-Latn-PY", + "gn-PY": "gn-Latn-PY", + "gna": "gna-Latn-BF", + "gna-BF": "gna-Latn-BF", + "gna-Latn": "gna-Latn-BF", + "gnb": "gnb-Latn-IN", + "gnb-IN": "gnb-Latn-IN", + "gnb-Latn": "gnb-Latn-IN", + "gnc": "gnc-Latn-ES", + "gnc-ES": "gnc-Latn-ES", + "gnc-Latn": "gnc-Latn-ES", + "gnd": "gnd-Latn-CM", + "gnd-CM": "gnd-Latn-CM", + "gnd-Latn": "gnd-Latn-CM", + "gne": "gne-Latn-NG", + "gne-Latn": "gne-Latn-NG", + "gne-NG": "gne-Latn-NG", + "gng": "gng-Latn-TG", + "gng-Latn": "gng-Latn-TG", + "gng-TG": "gng-Latn-TG", + "gnh": "gnh-Latn-NG", + "gnh-Latn": "gnh-Latn-NG", + "gnh-NG": "gnh-Latn-NG", + "gni": "gni-Latn-AU", + "gni-AU": "gni-Latn-AU", + "gni-Latn": "gni-Latn-AU", + "gnj": "gnj-Latn-CI", + "gnj-CI": "gnj-Latn-CI", + "gnj-Latn": "gnj-Latn-CI", + "gnk": "gnk-Latn-BW", + "gnk-BW": "gnk-Latn-BW", + "gnk-Latn": "gnk-Latn-BW", + "gnl": "gnl-Latn-AU", + "gnl-AU": "gnl-Latn-AU", + "gnl-Latn": "gnl-Latn-AU", + "gnm": "gnm-Latn-PG", + "gnm-Latn": "gnm-Latn-PG", + "gnm-PG": "gnm-Latn-PG", + "gnn": "gnn-Latn-AU", + "gnn-AU": "gnn-Latn-AU", + "gnn-Latn": "gnn-Latn-AU", + "gnq": "gnq-Latn-MY", + "gnq-Latn": "gnq-Latn-MY", + "gnq-MY": "gnq-Latn-MY", + "gnr": "gnr-Latn-AU", + "gnr-AU": "gnr-Latn-AU", + "gnr-Latn": "gnr-Latn-AU", + "gnt": "gnt-Latn-PG", + "gnt-Latn": "gnt-Latn-PG", + "gnt-PG": "gnt-Latn-PG", + "gnu": "gnu-Latn-PG", + "gnu-Latn": "gnu-Latn-PG", + "gnu-PG": "gnu-Latn-PG", + "gnw": "gnw-Latn-BO", + "gnw-BO": "gnw-Latn-BO", + "gnw-Latn": "gnw-Latn-BO", + "gnz": "gnz-Latn-CF", + "gnz-CF": "gnz-Latn-CF", + "gnz-Latn": "gnz-Latn-CF", + "goa": "goa-Latn-CI", + "goa-CI": "goa-Latn-CI", + "goa-Latn": "goa-Latn-CI", + "gob": "gob-Latn-CO", + "gob-CO": "gob-Latn-CO", + "gob-Latn": "gob-Latn-CO", + "goc": "goc-Latn-PG", + "goc-Latn": "goc-Latn-PG", + "goc-PG": "goc-Latn-PG", + "god": "god-Latn-CI", + "god-CI": "god-Latn-CI", + "god-Latn": "god-Latn-CI", + "goe": "goe-Tibt-BT", + "goe-BT": "goe-Tibt-BT", + "goe-Tibt": "goe-Tibt-BT", + "gof": "gof-Ethi-ET", + "gof-ET": "gof-Ethi-ET", + "gof-Ethi": "gof-Ethi-ET", + "gog": "gog-Latn-TZ", + "gog-Latn": "gog-Latn-TZ", + "gog-TZ": "gog-Latn-TZ", + "goh": "goh-Latn-DE", + "goh-DE": "goh-Latn-DE", + "goh-Latn": "goh-Latn-DE", + "goi": "goi-Latn-PG", + "goi-Latn": "goi-Latn-PG", + "goi-PG": "goi-Latn-PG", + "goj": "goj-Deva-IN", + "goj-Deva": "goj-Deva-IN", + "goj-IN": "goj-Deva-IN", + "gok": "gok-Deva-IN", + "gok-Deva": "gok-Deva-IN", + "gok-IN": "gok-Deva-IN", + "gol": "gol-Latn-LR", + "gol-LR": "gol-Latn-LR", + "gol-Latn": "gol-Latn-LR", + "gon": "gon-Deva-IN", + "gon-Deva": "gon-Deva-IN", + "gon-IN": "gon-Deva-IN", + "goo": "goo-Latn-FJ", + "goo-FJ": "goo-Latn-FJ", + "goo-Latn": "goo-Latn-FJ", + "gop": "gop-Latn-ID", + "gop-ID": "gop-Latn-ID", + "gop-Latn": "gop-Latn-ID", + "goq": "goq-Latn-ID", + "goq-ID": "goq-Latn-ID", + "goq-Latn": "goq-Latn-ID", + "gor": "gor-Latn-ID", + "gor-ID": "gor-Latn-ID", + "gor-Latn": "gor-Latn-ID", + "gos": "gos-Latn-NL", + "gos-Latn": "gos-Latn-NL", + "gos-NL": "gos-Latn-NL", + "got": "got-Goth-UA", + "got-Goth": "got-Goth-UA", + "got-UA": "got-Goth-UA", + "gou": "gou-Latn-CM", + "gou-CM": "gou-Latn-CM", + "gou-Latn": "gou-Latn-CM", + "gov": "gov-Latn-CI", + "gov-CI": "gov-Latn-CI", + "gov-Latn": "gov-Latn-CI", + "gow": "gow-Latn-TZ", + "gow-Latn": "gow-Latn-TZ", + "gow-TZ": "gow-Latn-TZ", + "gox": "gox-Latn-CD", + "gox-CD": "gox-Latn-CD", + "gox-Latn": "gox-Latn-CD", + "goy": "goy-Latn-TD", + "goy-Latn": "goy-Latn-TD", + "goy-TD": "goy-Latn-TD", + "gpa": "gpa-Latn-NG", + "gpa-Latn": "gpa-Latn-NG", + "gpa-NG": "gpa-Latn-NG", + "gpe": "gpe-Latn-GH", + "gpe-GH": "gpe-Latn-GH", + "gpe-Latn": "gpe-Latn-GH", + "gpn": "gpn-Latn-PG", + "gpn-Latn": "gpn-Latn-PG", + "gpn-PG": "gpn-Latn-PG", + "gqa": "gqa-Latn-NG", + "gqa-Latn": "gqa-Latn-NG", + "gqa-NG": "gqa-Latn-NG", + "gqn": "gqn-Latn-BR", + "gqn-BR": "gqn-Latn-BR", + "gqn-Latn": "gqn-Latn-BR", + "gqr": "gqr-Latn-TD", + "gqr-Latn": "gqr-Latn-TD", + "gqr-TD": "gqr-Latn-TD", + "gra": "gra-Deva-IN", + "gra-Deva": "gra-Deva-IN", + "gra-IN": "gra-Deva-IN", + "grb": "grb-Latn-LR", + "grb-LR": "grb-Latn-LR", + "grb-Latn": "grb-Latn-LR", + "grc": "grc-Cprt-CY", + "grc-CY": "grc-Cprt-CY", + "grc-Cprt": "grc-Cprt-CY", + "grc-Linb": "grc-Linb-GR", + "grd": "grd-Latn-NG", + "grd-Latn": "grd-Latn-NG", + "grd-NG": "grd-Latn-NG", + "grg": "grg-Latn-PG", + "grg-Latn": "grg-Latn-PG", + "grg-PG": "grg-Latn-PG", + "grh": "grh-Latn-NG", + "grh-Latn": "grh-Latn-NG", + "grh-NG": "grh-Latn-NG", + "gri": "gri-Latn-SB", + "gri-Latn": "gri-Latn-SB", + "gri-SB": "gri-Latn-SB", + "grj": "grj-Latn-LR", + "grj-LR": "grj-Latn-LR", + "grj-Latn": "grj-Latn-LR", + "grm": "grm-Latn-MY", + "grm-Latn": "grm-Latn-MY", + "grm-MY": "grm-Latn-MY", + "grq": "grq-Latn-PG", + "grq-Latn": "grq-Latn-PG", + "grq-PG": "grq-Latn-PG", + "grs": "grs-Latn-ID", + "grs-ID": "grs-Latn-ID", + "grs-Latn": "grs-Latn-ID", + "grt": "grt-Beng-IN", + "grt-Beng": "grt-Beng-IN", + "grt-IN": "grt-Beng-IN", + "gru": "gru-Ethi-ET", + "gru-ET": "gru-Ethi-ET", + "gru-Ethi": "gru-Ethi-ET", + "grv": "grv-Latn-LR", + "grv-LR": "grv-Latn-LR", + "grv-Latn": "grv-Latn-LR", + "grw": "grw-Latn-PG", + "grw-Latn": "grw-Latn-PG", + "grw-PG": "grw-Latn-PG", + "grx": "grx-Latn-PG", + "grx-Latn": "grx-Latn-PG", + "grx-PG": "grx-Latn-PG", + "gry": "gry-Latn-LR", + "gry-LR": "gry-Latn-LR", + "gry-Latn": "gry-Latn-LR", + "grz": "grz-Latn-PG", + "grz-Latn": "grz-Latn-PG", + "grz-PG": "grz-Latn-PG", + "gsl": "gsl-Latn-SN", + "gsl-Latn": "gsl-Latn-SN", + "gsl-SN": "gsl-Latn-SN", + "gsn": "gsn-Latn-PG", + "gsn-Latn": "gsn-Latn-PG", + "gsn-PG": "gsn-Latn-PG", + "gso": "gso-Latn-CF", + "gso-CF": "gso-Latn-CF", + "gso-Latn": "gso-Latn-CF", + "gsp": "gsp-Latn-PG", + "gsp-Latn": "gsp-Latn-PG", + "gsp-PG": "gsp-Latn-PG", + "gsw": "gsw-Latn-CH", + "gsw-CH": "gsw-Latn-CH", + "gsw-Latn": "gsw-Latn-CH", + "gta": "gta-Latn-BR", + "gta-BR": "gta-Latn-BR", + "gta-Latn": "gta-Latn-BR", + "gtu": "gtu-Latn-AU", + "gtu-AU": "gtu-Latn-AU", + "gtu-Latn": "gtu-Latn-AU", + "gu": "gu-Gujr-IN", + "gu-Gujr": "gu-Gujr-IN", + "gu-IN": "gu-Gujr-IN", + "gu-XX": "gu-Gujr-XX", + "gua": "gua-Latn-NG", + "gua-Latn": "gua-Latn-NG", + "gua-NG": "gua-Latn-NG", + "gub": "gub-Latn-BR", + "gub-BR": "gub-Latn-BR", + "gub-Latn": "gub-Latn-BR", + "guc": "guc-Latn-CO", + "guc-CO": "guc-Latn-CO", + "guc-Latn": "guc-Latn-CO", + "gud": "gud-Latn-CI", + "gud-CI": "gud-Latn-CI", + "gud-Latn": "gud-Latn-CI", + "gue": "gue-Latn-AU", + "gue-AU": "gue-Latn-AU", + "gue-Latn": "gue-Latn-AU", + "guf": "guf-Latn-AU", + "guf-AU": "guf-Latn-AU", + "guf-Latn": "guf-Latn-AU", + "guh": "guh-Latn-CO", + "guh-CO": "guh-Latn-CO", + "guh-Latn": "guh-Latn-CO", + "gui": "gui-Latn-BO", + "gui-BO": "gui-Latn-BO", + "gui-Latn": "gui-Latn-BO", + "guk": "guk-Latn-ET", + "guk-ET": "guk-Latn-ET", + "guk-Latn": "guk-Latn-ET", + "gul": "gul-Latn-US", + "gul-Latn": "gul-Latn-US", + "gul-US": "gul-Latn-US", + "gum": "gum-Latn-CO", + "gum-CO": "gum-Latn-CO", + "gum-Latn": "gum-Latn-CO", + "gun": "gun-Latn-BR", + "gun-BR": "gun-Latn-BR", + "gun-Latn": "gun-Latn-BR", + "guo": "guo-Latn-CO", + "guo-CO": "guo-Latn-CO", + "guo-Latn": "guo-Latn-CO", + "gup": "gup-Latn-AU", + "gup-AU": "gup-Latn-AU", + "gup-Latn": "gup-Latn-AU", + "guq": "guq-Latn-PY", + "guq-Latn": "guq-Latn-PY", + "guq-PY": "guq-Latn-PY", + "gur": "gur-Latn-GH", + "gur-GH": "gur-Latn-GH", + "gur-Latn": "gur-Latn-GH", + "gut": "gut-Latn-CR", + "gut-CR": "gut-Latn-CR", + "gut-Latn": "gut-Latn-CR", + "guu": "guu-Latn-VE", + "guu-Latn": "guu-Latn-VE", + "guu-VE": "guu-Latn-VE", + "guw": "guw-Latn-BJ", + "guw-BJ": "guw-Latn-BJ", + "guw-Latn": "guw-Latn-BJ", + "gux": "gux-Latn-BF", + "gux-BF": "gux-Latn-BF", + "gux-Latn": "gux-Latn-BF", + "guz": "guz-Latn-KE", + "guz-KE": "guz-Latn-KE", + "guz-Latn": "guz-Latn-KE", + "gv": "gv-Latn-IM", + "gv-IM": "gv-Latn-IM", + "gv-Latn": "gv-Latn-IM", + "gva": "gva-Latn-PY", + "gva-Latn": "gva-Latn-PY", + "gva-PY": "gva-Latn-PY", + "gvc": "gvc-Latn-BR", + "gvc-BR": "gvc-Latn-BR", + "gvc-Latn": "gvc-Latn-BR", + "gve": "gve-Latn-PG", + "gve-Latn": "gve-Latn-PG", + "gve-PG": "gve-Latn-PG", + "gvf": "gvf-Latn-PG", + "gvf-Latn": "gvf-Latn-PG", + "gvf-PG": "gvf-Latn-PG", + "gvj": "gvj-Latn-BR", + "gvj-BR": "gvj-Latn-BR", + "gvj-Latn": "gvj-Latn-BR", + "gvl": "gvl-Latn-TD", + "gvl-Latn": "gvl-Latn-TD", + "gvl-TD": "gvl-Latn-TD", + "gvm": "gvm-Latn-NG", + "gvm-Latn": "gvm-Latn-NG", + "gvm-NG": "gvm-Latn-NG", + "gvn": "gvn-Latn-AU", + "gvn-AU": "gvn-Latn-AU", + "gvn-Latn": "gvn-Latn-AU", + "gvo": "gvo-Latn-BR", + "gvo-BR": "gvo-Latn-BR", + "gvo-Latn": "gvo-Latn-BR", + "gvp": "gvp-Latn-BR", + "gvp-BR": "gvp-Latn-BR", + "gvp-Latn": "gvp-Latn-BR", + "gvr": "gvr-Deva-NP", + "gvr-Deva": "gvr-Deva-NP", + "gvr-Gukh": "gvr-Gukh-NP", + "gvr-NP": "gvr-Deva-NP", + "gvs": "gvs-Latn-PG", + "gvs-Latn": "gvs-Latn-PG", + "gvs-PG": "gvs-Latn-PG", + "gvy": "gvy-Latn-AU", + "gvy-AU": "gvy-Latn-AU", + "gvy-Latn": "gvy-Latn-AU", + "gwa": "gwa-Latn-CI", + "gwa-CI": "gwa-Latn-CI", + "gwa-Latn": "gwa-Latn-CI", + "gwb": "gwb-Latn-NG", + "gwb-Latn": "gwb-Latn-NG", + "gwb-NG": "gwb-Latn-NG", + "gwc": "gwc-Arab-PK", + "gwc-Arab": "gwc-Arab-PK", + "gwc-PK": "gwc-Arab-PK", + "gwd": "gwd-Latn-ET", + "gwd-ET": "gwd-Latn-ET", + "gwd-Latn": "gwd-Latn-ET", + "gwe": "gwe-Latn-TZ", + "gwe-Latn": "gwe-Latn-TZ", + "gwe-TZ": "gwe-Latn-TZ", + "gwf": "gwf-Arab-PK", + "gwf-Arab": "gwf-Arab-PK", + "gwf-PK": "gwf-Arab-PK", + "gwg": "gwg-Latn-NG", + "gwg-Latn": "gwg-Latn-NG", + "gwg-NG": "gwg-Latn-NG", + "gwi": "gwi-Latn-CA", + "gwi-CA": "gwi-Latn-CA", + "gwi-Latn": "gwi-Latn-CA", + "gwj": "gwj-Latn-BW", + "gwj-BW": "gwj-Latn-BW", + "gwj-Latn": "gwj-Latn-BW", + "gwm": "gwm-Latn-AU", + "gwm-AU": "gwm-Latn-AU", + "gwm-Latn": "gwm-Latn-AU", + "gwn": "gwn-Latn-NG", + "gwn-Latn": "gwn-Latn-NG", + "gwn-NG": "gwn-Latn-NG", + "gwr": "gwr-Latn-UG", + "gwr-Latn": "gwr-Latn-UG", + "gwr-UG": "gwr-Latn-UG", + "gwt": "gwt-Arab-AF", + "gwt-AF": "gwt-Arab-AF", + "gwt-Arab": "gwt-Arab-AF", + "gwu": "gwu-Latn-AU", + "gwu-AU": "gwu-Latn-AU", + "gwu-Latn": "gwu-Latn-AU", + "gww": "gww-Latn-AU", + "gww-AU": "gww-Latn-AU", + "gww-Latn": "gww-Latn-AU", + "gwx": "gwx-Latn-GH", + "gwx-GH": "gwx-Latn-GH", + "gwx-Latn": "gwx-Latn-GH", + "gxx": "gxx-Latn-CI", + "gxx-CI": "gxx-Latn-CI", + "gxx-Latn": "gxx-Latn-CI", + "gyb": "gyb-Latn-PG", + "gyb-Latn": "gyb-Latn-PG", + "gyb-PG": "gyb-Latn-PG", + "gyd": "gyd-Latn-AU", + "gyd-AU": "gyd-Latn-AU", + "gyd-Latn": "gyd-Latn-AU", + "gye": "gye-Latn-NG", + "gye-Latn": "gye-Latn-NG", + "gye-NG": "gye-Latn-NG", + "gyf": "gyf-Latn-AU", + "gyf-AU": "gyf-Latn-AU", + "gyf-Latn": "gyf-Latn-AU", + "gyg": "gyg-Latn-CF", + "gyg-CF": "gyg-Latn-CF", + "gyg-Latn": "gyg-Latn-CF", + "gyi": "gyi-Latn-CM", + "gyi-CM": "gyi-Latn-CM", + "gyi-Latn": "gyi-Latn-CM", + "gyl": "gyl-Latn-ET", + "gyl-ET": "gyl-Latn-ET", + "gyl-Latn": "gyl-Latn-ET", + "gym": "gym-Latn-PA", + "gym-Latn": "gym-Latn-PA", + "gym-PA": "gym-Latn-PA", + "gyn": "gyn-Latn-GY", + "gyn-GY": "gyn-Latn-GY", + "gyn-Latn": "gyn-Latn-GY", + "gyo": "gyo-Deva-NP", + "gyo-Deva": "gyo-Deva-NP", + "gyo-NP": "gyo-Deva-NP", + "gyr": "gyr-Latn-BO", + "gyr-BO": "gyr-Latn-BO", + "gyr-Latn": "gyr-Latn-BO", + "gyy": "gyy-Latn-AU", + "gyy-AU": "gyy-Latn-AU", + "gyy-Latn": "gyy-Latn-AU", + "gyz": "gyz-Latn-NG", + "gyz-Latn": "gyz-Latn-NG", + "gyz-NG": "gyz-Latn-NG", + "gza": "gza-Latn-SD", + "gza-Latn": "gza-Latn-SD", + "gza-SD": "gza-Latn-SD", + "gzi": "gzi-Arab-IR", + "gzi-Arab": "gzi-Arab-IR", + "gzi-IR": "gzi-Arab-IR", + "gzn": "gzn-Latn-ID", + "gzn-ID": "gzn-Latn-ID", + "gzn-Latn": "gzn-Latn-ID", + "ha": "ha-Latn-NG", + "ha-Arab-NG": "ha-Arab-NG", + "ha-CM": "ha-Arab-CM", + "ha-Latn": "ha-Latn-NG", + "ha-NE": "ha-Latn-NE", + "ha-NG": "ha-Latn-NG", + "ha-SD": "ha-Arab-SD", + "haa": "haa-Latn-US", + "haa-Latn": "haa-Latn-US", + "haa-US": "haa-Latn-US", + "hac": "hac-Arab-IR", + "hac-Arab": "hac-Arab-IR", + "hac-IR": "hac-Arab-IR", + "had": "had-Latn-ID", + "had-ID": "had-Latn-ID", + "had-Latn": "had-Latn-ID", + "hae": "hae-Latn-ET", + "hae-ET": "hae-Latn-ET", + "hae-Latn": "hae-Latn-ET", + "hag": "hag-Latn-GH", + "hag-GH": "hag-Latn-GH", + "hag-Latn": "hag-Latn-GH", + "hah": "hah-Latn-PG", + "hah-Latn": "hah-Latn-PG", + "hah-PG": "hah-Latn-PG", + "hai": "hai-Latn-CA", + "hai-CA": "hai-Latn-CA", + "hai-Latn": "hai-Latn-CA", + "haj": "haj-Latn-IN", + "haj-IN": "haj-Latn-IN", + "haj-Latn": "haj-Latn-IN", + "hak": "hak-Hans-CN", + "hak-CN": "hak-Hans-CN", + "hak-Hans": "hak-Hans-CN", + "hal": "hal-Latn-VN", + "hal-Latn": "hal-Latn-VN", + "hal-VN": "hal-Latn-VN", + "ham": "ham-Latn-PG", + "ham-Latn": "ham-Latn-PG", + "ham-PG": "ham-Latn-PG", + "han": "han-Latn-TZ", + "han-Latn": "han-Latn-TZ", + "han-TZ": "han-Latn-TZ", + "hao": "hao-Latn-PG", + "hao-Latn": "hao-Latn-PG", + "hao-PG": "hao-Latn-PG", + "hap": "hap-Latn-ID", + "hap-ID": "hap-Latn-ID", + "hap-Latn": "hap-Latn-ID", + "haq": "haq-Latn-TZ", + "haq-Latn": "haq-Latn-TZ", + "haq-TZ": "haq-Latn-TZ", + "har": "har-Ethi-ET", + "har-ET": "har-Ethi-ET", + "har-Ethi": "har-Ethi-ET", + "has": "has-Latn-CA", + "has-CA": "has-Latn-CA", + "has-Latn": "has-Latn-CA", + "hav": "hav-Latn-CD", + "hav-CD": "hav-Latn-CD", + "hav-Latn": "hav-Latn-CD", + "haw": "haw-Latn-US", + "haw-Latn": "haw-Latn-US", + "haw-US": "haw-Latn-US", + "hax": "hax-Latn-CA", + "hax-CA": "hax-Latn-CA", + "hax-Latn": "hax-Latn-CA", + "hay": "hay-Latn-TZ", + "hay-Latn": "hay-Latn-TZ", + "hay-TZ": "hay-Latn-TZ", + "haz": "haz-Arab-AF", + "haz-AF": "haz-Arab-AF", + "haz-Arab": "haz-Arab-AF", + "hba": "hba-Latn-CD", + "hba-CD": "hba-Latn-CD", + "hba-Latn": "hba-Latn-CD", + "hbb": "hbb-Latn-NG", + "hbb-Latn": "hbb-Latn-NG", + "hbb-NG": "hbb-Latn-NG", + "hbn": "hbn-Latn-SD", + "hbn-Latn": "hbn-Latn-SD", + "hbn-SD": "hbn-Latn-SD", + "hbo": "hbo-Hebr-IL", + "hbo-Hebr": "hbo-Hebr-IL", + "hbo-IL": "hbo-Hebr-IL", + "hbu": "hbu-Latn-TL", + "hbu-Latn": "hbu-Latn-TL", + "hbu-TL": "hbu-Latn-TL", + "hch": "hch-Latn-MX", + "hch-Latn": "hch-Latn-MX", + "hch-MX": "hch-Latn-MX", + "hdy": "hdy-Ethi-ET", + "hdy-ET": "hdy-Ethi-ET", + "hdy-Ethi": "hdy-Ethi-ET", + "he": "he-Hebr-IL", + "he-Hebr": "he-Hebr-IL", + "he-IL": "he-Hebr-IL", + "hed": "hed-Latn-TD", + "hed-Latn": "hed-Latn-TD", + "hed-TD": "hed-Latn-TD", + "heg": "heg-Latn-ID", + "heg-ID": "heg-Latn-ID", + "heg-Latn": "heg-Latn-ID", + "heh": "heh-Latn-TZ", + "heh-Latn": "heh-Latn-TZ", + "heh-TZ": "heh-Latn-TZ", + "hei": "hei-Latn-CA", + "hei-CA": "hei-Latn-CA", + "hei-Latn": "hei-Latn-CA", + "hem": "hem-Latn-CD", + "hem-CD": "hem-Latn-CD", + "hem-Latn": "hem-Latn-CD", + "hgm": "hgm-Latn-NA", + "hgm-Latn": "hgm-Latn-NA", + "hgm-NA": "hgm-Latn-NA", + "hgw": "hgw-Latn-PG", + "hgw-Latn": "hgw-Latn-PG", + "hgw-PG": "hgw-Latn-PG", + "hhi": "hhi-Latn-PG", + "hhi-Latn": "hhi-Latn-PG", + "hhi-PG": "hhi-Latn-PG", + "hhr": "hhr-Latn-SN", + "hhr-Latn": "hhr-Latn-SN", + "hhr-SN": "hhr-Latn-SN", + "hhy": "hhy-Latn-PG", + "hhy-Latn": "hhy-Latn-PG", + "hhy-PG": "hhy-Latn-PG", + "hi": "hi-Deva-IN", + "hi-Deva": "hi-Deva-IN", + "hi-IN": "hi-Deva-IN", + "hi-Mahj": "hi-Mahj-IN", + "hi-XX": "hi-Deva-XX", + "hia": "hia-Latn-NG", + "hia-Latn": "hia-Latn-NG", + "hia-NG": "hia-Latn-NG", + "hib": "hib-Latn-PE", + "hib-Latn": "hib-Latn-PE", + "hib-PE": "hib-Latn-PE", + "hid": "hid-Latn-US", + "hid-Latn": "hid-Latn-US", + "hid-US": "hid-Latn-US", + "hif": "hif-Deva-FJ", + "hif-Deva": "hif-Deva-FJ", + "hif-Deva-FJ": "hif-Deva-FJ", + "hif-FJ": "hif-Deva-FJ", + "hig": "hig-Latn-NG", + "hig-Latn": "hig-Latn-NG", + "hig-NG": "hig-Latn-NG", + "hih": "hih-Latn-PG", + "hih-Latn": "hih-Latn-PG", + "hih-PG": "hih-Latn-PG", + "hii": "hii-Takr-IN", + "hii-IN": "hii-Takr-IN", + "hii-Takr": "hii-Takr-IN", + "hij": "hij-Latn-CM", + "hij-CM": "hij-Latn-CM", + "hij-Latn": "hij-Latn-CM", + "hik": "hik-Latn-ID", + "hik-ID": "hik-Latn-ID", + "hik-Latn": "hik-Latn-ID", + "hil": "hil-Latn-PH", + "hil-Latn": "hil-Latn-PH", + "hil-PH": "hil-Latn-PH", + "hio": "hio-Latn-BW", + "hio-BW": "hio-Latn-BW", + "hio-Latn": "hio-Latn-BW", + "hir": "hir-Latn-BR", + "hir-BR": "hir-Latn-BR", + "hir-Latn": "hir-Latn-BR", + "hit": "hit-Xsux-TR", + "hit-TR": "hit-Xsux-TR", + "hit-Xsux": "hit-Xsux-TR", + "hiw": "hiw-Latn-VU", + "hiw-Latn": "hiw-Latn-VU", + "hiw-VU": "hiw-Latn-VU", + "hix": "hix-Latn-BR", + "hix-BR": "hix-Latn-BR", + "hix-Latn": "hix-Latn-BR", + "hji": "hji-Latn-ID", + "hji-ID": "hji-Latn-ID", + "hji-Latn": "hji-Latn-ID", + "hka": "hka-Latn-TZ", + "hka-Latn": "hka-Latn-TZ", + "hka-TZ": "hka-Latn-TZ", + "hke": "hke-Latn-CD", + "hke-CD": "hke-Latn-CD", + "hke-Latn": "hke-Latn-CD", + "hkh": "hkh-Arab-IN", + "hkh-Arab": "hkh-Arab-IN", + "hkh-IN": "hkh-Arab-IN", + "hkk": "hkk-Latn-PG", + "hkk-Latn": "hkk-Latn-PG", + "hkk-PG": "hkk-Latn-PG", + "hla": "hla-Latn-PG", + "hla-Latn": "hla-Latn-PG", + "hla-PG": "hla-Latn-PG", + "hlb": "hlb-Deva-IN", + "hlb-Deva": "hlb-Deva-IN", + "hlb-IN": "hlb-Deva-IN", + "hld": "hld-Latn-VN", + "hld-Latn": "hld-Latn-VN", + "hld-VN": "hld-Latn-VN", + "hlt": "hlt-Latn-MM", + "hlt-Latn": "hlt-Latn-MM", + "hlt-MM": "hlt-Latn-MM", + "hlu": "hlu-Hluw-TR", + "hlu-Hluw": "hlu-Hluw-TR", + "hlu-TR": "hlu-Hluw-TR", + "hma": "hma-Latn-CN", + "hma-CN": "hma-Latn-CN", + "hma-Latn": "hma-Latn-CN", + "hmb": "hmb-Latn-ML", + "hmb-Latn": "hmb-Latn-ML", + "hmb-ML": "hmb-Latn-ML", + "hmd": "hmd-Plrd-CN", + "hmd-CN": "hmd-Plrd-CN", + "hmd-Plrd": "hmd-Plrd-CN", + "hmf": "hmf-Latn-VN", + "hmf-Latn": "hmf-Latn-VN", + "hmf-VN": "hmf-Latn-VN", + "hmj": "hmj-Bopo-CN", + "hmj-Bopo": "hmj-Bopo-CN", + "hmj-CN": "hmj-Bopo-CN", + "hmm": "hmm-Latn-CN", + "hmm-CN": "hmm-Latn-CN", + "hmm-Latn": "hmm-Latn-CN", + "hmn": "hmn-Latn-CN", + "hmn-CN": "hmn-Latn-CN", + "hmn-Latn": "hmn-Latn-CN", + "hmp": "hmp-Latn-CN", + "hmp-CN": "hmp-Latn-CN", + "hmp-Latn": "hmp-Latn-CN", + "hmq": "hmq-Bopo-CN", + "hmq-Bopo": "hmq-Bopo-CN", + "hmq-CN": "hmq-Bopo-CN", + "hmr": "hmr-Latn-IN", + "hmr-IN": "hmr-Latn-IN", + "hmr-Latn": "hmr-Latn-IN", + "hms": "hms-Latn-CN", + "hms-CN": "hms-Latn-CN", + "hms-Latn": "hms-Latn-CN", + "hmt": "hmt-Latn-PG", + "hmt-Latn": "hmt-Latn-PG", + "hmt-PG": "hmt-Latn-PG", + "hmu": "hmu-Latn-ID", + "hmu-ID": "hmu-Latn-ID", + "hmu-Latn": "hmu-Latn-ID", + "hmv": "hmv-Latn-VN", + "hmv-Latn": "hmv-Latn-VN", + "hmv-VN": "hmv-Latn-VN", + "hmw": "hmw-Latn-CN", + "hmw-CN": "hmw-Latn-CN", + "hmw-Latn": "hmw-Latn-CN", + "hmy": "hmy-Latn-CN", + "hmy-CN": "hmy-Latn-CN", + "hmy-Latn": "hmy-Latn-CN", + "hmz": "hmz-Latn-CN", + "hmz-CN": "hmz-Latn-CN", + "hmz-Latn": "hmz-Latn-CN", + "hna": "hna-Latn-CM", + "hna-CM": "hna-Latn-CM", + "hna-Latn": "hna-Latn-CM", + "hnd": "hnd-Arab-PK", + "hnd-Arab": "hnd-Arab-PK", + "hnd-PK": "hnd-Arab-PK", + "hne": "hne-Deva-IN", + "hne-Deva": "hne-Deva-IN", + "hne-IN": "hne-Deva-IN", + "hng": "hng-Latn-AO", + "hng-AO": "hng-Latn-AO", + "hng-Latn": "hng-Latn-AO", + "hnh": "hnh-Latn-BW", + "hnh-BW": "hnh-Latn-BW", + "hnh-Latn": "hnh-Latn-BW", + "hni": "hni-Latn-CN", + "hni-CN": "hni-Latn-CN", + "hni-Latn": "hni-Latn-CN", + "hnj": "hnj-Hmnp-US", + "hnj-AU": "hnj-Laoo-AU", + "hnj-CN": "hnj-Laoo-CN", + "hnj-FR": "hnj-Laoo-FR", + "hnj-GF": "hnj-Laoo-GF", + "hnj-Hmng": "hnj-Hmng-LA", + "hnj-Hmnp": "hnj-Hmnp-US", + "hnj-Laoo": "hnj-Laoo-AU", + "hnj-MM": "hnj-Laoo-MM", + "hnj-SR": "hnj-Laoo-SR", + "hnj-TH": "hnj-Laoo-TH", + "hnj-US": "hnj-Hmnp-US", + "hnj-VN": "hnj-Laoo-VN", + "hnn": "hnn-Latn-PH", + "hnn-Hano": "hnn-Hano-PH", + "hnn-Latn": "hnn-Latn-PH", + "hnn-PH": "hnn-Latn-PH", + "hno": "hno-Arab-PK", + "hno-Arab": "hno-Arab-PK", + "hno-PK": "hno-Arab-PK", + "hns": "hns-Latn-SR", + "hns-Latn": "hns-Latn-SR", + "hns-SR": "hns-Latn-SR", + "ho": "ho-Latn-PG", + "ho-Latn": "ho-Latn-PG", + "ho-PG": "ho-Latn-PG", + "hoa": "hoa-Latn-SB", + "hoa-Latn": "hoa-Latn-SB", + "hoa-SB": "hoa-Latn-SB", + "hob": "hob-Latn-PG", + "hob-Latn": "hob-Latn-PG", + "hob-PG": "hob-Latn-PG", + "hoc": "hoc-Deva-IN", + "hoc-Deva": "hoc-Deva-IN", + "hoc-IN": "hoc-Deva-IN", + "hoc-Wara": "hoc-Wara-IN", + "hod": "hod-Latn-NG", + "hod-Latn": "hod-Latn-NG", + "hod-NG": "hod-Latn-NG", + "hoe": "hoe-Latn-NG", + "hoe-Latn": "hoe-Latn-NG", + "hoe-NG": "hoe-Latn-NG", + "hoh": "hoh-Arab-OM", + "hoh-Arab": "hoh-Arab-OM", + "hoh-OM": "hoh-Arab-OM", + "hoi": "hoi-Latn-US", + "hoi-Latn": "hoi-Latn-US", + "hoi-US": "hoi-Latn-US", + "hoj": "hoj-Deva-IN", + "hoj-Deva": "hoj-Deva-IN", + "hoj-IN": "hoj-Deva-IN", + "hol": "hol-Latn-AO", + "hol-AO": "hol-Latn-AO", + "hol-Latn": "hol-Latn-AO", + "hom": "hom-Latn-SS", + "hom-Latn": "hom-Latn-SS", + "hom-SS": "hom-Latn-SS", + "hoo": "hoo-Latn-CD", + "hoo-CD": "hoo-Latn-CD", + "hoo-Latn": "hoo-Latn-CD", + "hop": "hop-Latn-US", + "hop-Latn": "hop-Latn-US", + "hop-US": "hop-Latn-US", + "hor": "hor-Latn-TD", + "hor-Latn": "hor-Latn-TD", + "hor-TD": "hor-Latn-TD", + "hot": "hot-Latn-PG", + "hot-Latn": "hot-Latn-PG", + "hot-PG": "hot-Latn-PG", + "hov": "hov-Latn-ID", + "hov-ID": "hov-Latn-ID", + "hov-Latn": "hov-Latn-ID", + "how": "how-Hani-CN", + "how-CN": "how-Hani-CN", + "how-Hani": "how-Hani-CN", + "hoy": "hoy-Deva-IN", + "hoy-Deva": "hoy-Deva-IN", + "hoy-IN": "hoy-Deva-IN", + "hpo": "hpo-Mymr-MM", + "hpo-MM": "hpo-Mymr-MM", + "hpo-Mymr": "hpo-Mymr-MM", + "hr": "hr-Latn-HR", + "hr-HR": "hr-Latn-HR", + "hr-HU": "hr-Latn-HU", + "hr-Latn": "hr-Latn-HR", + "hr-ME": "hr-Latn-ME", + "hra": "hra-Latn-IN", + "hra-IN": "hra-Latn-IN", + "hra-Latn": "hra-Latn-IN", + "hrc": "hrc-Latn-PG", + "hrc-Latn": "hrc-Latn-PG", + "hrc-PG": "hrc-Latn-PG", + "hre": "hre-Latn-VN", + "hre-Latn": "hre-Latn-VN", + "hre-VN": "hre-Latn-VN", + "hrk": "hrk-Latn-ID", + "hrk-ID": "hrk-Latn-ID", + "hrk-Latn": "hrk-Latn-ID", + "hrm": "hrm-Latn-CN", + "hrm-CN": "hrm-Latn-CN", + "hrm-Latn": "hrm-Latn-CN", + "hro": "hro-Latn-VN", + "hro-Latn": "hro-Latn-VN", + "hro-VN": "hro-Latn-VN", + "hrp": "hrp-Latn-AU", + "hrp-AU": "hrp-Latn-AU", + "hrp-Latn": "hrp-Latn-AU", + "hrt": "hrt-Syrc-TR", + "hrt-Syrc": "hrt-Syrc-TR", + "hrt-TR": "hrt-Syrc-TR", + "hru": "hru-Latn-IN", + "hru-IN": "hru-Latn-IN", + "hru-Latn": "hru-Latn-IN", + "hrw": "hrw-Latn-PG", + "hrw-Latn": "hrw-Latn-PG", + "hrw-PG": "hrw-Latn-PG", + "hrx": "hrx-Latn-BR", + "hrx-BR": "hrx-Latn-BR", + "hrx-Latn": "hrx-Latn-BR", + "hrz": "hrz-Arab-IR", + "hrz-Arab": "hrz-Arab-IR", + "hrz-IR": "hrz-Arab-IR", + "hsb": "hsb-Latn-DE", + "hsb-DE": "hsb-Latn-DE", + "hsb-Latn": "hsb-Latn-DE", + "hsn": "hsn-Hans-CN", + "hsn-CN": "hsn-Hans-CN", + "hsn-Hans": "hsn-Hans-CN", + "hss": "hss-Arab-OM", + "hss-Arab": "hss-Arab-OM", + "hss-OM": "hss-Arab-OM", + "ht": "ht-Latn-HT", + "ht-HT": "ht-Latn-HT", + "ht-Latn": "ht-Latn-HT", + "hti": "hti-Latn-ID", + "hti-ID": "hti-Latn-ID", + "hti-Latn": "hti-Latn-ID", + "hto": "hto-Latn-CO", + "hto-CO": "hto-Latn-CO", + "hto-Latn": "hto-Latn-CO", + "hts": "hts-Latn-TZ", + "hts-Latn": "hts-Latn-TZ", + "hts-TZ": "hts-Latn-TZ", + "htu": "htu-Latn-ID", + "htu-ID": "htu-Latn-ID", + "htu-Latn": "htu-Latn-ID", + "htx": "htx-Xsux-TR", + "htx-TR": "htx-Xsux-TR", + "htx-Xsux": "htx-Xsux-TR", + "hu": "hu-Latn-HU", + "hu-HU": "hu-Latn-HU", + "hu-Hung": "hu-Hung-HU", + "hu-Latn": "hu-Latn-HU", + "hub": "hub-Latn-PE", + "hub-Latn": "hub-Latn-PE", + "hub-PE": "hub-Latn-PE", + "huc": "huc-Latn-BW", + "huc-BW": "huc-Latn-BW", + "huc-Latn": "huc-Latn-BW", + "hud": "hud-Latn-ID", + "hud-ID": "hud-Latn-ID", + "hud-Latn": "hud-Latn-ID", + "hue": "hue-Latn-MX", + "hue-Latn": "hue-Latn-MX", + "hue-MX": "hue-Latn-MX", + "huf": "huf-Latn-PG", + "huf-Latn": "huf-Latn-PG", + "huf-PG": "huf-Latn-PG", + "hug": "hug-Latn-PE", + "hug-Latn": "hug-Latn-PE", + "hug-PE": "hug-Latn-PE", + "huh": "huh-Latn-CL", + "huh-CL": "huh-Latn-CL", + "huh-Latn": "huh-Latn-CL", + "hui": "hui-Latn-PG", + "hui-Latn": "hui-Latn-PG", + "hui-PG": "hui-Latn-PG", + "huk": "huk-Latn-ID", + "huk-ID": "huk-Latn-ID", + "huk-Latn": "huk-Latn-ID", + "hul": "hul-Latn-PG", + "hul-Latn": "hul-Latn-PG", + "hul-PG": "hul-Latn-PG", + "hum": "hum-Latn-CD", + "hum-CD": "hum-Latn-CD", + "hum-Latn": "hum-Latn-CD", + "hup": "hup-Latn-US", + "hup-Latn": "hup-Latn-US", + "hup-US": "hup-Latn-US", + "hur": "hur-Latn-CA", + "hur-CA": "hur-Latn-CA", + "hur-Latn": "hur-Latn-CA", + "hus": "hus-Latn-MX", + "hus-Latn": "hus-Latn-MX", + "hus-MX": "hus-Latn-MX", + "hut": "hut-Deva-NP", + "hut-Deva": "hut-Deva-NP", + "hut-NP": "hut-Deva-NP", + "huu": "huu-Latn-PE", + "huu-Latn": "huu-Latn-PE", + "huu-PE": "huu-Latn-PE", + "huv": "huv-Latn-MX", + "huv-Latn": "huv-Latn-MX", + "huv-MX": "huv-Latn-MX", + "huw": "huw-Latn-ID", + "huw-ID": "huw-Latn-ID", + "huw-Latn": "huw-Latn-ID", + "hux": "hux-Latn-PE", + "hux-Latn": "hux-Latn-PE", + "hux-PE": "hux-Latn-PE", + "huy": "huy-Hebr-IL", + "huy-Hebr": "huy-Hebr-IL", + "huy-IL": "huy-Hebr-IL", + "huz": "huz-Cyrl-RU", + "huz-Cyrl": "huz-Cyrl-RU", + "huz-RU": "huz-Cyrl-RU", + "hvc": "hvc-Latn-HT", + "hvc-HT": "hvc-Latn-HT", + "hvc-Latn": "hvc-Latn-HT", + "hve": "hve-Latn-MX", + "hve-Latn": "hve-Latn-MX", + "hve-MX": "hve-Latn-MX", + "hvk": "hvk-Latn-NC", + "hvk-Latn": "hvk-Latn-NC", + "hvk-NC": "hvk-Latn-NC", + "hvn": "hvn-Latn-ID", + "hvn-ID": "hvn-Latn-ID", + "hvn-Latn": "hvn-Latn-ID", + "hvv": "hvv-Latn-MX", + "hvv-Latn": "hvv-Latn-MX", + "hvv-MX": "hvv-Latn-MX", + "hwa": "hwa-Latn-CI", + "hwa-CI": "hwa-Latn-CI", + "hwa-Latn": "hwa-Latn-CI", + "hwc": "hwc-Latn-US", + "hwc-Latn": "hwc-Latn-US", + "hwc-US": "hwc-Latn-US", + "hwo": "hwo-Latn-NG", + "hwo-Latn": "hwo-Latn-NG", + "hwo-NG": "hwo-Latn-NG", + "hy": "hy-Armn-AM", + "hy-AM": "hy-Armn-AM", + "hy-Armn": "hy-Armn-AM", + "hy-Latn": "hy-Latn-AM", + "hya": "hya-Latn-CM", + "hya-CM": "hya-Latn-CM", + "hya-Latn": "hya-Latn-CM", + "hyw": "hyw-Armn-AM", + "hyw-AM": "hyw-Armn-AM", + "hyw-Armn": "hyw-Armn-AM", + "hz": "hz-Latn-NA", + "hz-Latn": "hz-Latn-NA", + "hz-NA": "hz-Latn-NA", + "ia": "ia-Latn-001", + "ia-001": "ia-Latn-001", + "ia-Latn": "ia-Latn-001", + "iai": "iai-Latn-NC", + "iai-Latn": "iai-Latn-NC", + "iai-NC": "iai-Latn-NC", + "ian": "ian-Latn-PG", + "ian-Latn": "ian-Latn-PG", + "ian-PG": "ian-Latn-PG", + "iar": "iar-Latn-PG", + "iar-Latn": "iar-Latn-PG", + "iar-PG": "iar-Latn-PG", + "iba": "iba-Latn-MY", + "iba-Latn": "iba-Latn-MY", + "iba-MY": "iba-Latn-MY", + "ibb": "ibb-Latn-NG", + "ibb-Latn": "ibb-Latn-NG", + "ibb-NG": "ibb-Latn-NG", + "ibd": "ibd-Latn-AU", + "ibd-AU": "ibd-Latn-AU", + "ibd-Latn": "ibd-Latn-AU", + "ibe": "ibe-Latn-NG", + "ibe-Latn": "ibe-Latn-NG", + "ibe-NG": "ibe-Latn-NG", + "ibg": "ibg-Latn-PH", + "ibg-Latn": "ibg-Latn-PH", + "ibg-PH": "ibg-Latn-PH", + "ibh": "ibh-Latn-VN", + "ibh-Latn": "ibh-Latn-VN", + "ibh-VN": "ibh-Latn-VN", + "ibl": "ibl-Latn-PH", + "ibl-Latn": "ibl-Latn-PH", + "ibl-PH": "ibl-Latn-PH", + "ibm": "ibm-Latn-NG", + "ibm-Latn": "ibm-Latn-NG", + "ibm-NG": "ibm-Latn-NG", + "ibn": "ibn-Latn-NG", + "ibn-Latn": "ibn-Latn-NG", + "ibn-NG": "ibn-Latn-NG", + "ibr": "ibr-Latn-NG", + "ibr-Latn": "ibr-Latn-NG", + "ibr-NG": "ibr-Latn-NG", + "ibu": "ibu-Latn-ID", + "ibu-ID": "ibu-Latn-ID", + "ibu-Latn": "ibu-Latn-ID", + "iby": "iby-Latn-NG", + "iby-Latn": "iby-Latn-NG", + "iby-NG": "iby-Latn-NG", + "ica": "ica-Latn-BJ", + "ica-BJ": "ica-Latn-BJ", + "ica-Latn": "ica-Latn-BJ", + "ich": "ich-Latn-NG", + "ich-Latn": "ich-Latn-NG", + "ich-NG": "ich-Latn-NG", + "icr": "icr-Latn-CO", + "icr-CO": "icr-Latn-CO", + "icr-Latn": "icr-Latn-CO", + "id": "id-Latn-ID", + "id-BN": "id-Latn-BN", + "id-ID": "id-Latn-ID", + "id-Latn": "id-Latn-ID", + "ida": "ida-Latn-KE", + "ida-KE": "ida-Latn-KE", + "ida-Latn": "ida-Latn-KE", + "idb": "idb-Latn-IN", + "idb-IN": "idb-Latn-IN", + "idb-Latn": "idb-Latn-IN", + "idc": "idc-Latn-NG", + "idc-Latn": "idc-Latn-NG", + "idc-NG": "idc-Latn-NG", + "idd": "idd-Latn-BJ", + "idd-BJ": "idd-Latn-BJ", + "idd-Latn": "idd-Latn-BJ", + "ide": "ide-Latn-NG", + "ide-Latn": "ide-Latn-NG", + "ide-NG": "ide-Latn-NG", + "idi": "idi-Latn-PG", + "idi-Latn": "idi-Latn-PG", + "idi-PG": "idi-Latn-PG", + "idr": "idr-Latn-SS", + "idr-Latn": "idr-Latn-SS", + "idr-SS": "idr-Latn-SS", + "ids": "ids-Latn-NG", + "ids-Latn": "ids-Latn-NG", + "ids-NG": "ids-Latn-NG", + "idt": "idt-Latn-TL", + "idt-Latn": "idt-Latn-TL", + "idt-TL": "idt-Latn-TL", + "idu": "idu-Latn-NG", + "idu-Latn": "idu-Latn-NG", + "idu-NG": "idu-Latn-NG", + "ie": "ie-Latn-EE", + "ie-EE": "ie-Latn-EE", + "ie-Latn": "ie-Latn-EE", + "ifa": "ifa-Latn-PH", + "ifa-Latn": "ifa-Latn-PH", + "ifa-PH": "ifa-Latn-PH", + "ifb": "ifb-Latn-PH", + "ifb-Latn": "ifb-Latn-PH", + "ifb-PH": "ifb-Latn-PH", + "ife": "ife-Latn-TG", + "ife-Latn": "ife-Latn-TG", + "ife-TG": "ife-Latn-TG", + "iff": "iff-Latn-VU", + "iff-Latn": "iff-Latn-VU", + "iff-VU": "iff-Latn-VU", + "ifk": "ifk-Latn-PH", + "ifk-Latn": "ifk-Latn-PH", + "ifk-PH": "ifk-Latn-PH", + "ifm": "ifm-Latn-CG", + "ifm-CG": "ifm-Latn-CG", + "ifm-Latn": "ifm-Latn-CG", + "ifu": "ifu-Latn-PH", + "ifu-Latn": "ifu-Latn-PH", + "ifu-PH": "ifu-Latn-PH", + "ify": "ify-Latn-PH", + "ify-Latn": "ify-Latn-PH", + "ify-PH": "ify-Latn-PH", + "ig": "ig-Latn-NG", + "ig-Latn": "ig-Latn-NG", + "ig-NG": "ig-Latn-NG", + "igb": "igb-Latn-NG", + "igb-Latn": "igb-Latn-NG", + "igb-NG": "igb-Latn-NG", + "ige": "ige-Latn-NG", + "ige-Latn": "ige-Latn-NG", + "ige-NG": "ige-Latn-NG", + "igg": "igg-Latn-PG", + "igg-Latn": "igg-Latn-PG", + "igg-PG": "igg-Latn-PG", + "igl": "igl-Latn-NG", + "igl-Latn": "igl-Latn-NG", + "igl-NG": "igl-Latn-NG", + "igm": "igm-Latn-PG", + "igm-Latn": "igm-Latn-PG", + "igm-PG": "igm-Latn-PG", + "ign": "ign-Latn-BO", + "ign-BO": "ign-Latn-BO", + "ign-Latn": "ign-Latn-BO", + "igo": "igo-Latn-PG", + "igo-Latn": "igo-Latn-PG", + "igo-PG": "igo-Latn-PG", + "igs": "igs-Latn-001", + "igs-001": "igs-Latn-001", + "igs-Latn": "igs-Latn-001", + "igw": "igw-Latn-NG", + "igw-Latn": "igw-Latn-NG", + "igw-NG": "igw-Latn-NG", + "ihb": "ihb-Latn-ID", + "ihb-ID": "ihb-Latn-ID", + "ihb-Latn": "ihb-Latn-ID", + "ihi": "ihi-Latn-NG", + "ihi-Latn": "ihi-Latn-NG", + "ihi-NG": "ihi-Latn-NG", + "ihp": "ihp-Latn-ID", + "ihp-ID": "ihp-Latn-ID", + "ihp-Latn": "ihp-Latn-ID", + "ihw": "ihw-Latn-AU", + "ihw-AU": "ihw-Latn-AU", + "ihw-Latn": "ihw-Latn-AU", + "ii": "ii-Yiii-CN", + "ii-CN": "ii-Yiii-CN", + "ii-Yiii": "ii-Yiii-CN", + "iin": "iin-Latn-AU", + "iin-AU": "iin-Latn-AU", + "iin-Latn": "iin-Latn-AU", + "ijc": "ijc-Latn-NG", + "ijc-Latn": "ijc-Latn-NG", + "ijc-NG": "ijc-Latn-NG", + "ije": "ije-Latn-NG", + "ije-Latn": "ije-Latn-NG", + "ije-NG": "ije-Latn-NG", + "ijj": "ijj-Latn-BJ", + "ijj-BJ": "ijj-Latn-BJ", + "ijj-Latn": "ijj-Latn-BJ", + "ijn": "ijn-Latn-NG", + "ijn-Latn": "ijn-Latn-NG", + "ijn-NG": "ijn-Latn-NG", + "ijs": "ijs-Latn-NG", + "ijs-Latn": "ijs-Latn-NG", + "ijs-NG": "ijs-Latn-NG", + "ik": "ik-Latn-US", + "ik-Latn": "ik-Latn-US", + "ik-US": "ik-Latn-US", + "ikh": "ikh-Latn-NG", + "ikh-Latn": "ikh-Latn-NG", + "ikh-NG": "ikh-Latn-NG", + "iki": "iki-Latn-NG", + "iki-Latn": "iki-Latn-NG", + "iki-NG": "iki-Latn-NG", + "ikk": "ikk-Latn-NG", + "ikk-Latn": "ikk-Latn-NG", + "ikk-NG": "ikk-Latn-NG", + "ikl": "ikl-Latn-NG", + "ikl-Latn": "ikl-Latn-NG", + "ikl-NG": "ikl-Latn-NG", + "iko": "iko-Latn-NG", + "iko-Latn": "iko-Latn-NG", + "iko-NG": "iko-Latn-NG", + "ikp": "ikp-Latn-NG", + "ikp-Latn": "ikp-Latn-NG", + "ikp-NG": "ikp-Latn-NG", + "ikr": "ikr-Latn-AU", + "ikr-AU": "ikr-Latn-AU", + "ikr-Latn": "ikr-Latn-AU", + "ikt": "ikt-Latn-CA", + "ikt-CA": "ikt-Latn-CA", + "ikt-Latn": "ikt-Latn-CA", + "ikv": "ikv-Latn-NG", + "ikv-Latn": "ikv-Latn-NG", + "ikv-NG": "ikv-Latn-NG", + "ikw": "ikw-Latn-NG", + "ikw-Latn": "ikw-Latn-NG", + "ikw-NG": "ikw-Latn-NG", + "ikx": "ikx-Latn-UG", + "ikx-Latn": "ikx-Latn-UG", + "ikx-UG": "ikx-Latn-UG", + "ikz": "ikz-Latn-TZ", + "ikz-Latn": "ikz-Latn-TZ", + "ikz-TZ": "ikz-Latn-TZ", + "ila": "ila-Latn-ID", + "ila-ID": "ila-Latn-ID", + "ila-Latn": "ila-Latn-ID", + "ilb": "ilb-Latn-ZM", + "ilb-Latn": "ilb-Latn-ZM", + "ilb-ZM": "ilb-Latn-ZM", + "ilg": "ilg-Latn-AU", + "ilg-AU": "ilg-Latn-AU", + "ilg-Latn": "ilg-Latn-AU", + "ili": "ili-Latn-CN", + "ili-CN": "ili-Latn-CN", + "ili-Latn": "ili-Latn-CN", + "ilk": "ilk-Latn-PH", + "ilk-Latn": "ilk-Latn-PH", + "ilk-PH": "ilk-Latn-PH", + "ilm": "ilm-Latn-MY", + "ilm-Latn": "ilm-Latn-MY", + "ilm-MY": "ilm-Latn-MY", + "ilo": "ilo-Latn-PH", + "ilo-Latn": "ilo-Latn-PH", + "ilo-PH": "ilo-Latn-PH", + "ilp": "ilp-Latn-PH", + "ilp-Latn": "ilp-Latn-PH", + "ilp-PH": "ilp-Latn-PH", + "ilu": "ilu-Latn-ID", + "ilu-ID": "ilu-Latn-ID", + "ilu-Latn": "ilu-Latn-ID", + "ilv": "ilv-Latn-NG", + "ilv-Latn": "ilv-Latn-NG", + "ilv-NG": "ilv-Latn-NG", + "imi": "imi-Latn-PG", + "imi-Latn": "imi-Latn-PG", + "imi-PG": "imi-Latn-PG", + "iml": "iml-Latn-US", + "iml-Latn": "iml-Latn-US", + "iml-US": "iml-Latn-US", + "imn": "imn-Latn-PG", + "imn-Latn": "imn-Latn-PG", + "imn-PG": "imn-Latn-PG", + "imo": "imo-Latn-PG", + "imo-Latn": "imo-Latn-PG", + "imo-PG": "imo-Latn-PG", + "imr": "imr-Latn-ID", + "imr-ID": "imr-Latn-ID", + "imr-Latn": "imr-Latn-ID", + "ims": "ims-Latn-IT", + "ims-IT": "ims-Latn-IT", + "ims-Latn": "ims-Latn-IT", + "imt": "imt-Latn-SS", + "imt-Latn": "imt-Latn-SS", + "imt-SS": "imt-Latn-SS", + "imy": "imy-Lyci-TR", + "imy-Lyci": "imy-Lyci-TR", + "imy-TR": "imy-Lyci-TR", + "in": "in-Latn-ID", + "in-ID": "in-Latn-ID", + "in-Latn": "in-Latn-ID", + "inb": "inb-Latn-CO", + "inb-CO": "inb-Latn-CO", + "inb-Latn": "inb-Latn-CO", + "ing": "ing-Latn-US", + "ing-Latn": "ing-Latn-US", + "ing-US": "ing-Latn-US", + "inh": "inh-Cyrl-RU", + "inh-Cyrl": "inh-Cyrl-RU", + "inh-RU": "inh-Cyrl-RU", + "inj": "inj-Latn-CO", + "inj-CO": "inj-Latn-CO", + "inj-Latn": "inj-Latn-CO", + "inn": "inn-Latn-PH", + "inn-Latn": "inn-Latn-PH", + "inn-PH": "inn-Latn-PH", + "ino": "ino-Latn-PG", + "ino-Latn": "ino-Latn-PG", + "ino-PG": "ino-Latn-PG", + "inp": "inp-Latn-PE", + "inp-Latn": "inp-Latn-PE", + "inp-PE": "inp-Latn-PE", + "int": "int-Mymr-MM", + "int-MM": "int-Mymr-MM", + "int-Mymr": "int-Mymr-MM", + "io": "io-Latn-001", + "io-001": "io-Latn-001", + "io-Latn": "io-Latn-001", + "ior": "ior-Ethi-ET", + "ior-ET": "ior-Ethi-ET", + "ior-Ethi": "ior-Ethi-ET", + "iou": "iou-Latn-PG", + "iou-Latn": "iou-Latn-PG", + "iou-PG": "iou-Latn-PG", + "iow": "iow-Latn-US", + "iow-Latn": "iow-Latn-US", + "iow-US": "iow-Latn-US", + "ipi": "ipi-Latn-PG", + "ipi-Latn": "ipi-Latn-PG", + "ipi-PG": "ipi-Latn-PG", + "ipo": "ipo-Latn-PG", + "ipo-Latn": "ipo-Latn-PG", + "ipo-PG": "ipo-Latn-PG", + "iqu": "iqu-Latn-PE", + "iqu-Latn": "iqu-Latn-PE", + "iqu-PE": "iqu-Latn-PE", + "iqw": "iqw-Latn-NG", + "iqw-Latn": "iqw-Latn-NG", + "iqw-NG": "iqw-Latn-NG", + "ire": "ire-Latn-ID", + "ire-ID": "ire-Latn-ID", + "ire-Latn": "ire-Latn-ID", + "irh": "irh-Latn-ID", + "irh-ID": "irh-Latn-ID", + "irh-Latn": "irh-Latn-ID", + "iri": "iri-Latn-NG", + "iri-Latn": "iri-Latn-NG", + "iri-NG": "iri-Latn-NG", + "irk": "irk-Latn-TZ", + "irk-Latn": "irk-Latn-TZ", + "irk-TZ": "irk-Latn-TZ", + "irn": "irn-Latn-BR", + "irn-BR": "irn-Latn-BR", + "irn-Latn": "irn-Latn-BR", + "iru": "iru-Taml-IN", + "iru-IN": "iru-Taml-IN", + "iru-Taml": "iru-Taml-IN", + "irx": "irx-Latn-ID", + "irx-ID": "irx-Latn-ID", + "irx-Latn": "irx-Latn-ID", + "iry": "iry-Latn-PH", + "iry-Latn": "iry-Latn-PH", + "iry-PH": "iry-Latn-PH", + "is": "is-Latn-IS", + "is-IS": "is-Latn-IS", + "is-Latn": "is-Latn-IS", + "isa": "isa-Latn-PG", + "isa-Latn": "isa-Latn-PG", + "isa-PG": "isa-Latn-PG", + "isc": "isc-Latn-PE", + "isc-Latn": "isc-Latn-PE", + "isc-PE": "isc-Latn-PE", + "isd": "isd-Latn-PH", + "isd-Latn": "isd-Latn-PH", + "isd-PH": "isd-Latn-PH", + "ish": "ish-Latn-NG", + "ish-Latn": "ish-Latn-NG", + "ish-NG": "ish-Latn-NG", + "isi": "isi-Latn-NG", + "isi-Latn": "isi-Latn-NG", + "isi-NG": "isi-Latn-NG", + "isk": "isk-Arab-AF", + "isk-AF": "isk-Arab-AF", + "isk-Arab": "isk-Arab-AF", + "ism": "ism-Latn-ID", + "ism-ID": "ism-Latn-ID", + "ism-Latn": "ism-Latn-ID", + "isn": "isn-Latn-TZ", + "isn-Latn": "isn-Latn-TZ", + "isn-TZ": "isn-Latn-TZ", + "iso": "iso-Latn-NG", + "iso-Latn": "iso-Latn-NG", + "iso-NG": "iso-Latn-NG", + "ist": "ist-Latn-HR", + "ist-HR": "ist-Latn-HR", + "ist-Latn": "ist-Latn-HR", + "isu": "isu-Latn-CM", + "isu-CM": "isu-Latn-CM", + "isu-Latn": "isu-Latn-CM", + "it": "it-Latn-IT", + "it-CH": "it-Latn-CH", + "it-IT": "it-Latn-IT", + "it-Latn": "it-Latn-IT", + "it-SM": "it-Latn-SM", + "it-VA": "it-Latn-VA", + "itb": "itb-Latn-PH", + "itb-Latn": "itb-Latn-PH", + "itb-PH": "itb-Latn-PH", + "itd": "itd-Latn-ID", + "itd-ID": "itd-Latn-ID", + "itd-Latn": "itd-Latn-ID", + "ite": "ite-Latn-BO", + "ite-BO": "ite-Latn-BO", + "ite-Latn": "ite-Latn-BO", + "iti": "iti-Latn-PH", + "iti-Latn": "iti-Latn-PH", + "iti-PH": "iti-Latn-PH", + "itk": "itk-Hebr-IT", + "itk-Hebr": "itk-Hebr-IT", + "itk-IT": "itk-Hebr-IT", + "itl": "itl-Cyrl-RU", + "itl-Cyrl": "itl-Cyrl-RU", + "itl-RU": "itl-Cyrl-RU", + "itm": "itm-Latn-NG", + "itm-Latn": "itm-Latn-NG", + "itm-NG": "itm-Latn-NG", + "ito": "ito-Latn-BO", + "ito-BO": "ito-Latn-BO", + "ito-Latn": "ito-Latn-BO", + "itr": "itr-Latn-PG", + "itr-Latn": "itr-Latn-PG", + "itr-PG": "itr-Latn-PG", + "its": "its-Latn-NG", + "its-Latn": "its-Latn-NG", + "its-NG": "its-Latn-NG", + "itt": "itt-Latn-PH", + "itt-Latn": "itt-Latn-PH", + "itt-PH": "itt-Latn-PH", + "itv": "itv-Latn-PH", + "itv-Latn": "itv-Latn-PH", + "itv-PH": "itv-Latn-PH", + "itw": "itw-Latn-NG", + "itw-Latn": "itw-Latn-NG", + "itw-NG": "itw-Latn-NG", + "itx": "itx-Latn-ID", + "itx-ID": "itx-Latn-ID", + "itx-Latn": "itx-Latn-ID", + "ity": "ity-Latn-PH", + "ity-Latn": "ity-Latn-PH", + "ity-PH": "ity-Latn-PH", + "itz": "itz-Latn-GT", + "itz-GT": "itz-Latn-GT", + "itz-Latn": "itz-Latn-GT", + "iu": "iu-Cans-CA", + "iu-CA": "iu-Cans-CA", + "iu-Cans": "iu-Cans-CA", + "ium": "ium-Latn-CN", + "ium-CN": "ium-Latn-CN", + "ium-Latn": "ium-Latn-CN", + "ivb": "ivb-Latn-PH", + "ivb-Latn": "ivb-Latn-PH", + "ivb-PH": "ivb-Latn-PH", + "ivv": "ivv-Latn-PH", + "ivv-Latn": "ivv-Latn-PH", + "ivv-PH": "ivv-Latn-PH", + "iw": "iw-Hebr-IL", + "iw-Hebr": "iw-Hebr-IL", + "iw-IL": "iw-Hebr-IL", + "iwk": "iwk-Latn-PH", + "iwk-Latn": "iwk-Latn-PH", + "iwk-PH": "iwk-Latn-PH", + "iwm": "iwm-Latn-PG", + "iwm-Latn": "iwm-Latn-PG", + "iwm-PG": "iwm-Latn-PG", + "iwo": "iwo-Latn-ID", + "iwo-ID": "iwo-Latn-ID", + "iwo-Latn": "iwo-Latn-ID", + "iws": "iws-Latn-PG", + "iws-Latn": "iws-Latn-PG", + "iws-PG": "iws-Latn-PG", + "ixc": "ixc-Latn-MX", + "ixc-Latn": "ixc-Latn-MX", + "ixc-MX": "ixc-Latn-MX", + "ixl": "ixl-Latn-GT", + "ixl-GT": "ixl-Latn-GT", + "ixl-Latn": "ixl-Latn-GT", + "iya": "iya-Latn-NG", + "iya-Latn": "iya-Latn-NG", + "iya-NG": "iya-Latn-NG", + "iyo": "iyo-Latn-CM", + "iyo-CM": "iyo-Latn-CM", + "iyo-Latn": "iyo-Latn-CM", + "iyx": "iyx-Latn-CG", + "iyx-CG": "iyx-Latn-CG", + "iyx-Latn": "iyx-Latn-CG", + "izh": "izh-Latn-RU", + "izh-Latn": "izh-Latn-RU", + "izh-RU": "izh-Latn-RU", + "izm": "izm-Latn-NG", + "izm-Latn": "izm-Latn-NG", + "izm-NG": "izm-Latn-NG", + "izr": "izr-Latn-NG", + "izr-Latn": "izr-Latn-NG", + "izr-NG": "izr-Latn-NG", + "izz": "izz-Latn-NG", + "izz-Latn": "izz-Latn-NG", + "izz-NG": "izz-Latn-NG", + "ja": "ja-Jpan-JP", + "ja-Hira": "ja-Hira-JP", + "ja-Hrkt": "ja-Hrkt-JP", + "ja-JP": "ja-Jpan-JP", + "ja-Jpan": "ja-Jpan-JP", + "ja-Kana": "ja-Kana-JP", + "jaa": "jaa-Latn-BR", + "jaa-BR": "jaa-Latn-BR", + "jaa-Latn": "jaa-Latn-BR", + "jab": "jab-Latn-NG", + "jab-Latn": "jab-Latn-NG", + "jab-NG": "jab-Latn-NG", + "jac": "jac-Latn-GT", + "jac-GT": "jac-Latn-GT", + "jac-Latn": "jac-Latn-GT", + "jad": "jad-Arab-GN", + "jad-Arab": "jad-Arab-GN", + "jad-GN": "jad-Arab-GN", + "jae": "jae-Latn-PG", + "jae-Latn": "jae-Latn-PG", + "jae-PG": "jae-Latn-PG", + "jaf": "jaf-Latn-NG", + "jaf-Latn": "jaf-Latn-NG", + "jaf-NG": "jaf-Latn-NG", + "jah": "jah-Latn-MY", + "jah-Latn": "jah-Latn-MY", + "jah-MY": "jah-Latn-MY", + "jaj": "jaj-Latn-SB", + "jaj-Latn": "jaj-Latn-SB", + "jaj-SB": "jaj-Latn-SB", + "jak": "jak-Latn-MY", + "jak-Latn": "jak-Latn-MY", + "jak-MY": "jak-Latn-MY", + "jal": "jal-Latn-ID", + "jal-ID": "jal-Latn-ID", + "jal-Latn": "jal-Latn-ID", + "jam": "jam-Latn-JM", + "jam-JM": "jam-Latn-JM", + "jam-Latn": "jam-Latn-JM", + "jan": "jan-Latn-AU", + "jan-AU": "jan-Latn-AU", + "jan-Latn": "jan-Latn-AU", + "jao": "jao-Latn-AU", + "jao-AU": "jao-Latn-AU", + "jao-Latn": "jao-Latn-AU", + "jaq": "jaq-Latn-ID", + "jaq-ID": "jaq-Latn-ID", + "jaq-Latn": "jaq-Latn-ID", + "jas": "jas-Latn-NC", + "jas-Latn": "jas-Latn-NC", + "jas-NC": "jas-Latn-NC", + "jat": "jat-Arab-AF", + "jat-AF": "jat-Arab-AF", + "jat-Arab": "jat-Arab-AF", + "jau": "jau-Latn-ID", + "jau-ID": "jau-Latn-ID", + "jau-Latn": "jau-Latn-ID", + "jax": "jax-Latn-ID", + "jax-ID": "jax-Latn-ID", + "jax-Latn": "jax-Latn-ID", + "jay": "jay-Latn-AU", + "jay-AU": "jay-Latn-AU", + "jay-Latn": "jay-Latn-AU", + "jaz": "jaz-Latn-NC", + "jaz-Latn": "jaz-Latn-NC", + "jaz-NC": "jaz-Latn-NC", + "jbe": "jbe-Hebr-IL", + "jbe-Hebr": "jbe-Hebr-IL", + "jbe-IL": "jbe-Hebr-IL", + "jbi": "jbi-Latn-AU", + "jbi-AU": "jbi-Latn-AU", + "jbi-Latn": "jbi-Latn-AU", + "jbj": "jbj-Latn-ID", + "jbj-ID": "jbj-Latn-ID", + "jbj-Latn": "jbj-Latn-ID", + "jbk": "jbk-Latn-PG", + "jbk-Latn": "jbk-Latn-PG", + "jbk-PG": "jbk-Latn-PG", + "jbm": "jbm-Latn-NG", + "jbm-Latn": "jbm-Latn-NG", + "jbm-NG": "jbm-Latn-NG", + "jbn": "jbn-Arab-LY", + "jbn-Arab": "jbn-Arab-LY", + "jbn-LY": "jbn-Arab-LY", + "jbo": "jbo-Latn-001", + "jbo-001": "jbo-Latn-001", + "jbo-Latn": "jbo-Latn-001", + "jbr": "jbr-Latn-ID", + "jbr-ID": "jbr-Latn-ID", + "jbr-Latn": "jbr-Latn-ID", + "jbt": "jbt-Latn-BR", + "jbt-BR": "jbt-Latn-BR", + "jbt-Latn": "jbt-Latn-BR", + "jbu": "jbu-Latn-CM", + "jbu-CM": "jbu-Latn-CM", + "jbu-Latn": "jbu-Latn-CM", + "jbw": "jbw-Latn-AU", + "jbw-AU": "jbw-Latn-AU", + "jbw-Latn": "jbw-Latn-AU", + "jct": "jct-Cyrl-UA", + "jct-Cyrl": "jct-Cyrl-UA", + "jct-UA": "jct-Cyrl-UA", + "jda": "jda-Tibt-IN", + "jda-IN": "jda-Tibt-IN", + "jda-Tibt": "jda-Tibt-IN", + "jdg": "jdg-Arab-PK", + "jdg-Arab": "jdg-Arab-PK", + "jdg-PK": "jdg-Arab-PK", + "jdt": "jdt-Cyrl-RU", + "jdt-Cyrl": "jdt-Cyrl-RU", + "jdt-RU": "jdt-Cyrl-RU", + "jeb": "jeb-Latn-PE", + "jeb-Latn": "jeb-Latn-PE", + "jeb-PE": "jeb-Latn-PE", + "jee": "jee-Deva-NP", + "jee-Deva": "jee-Deva-NP", + "jee-NP": "jee-Deva-NP", + "jeh": "jeh-Latn-VN", + "jeh-Latn": "jeh-Latn-VN", + "jeh-VN": "jeh-Latn-VN", + "jei": "jei-Latn-ID", + "jei-ID": "jei-Latn-ID", + "jei-Latn": "jei-Latn-ID", + "jek": "jek-Latn-CI", + "jek-CI": "jek-Latn-CI", + "jek-Latn": "jek-Latn-CI", + "jel": "jel-Latn-ID", + "jel-ID": "jel-Latn-ID", + "jel-Latn": "jel-Latn-ID", + "jen": "jen-Latn-NG", + "jen-Latn": "jen-Latn-NG", + "jen-NG": "jen-Latn-NG", + "jer": "jer-Latn-NG", + "jer-Latn": "jer-Latn-NG", + "jer-NG": "jer-Latn-NG", + "jet": "jet-Latn-PG", + "jet-Latn": "jet-Latn-PG", + "jet-PG": "jet-Latn-PG", + "jeu": "jeu-Latn-TD", + "jeu-Latn": "jeu-Latn-TD", + "jeu-TD": "jeu-Latn-TD", + "jgb": "jgb-Latn-CD", + "jgb-CD": "jgb-Latn-CD", + "jgb-Latn": "jgb-Latn-CD", + "jge": "jge-Geor-GE", + "jge-GE": "jge-Geor-GE", + "jge-Geor": "jge-Geor-GE", + "jgk": "jgk-Latn-NG", + "jgk-Latn": "jgk-Latn-NG", + "jgk-NG": "jgk-Latn-NG", + "jgo": "jgo-Latn-CM", + "jgo-CM": "jgo-Latn-CM", + "jgo-Latn": "jgo-Latn-CM", + "jhi": "jhi-Latn-MY", + "jhi-Latn": "jhi-Latn-MY", + "jhi-MY": "jhi-Latn-MY", + "ji": "ji-Hebr-UA", + "ji-Hebr": "ji-Hebr-UA", + "ji-UA": "ji-Hebr-UA", + "jia": "jia-Latn-CM", + "jia-CM": "jia-Latn-CM", + "jia-Latn": "jia-Latn-CM", + "jib": "jib-Latn-NG", + "jib-Latn": "jib-Latn-NG", + "jib-NG": "jib-Latn-NG", + "jic": "jic-Latn-HN", + "jic-HN": "jic-Latn-HN", + "jic-Latn": "jic-Latn-HN", + "jid": "jid-Latn-NG", + "jid-Latn": "jid-Latn-NG", + "jid-NG": "jid-Latn-NG", + "jie": "jie-Latn-NG", + "jie-Latn": "jie-Latn-NG", + "jie-NG": "jie-Latn-NG", + "jig": "jig-Latn-AU", + "jig-AU": "jig-Latn-AU", + "jig-Latn": "jig-Latn-AU", + "jil": "jil-Latn-PG", + "jil-Latn": "jil-Latn-PG", + "jil-PG": "jil-Latn-PG", + "jim": "jim-Latn-CM", + "jim-CM": "jim-Latn-CM", + "jim-Latn": "jim-Latn-CM", + "jit": "jit-Latn-TZ", + "jit-Latn": "jit-Latn-TZ", + "jit-TZ": "jit-Latn-TZ", + "jiu": "jiu-Latn-CN", + "jiu-CN": "jiu-Latn-CN", + "jiu-Latn": "jiu-Latn-CN", + "jiv": "jiv-Latn-EC", + "jiv-EC": "jiv-Latn-EC", + "jiv-Latn": "jiv-Latn-EC", + "jiy": "jiy-Latn-CN", + "jiy-CN": "jiy-Latn-CN", + "jiy-Latn": "jiy-Latn-CN", + "jje": "jje-Hang-KR", + "jje-Hang": "jje-Hang-KR", + "jje-KR": "jje-Hang-KR", + "jjr": "jjr-Latn-NG", + "jjr-Latn": "jjr-Latn-NG", + "jjr-NG": "jjr-Latn-NG", + "jka": "jka-Latn-ID", + "jka-ID": "jka-Latn-ID", + "jka-Latn": "jka-Latn-ID", + "jkm": "jkm-Mymr-MM", + "jkm-MM": "jkm-Mymr-MM", + "jkm-Mymr": "jkm-Mymr-MM", + "jko": "jko-Latn-PG", + "jko-Latn": "jko-Latn-PG", + "jko-PG": "jko-Latn-PG", + "jku": "jku-Latn-NG", + "jku-Latn": "jku-Latn-NG", + "jku-NG": "jku-Latn-NG", + "jle": "jle-Latn-SD", + "jle-Latn": "jle-Latn-SD", + "jle-SD": "jle-Latn-SD", + "jma": "jma-Latn-PG", + "jma-Latn": "jma-Latn-PG", + "jma-PG": "jma-Latn-PG", + "jmb": "jmb-Latn-NG", + "jmb-Latn": "jmb-Latn-NG", + "jmb-NG": "jmb-Latn-NG", + "jmc": "jmc-Latn-TZ", + "jmc-Latn": "jmc-Latn-TZ", + "jmc-TZ": "jmc-Latn-TZ", + "jmd": "jmd-Latn-ID", + "jmd-ID": "jmd-Latn-ID", + "jmd-Latn": "jmd-Latn-ID", + "jmi": "jmi-Latn-NG", + "jmi-Latn": "jmi-Latn-NG", + "jmi-NG": "jmi-Latn-NG", + "jml": "jml-Deva-NP", + "jml-Deva": "jml-Deva-NP", + "jml-NP": "jml-Deva-NP", + "jmn": "jmn-Latn-MM", + "jmn-Latn": "jmn-Latn-MM", + "jmn-MM": "jmn-Latn-MM", + "jmr": "jmr-Latn-GH", + "jmr-GH": "jmr-Latn-GH", + "jmr-Latn": "jmr-Latn-GH", + "jms": "jms-Latn-NG", + "jms-Latn": "jms-Latn-NG", + "jms-NG": "jms-Latn-NG", + "jmw": "jmw-Latn-PG", + "jmw-Latn": "jmw-Latn-PG", + "jmw-PG": "jmw-Latn-PG", + "jmx": "jmx-Latn-MX", + "jmx-Latn": "jmx-Latn-MX", + "jmx-MX": "jmx-Latn-MX", + "jna": "jna-Takr-IN", + "jna-IN": "jna-Takr-IN", + "jna-Takr": "jna-Takr-IN", + "jnd": "jnd-Arab-PK", + "jnd-Arab": "jnd-Arab-PK", + "jnd-PK": "jnd-Arab-PK", + "jng": "jng-Latn-AU", + "jng-AU": "jng-Latn-AU", + "jng-Latn": "jng-Latn-AU", + "jni": "jni-Latn-NG", + "jni-Latn": "jni-Latn-NG", + "jni-NG": "jni-Latn-NG", + "jnj": "jnj-Latn-ET", + "jnj-ET": "jnj-Latn-ET", + "jnj-Latn": "jnj-Latn-ET", + "jnl": "jnl-Deva-IN", + "jnl-Deva": "jnl-Deva-IN", + "jnl-IN": "jnl-Deva-IN", + "jns": "jns-Deva-IN", + "jns-Deva": "jns-Deva-IN", + "jns-IN": "jns-Deva-IN", + "job": "job-Latn-CD", + "job-CD": "job-Latn-CD", + "job-Latn": "job-Latn-CD", + "jod": "jod-Latn-CI", + "jod-CI": "jod-Latn-CI", + "jod-Latn": "jod-Latn-CI", + "jog": "jog-Arab-PK", + "jog-Arab": "jog-Arab-PK", + "jog-PK": "jog-Arab-PK", + "jor": "jor-Latn-BO", + "jor-BO": "jor-Latn-BO", + "jor-Latn": "jor-Latn-BO", + "jow": "jow-Latn-ML", + "jow-Latn": "jow-Latn-ML", + "jow-ML": "jow-Latn-ML", + "jpa": "jpa-Hebr-PS", + "jpa-Hebr": "jpa-Hebr-PS", + "jpa-PS": "jpa-Hebr-PS", + "jpr": "jpr-Hebr-IL", + "jpr-Hebr": "jpr-Hebr-IL", + "jpr-IL": "jpr-Hebr-IL", + "jqr": "jqr-Latn-PE", + "jqr-Latn": "jqr-Latn-PE", + "jqr-PE": "jqr-Latn-PE", + "jra": "jra-Latn-VN", + "jra-Latn": "jra-Latn-VN", + "jra-VN": "jra-Latn-VN", + "jrb": "jrb-Hebr-IL", + "jrb-Hebr": "jrb-Hebr-IL", + "jrb-IL": "jrb-Hebr-IL", + "jrr": "jrr-Latn-NG", + "jrr-Latn": "jrr-Latn-NG", + "jrr-NG": "jrr-Latn-NG", + "jrt": "jrt-Latn-NG", + "jrt-Latn": "jrt-Latn-NG", + "jrt-NG": "jrt-Latn-NG", + "jru": "jru-Latn-VE", + "jru-Latn": "jru-Latn-VE", + "jru-VE": "jru-Latn-VE", + "jua": "jua-Latn-BR", + "jua-BR": "jua-Latn-BR", + "jua-Latn": "jua-Latn-BR", + "jub": "jub-Latn-NG", + "jub-Latn": "jub-Latn-NG", + "jub-NG": "jub-Latn-NG", + "jud": "jud-Latn-CI", + "jud-CI": "jud-Latn-CI", + "jud-Latn": "jud-Latn-CI", + "juh": "juh-Latn-NG", + "juh-Latn": "juh-Latn-NG", + "juh-NG": "juh-Latn-NG", + "jui": "jui-Latn-AU", + "jui-AU": "jui-Latn-AU", + "jui-Latn": "jui-Latn-AU", + "juk": "juk-Latn-NG", + "juk-Latn": "juk-Latn-NG", + "juk-NG": "juk-Latn-NG", + "jul": "jul-Deva-NP", + "jul-Deva": "jul-Deva-NP", + "jul-NP": "jul-Deva-NP", + "jum": "jum-Latn-SD", + "jum-Latn": "jum-Latn-SD", + "jum-SD": "jum-Latn-SD", + "jun": "jun-Orya-IN", + "jun-IN": "jun-Orya-IN", + "jun-Orya": "jun-Orya-IN", + "juo": "juo-Latn-NG", + "juo-Latn": "juo-Latn-NG", + "juo-NG": "juo-Latn-NG", + "jup": "jup-Latn-BR", + "jup-BR": "jup-Latn-BR", + "jup-Latn": "jup-Latn-BR", + "jur": "jur-Latn-BR", + "jur-BR": "jur-Latn-BR", + "jur-Latn": "jur-Latn-BR", + "jut": "jut-Latn-DK", + "jut-DK": "jut-Latn-DK", + "jut-Latn": "jut-Latn-DK", + "juu": "juu-Latn-NG", + "juu-Latn": "juu-Latn-NG", + "juu-NG": "juu-Latn-NG", + "juw": "juw-Latn-NG", + "juw-Latn": "juw-Latn-NG", + "juw-NG": "juw-Latn-NG", + "juy": "juy-Orya-IN", + "juy-IN": "juy-Orya-IN", + "juy-Orya": "juy-Orya-IN", + "jv": "jv-Latn-ID", + "jv-ID": "jv-Latn-ID", + "jv-Java": "jv-Java-ID", + "jv-Latn": "jv-Latn-ID", + "jvd": "jvd-Latn-ID", + "jvd-ID": "jvd-Latn-ID", + "jvd-Latn": "jvd-Latn-ID", + "jvn": "jvn-Latn-SR", + "jvn-Latn": "jvn-Latn-SR", + "jvn-SR": "jvn-Latn-SR", + "jw": "jw-Latn-ID", + "jw-ID": "jw-Latn-ID", + "jw-Latn": "jw-Latn-ID", + "jwi": "jwi-Latn-GH", + "jwi-GH": "jwi-Latn-GH", + "jwi-Latn": "jwi-Latn-GH", + "jya": "jya-Tibt-CN", + "jya-CN": "jya-Tibt-CN", + "jya-Tibt": "jya-Tibt-CN", + "jye": "jye-Hebr-IL", + "jye-Hebr": "jye-Hebr-IL", + "jye-IL": "jye-Hebr-IL", + "jyy": "jyy-Latn-TD", + "jyy-Latn": "jyy-Latn-TD", + "jyy-TD": "jyy-Latn-TD", + "ka": "ka-Geor-GE", + "ka-GE": "ka-Geor-GE", + "ka-Geok": "ka-Geok-GE", + "ka-Geor": "ka-Geor-GE", + "ka-Gong": "ka-Gong-GE", + "ka-IR": "ka-Geor-IR", + "ka-XX": "ka-Geor-XX", + "kaa": "kaa-Cyrl-UZ", + "kaa-Cyrl": "kaa-Cyrl-UZ", + "kaa-Cyrl-AF": "kaa-Cyrl-AF", + "kaa-Cyrl-IR": "kaa-Cyrl-IR", + "kaa-UZ": "kaa-Cyrl-UZ", + "kab": "kab-Latn-DZ", + "kab-DZ": "kab-Latn-DZ", + "kab-Latn": "kab-Latn-DZ", + "kac": "kac-Latn-MM", + "kac-Latn": "kac-Latn-MM", + "kac-Latn-MM": "kac-Latn-MM", + "kac-MM": "kac-Latn-MM", + "kad": "kad-Latn-NG", + "kad-Latn": "kad-Latn-NG", + "kad-NG": "kad-Latn-NG", + "kag": "kag-Latn-MY", + "kag-Latn": "kag-Latn-MY", + "kag-MY": "kag-Latn-MY", + "kah": "kah-Latn-CF", + "kah-CF": "kah-Latn-CF", + "kah-Latn": "kah-Latn-CF", + "kai": "kai-Latn-NG", + "kai-Latn": "kai-Latn-NG", + "kai-NG": "kai-Latn-NG", + "kaj": "kaj-Latn-NG", + "kaj-Latn": "kaj-Latn-NG", + "kaj-NG": "kaj-Latn-NG", + "kak": "kak-Latn-PH", + "kak-Latn": "kak-Latn-PH", + "kak-PH": "kak-Latn-PH", + "kam": "kam-Latn-KE", + "kam-KE": "kam-Latn-KE", + "kam-Latn": "kam-Latn-KE", + "kao": "kao-Latn-ML", + "kao-Latn": "kao-Latn-ML", + "kao-ML": "kao-Latn-ML", + "kap": "kap-Cyrl-RU", + "kap-Cyrl": "kap-Cyrl-RU", + "kap-RU": "kap-Cyrl-RU", + "kaq": "kaq-Latn-PE", + "kaq-Latn": "kaq-Latn-PE", + "kaq-PE": "kaq-Latn-PE", + "kav": "kav-Latn-BR", + "kav-BR": "kav-Latn-BR", + "kav-Latn": "kav-Latn-BR", + "kaw": "kaw-Kawi-ID", + "kaw-ID": "kaw-Kawi-ID", + "kaw-Kawi": "kaw-Kawi-ID", + "kax": "kax-Latn-ID", + "kax-ID": "kax-Latn-ID", + "kax-Latn": "kax-Latn-ID", + "kay": "kay-Latn-BR", + "kay-BR": "kay-Latn-BR", + "kay-Latn": "kay-Latn-BR", + "kba": "kba-Latn-AU", + "kba-AU": "kba-Latn-AU", + "kba-Latn": "kba-Latn-AU", + "kbb": "kbb-Latn-BR", + "kbb-BR": "kbb-Latn-BR", + "kbb-Latn": "kbb-Latn-BR", + "kbc": "kbc-Latn-BR", + "kbc-BR": "kbc-Latn-BR", + "kbc-Latn": "kbc-Latn-BR", + "kbd": "kbd-Cyrl-RU", + "kbd-Cyrl": "kbd-Cyrl-RU", + "kbd-Cyrl-TR": "kbd-Cyrl-TR", + "kbd-RU": "kbd-Cyrl-RU", + "kbe": "kbe-Latn-AU", + "kbe-AU": "kbe-Latn-AU", + "kbe-Latn": "kbe-Latn-AU", + "kbg": "kbg-Tibt-IN", + "kbg-IN": "kbg-Tibt-IN", + "kbg-Tibt": "kbg-Tibt-IN", + "kbh": "kbh-Latn-CO", + "kbh-CO": "kbh-Latn-CO", + "kbh-Latn": "kbh-Latn-CO", + "kbi": "kbi-Latn-ID", + "kbi-ID": "kbi-Latn-ID", + "kbi-Latn": "kbi-Latn-ID", + "kbj": "kbj-Latn-CD", + "kbj-CD": "kbj-Latn-CD", + "kbj-Latn": "kbj-Latn-CD", + "kbk": "kbk-Latn-PG", + "kbk-Latn": "kbk-Latn-PG", + "kbk-PG": "kbk-Latn-PG", + "kbl": "kbl-Latn-TD", + "kbl-Latn": "kbl-Latn-TD", + "kbl-TD": "kbl-Latn-TD", + "kbm": "kbm-Latn-PG", + "kbm-Latn": "kbm-Latn-PG", + "kbm-PG": "kbm-Latn-PG", + "kbn": "kbn-Latn-CF", + "kbn-CF": "kbn-Latn-CF", + "kbn-Latn": "kbn-Latn-CF", + "kbo": "kbo-Latn-SS", + "kbo-Latn": "kbo-Latn-SS", + "kbo-SS": "kbo-Latn-SS", + "kbp": "kbp-Latn-TG", + "kbp-Latn": "kbp-Latn-TG", + "kbp-TG": "kbp-Latn-TG", + "kbq": "kbq-Latn-PG", + "kbq-Latn": "kbq-Latn-PG", + "kbq-PG": "kbq-Latn-PG", + "kbr": "kbr-Latn-ET", + "kbr-ET": "kbr-Latn-ET", + "kbr-Latn": "kbr-Latn-ET", + "kbs": "kbs-Latn-GA", + "kbs-GA": "kbs-Latn-GA", + "kbs-Latn": "kbs-Latn-GA", + "kbt": "kbt-Latn-PG", + "kbt-Latn": "kbt-Latn-PG", + "kbt-PG": "kbt-Latn-PG", + "kbu": "kbu-Arab-PK", + "kbu-Arab": "kbu-Arab-PK", + "kbu-PK": "kbu-Arab-PK", + "kbv": "kbv-Latn-ID", + "kbv-ID": "kbv-Latn-ID", + "kbv-Latn": "kbv-Latn-ID", + "kbw": "kbw-Latn-PG", + "kbw-Latn": "kbw-Latn-PG", + "kbw-PG": "kbw-Latn-PG", + "kbx": "kbx-Latn-PG", + "kbx-Latn": "kbx-Latn-PG", + "kbx-PG": "kbx-Latn-PG", + "kby": "kby-Arab-NE", + "kby-Arab": "kby-Arab-NE", + "kby-NE": "kby-Arab-NE", + "kbz": "kbz-Latn-NG", + "kbz-Latn": "kbz-Latn-NG", + "kbz-NG": "kbz-Latn-NG", + "kca": "kca-Cyrl-RU", + "kca-Cyrl": "kca-Cyrl-RU", + "kca-RU": "kca-Cyrl-RU", + "kcb": "kcb-Latn-PG", + "kcb-Latn": "kcb-Latn-PG", + "kcb-PG": "kcb-Latn-PG", + "kcc": "kcc-Latn-NG", + "kcc-Latn": "kcc-Latn-NG", + "kcc-NG": "kcc-Latn-NG", + "kcd": "kcd-Latn-ID", + "kcd-ID": "kcd-Latn-ID", + "kcd-Latn": "kcd-Latn-ID", + "kce": "kce-Latn-NG", + "kce-Latn": "kce-Latn-NG", + "kce-NG": "kce-Latn-NG", + "kcf": "kcf-Latn-NG", + "kcf-Latn": "kcf-Latn-NG", + "kcf-NG": "kcf-Latn-NG", + "kcg": "kcg-Latn-NG", + "kcg-Latn": "kcg-Latn-NG", + "kcg-NG": "kcg-Latn-NG", + "kch": "kch-Latn-NG", + "kch-Latn": "kch-Latn-NG", + "kch-NG": "kch-Latn-NG", + "kci": "kci-Latn-NG", + "kci-Latn": "kci-Latn-NG", + "kci-NG": "kci-Latn-NG", + "kcj": "kcj-Latn-GW", + "kcj-GW": "kcj-Latn-GW", + "kcj-Latn": "kcj-Latn-GW", + "kck": "kck-Latn-ZW", + "kck-Latn": "kck-Latn-ZW", + "kck-ZW": "kck-Latn-ZW", + "kcl": "kcl-Latn-PG", + "kcl-Latn": "kcl-Latn-PG", + "kcl-PG": "kcl-Latn-PG", + "kcm": "kcm-Latn-CF", + "kcm-CF": "kcm-Latn-CF", + "kcm-Latn": "kcm-Latn-CF", + "kcn": "kcn-Latn-UG", + "kcn-Latn": "kcn-Latn-UG", + "kcn-UG": "kcn-Latn-UG", + "kco": "kco-Latn-PG", + "kco-Latn": "kco-Latn-PG", + "kco-PG": "kco-Latn-PG", + "kcp": "kcp-Latn-SD", + "kcp-Latn": "kcp-Latn-SD", + "kcp-SD": "kcp-Latn-SD", + "kcq": "kcq-Latn-NG", + "kcq-Latn": "kcq-Latn-NG", + "kcq-NG": "kcq-Latn-NG", + "kcs": "kcs-Latn-NG", + "kcs-Latn": "kcs-Latn-NG", + "kcs-NG": "kcs-Latn-NG", + "kct": "kct-Latn-PG", + "kct-Latn": "kct-Latn-PG", + "kct-PG": "kct-Latn-PG", + "kcu": "kcu-Latn-TZ", + "kcu-Latn": "kcu-Latn-TZ", + "kcu-TZ": "kcu-Latn-TZ", + "kcv": "kcv-Latn-CD", + "kcv-CD": "kcv-Latn-CD", + "kcv-Latn": "kcv-Latn-CD", + "kcw": "kcw-Latn-CD", + "kcw-CD": "kcw-Latn-CD", + "kcw-Latn": "kcw-Latn-CD", + "kcy": "kcy-Arab-DZ", + "kcy-Arab": "kcy-Arab-DZ", + "kcy-DZ": "kcy-Arab-DZ", + "kcz": "kcz-Latn-TZ", + "kcz-Latn": "kcz-Latn-TZ", + "kcz-TZ": "kcz-Latn-TZ", + "kda": "kda-Latn-AU", + "kda-AU": "kda-Latn-AU", + "kda-Latn": "kda-Latn-AU", + "kdc": "kdc-Latn-TZ", + "kdc-Latn": "kdc-Latn-TZ", + "kdc-TZ": "kdc-Latn-TZ", + "kdd": "kdd-Latn-AU", + "kdd-AU": "kdd-Latn-AU", + "kdd-Latn": "kdd-Latn-AU", + "kde": "kde-Latn-TZ", + "kde-Latn": "kde-Latn-TZ", + "kde-TZ": "kde-Latn-TZ", + "kdf": "kdf-Latn-PG", + "kdf-Latn": "kdf-Latn-PG", + "kdf-PG": "kdf-Latn-PG", + "kdg": "kdg-Latn-CD", + "kdg-CD": "kdg-Latn-CD", + "kdg-Latn": "kdg-Latn-CD", + "kdh": "kdh-Latn-TG", + "kdh-Latn": "kdh-Latn-TG", + "kdh-TG": "kdh-Latn-TG", + "kdi": "kdi-Latn-UG", + "kdi-Latn": "kdi-Latn-UG", + "kdi-UG": "kdi-Latn-UG", + "kdj": "kdj-Latn-UG", + "kdj-Latn": "kdj-Latn-UG", + "kdj-UG": "kdj-Latn-UG", + "kdk": "kdk-Latn-NC", + "kdk-Latn": "kdk-Latn-NC", + "kdk-NC": "kdk-Latn-NC", + "kdl": "kdl-Latn-NG", + "kdl-Latn": "kdl-Latn-NG", + "kdl-NG": "kdl-Latn-NG", + "kdm": "kdm-Latn-NG", + "kdm-Latn": "kdm-Latn-NG", + "kdm-NG": "kdm-Latn-NG", + "kdn": "kdn-Latn-ZW", + "kdn-Latn": "kdn-Latn-ZW", + "kdn-ZW": "kdn-Latn-ZW", + "kdp": "kdp-Latn-NG", + "kdp-Latn": "kdp-Latn-NG", + "kdp-NG": "kdp-Latn-NG", + "kdq": "kdq-Beng-IN", + "kdq-Beng": "kdq-Beng-IN", + "kdq-IN": "kdq-Beng-IN", + "kdr": "kdr-Latn-LT", + "kdr-LT": "kdr-Latn-LT", + "kdr-Latn": "kdr-Latn-LT", + "kdt": "kdt-Thai-TH", + "kdt-TH": "kdt-Thai-TH", + "kdt-Thai": "kdt-Thai-TH", + "kdt-Thai-KH": "kdt-Thai-KH", + "kdt-Thai-LA": "kdt-Thai-LA", + "kdw": "kdw-Latn-ID", + "kdw-ID": "kdw-Latn-ID", + "kdw-Latn": "kdw-Latn-ID", + "kdx": "kdx-Latn-NG", + "kdx-Latn": "kdx-Latn-NG", + "kdx-NG": "kdx-Latn-NG", + "kdy": "kdy-Latn-ID", + "kdy-ID": "kdy-Latn-ID", + "kdy-Latn": "kdy-Latn-ID", + "kdz": "kdz-Latn-CM", + "kdz-CM": "kdz-Latn-CM", + "kdz-Latn": "kdz-Latn-CM", + "kea": "kea-Latn-CV", + "kea-CV": "kea-Latn-CV", + "kea-Latn": "kea-Latn-CV", + "keb": "keb-Latn-GA", + "keb-GA": "keb-Latn-GA", + "keb-Latn": "keb-Latn-GA", + "kec": "kec-Latn-SD", + "kec-Latn": "kec-Latn-SD", + "kec-SD": "kec-Latn-SD", + "ked": "ked-Latn-TZ", + "ked-Latn": "ked-Latn-TZ", + "ked-TZ": "ked-Latn-TZ", + "kee": "kee-Latn-US", + "kee-Latn": "kee-Latn-US", + "kee-US": "kee-Latn-US", + "kef": "kef-Latn-TG", + "kef-Latn": "kef-Latn-TG", + "kef-TG": "kef-Latn-TG", + "keg": "keg-Latn-SD", + "keg-Latn": "keg-Latn-SD", + "keg-SD": "keg-Latn-SD", + "keh": "keh-Latn-PG", + "keh-Latn": "keh-Latn-PG", + "keh-PG": "keh-Latn-PG", + "kei": "kei-Latn-ID", + "kei-ID": "kei-Latn-ID", + "kei-Latn": "kei-Latn-ID", + "kek": "kek-Latn-GT", + "kek-GT": "kek-Latn-GT", + "kek-Latn": "kek-Latn-GT", + "kel": "kel-Latn-CD", + "kel-CD": "kel-Latn-CD", + "kel-Latn": "kel-Latn-CD", + "kem": "kem-Latn-TL", + "kem-Latn": "kem-Latn-TL", + "kem-TL": "kem-Latn-TL", + "ken": "ken-Latn-CM", + "ken-CM": "ken-Latn-CM", + "ken-Latn": "ken-Latn-CM", + "keo": "keo-Latn-UG", + "keo-Latn": "keo-Latn-UG", + "keo-UG": "keo-Latn-UG", + "ker": "ker-Latn-TD", + "ker-Latn": "ker-Latn-TD", + "ker-TD": "ker-Latn-TD", + "kes": "kes-Latn-NG", + "kes-Latn": "kes-Latn-NG", + "kes-NG": "kes-Latn-NG", + "ket": "ket-Cyrl-RU", + "ket-Cyrl": "ket-Cyrl-RU", + "ket-RU": "ket-Cyrl-RU", + "keu": "keu-Latn-TG", + "keu-Latn": "keu-Latn-TG", + "keu-TG": "keu-Latn-TG", + "kev": "kev-Mlym-IN", + "kev-IN": "kev-Mlym-IN", + "kev-Mlym": "kev-Mlym-IN", + "kew": "kew-Latn-PG", + "kew-Latn": "kew-Latn-PG", + "kew-PG": "kew-Latn-PG", + "kex": "kex-Deva-IN", + "kex-Deva": "kex-Deva-IN", + "kex-IN": "kex-Deva-IN", + "key": "key-Telu-IN", + "key-IN": "key-Telu-IN", + "key-Telu": "key-Telu-IN", + "kez": "kez-Latn-NG", + "kez-Latn": "kez-Latn-NG", + "kez-NG": "kez-Latn-NG", + "kfa": "kfa-Knda-IN", + "kfa-IN": "kfa-Knda-IN", + "kfa-Knda": "kfa-Knda-IN", + "kfb": "kfb-Deva-IN", + "kfb-Deva": "kfb-Deva-IN", + "kfb-IN": "kfb-Deva-IN", + "kfc": "kfc-Telu-IN", + "kfc-IN": "kfc-Telu-IN", + "kfc-Telu": "kfc-Telu-IN", + "kfd": "kfd-Knda-IN", + "kfd-IN": "kfd-Knda-IN", + "kfd-Knda": "kfd-Knda-IN", + "kfe": "kfe-Taml-IN", + "kfe-IN": "kfe-Taml-IN", + "kfe-Taml": "kfe-Taml-IN", + "kff": "kff-Latn-IN", + "kff-IN": "kff-Latn-IN", + "kff-Latn": "kff-Latn-IN", + "kfg": "kfg-Knda-IN", + "kfg-IN": "kfg-Knda-IN", + "kfg-Knda": "kfg-Knda-IN", + "kfh": "kfh-Mlym-IN", + "kfh-IN": "kfh-Mlym-IN", + "kfh-Mlym": "kfh-Mlym-IN", + "kfi": "kfi-Taml-IN", + "kfi-IN": "kfi-Taml-IN", + "kfi-Taml": "kfi-Taml-IN", + "kfk": "kfk-Deva-IN", + "kfk-Deva": "kfk-Deva-IN", + "kfk-IN": "kfk-Deva-IN", + "kfl": "kfl-Latn-CM", + "kfl-CM": "kfl-Latn-CM", + "kfl-Latn": "kfl-Latn-CM", + "kfm": "kfm-Arab-IR", + "kfm-Arab": "kfm-Arab-IR", + "kfm-IR": "kfm-Arab-IR", + "kfn": "kfn-Latn-CM", + "kfn-CM": "kfn-Latn-CM", + "kfn-Latn": "kfn-Latn-CM", + "kfo": "kfo-Latn-CI", + "kfo-CI": "kfo-Latn-CI", + "kfo-Latn": "kfo-Latn-CI", + "kfp": "kfp-Deva-IN", + "kfp-Deva": "kfp-Deva-IN", + "kfp-IN": "kfp-Deva-IN", + "kfq": "kfq-Deva-IN", + "kfq-Deva": "kfq-Deva-IN", + "kfq-IN": "kfq-Deva-IN", + "kfr": "kfr-Deva-IN", + "kfr-Deva": "kfr-Deva-IN", + "kfr-IN": "kfr-Deva-IN", + "kfs": "kfs-Deva-IN", + "kfs-Deva": "kfs-Deva-IN", + "kfs-IN": "kfs-Deva-IN", + "kfu": "kfu-Deva-IN", + "kfu-Deva": "kfu-Deva-IN", + "kfu-IN": "kfu-Deva-IN", + "kfv": "kfv-Latn-IN", + "kfv-IN": "kfv-Latn-IN", + "kfv-Latn": "kfv-Latn-IN", + "kfw": "kfw-Latn-IN", + "kfw-IN": "kfw-Latn-IN", + "kfw-Latn": "kfw-Latn-IN", + "kfx": "kfx-Deva-IN", + "kfx-Deva": "kfx-Deva-IN", + "kfx-IN": "kfx-Deva-IN", + "kfy": "kfy-Deva-IN", + "kfy-Deva": "kfy-Deva-IN", + "kfy-IN": "kfy-Deva-IN", + "kfz": "kfz-Latn-BF", + "kfz-BF": "kfz-Latn-BF", + "kfz-Latn": "kfz-Latn-BF", + "kg": "kg-Latn-CD", + "kg-CD": "kg-Latn-CD", + "kg-Latn": "kg-Latn-CD", + "kga": "kga-Latn-CI", + "kga-CI": "kga-Latn-CI", + "kga-Latn": "kga-Latn-CI", + "kgb": "kgb-Latn-ID", + "kgb-ID": "kgb-Latn-ID", + "kgb-Latn": "kgb-Latn-ID", + "kge": "kge-Latn-ID", + "kge-ID": "kge-Latn-ID", + "kge-Latn": "kge-Latn-ID", + "kgf": "kgf-Latn-PG", + "kgf-Latn": "kgf-Latn-PG", + "kgf-PG": "kgf-Latn-PG", + "kgj": "kgj-Deva-NP", + "kgj-Deva": "kgj-Deva-NP", + "kgj-NP": "kgj-Deva-NP", + "kgk": "kgk-Latn-BR", + "kgk-BR": "kgk-Latn-BR", + "kgk-Latn": "kgk-Latn-BR", + "kgl": "kgl-Latn-AU", + "kgl-AU": "kgl-Latn-AU", + "kgl-Latn": "kgl-Latn-AU", + "kgo": "kgo-Latn-SD", + "kgo-Latn": "kgo-Latn-SD", + "kgo-SD": "kgo-Latn-SD", + "kgp": "kgp-Latn-BR", + "kgp-BR": "kgp-Latn-BR", + "kgp-Latn": "kgp-Latn-BR", + "kgq": "kgq-Latn-ID", + "kgq-ID": "kgq-Latn-ID", + "kgq-Latn": "kgq-Latn-ID", + "kgr": "kgr-Latn-ID", + "kgr-ID": "kgr-Latn-ID", + "kgr-Latn": "kgr-Latn-ID", + "kgs": "kgs-Latn-AU", + "kgs-AU": "kgs-Latn-AU", + "kgs-Latn": "kgs-Latn-AU", + "kgt": "kgt-Latn-NG", + "kgt-Latn": "kgt-Latn-NG", + "kgt-NG": "kgt-Latn-NG", + "kgu": "kgu-Latn-PG", + "kgu-Latn": "kgu-Latn-PG", + "kgu-PG": "kgu-Latn-PG", + "kgv": "kgv-Latn-ID", + "kgv-ID": "kgv-Latn-ID", + "kgv-Latn": "kgv-Latn-ID", + "kgw": "kgw-Latn-ID", + "kgw-ID": "kgw-Latn-ID", + "kgw-Latn": "kgw-Latn-ID", + "kgx": "kgx-Latn-ID", + "kgx-ID": "kgx-Latn-ID", + "kgx-Latn": "kgx-Latn-ID", + "kgy": "kgy-Deva-NP", + "kgy-Deva": "kgy-Deva-NP", + "kgy-NP": "kgy-Deva-NP", + "kha": "kha-Latn-IN", + "kha-IN": "kha-Latn-IN", + "kha-Latn": "kha-Latn-IN", + "khb": "khb-Talu-CN", + "khb-CN": "khb-Talu-CN", + "khb-Talu": "khb-Talu-CN", + "khc": "khc-Latn-ID", + "khc-ID": "khc-Latn-ID", + "khc-Latn": "khc-Latn-ID", + "khd": "khd-Latn-ID", + "khd-ID": "khd-Latn-ID", + "khd-Latn": "khd-Latn-ID", + "khe": "khe-Latn-ID", + "khe-ID": "khe-Latn-ID", + "khe-Latn": "khe-Latn-ID", + "khf": "khf-Thai-LA", + "khf-LA": "khf-Thai-LA", + "khf-Thai": "khf-Thai-LA", + "khg": "khg-Tibt-CN", + "khg-CN": "khg-Tibt-CN", + "khg-Tibt": "khg-Tibt-CN", + "khh": "khh-Latn-ID", + "khh-ID": "khh-Latn-ID", + "khh-Latn": "khh-Latn-ID", + "khj": "khj-Latn-NG", + "khj-Latn": "khj-Latn-NG", + "khj-NG": "khj-Latn-NG", + "khl": "khl-Latn-PG", + "khl-Latn": "khl-Latn-PG", + "khl-PG": "khl-Latn-PG", + "khn": "khn-Deva-IN", + "khn-Deva": "khn-Deva-IN", + "khn-IN": "khn-Deva-IN", + "kho": "kho-Brah-IR", + "kho-Brah": "kho-Brah-IR", + "kho-IR": "kho-Brah-IR", + "khp": "khp-Latn-ID", + "khp-ID": "khp-Latn-ID", + "khp-Latn": "khp-Latn-ID", + "khq": "khq-Latn-ML", + "khq-Latn": "khq-Latn-ML", + "khq-ML": "khq-Latn-ML", + "khr": "khr-Latn-IN", + "khr-IN": "khr-Latn-IN", + "khr-Latn": "khr-Latn-IN", + "khs": "khs-Latn-PG", + "khs-Latn": "khs-Latn-PG", + "khs-PG": "khs-Latn-PG", + "kht": "kht-Mymr-IN", + "kht-IN": "kht-Mymr-IN", + "kht-Mymr": "kht-Mymr-IN", + "kht-Mymr-IN": "kht-Mymr-IN", + "khu": "khu-Latn-AO", + "khu-AO": "khu-Latn-AO", + "khu-Latn": "khu-Latn-AO", + "khv": "khv-Cyrl-RU", + "khv-Cyrl": "khv-Cyrl-RU", + "khv-RU": "khv-Cyrl-RU", + "khw": "khw-Arab-PK", + "khw-Arab": "khw-Arab-PK", + "khw-PK": "khw-Arab-PK", + "khx": "khx-Latn-CD", + "khx-CD": "khx-Latn-CD", + "khx-Latn": "khx-Latn-CD", + "khy": "khy-Latn-CD", + "khy-CD": "khy-Latn-CD", + "khy-Latn": "khy-Latn-CD", + "khz": "khz-Latn-PG", + "khz-Latn": "khz-Latn-PG", + "khz-PG": "khz-Latn-PG", + "ki": "ki-Latn-KE", + "ki-KE": "ki-Latn-KE", + "ki-Latn": "ki-Latn-KE", + "kia": "kia-Latn-TD", + "kia-Latn": "kia-Latn-TD", + "kia-TD": "kia-Latn-TD", + "kib": "kib-Latn-SD", + "kib-Latn": "kib-Latn-SD", + "kib-SD": "kib-Latn-SD", + "kic": "kic-Latn-US", + "kic-Latn": "kic-Latn-US", + "kic-US": "kic-Latn-US", + "kid": "kid-Latn-CM", + "kid-CM": "kid-Latn-CM", + "kid-Latn": "kid-Latn-CM", + "kie": "kie-Latn-TD", + "kie-Latn": "kie-Latn-TD", + "kie-TD": "kie-Latn-TD", + "kif": "kif-Deva-NP", + "kif-Deva": "kif-Deva-NP", + "kif-NP": "kif-Deva-NP", + "kig": "kig-Latn-ID", + "kig-ID": "kig-Latn-ID", + "kig-Latn": "kig-Latn-ID", + "kih": "kih-Latn-PG", + "kih-Latn": "kih-Latn-PG", + "kih-PG": "kih-Latn-PG", + "kij": "kij-Latn-PG", + "kij-Latn": "kij-Latn-PG", + "kij-PG": "kij-Latn-PG", + "kil": "kil-Latn-NG", + "kil-Latn": "kil-Latn-NG", + "kil-NG": "kil-Latn-NG", + "kim": "kim-Cyrl-RU", + "kim-Cyrl": "kim-Cyrl-RU", + "kim-RU": "kim-Cyrl-RU", + "kio": "kio-Latn-US", + "kio-Latn": "kio-Latn-US", + "kio-US": "kio-Latn-US", + "kip": "kip-Deva-NP", + "kip-Deva": "kip-Deva-NP", + "kip-NP": "kip-Deva-NP", + "kiq": "kiq-Latn-ID", + "kiq-ID": "kiq-Latn-ID", + "kiq-Latn": "kiq-Latn-ID", + "kis": "kis-Latn-PG", + "kis-Latn": "kis-Latn-PG", + "kis-PG": "kis-Latn-PG", + "kit": "kit-Latn-PG", + "kit-Latn": "kit-Latn-PG", + "kit-PG": "kit-Latn-PG", + "kiu": "kiu-Latn-TR", + "kiu-Latn": "kiu-Latn-TR", + "kiu-TR": "kiu-Latn-TR", + "kiv": "kiv-Latn-TZ", + "kiv-Latn": "kiv-Latn-TZ", + "kiv-TZ": "kiv-Latn-TZ", + "kiw": "kiw-Latn-PG", + "kiw-Latn": "kiw-Latn-PG", + "kiw-PG": "kiw-Latn-PG", + "kix": "kix-Latn-IN", + "kix-IN": "kix-Latn-IN", + "kix-Latn": "kix-Latn-IN", + "kiy": "kiy-Latn-ID", + "kiy-ID": "kiy-Latn-ID", + "kiy-Latn": "kiy-Latn-ID", + "kiz": "kiz-Latn-TZ", + "kiz-Latn": "kiz-Latn-TZ", + "kiz-TZ": "kiz-Latn-TZ", + "kj": "kj-Latn-NA", + "kj-Latn": "kj-Latn-NA", + "kj-NA": "kj-Latn-NA", + "kja": "kja-Latn-ID", + "kja-ID": "kja-Latn-ID", + "kja-Latn": "kja-Latn-ID", + "kjb": "kjb-Latn-GT", + "kjb-GT": "kjb-Latn-GT", + "kjb-Latn": "kjb-Latn-GT", + "kjc": "kjc-Latn-ID", + "kjc-ID": "kjc-Latn-ID", + "kjc-Latn": "kjc-Latn-ID", + "kjd": "kjd-Latn-PG", + "kjd-Latn": "kjd-Latn-PG", + "kjd-PG": "kjd-Latn-PG", + "kje": "kje-Latn-ID", + "kje-ID": "kje-Latn-ID", + "kje-Latn": "kje-Latn-ID", + "kjg": "kjg-Laoo-LA", + "kjg-LA": "kjg-Laoo-LA", + "kjg-Laoo": "kjg-Laoo-LA", + "kjh": "kjh-Cyrl-RU", + "kjh-Cyrl": "kjh-Cyrl-RU", + "kjh-RU": "kjh-Cyrl-RU", + "kji": "kji-Latn-SB", + "kji-Latn": "kji-Latn-SB", + "kji-SB": "kji-Latn-SB", + "kjj": "kjj-Latn-AZ", + "kjj-AZ": "kjj-Latn-AZ", + "kjj-Latn": "kjj-Latn-AZ", + "kjk": "kjk-Latn-ID", + "kjk-ID": "kjk-Latn-ID", + "kjk-Latn": "kjk-Latn-ID", + "kjl": "kjl-Deva-NP", + "kjl-Deva": "kjl-Deva-NP", + "kjl-NP": "kjl-Deva-NP", + "kjm": "kjm-Latn-VN", + "kjm-Latn": "kjm-Latn-VN", + "kjm-VN": "kjm-Latn-VN", + "kjn": "kjn-Latn-AU", + "kjn-AU": "kjn-Latn-AU", + "kjn-Latn": "kjn-Latn-AU", + "kjo": "kjo-Deva-IN", + "kjo-Deva": "kjo-Deva-IN", + "kjo-IN": "kjo-Deva-IN", + "kjp": "kjp-Mymr-MM", + "kjp-MM": "kjp-Mymr-MM", + "kjp-Mymr": "kjp-Mymr-MM", + "kjq": "kjq-Latn-US", + "kjq-Latn": "kjq-Latn-US", + "kjq-US": "kjq-Latn-US", + "kjr": "kjr-Latn-ID", + "kjr-ID": "kjr-Latn-ID", + "kjr-Latn": "kjr-Latn-ID", + "kjs": "kjs-Latn-PG", + "kjs-Latn": "kjs-Latn-PG", + "kjs-PG": "kjs-Latn-PG", + "kjt": "kjt-Thai-TH", + "kjt-TH": "kjt-Thai-TH", + "kjt-Thai": "kjt-Thai-TH", + "kju": "kju-Latn-US", + "kju-Latn": "kju-Latn-US", + "kju-US": "kju-Latn-US", + "kjx": "kjx-Latn-PG", + "kjx-Latn": "kjx-Latn-PG", + "kjx-PG": "kjx-Latn-PG", + "kjy": "kjy-Latn-PG", + "kjy-Latn": "kjy-Latn-PG", + "kjy-PG": "kjy-Latn-PG", + "kjz": "kjz-Tibt-BT", + "kjz-BT": "kjz-Tibt-BT", + "kjz-Tibt": "kjz-Tibt-BT", + "kk": "kk-Cyrl-KZ", + "kk-AF": "kk-Arab-AF", + "kk-Arab": "kk-Arab-CN", + "kk-Arab-MN": "kk-Arab-MN", + "kk-CN": "kk-Arab-CN", + "kk-Cyrl": "kk-Cyrl-KZ", + "kk-IR": "kk-Arab-IR", + "kk-KZ": "kk-Cyrl-KZ", + "kk-MN": "kk-Arab-MN", + "kka": "kka-Latn-NG", + "kka-Latn": "kka-Latn-NG", + "kka-NG": "kka-Latn-NG", + "kkb": "kkb-Latn-ID", + "kkb-ID": "kkb-Latn-ID", + "kkb-Latn": "kkb-Latn-ID", + "kkc": "kkc-Latn-PG", + "kkc-Latn": "kkc-Latn-PG", + "kkc-PG": "kkc-Latn-PG", + "kkd": "kkd-Latn-NG", + "kkd-Latn": "kkd-Latn-NG", + "kkd-NG": "kkd-Latn-NG", + "kke": "kke-Latn-GN", + "kke-GN": "kke-Latn-GN", + "kke-Latn": "kke-Latn-GN", + "kkf": "kkf-Tibt-IN", + "kkf-IN": "kkf-Tibt-IN", + "kkf-Tibt": "kkf-Tibt-IN", + "kkg": "kkg-Latn-PH", + "kkg-Latn": "kkg-Latn-PH", + "kkg-PH": "kkg-Latn-PH", + "kkh": "kkh-Lana-MM", + "kkh-Lana": "kkh-Lana-MM", + "kkh-MM": "kkh-Lana-MM", + "kki": "kki-Latn-TZ", + "kki-Latn": "kki-Latn-TZ", + "kki-TZ": "kki-Latn-TZ", + "kkj": "kkj-Latn-CM", + "kkj-CM": "kkj-Latn-CM", + "kkj-Latn": "kkj-Latn-CM", + "kkk": "kkk-Latn-SB", + "kkk-Latn": "kkk-Latn-SB", + "kkk-SB": "kkk-Latn-SB", + "kkl": "kkl-Latn-ID", + "kkl-ID": "kkl-Latn-ID", + "kkl-Latn": "kkl-Latn-ID", + "kkm": "kkm-Latn-NG", + "kkm-Latn": "kkm-Latn-NG", + "kkm-NG": "kkm-Latn-NG", + "kko": "kko-Latn-SD", + "kko-Latn": "kko-Latn-SD", + "kko-SD": "kko-Latn-SD", + "kkp": "kkp-Latn-AU", + "kkp-AU": "kkp-Latn-AU", + "kkp-Latn": "kkp-Latn-AU", + "kkq": "kkq-Latn-CD", + "kkq-CD": "kkq-Latn-CD", + "kkq-Latn": "kkq-Latn-CD", + "kkr": "kkr-Latn-NG", + "kkr-Latn": "kkr-Latn-NG", + "kkr-NG": "kkr-Latn-NG", + "kks": "kks-Latn-NG", + "kks-Latn": "kks-Latn-NG", + "kks-NG": "kks-Latn-NG", + "kkt": "kkt-Deva-NP", + "kkt-Deva": "kkt-Deva-NP", + "kkt-NP": "kkt-Deva-NP", + "kku": "kku-Latn-NG", + "kku-Latn": "kku-Latn-NG", + "kku-NG": "kku-Latn-NG", + "kkv": "kkv-Latn-ID", + "kkv-ID": "kkv-Latn-ID", + "kkv-Latn": "kkv-Latn-ID", + "kkw": "kkw-Latn-CG", + "kkw-CG": "kkw-Latn-CG", + "kkw-Latn": "kkw-Latn-CG", + "kkx": "kkx-Latn-ID", + "kkx-ID": "kkx-Latn-ID", + "kkx-Latn": "kkx-Latn-ID", + "kky": "kky-Latn-AU", + "kky-AU": "kky-Latn-AU", + "kky-Latn": "kky-Latn-AU", + "kkz": "kkz-Latn-CA", + "kkz-CA": "kkz-Latn-CA", + "kkz-Latn": "kkz-Latn-CA", + "kl": "kl-Latn-GL", + "kl-GL": "kl-Latn-GL", + "kl-Latn": "kl-Latn-GL", + "kla": "kla-Latn-US", + "kla-Latn": "kla-Latn-US", + "kla-US": "kla-Latn-US", + "klb": "klb-Latn-MX", + "klb-Latn": "klb-Latn-MX", + "klb-MX": "klb-Latn-MX", + "klc": "klc-Latn-CM", + "klc-CM": "klc-Latn-CM", + "klc-Latn": "klc-Latn-CM", + "kld": "kld-Latn-AU", + "kld-AU": "kld-Latn-AU", + "kld-Latn": "kld-Latn-AU", + "kle": "kle-Deva-NP", + "kle-Deva": "kle-Deva-NP", + "kle-NP": "kle-Deva-NP", + "klf": "klf-Latn-TD", + "klf-Latn": "klf-Latn-TD", + "klf-TD": "klf-Latn-TD", + "klg": "klg-Latn-PH", + "klg-Latn": "klg-Latn-PH", + "klg-PH": "klg-Latn-PH", + "klh": "klh-Latn-PG", + "klh-Latn": "klh-Latn-PG", + "klh-PG": "klh-Latn-PG", + "kli": "kli-Latn-ID", + "kli-ID": "kli-Latn-ID", + "kli-Latn": "kli-Latn-ID", + "klj": "klj-Arab-IR", + "klj-Arab": "klj-Arab-IR", + "klj-IR": "klj-Arab-IR", + "klk": "klk-Latn-NG", + "klk-Latn": "klk-Latn-NG", + "klk-NG": "klk-Latn-NG", + "kll": "kll-Latn-PH", + "kll-Latn": "kll-Latn-PH", + "kll-PH": "kll-Latn-PH", + "klm": "klm-Latn-PG", + "klm-Latn": "klm-Latn-PG", + "klm-PG": "klm-Latn-PG", + "kln": "kln-Latn-KE", + "kln-KE": "kln-Latn-KE", + "kln-Latn": "kln-Latn-KE", + "klo": "klo-Latn-NG", + "klo-Latn": "klo-Latn-NG", + "klo-NG": "klo-Latn-NG", + "klp": "klp-Latn-PG", + "klp-Latn": "klp-Latn-PG", + "klp-PG": "klp-Latn-PG", + "klq": "klq-Latn-PG", + "klq-Latn": "klq-Latn-PG", + "klq-PG": "klq-Latn-PG", + "klr": "klr-Deva-NP", + "klr-Deva": "klr-Deva-NP", + "klr-NP": "klr-Deva-NP", + "kls": "kls-Latn-PK", + "kls-Latn": "kls-Latn-PK", + "kls-PK": "kls-Latn-PK", + "klt": "klt-Latn-PG", + "klt-Latn": "klt-Latn-PG", + "klt-PG": "klt-Latn-PG", + "klu": "klu-Latn-LR", + "klu-LR": "klu-Latn-LR", + "klu-Latn": "klu-Latn-LR", + "klv": "klv-Latn-VU", + "klv-Latn": "klv-Latn-VU", + "klv-VU": "klv-Latn-VU", + "klw": "klw-Latn-ID", + "klw-ID": "klw-Latn-ID", + "klw-Latn": "klw-Latn-ID", + "klx": "klx-Latn-PG", + "klx-Latn": "klx-Latn-PG", + "klx-PG": "klx-Latn-PG", + "kly": "kly-Latn-ID", + "kly-ID": "kly-Latn-ID", + "kly-Latn": "kly-Latn-ID", + "klz": "klz-Latn-ID", + "klz-ID": "klz-Latn-ID", + "klz-Latn": "klz-Latn-ID", + "km": "km-Khmr-KH", + "km-KH": "km-Khmr-KH", + "km-Khmr": "km-Khmr-KH", + "km-XX": "km-Khmr-XX", + "kma": "kma-Latn-GH", + "kma-GH": "kma-Latn-GH", + "kma-Latn": "kma-Latn-GH", + "kmb": "kmb-Latn-AO", + "kmb-AO": "kmb-Latn-AO", + "kmb-Latn": "kmb-Latn-AO", + "kmc": "kmc-Latn-CN", + "kmc-CN": "kmc-Latn-CN", + "kmc-Latn": "kmc-Latn-CN", + "kmd": "kmd-Latn-PH", + "kmd-Latn": "kmd-Latn-PH", + "kmd-PH": "kmd-Latn-PH", + "kme": "kme-Latn-CM", + "kme-CM": "kme-Latn-CM", + "kme-Latn": "kme-Latn-CM", + "kmf": "kmf-Latn-PG", + "kmf-Latn": "kmf-Latn-PG", + "kmf-PG": "kmf-Latn-PG", + "kmg": "kmg-Latn-PG", + "kmg-Latn": "kmg-Latn-PG", + "kmg-PG": "kmg-Latn-PG", + "kmh": "kmh-Latn-PG", + "kmh-Latn": "kmh-Latn-PG", + "kmh-PG": "kmh-Latn-PG", + "kmi": "kmi-Latn-NG", + "kmi-Latn": "kmi-Latn-NG", + "kmi-NG": "kmi-Latn-NG", + "kmj": "kmj-Deva-IN", + "kmj-Deva": "kmj-Deva-IN", + "kmj-IN": "kmj-Deva-IN", + "kmk": "kmk-Latn-PH", + "kmk-Latn": "kmk-Latn-PH", + "kmk-PH": "kmk-Latn-PH", + "kml": "kml-Latn-PH", + "kml-Latn": "kml-Latn-PH", + "kml-PH": "kml-Latn-PH", + "kmm": "kmm-Latn-IN", + "kmm-IN": "kmm-Latn-IN", + "kmm-Latn": "kmm-Latn-IN", + "kmn": "kmn-Latn-PG", + "kmn-Latn": "kmn-Latn-PG", + "kmn-PG": "kmn-Latn-PG", + "kmo": "kmo-Latn-PG", + "kmo-Latn": "kmo-Latn-PG", + "kmo-PG": "kmo-Latn-PG", + "kmp": "kmp-Latn-CM", + "kmp-CM": "kmp-Latn-CM", + "kmp-Latn": "kmp-Latn-CM", + "kmq": "kmq-Latn-ET", + "kmq-ET": "kmq-Latn-ET", + "kmq-Latn": "kmq-Latn-ET", + "kms": "kms-Latn-PG", + "kms-Latn": "kms-Latn-PG", + "kms-PG": "kms-Latn-PG", + "kmt": "kmt-Latn-ID", + "kmt-ID": "kmt-Latn-ID", + "kmt-Latn": "kmt-Latn-ID", + "kmu": "kmu-Latn-PG", + "kmu-Latn": "kmu-Latn-PG", + "kmu-PG": "kmu-Latn-PG", + "kmv": "kmv-Latn-BR", + "kmv-BR": "kmv-Latn-BR", + "kmv-Latn": "kmv-Latn-BR", + "kmw": "kmw-Latn-CD", + "kmw-CD": "kmw-Latn-CD", + "kmw-Latn": "kmw-Latn-CD", + "kmx": "kmx-Latn-PG", + "kmx-Latn": "kmx-Latn-PG", + "kmx-PG": "kmx-Latn-PG", + "kmy": "kmy-Latn-NG", + "kmy-Latn": "kmy-Latn-NG", + "kmy-NG": "kmy-Latn-NG", + "kmz": "kmz-Arab-IR", + "kmz-Arab": "kmz-Arab-IR", + "kmz-IR": "kmz-Arab-IR", + "kn": "kn-Knda-IN", + "kn-IN": "kn-Knda-IN", + "kn-Knda": "kn-Knda-IN", + "kn-XX": "kn-Knda-XX", + "kna": "kna-Latn-NG", + "kna-Latn": "kna-Latn-NG", + "kna-NG": "kna-Latn-NG", + "knb": "knb-Latn-PH", + "knb-Latn": "knb-Latn-PH", + "knb-PH": "knb-Latn-PH", + "knd": "knd-Latn-ID", + "knd-ID": "knd-Latn-ID", + "knd-Latn": "knd-Latn-ID", + "kne": "kne-Latn-PH", + "kne-Latn": "kne-Latn-PH", + "kne-PH": "kne-Latn-PH", + "knf": "knf-Latn-GW", + "knf-GW": "knf-Latn-GW", + "knf-Latn": "knf-Latn-GW", + "kni": "kni-Latn-NG", + "kni-Latn": "kni-Latn-NG", + "kni-NG": "kni-Latn-NG", + "knj": "knj-Latn-GT", + "knj-GT": "knj-Latn-GT", + "knj-Latn": "knj-Latn-GT", + "knk": "knk-Latn-SL", + "knk-Latn": "knk-Latn-SL", + "knk-SL": "knk-Latn-SL", + "knl": "knl-Latn-ID", + "knl-ID": "knl-Latn-ID", + "knl-Latn": "knl-Latn-ID", + "knm": "knm-Latn-BR", + "knm-BR": "knm-Latn-BR", + "knm-Latn": "knm-Latn-BR", + "knn": "knn-Deva-IN", + "knn-Deva": "knn-Deva-IN", + "knn-IN": "knn-Deva-IN", + "kno": "kno-Latn-SL", + "kno-Latn": "kno-Latn-SL", + "kno-SL": "kno-Latn-SL", + "knp": "knp-Latn-CM", + "knp-CM": "knp-Latn-CM", + "knp-Latn": "knp-Latn-CM", + "knq": "knq-Latn-MY", + "knq-Latn": "knq-Latn-MY", + "knq-MY": "knq-Latn-MY", + "knr": "knr-Latn-PG", + "knr-Latn": "knr-Latn-PG", + "knr-PG": "knr-Latn-PG", + "kns": "kns-Latn-MY", + "kns-Latn": "kns-Latn-MY", + "kns-MY": "kns-Latn-MY", + "knt": "knt-Latn-BR", + "knt-BR": "knt-Latn-BR", + "knt-Latn": "knt-Latn-BR", + "knu": "knu-Latn-GN", + "knu-GN": "knu-Latn-GN", + "knu-Latn": "knu-Latn-GN", + "knv": "knv-Latn-PG", + "knv-Latn": "knv-Latn-PG", + "knv-PG": "knv-Latn-PG", + "knw": "knw-Latn-NA", + "knw-Latn": "knw-Latn-NA", + "knw-NA": "knw-Latn-NA", + "knx": "knx-Latn-ID", + "knx-ID": "knx-Latn-ID", + "knx-Latn": "knx-Latn-ID", + "kny": "kny-Latn-CD", + "kny-CD": "kny-Latn-CD", + "kny-Latn": "kny-Latn-CD", + "knz": "knz-Latn-BF", + "knz-BF": "knz-Latn-BF", + "knz-Latn": "knz-Latn-BF", + "ko": "ko-Kore-KR", + "ko-Hang": "ko-Hang-KR", + "ko-Jamo": "ko-Jamo-KR", + "ko-KP": "ko-Kore-KP", + "ko-KR": "ko-Kore-KR", + "ko-Kore": "ko-Kore-KR", + "ko-US": "ko-Kore-US", + "koa": "koa-Latn-PG", + "koa-Latn": "koa-Latn-PG", + "koa-PG": "koa-Latn-PG", + "koc": "koc-Latn-NG", + "koc-Latn": "koc-Latn-NG", + "koc-NG": "koc-Latn-NG", + "kod": "kod-Latn-ID", + "kod-ID": "kod-Latn-ID", + "kod-Latn": "kod-Latn-ID", + "koe": "koe-Latn-SS", + "koe-Latn": "koe-Latn-SS", + "koe-SS": "koe-Latn-SS", + "kof": "kof-Latn-NG", + "kof-Latn": "kof-Latn-NG", + "kof-NG": "kof-Latn-NG", + "kog": "kog-Latn-CO", + "kog-CO": "kog-Latn-CO", + "kog-Latn": "kog-Latn-CO", + "koh": "koh-Latn-CG", + "koh-CG": "koh-Latn-CG", + "koh-Latn": "koh-Latn-CG", + "koi": "koi-Cyrl-RU", + "koi-Cyrl": "koi-Cyrl-RU", + "koi-RU": "koi-Cyrl-RU", + "kok": "kok-Deva-IN", + "kok-Deva": "kok-Deva-IN", + "kok-IN": "kok-Deva-IN", + "kol": "kol-Latn-PG", + "kol-Latn": "kol-Latn-PG", + "kol-PG": "kol-Latn-PG", + "koo": "koo-Latn-UG", + "koo-Latn": "koo-Latn-UG", + "koo-UG": "koo-Latn-UG", + "kop": "kop-Latn-PG", + "kop-Latn": "kop-Latn-PG", + "kop-PG": "kop-Latn-PG", + "koq": "koq-Latn-GA", + "koq-GA": "koq-Latn-GA", + "koq-Latn": "koq-Latn-GA", + "kos": "kos-Latn-FM", + "kos-FM": "kos-Latn-FM", + "kos-Latn": "kos-Latn-FM", + "kot": "kot-Latn-CM", + "kot-CM": "kot-Latn-CM", + "kot-Latn": "kot-Latn-CM", + "kou": "kou-Latn-TD", + "kou-Latn": "kou-Latn-TD", + "kou-TD": "kou-Latn-TD", + "kov": "kov-Latn-NG", + "kov-Latn": "kov-Latn-NG", + "kov-NG": "kov-Latn-NG", + "kow": "kow-Latn-NG", + "kow-Latn": "kow-Latn-NG", + "kow-NG": "kow-Latn-NG", + "koy": "koy-Latn-US", + "koy-Latn": "koy-Latn-US", + "koy-US": "koy-Latn-US", + "koz": "koz-Latn-PG", + "koz-Latn": "koz-Latn-PG", + "koz-PG": "koz-Latn-PG", + "kpa": "kpa-Latn-NG", + "kpa-Latn": "kpa-Latn-NG", + "kpa-NG": "kpa-Latn-NG", + "kpc": "kpc-Latn-CO", + "kpc-CO": "kpc-Latn-CO", + "kpc-Latn": "kpc-Latn-CO", + "kpd": "kpd-Latn-ID", + "kpd-ID": "kpd-Latn-ID", + "kpd-Latn": "kpd-Latn-ID", + "kpe": "kpe-Latn-LR", + "kpe-LR": "kpe-Latn-LR", + "kpe-Latn": "kpe-Latn-LR", + "kpf": "kpf-Latn-PG", + "kpf-Latn": "kpf-Latn-PG", + "kpf-PG": "kpf-Latn-PG", + "kpg": "kpg-Latn-FM", + "kpg-FM": "kpg-Latn-FM", + "kpg-Latn": "kpg-Latn-FM", + "kph": "kph-Latn-GH", + "kph-GH": "kph-Latn-GH", + "kph-Latn": "kph-Latn-GH", + "kpi": "kpi-Latn-ID", + "kpi-ID": "kpi-Latn-ID", + "kpi-Latn": "kpi-Latn-ID", + "kpj": "kpj-Latn-BR", + "kpj-BR": "kpj-Latn-BR", + "kpj-Latn": "kpj-Latn-BR", + "kpk": "kpk-Latn-NG", + "kpk-Latn": "kpk-Latn-NG", + "kpk-NG": "kpk-Latn-NG", + "kpl": "kpl-Latn-CD", + "kpl-CD": "kpl-Latn-CD", + "kpl-Latn": "kpl-Latn-CD", + "kpm": "kpm-Latn-VN", + "kpm-Latn": "kpm-Latn-VN", + "kpm-VN": "kpm-Latn-VN", + "kpn": "kpn-Latn-BR", + "kpn-BR": "kpn-Latn-BR", + "kpn-Latn": "kpn-Latn-BR", + "kpo": "kpo-Latn-TG", + "kpo-Latn": "kpo-Latn-TG", + "kpo-TG": "kpo-Latn-TG", + "kpq": "kpq-Latn-ID", + "kpq-ID": "kpq-Latn-ID", + "kpq-Latn": "kpq-Latn-ID", + "kpr": "kpr-Latn-PG", + "kpr-Latn": "kpr-Latn-PG", + "kpr-PG": "kpr-Latn-PG", + "kps": "kps-Latn-ID", + "kps-ID": "kps-Latn-ID", + "kps-Latn": "kps-Latn-ID", + "kpt": "kpt-Cyrl-RU", + "kpt-Cyrl": "kpt-Cyrl-RU", + "kpt-RU": "kpt-Cyrl-RU", + "kpu": "kpu-Latn-ID", + "kpu-ID": "kpu-Latn-ID", + "kpu-Latn": "kpu-Latn-ID", + "kpw": "kpw-Latn-PG", + "kpw-Latn": "kpw-Latn-PG", + "kpw-PG": "kpw-Latn-PG", + "kpx": "kpx-Latn-PG", + "kpx-Latn": "kpx-Latn-PG", + "kpx-PG": "kpx-Latn-PG", + "kpy": "kpy-Cyrl-RU", + "kpy-Cyrl": "kpy-Cyrl-RU", + "kpy-RU": "kpy-Cyrl-RU", + "kpz": "kpz-Latn-UG", + "kpz-Latn": "kpz-Latn-UG", + "kpz-UG": "kpz-Latn-UG", + "kqa": "kqa-Latn-PG", + "kqa-Latn": "kqa-Latn-PG", + "kqa-PG": "kqa-Latn-PG", + "kqb": "kqb-Latn-PG", + "kqb-Latn": "kqb-Latn-PG", + "kqb-PG": "kqb-Latn-PG", + "kqc": "kqc-Latn-PG", + "kqc-Latn": "kqc-Latn-PG", + "kqc-PG": "kqc-Latn-PG", + "kqd": "kqd-Syrc-IQ", + "kqd-IQ": "kqd-Syrc-IQ", + "kqd-Syrc": "kqd-Syrc-IQ", + "kqe": "kqe-Latn-PH", + "kqe-Latn": "kqe-Latn-PH", + "kqe-PH": "kqe-Latn-PH", + "kqf": "kqf-Latn-PG", + "kqf-Latn": "kqf-Latn-PG", + "kqf-PG": "kqf-Latn-PG", + "kqg": "kqg-Latn-BF", + "kqg-BF": "kqg-Latn-BF", + "kqg-Latn": "kqg-Latn-BF", + "kqh": "kqh-Latn-TZ", + "kqh-Latn": "kqh-Latn-TZ", + "kqh-TZ": "kqh-Latn-TZ", + "kqi": "kqi-Latn-PG", + "kqi-Latn": "kqi-Latn-PG", + "kqi-PG": "kqi-Latn-PG", + "kqj": "kqj-Latn-PG", + "kqj-Latn": "kqj-Latn-PG", + "kqj-PG": "kqj-Latn-PG", + "kqk": "kqk-Latn-BJ", + "kqk-BJ": "kqk-Latn-BJ", + "kqk-Latn": "kqk-Latn-BJ", + "kql": "kql-Latn-PG", + "kql-Latn": "kql-Latn-PG", + "kql-PG": "kql-Latn-PG", + "kqm": "kqm-Latn-CI", + "kqm-CI": "kqm-Latn-CI", + "kqm-Latn": "kqm-Latn-CI", + "kqn": "kqn-Latn-ZM", + "kqn-Latn": "kqn-Latn-ZM", + "kqn-ZM": "kqn-Latn-ZM", + "kqo": "kqo-Latn-LR", + "kqo-LR": "kqo-Latn-LR", + "kqo-Latn": "kqo-Latn-LR", + "kqp": "kqp-Latn-TD", + "kqp-Latn": "kqp-Latn-TD", + "kqp-TD": "kqp-Latn-TD", + "kqq": "kqq-Latn-BR", + "kqq-BR": "kqq-Latn-BR", + "kqq-Latn": "kqq-Latn-BR", + "kqr": "kqr-Latn-MY", + "kqr-Latn": "kqr-Latn-MY", + "kqr-MY": "kqr-Latn-MY", + "kqs": "kqs-Latn-GN", + "kqs-GN": "kqs-Latn-GN", + "kqs-Latn": "kqs-Latn-GN", + "kqt": "kqt-Latn-MY", + "kqt-Latn": "kqt-Latn-MY", + "kqt-MY": "kqt-Latn-MY", + "kqu": "kqu-Latn-ZA", + "kqu-Latn": "kqu-Latn-ZA", + "kqu-ZA": "kqu-Latn-ZA", + "kqv": "kqv-Latn-ID", + "kqv-ID": "kqv-Latn-ID", + "kqv-Latn": "kqv-Latn-ID", + "kqw": "kqw-Latn-PG", + "kqw-Latn": "kqw-Latn-PG", + "kqw-PG": "kqw-Latn-PG", + "kqx": "kqx-Latn-CM", + "kqx-CM": "kqx-Latn-CM", + "kqx-Latn": "kqx-Latn-CM", + "kqy": "kqy-Ethi-ET", + "kqy-ET": "kqy-Ethi-ET", + "kqy-Ethi": "kqy-Ethi-ET", + "kqz": "kqz-Latn-ZA", + "kqz-Latn": "kqz-Latn-ZA", + "kqz-ZA": "kqz-Latn-ZA", + "kr": "kr-Latn-NG", + "kr-Latn": "kr-Latn-NG", + "kr-NG": "kr-Latn-NG", + "kra": "kra-Deva-NP", + "kra-Deva": "kra-Deva-NP", + "kra-NP": "kra-Deva-NP", + "krb": "krb-Latn-US", + "krb-Latn": "krb-Latn-US", + "krb-US": "krb-Latn-US", + "krc": "krc-Cyrl-RU", + "krc-Cyrl": "krc-Cyrl-RU", + "krc-RU": "krc-Cyrl-RU", + "krd": "krd-Latn-TL", + "krd-Latn": "krd-Latn-TL", + "krd-TL": "krd-Latn-TL", + "kre": "kre-Latn-BR", + "kre-BR": "kre-Latn-BR", + "kre-Latn": "kre-Latn-BR", + "krf": "krf-Latn-VU", + "krf-Latn": "krf-Latn-VU", + "krf-VU": "krf-Latn-VU", + "krh": "krh-Latn-NG", + "krh-Latn": "krh-Latn-NG", + "krh-NG": "krh-Latn-NG", + "kri": "kri-Latn-SL", + "kri-Latn": "kri-Latn-SL", + "kri-SL": "kri-Latn-SL", + "krj": "krj-Latn-PH", + "krj-Latn": "krj-Latn-PH", + "krj-PH": "krj-Latn-PH", + "krk": "krk-Cyrl-RU", + "krk-Cyrl": "krk-Cyrl-RU", + "krk-RU": "krk-Cyrl-RU", + "krl": "krl-Latn-RU", + "krl-Latn": "krl-Latn-RU", + "krl-Latn-RU": "krl-Latn-RU", + "krl-RU": "krl-Latn-RU", + "krn": "krn-Latn-LR", + "krn-LR": "krn-Latn-LR", + "krn-Latn": "krn-Latn-LR", + "krp": "krp-Latn-NG", + "krp-Latn": "krp-Latn-NG", + "krp-NG": "krp-Latn-NG", + "krr": "krr-Khmr-KH", + "krr-KH": "krr-Khmr-KH", + "krr-Khmr": "krr-Khmr-KH", + "krs": "krs-Latn-SS", + "krs-Latn": "krs-Latn-SS", + "krs-SS": "krs-Latn-SS", + "krt": "krt-Latn-NE", + "krt-Latn": "krt-Latn-NE", + "krt-NE": "krt-Latn-NE", + "kru": "kru-Deva-IN", + "kru-Deva": "kru-Deva-IN", + "kru-IN": "kru-Deva-IN", + "krv": "krv-Khmr-KH", + "krv-KH": "krv-Khmr-KH", + "krv-Khmr": "krv-Khmr-KH", + "krw": "krw-Latn-LR", + "krw-LR": "krw-Latn-LR", + "krw-Latn": "krw-Latn-LR", + "krx": "krx-Latn-SN", + "krx-Latn": "krx-Latn-SN", + "krx-SN": "krx-Latn-SN", + "kry": "kry-Latn-AZ", + "kry-AZ": "kry-Latn-AZ", + "kry-Latn": "kry-Latn-AZ", + "krz": "krz-Latn-ID", + "krz-ID": "krz-Latn-ID", + "krz-Latn": "krz-Latn-ID", + "ks": "ks-Arab-IN", + "ks-Arab": "ks-Arab-IN", + "ks-IN": "ks-Arab-IN", + "ksb": "ksb-Latn-TZ", + "ksb-Latn": "ksb-Latn-TZ", + "ksb-TZ": "ksb-Latn-TZ", + "ksc": "ksc-Latn-PH", + "ksc-Latn": "ksc-Latn-PH", + "ksc-PH": "ksc-Latn-PH", + "ksd": "ksd-Latn-PG", + "ksd-Latn": "ksd-Latn-PG", + "ksd-PG": "ksd-Latn-PG", + "kse": "kse-Latn-PG", + "kse-Latn": "kse-Latn-PG", + "kse-PG": "kse-Latn-PG", + "ksf": "ksf-Latn-CM", + "ksf-CM": "ksf-Latn-CM", + "ksf-Latn": "ksf-Latn-CM", + "ksg": "ksg-Latn-SB", + "ksg-Latn": "ksg-Latn-SB", + "ksg-SB": "ksg-Latn-SB", + "ksh": "ksh-Latn-DE", + "ksh-DE": "ksh-Latn-DE", + "ksh-Latn": "ksh-Latn-DE", + "ksi": "ksi-Latn-PG", + "ksi-Latn": "ksi-Latn-PG", + "ksi-PG": "ksi-Latn-PG", + "ksj": "ksj-Latn-PG", + "ksj-Latn": "ksj-Latn-PG", + "ksj-PG": "ksj-Latn-PG", + "ksk": "ksk-Latn-US", + "ksk-Latn": "ksk-Latn-US", + "ksk-US": "ksk-Latn-US", + "ksl": "ksl-Latn-PG", + "ksl-Latn": "ksl-Latn-PG", + "ksl-PG": "ksl-Latn-PG", + "ksm": "ksm-Latn-NG", + "ksm-Latn": "ksm-Latn-NG", + "ksm-NG": "ksm-Latn-NG", + "ksn": "ksn-Latn-PH", + "ksn-Latn": "ksn-Latn-PH", + "ksn-PH": "ksn-Latn-PH", + "kso": "kso-Latn-NG", + "kso-Latn": "kso-Latn-NG", + "kso-NG": "kso-Latn-NG", + "ksp": "ksp-Latn-CF", + "ksp-CF": "ksp-Latn-CF", + "ksp-Latn": "ksp-Latn-CF", + "ksq": "ksq-Latn-NG", + "ksq-Latn": "ksq-Latn-NG", + "ksq-NG": "ksq-Latn-NG", + "ksr": "ksr-Latn-PG", + "ksr-Latn": "ksr-Latn-PG", + "ksr-PG": "ksr-Latn-PG", + "kss": "kss-Latn-LR", + "kss-LR": "kss-Latn-LR", + "kss-Latn": "kss-Latn-LR", + "kst": "kst-Latn-BF", + "kst-BF": "kst-Latn-BF", + "kst-Latn": "kst-Latn-BF", + "ksu": "ksu-Mymr-IN", + "ksu-IN": "ksu-Mymr-IN", + "ksu-Mymr": "ksu-Mymr-IN", + "ksv": "ksv-Latn-CD", + "ksv-CD": "ksv-Latn-CD", + "ksv-Latn": "ksv-Latn-CD", + "ksw": "ksw-Mymr-MM", + "ksw-MM": "ksw-Mymr-MM", + "ksw-Mymr": "ksw-Mymr-MM", + "ksx": "ksx-Latn-ID", + "ksx-ID": "ksx-Latn-ID", + "ksx-Latn": "ksx-Latn-ID", + "ksz": "ksz-Deva-IN", + "ksz-Deva": "ksz-Deva-IN", + "ksz-IN": "ksz-Deva-IN", + "kta": "kta-Latn-VN", + "kta-Latn": "kta-Latn-VN", + "kta-VN": "kta-Latn-VN", + "ktb": "ktb-Ethi-ET", + "ktb-ET": "ktb-Ethi-ET", + "ktb-Ethi": "ktb-Ethi-ET", + "ktc": "ktc-Latn-NG", + "ktc-Latn": "ktc-Latn-NG", + "ktc-NG": "ktc-Latn-NG", + "ktd": "ktd-Latn-AU", + "ktd-AU": "ktd-Latn-AU", + "ktd-Latn": "ktd-Latn-AU", + "kte": "kte-Deva-NP", + "kte-Deva": "kte-Deva-NP", + "kte-NP": "kte-Deva-NP", + "ktf": "ktf-Latn-CD", + "ktf-CD": "ktf-Latn-CD", + "ktf-Latn": "ktf-Latn-CD", + "ktg": "ktg-Latn-AU", + "ktg-AU": "ktg-Latn-AU", + "ktg-Latn": "ktg-Latn-AU", + "kth": "kth-Latn-TD", + "kth-Latn": "kth-Latn-TD", + "kth-TD": "kth-Latn-TD", + "kti": "kti-Latn-ID", + "kti-ID": "kti-Latn-ID", + "kti-Latn": "kti-Latn-ID", + "ktj": "ktj-Latn-CI", + "ktj-CI": "ktj-Latn-CI", + "ktj-Latn": "ktj-Latn-CI", + "ktk": "ktk-Latn-PG", + "ktk-Latn": "ktk-Latn-PG", + "ktk-PG": "ktk-Latn-PG", + "ktl": "ktl-Arab-IR", + "ktl-Arab": "ktl-Arab-IR", + "ktl-IR": "ktl-Arab-IR", + "ktm": "ktm-Latn-PG", + "ktm-Latn": "ktm-Latn-PG", + "ktm-PG": "ktm-Latn-PG", + "ktn": "ktn-Latn-BR", + "ktn-BR": "ktn-Latn-BR", + "ktn-Latn": "ktn-Latn-BR", + "kto": "kto-Latn-PG", + "kto-Latn": "kto-Latn-PG", + "kto-PG": "kto-Latn-PG", + "ktp": "ktp-Plrd-CN", + "ktp-CN": "ktp-Plrd-CN", + "ktp-Plrd": "ktp-Plrd-CN", + "ktq": "ktq-Latn-PH", + "ktq-Latn": "ktq-Latn-PH", + "ktq-PH": "ktq-Latn-PH", + "kts": "kts-Latn-ID", + "kts-ID": "kts-Latn-ID", + "kts-Latn": "kts-Latn-ID", + "ktt": "ktt-Latn-ID", + "ktt-ID": "ktt-Latn-ID", + "ktt-Latn": "ktt-Latn-ID", + "ktu": "ktu-Latn-CD", + "ktu-CD": "ktu-Latn-CD", + "ktu-Latn": "ktu-Latn-CD", + "ktv": "ktv-Latn-VN", + "ktv-Latn": "ktv-Latn-VN", + "ktv-VN": "ktv-Latn-VN", + "ktw": "ktw-Latn-US", + "ktw-Latn": "ktw-Latn-US", + "ktw-US": "ktw-Latn-US", + "ktx": "ktx-Latn-BR", + "ktx-BR": "ktx-Latn-BR", + "ktx-Latn": "ktx-Latn-BR", + "kty": "kty-Latn-CD", + "kty-CD": "kty-Latn-CD", + "kty-Latn": "kty-Latn-CD", + "ktz": "ktz-Latn-NA", + "ktz-Latn": "ktz-Latn-NA", + "ktz-NA": "ktz-Latn-NA", + "ku": "ku-Latn-TR", + "ku-Arab": "ku-Arab-IQ", + "ku-IQ": "ku-Arab-IQ", + "ku-LB": "ku-Arab-LB", + "ku-Latn": "ku-Latn-TR", + "ku-Latn-AM": "ku-Latn-AM", + "ku-Latn-GE": "ku-Latn-GE", + "ku-TR": "ku-Latn-TR", + "ku-Yezi": "ku-Yezi-GE", + "kub": "kub-Latn-NG", + "kub-Latn": "kub-Latn-NG", + "kub-NG": "kub-Latn-NG", + "kuc": "kuc-Latn-ID", + "kuc-ID": "kuc-Latn-ID", + "kuc-Latn": "kuc-Latn-ID", + "kud": "kud-Latn-PG", + "kud-Latn": "kud-Latn-PG", + "kud-PG": "kud-Latn-PG", + "kue": "kue-Latn-PG", + "kue-Latn": "kue-Latn-PG", + "kue-PG": "kue-Latn-PG", + "kuf": "kuf-Laoo-LA", + "kuf-LA": "kuf-Laoo-LA", + "kuf-Laoo": "kuf-Laoo-LA", + "kug": "kug-Latn-NG", + "kug-Latn": "kug-Latn-NG", + "kug-NG": "kug-Latn-NG", + "kuh": "kuh-Latn-NG", + "kuh-Latn": "kuh-Latn-NG", + "kuh-NG": "kuh-Latn-NG", + "kui": "kui-Latn-BR", + "kui-BR": "kui-Latn-BR", + "kui-Latn": "kui-Latn-BR", + "kuj": "kuj-Latn-TZ", + "kuj-Latn": "kuj-Latn-TZ", + "kuj-TZ": "kuj-Latn-TZ", + "kuk": "kuk-Latn-ID", + "kuk-ID": "kuk-Latn-ID", + "kuk-Latn": "kuk-Latn-ID", + "kul": "kul-Latn-NG", + "kul-Latn": "kul-Latn-NG", + "kul-NG": "kul-Latn-NG", + "kum": "kum-Cyrl-RU", + "kum-Cyrl": "kum-Cyrl-RU", + "kum-RU": "kum-Cyrl-RU", + "kun": "kun-Latn-ER", + "kun-ER": "kun-Latn-ER", + "kun-Latn": "kun-Latn-ER", + "kuo": "kuo-Latn-PG", + "kuo-Latn": "kuo-Latn-PG", + "kuo-PG": "kuo-Latn-PG", + "kup": "kup-Latn-PG", + "kup-Latn": "kup-Latn-PG", + "kup-PG": "kup-Latn-PG", + "kuq": "kuq-Latn-BR", + "kuq-BR": "kuq-Latn-BR", + "kuq-Latn": "kuq-Latn-BR", + "kus": "kus-Latn-GH", + "kus-GH": "kus-Latn-GH", + "kus-Latn": "kus-Latn-GH", + "kut": "kut-Latn-CA", + "kut-CA": "kut-Latn-CA", + "kut-Latn": "kut-Latn-CA", + "kuu": "kuu-Latn-US", + "kuu-Latn": "kuu-Latn-US", + "kuu-US": "kuu-Latn-US", + "kuv": "kuv-Latn-ID", + "kuv-ID": "kuv-Latn-ID", + "kuv-Latn": "kuv-Latn-ID", + "kuw": "kuw-Latn-CF", + "kuw-CF": "kuw-Latn-CF", + "kuw-Latn": "kuw-Latn-CF", + "kux": "kux-Latn-AU", + "kux-AU": "kux-Latn-AU", + "kux-Latn": "kux-Latn-AU", + "kuy": "kuy-Latn-AU", + "kuy-AU": "kuy-Latn-AU", + "kuy-Latn": "kuy-Latn-AU", + "kuz": "kuz-Latn-CL", + "kuz-CL": "kuz-Latn-CL", + "kuz-Latn": "kuz-Latn-CL", + "kv": "kv-Cyrl-RU", + "kv-Cyrl": "kv-Cyrl-RU", + "kv-Perm": "kv-Perm-RU", + "kv-RU": "kv-Cyrl-RU", + "kva": "kva-Cyrl-RU", + "kva-Cyrl": "kva-Cyrl-RU", + "kva-RU": "kva-Cyrl-RU", + "kvb": "kvb-Latn-ID", + "kvb-ID": "kvb-Latn-ID", + "kvb-Latn": "kvb-Latn-ID", + "kvc": "kvc-Latn-PG", + "kvc-Latn": "kvc-Latn-PG", + "kvc-PG": "kvc-Latn-PG", + "kvd": "kvd-Latn-ID", + "kvd-ID": "kvd-Latn-ID", + "kvd-Latn": "kvd-Latn-ID", + "kve": "kve-Latn-MY", + "kve-Latn": "kve-Latn-MY", + "kve-MY": "kve-Latn-MY", + "kvf": "kvf-Latn-TD", + "kvf-Latn": "kvf-Latn-TD", + "kvf-TD": "kvf-Latn-TD", + "kvg": "kvg-Latn-PG", + "kvg-Latn": "kvg-Latn-PG", + "kvg-PG": "kvg-Latn-PG", + "kvh": "kvh-Latn-ID", + "kvh-ID": "kvh-Latn-ID", + "kvh-Latn": "kvh-Latn-ID", + "kvi": "kvi-Latn-TD", + "kvi-Latn": "kvi-Latn-TD", + "kvi-TD": "kvi-Latn-TD", + "kvj": "kvj-Latn-CM", + "kvj-CM": "kvj-Latn-CM", + "kvj-Latn": "kvj-Latn-CM", + "kvl": "kvl-Latn-MM", + "kvl-Latn": "kvl-Latn-MM", + "kvl-MM": "kvl-Latn-MM", + "kvm": "kvm-Latn-CM", + "kvm-CM": "kvm-Latn-CM", + "kvm-Latn": "kvm-Latn-CM", + "kvn": "kvn-Latn-CO", + "kvn-CO": "kvn-Latn-CO", + "kvn-Latn": "kvn-Latn-CO", + "kvo": "kvo-Latn-ID", + "kvo-ID": "kvo-Latn-ID", + "kvo-Latn": "kvo-Latn-ID", + "kvp": "kvp-Latn-ID", + "kvp-ID": "kvp-Latn-ID", + "kvp-Latn": "kvp-Latn-ID", + "kvq": "kvq-Mymr-MM", + "kvq-MM": "kvq-Mymr-MM", + "kvq-Mymr": "kvq-Mymr-MM", + "kvr": "kvr-Latn-ID", + "kvr-ID": "kvr-Latn-ID", + "kvr-Latn": "kvr-Latn-ID", + "kvt": "kvt-Mymr-MM", + "kvt-MM": "kvt-Mymr-MM", + "kvt-Mymr": "kvt-Mymr-MM", + "kvv": "kvv-Latn-ID", + "kvv-ID": "kvv-Latn-ID", + "kvv-Latn": "kvv-Latn-ID", + "kvw": "kvw-Latn-ID", + "kvw-ID": "kvw-Latn-ID", + "kvw-Latn": "kvw-Latn-ID", + "kvx": "kvx-Arab-PK", + "kvx-Arab": "kvx-Arab-PK", + "kvx-PK": "kvx-Arab-PK", + "kvy": "kvy-Kali-MM", + "kvy-Kali": "kvy-Kali-MM", + "kvy-MM": "kvy-Kali-MM", + "kvz": "kvz-Latn-ID", + "kvz-ID": "kvz-Latn-ID", + "kvz-Latn": "kvz-Latn-ID", + "kw": "kw-Latn-GB", + "kw-GB": "kw-Latn-GB", + "kw-Latn": "kw-Latn-GB", + "kwa": "kwa-Latn-BR", + "kwa-BR": "kwa-Latn-BR", + "kwa-Latn": "kwa-Latn-BR", + "kwb": "kwb-Latn-NG", + "kwb-Latn": "kwb-Latn-NG", + "kwb-NG": "kwb-Latn-NG", + "kwc": "kwc-Latn-CG", + "kwc-CG": "kwc-Latn-CG", + "kwc-Latn": "kwc-Latn-CG", + "kwd": "kwd-Latn-SB", + "kwd-Latn": "kwd-Latn-SB", + "kwd-SB": "kwd-Latn-SB", + "kwe": "kwe-Latn-ID", + "kwe-ID": "kwe-Latn-ID", + "kwe-Latn": "kwe-Latn-ID", + "kwf": "kwf-Latn-SB", + "kwf-Latn": "kwf-Latn-SB", + "kwf-SB": "kwf-Latn-SB", + "kwg": "kwg-Latn-TD", + "kwg-Latn": "kwg-Latn-TD", + "kwg-TD": "kwg-Latn-TD", + "kwh": "kwh-Latn-ID", + "kwh-ID": "kwh-Latn-ID", + "kwh-Latn": "kwh-Latn-ID", + "kwi": "kwi-Latn-CO", + "kwi-CO": "kwi-Latn-CO", + "kwi-Latn": "kwi-Latn-CO", + "kwj": "kwj-Latn-PG", + "kwj-Latn": "kwj-Latn-PG", + "kwj-PG": "kwj-Latn-PG", + "kwk": "kwk-Latn-CA", + "kwk-CA": "kwk-Latn-CA", + "kwk-Latn": "kwk-Latn-CA", + "kwl": "kwl-Latn-NG", + "kwl-Latn": "kwl-Latn-NG", + "kwl-NG": "kwl-Latn-NG", + "kwm": "kwm-Latn-NA", + "kwm-Latn": "kwm-Latn-NA", + "kwm-NA": "kwm-Latn-NA", + "kwn": "kwn-Latn-NA", + "kwn-Latn": "kwn-Latn-NA", + "kwn-NA": "kwn-Latn-NA", + "kwo": "kwo-Latn-PG", + "kwo-Latn": "kwo-Latn-PG", + "kwo-PG": "kwo-Latn-PG", + "kwp": "kwp-Latn-CI", + "kwp-CI": "kwp-Latn-CI", + "kwp-Latn": "kwp-Latn-CI", + "kwr": "kwr-Latn-ID", + "kwr-ID": "kwr-Latn-ID", + "kwr-Latn": "kwr-Latn-ID", + "kws": "kws-Latn-CD", + "kws-CD": "kws-Latn-CD", + "kws-Latn": "kws-Latn-CD", + "kwt": "kwt-Latn-ID", + "kwt-ID": "kwt-Latn-ID", + "kwt-Latn": "kwt-Latn-ID", + "kwu": "kwu-Latn-CM", + "kwu-CM": "kwu-Latn-CM", + "kwu-Latn": "kwu-Latn-CM", + "kwv": "kwv-Latn-TD", + "kwv-Latn": "kwv-Latn-TD", + "kwv-TD": "kwv-Latn-TD", + "kww": "kww-Latn-SR", + "kww-Latn": "kww-Latn-SR", + "kww-SR": "kww-Latn-SR", + "kwy": "kwy-Latn-AO", + "kwy-AO": "kwy-Latn-AO", + "kwy-Latn": "kwy-Latn-AO", + "kwz": "kwz-Latn-AO", + "kwz-AO": "kwz-Latn-AO", + "kwz-Latn": "kwz-Latn-AO", + "kxa": "kxa-Latn-PG", + "kxa-Latn": "kxa-Latn-PG", + "kxa-PG": "kxa-Latn-PG", + "kxb": "kxb-Latn-CI", + "kxb-CI": "kxb-Latn-CI", + "kxb-Latn": "kxb-Latn-CI", + "kxc": "kxc-Latn-ET", + "kxc-ET": "kxc-Latn-ET", + "kxc-Latn": "kxc-Latn-ET", + "kxd": "kxd-Latn-BN", + "kxd-BN": "kxd-Latn-BN", + "kxd-Latn": "kxd-Latn-BN", + "kxf": "kxf-Mymr-MM", + "kxf-MM": "kxf-Mymr-MM", + "kxf-Mymr": "kxf-Mymr-MM", + "kxi": "kxi-Latn-MY", + "kxi-Latn": "kxi-Latn-MY", + "kxi-MY": "kxi-Latn-MY", + "kxj": "kxj-Latn-TD", + "kxj-Latn": "kxj-Latn-TD", + "kxj-TD": "kxj-Latn-TD", + "kxk": "kxk-Mymr-MM", + "kxk-MM": "kxk-Mymr-MM", + "kxk-Mymr": "kxk-Mymr-MM", + "kxm": "kxm-Thai-TH", + "kxm-TH": "kxm-Thai-TH", + "kxm-Thai": "kxm-Thai-TH", + "kxn": "kxn-Latn-MY", + "kxn-Latn": "kxn-Latn-MY", + "kxn-MY": "kxn-Latn-MY", + "kxo": "kxo-Latn-BR", + "kxo-BR": "kxo-Latn-BR", + "kxo-Latn": "kxo-Latn-BR", + "kxp": "kxp-Arab-PK", + "kxp-Arab": "kxp-Arab-PK", + "kxp-PK": "kxp-Arab-PK", + "kxq": "kxq-Latn-ID", + "kxq-ID": "kxq-Latn-ID", + "kxq-Latn": "kxq-Latn-ID", + "kxr": "kxr-Latn-PG", + "kxr-Latn": "kxr-Latn-PG", + "kxr-PG": "kxr-Latn-PG", + "kxt": "kxt-Latn-PG", + "kxt-Latn": "kxt-Latn-PG", + "kxt-PG": "kxt-Latn-PG", + "kxv": "kxv-Latn-IN", + "kxv-IN": "kxv-Latn-IN", + "kxv-Latn": "kxv-Latn-IN", + "kxw": "kxw-Latn-PG", + "kxw-Latn": "kxw-Latn-PG", + "kxw-PG": "kxw-Latn-PG", + "kxx": "kxx-Latn-CG", + "kxx-CG": "kxx-Latn-CG", + "kxx-Latn": "kxx-Latn-CG", + "kxy": "kxy-Latn-VN", + "kxy-Latn": "kxy-Latn-VN", + "kxy-VN": "kxy-Latn-VN", + "kxz": "kxz-Latn-PG", + "kxz-Latn": "kxz-Latn-PG", + "kxz-PG": "kxz-Latn-PG", + "ky": "ky-Cyrl-KG", + "ky-Arab": "ky-Arab-CN", + "ky-CN": "ky-Arab-CN", + "ky-Cyrl": "ky-Cyrl-KG", + "ky-Cyrl-KG": "ky-Cyrl-KG", + "ky-KG": "ky-Cyrl-KG", + "ky-Latn": "ky-Latn-TR", + "ky-TR": "ky-Latn-TR", + "kya": "kya-Latn-TZ", + "kya-Latn": "kya-Latn-TZ", + "kya-TZ": "kya-Latn-TZ", + "kyb": "kyb-Latn-PH", + "kyb-Latn": "kyb-Latn-PH", + "kyb-PH": "kyb-Latn-PH", + "kyc": "kyc-Latn-PG", + "kyc-Latn": "kyc-Latn-PG", + "kyc-PG": "kyc-Latn-PG", + "kyd": "kyd-Latn-ID", + "kyd-ID": "kyd-Latn-ID", + "kyd-Latn": "kyd-Latn-ID", + "kye": "kye-Latn-GH", + "kye-GH": "kye-Latn-GH", + "kye-Latn": "kye-Latn-GH", + "kyf": "kyf-Latn-CI", + "kyf-CI": "kyf-Latn-CI", + "kyf-Latn": "kyf-Latn-CI", + "kyg": "kyg-Latn-PG", + "kyg-Latn": "kyg-Latn-PG", + "kyg-PG": "kyg-Latn-PG", + "kyh": "kyh-Latn-US", + "kyh-Latn": "kyh-Latn-US", + "kyh-US": "kyh-Latn-US", + "kyi": "kyi-Latn-MY", + "kyi-Latn": "kyi-Latn-MY", + "kyi-MY": "kyi-Latn-MY", + "kyj": "kyj-Latn-PH", + "kyj-Latn": "kyj-Latn-PH", + "kyj-PH": "kyj-Latn-PH", + "kyk": "kyk-Latn-PH", + "kyk-Latn": "kyk-Latn-PH", + "kyk-PH": "kyk-Latn-PH", + "kyl": "kyl-Latn-US", + "kyl-Latn": "kyl-Latn-US", + "kyl-US": "kyl-Latn-US", + "kym": "kym-Latn-CF", + "kym-CF": "kym-Latn-CF", + "kym-Latn": "kym-Latn-CF", + "kyn": "kyn-Latn-PH", + "kyn-Latn": "kyn-Latn-PH", + "kyn-PH": "kyn-Latn-PH", + "kyo": "kyo-Latn-ID", + "kyo-ID": "kyo-Latn-ID", + "kyo-Latn": "kyo-Latn-ID", + "kyq": "kyq-Latn-TD", + "kyq-Latn": "kyq-Latn-TD", + "kyq-TD": "kyq-Latn-TD", + "kyr": "kyr-Latn-BR", + "kyr-BR": "kyr-Latn-BR", + "kyr-Latn": "kyr-Latn-BR", + "kys": "kys-Latn-MY", + "kys-Latn": "kys-Latn-MY", + "kys-MY": "kys-Latn-MY", + "kyt": "kyt-Latn-ID", + "kyt-ID": "kyt-Latn-ID", + "kyt-Latn": "kyt-Latn-ID", + "kyu": "kyu-Kali-MM", + "kyu-Kali": "kyu-Kali-MM", + "kyu-MM": "kyu-Kali-MM", + "kyv": "kyv-Deva-NP", + "kyv-Deva": "kyv-Deva-NP", + "kyv-NP": "kyv-Deva-NP", + "kyw": "kyw-Deva-IN", + "kyw-Deva": "kyw-Deva-IN", + "kyw-IN": "kyw-Deva-IN", + "kyx": "kyx-Latn-PG", + "kyx-Latn": "kyx-Latn-PG", + "kyx-PG": "kyx-Latn-PG", + "kyy": "kyy-Latn-PG", + "kyy-Latn": "kyy-Latn-PG", + "kyy-PG": "kyy-Latn-PG", + "kyz": "kyz-Latn-BR", + "kyz-BR": "kyz-Latn-BR", + "kyz-Latn": "kyz-Latn-BR", + "kza": "kza-Latn-BF", + "kza-BF": "kza-Latn-BF", + "kza-Latn": "kza-Latn-BF", + "kzb": "kzb-Latn-ID", + "kzb-ID": "kzb-Latn-ID", + "kzb-Latn": "kzb-Latn-ID", + "kzc": "kzc-Latn-CI", + "kzc-CI": "kzc-Latn-CI", + "kzc-Latn": "kzc-Latn-CI", + "kzd": "kzd-Latn-ID", + "kzd-ID": "kzd-Latn-ID", + "kzd-Latn": "kzd-Latn-ID", + "kze": "kze-Latn-PG", + "kze-Latn": "kze-Latn-PG", + "kze-PG": "kze-Latn-PG", + "kzf": "kzf-Latn-ID", + "kzf-ID": "kzf-Latn-ID", + "kzf-Latn": "kzf-Latn-ID", + "kzi": "kzi-Latn-MY", + "kzi-Latn": "kzi-Latn-MY", + "kzi-MY": "kzi-Latn-MY", + "kzk": "kzk-Latn-SB", + "kzk-Latn": "kzk-Latn-SB", + "kzk-SB": "kzk-Latn-SB", + "kzl": "kzl-Latn-ID", + "kzl-ID": "kzl-Latn-ID", + "kzl-Latn": "kzl-Latn-ID", + "kzm": "kzm-Latn-ID", + "kzm-ID": "kzm-Latn-ID", + "kzm-Latn": "kzm-Latn-ID", + "kzn": "kzn-Latn-MW", + "kzn-Latn": "kzn-Latn-MW", + "kzn-MW": "kzn-Latn-MW", + "kzo": "kzo-Latn-GA", + "kzo-GA": "kzo-Latn-GA", + "kzo-Latn": "kzo-Latn-GA", + "kzp": "kzp-Latn-ID", + "kzp-ID": "kzp-Latn-ID", + "kzp-Latn": "kzp-Latn-ID", + "kzr": "kzr-Latn-CM", + "kzr-CM": "kzr-Latn-CM", + "kzr-Latn": "kzr-Latn-CM", + "kzs": "kzs-Latn-MY", + "kzs-Latn": "kzs-Latn-MY", + "kzs-MY": "kzs-Latn-MY", + "kzu": "kzu-Latn-ID", + "kzu-ID": "kzu-Latn-ID", + "kzu-Latn": "kzu-Latn-ID", + "kzv": "kzv-Latn-ID", + "kzv-ID": "kzv-Latn-ID", + "kzv-Latn": "kzv-Latn-ID", + "kzw": "kzw-Latn-BR", + "kzw-BR": "kzw-Latn-BR", + "kzw-Latn": "kzw-Latn-BR", + "kzx": "kzx-Latn-ID", + "kzx-ID": "kzx-Latn-ID", + "kzx-Latn": "kzx-Latn-ID", + "kzy": "kzy-Latn-CD", + "kzy-CD": "kzy-Latn-CD", + "kzy-Latn": "kzy-Latn-CD", + "kzz": "kzz-Latn-ID", + "kzz-ID": "kzz-Latn-ID", + "kzz-Latn": "kzz-Latn-ID", + "la": "la-Latn-VA", + "la-Latn": "la-Latn-VA", + "la-VA": "la-Latn-VA", + "laa": "laa-Latn-PH", + "laa-Latn": "laa-Latn-PH", + "laa-PH": "laa-Latn-PH", + "lab": "lab-Lina-GR", + "lab-GR": "lab-Lina-GR", + "lab-Lina": "lab-Lina-GR", + "lac": "lac-Latn-MX", + "lac-Latn": "lac-Latn-MX", + "lac-MX": "lac-Latn-MX", + "lad": "lad-Hebr-IL", + "lad-Hebr": "lad-Hebr-IL", + "lad-IL": "lad-Hebr-IL", + "lae": "lae-Deva-IN", + "lae-Deva": "lae-Deva-IN", + "lae-IN": "lae-Deva-IN", + "lag": "lag-Latn-TZ", + "lag-Latn": "lag-Latn-TZ", + "lag-TZ": "lag-Latn-TZ", + "lah": "lah-Arab-PK", + "lah-Arab": "lah-Arab-PK", + "lah-PK": "lah-Arab-PK", + "lai": "lai-Latn-MW", + "lai-Latn": "lai-Latn-MW", + "lai-MW": "lai-Latn-MW", + "laj": "laj-Latn-UG", + "laj-Latn": "laj-Latn-UG", + "laj-UG": "laj-Latn-UG", + "lal": "lal-Latn-CD", + "lal-CD": "lal-Latn-CD", + "lal-Latn": "lal-Latn-CD", + "lam": "lam-Latn-ZM", + "lam-Latn": "lam-Latn-ZM", + "lam-ZM": "lam-Latn-ZM", + "lan": "lan-Latn-NG", + "lan-Latn": "lan-Latn-NG", + "lan-NG": "lan-Latn-NG", + "lap": "lap-Latn-TD", + "lap-Latn": "lap-Latn-TD", + "lap-TD": "lap-Latn-TD", + "laq": "laq-Latn-VN", + "laq-Latn": "laq-Latn-VN", + "laq-VN": "laq-Latn-VN", + "lar": "lar-Latn-GH", + "lar-GH": "lar-Latn-GH", + "lar-Latn": "lar-Latn-GH", + "las": "las-Latn-TG", + "las-Latn": "las-Latn-TG", + "las-TG": "las-Latn-TG", + "lau": "lau-Latn-ID", + "lau-ID": "lau-Latn-ID", + "lau-Latn": "lau-Latn-ID", + "law": "law-Latn-ID", + "law-ID": "law-Latn-ID", + "law-Latn": "law-Latn-ID", + "lax": "lax-Latn-IN", + "lax-IN": "lax-Latn-IN", + "lax-Latn": "lax-Latn-IN", + "laz": "laz-Latn-PG", + "laz-Latn": "laz-Latn-PG", + "laz-PG": "laz-Latn-PG", + "lb": "lb-Latn-LU", + "lb-LU": "lb-Latn-LU", + "lb-Latn": "lb-Latn-LU", + "lbb": "lbb-Latn-PG", + "lbb-Latn": "lbb-Latn-PG", + "lbb-PG": "lbb-Latn-PG", + "lbe": "lbe-Cyrl-RU", + "lbe-Cyrl": "lbe-Cyrl-RU", + "lbe-RU": "lbe-Cyrl-RU", + "lbf": "lbf-Deva-IN", + "lbf-Deva": "lbf-Deva-IN", + "lbf-IN": "lbf-Deva-IN", + "lbi": "lbi-Latn-CM", + "lbi-CM": "lbi-Latn-CM", + "lbi-Latn": "lbi-Latn-CM", + "lbj": "lbj-Tibt-IN", + "lbj-IN": "lbj-Tibt-IN", + "lbj-Tibt": "lbj-Tibt-IN", + "lbl": "lbl-Latn-PH", + "lbl-Latn": "lbl-Latn-PH", + "lbl-PH": "lbl-Latn-PH", + "lbm": "lbm-Deva-IN", + "lbm-Deva": "lbm-Deva-IN", + "lbm-IN": "lbm-Deva-IN", + "lbn": "lbn-Latn-LA", + "lbn-LA": "lbn-Latn-LA", + "lbn-Latn": "lbn-Latn-LA", + "lbo": "lbo-Laoo-LA", + "lbo-LA": "lbo-Laoo-LA", + "lbo-Laoo": "lbo-Laoo-LA", + "lbq": "lbq-Latn-PG", + "lbq-Latn": "lbq-Latn-PG", + "lbq-PG": "lbq-Latn-PG", + "lbr": "lbr-Deva-NP", + "lbr-Deva": "lbr-Deva-NP", + "lbr-NP": "lbr-Deva-NP", + "lbt": "lbt-Latn-VN", + "lbt-Latn": "lbt-Latn-VN", + "lbt-VN": "lbt-Latn-VN", + "lbu": "lbu-Latn-PG", + "lbu-Latn": "lbu-Latn-PG", + "lbu-PG": "lbu-Latn-PG", + "lbv": "lbv-Latn-PG", + "lbv-Latn": "lbv-Latn-PG", + "lbv-PG": "lbv-Latn-PG", + "lbw": "lbw-Latn-ID", + "lbw-ID": "lbw-Latn-ID", + "lbw-Latn": "lbw-Latn-ID", + "lbx": "lbx-Latn-ID", + "lbx-ID": "lbx-Latn-ID", + "lbx-Latn": "lbx-Latn-ID", + "lby": "lby-Latn-AU", + "lby-AU": "lby-Latn-AU", + "lby-Latn": "lby-Latn-AU", + "lbz": "lbz-Latn-AU", + "lbz-AU": "lbz-Latn-AU", + "lbz-Latn": "lbz-Latn-AU", + "lcc": "lcc-Latn-ID", + "lcc-ID": "lcc-Latn-ID", + "lcc-Latn": "lcc-Latn-ID", + "lcd": "lcd-Latn-ID", + "lcd-ID": "lcd-Latn-ID", + "lcd-Latn": "lcd-Latn-ID", + "lce": "lce-Latn-ID", + "lce-ID": "lce-Latn-ID", + "lce-Latn": "lce-Latn-ID", + "lcf": "lcf-Latn-ID", + "lcf-ID": "lcf-Latn-ID", + "lcf-Latn": "lcf-Latn-ID", + "lch": "lch-Latn-AO", + "lch-AO": "lch-Latn-AO", + "lch-Latn": "lch-Latn-AO", + "lcl": "lcl-Latn-ID", + "lcl-ID": "lcl-Latn-ID", + "lcl-Latn": "lcl-Latn-ID", + "lcm": "lcm-Latn-PG", + "lcm-Latn": "lcm-Latn-PG", + "lcm-PG": "lcm-Latn-PG", + "lcp": "lcp-Thai-CN", + "lcp-CN": "lcp-Thai-CN", + "lcp-Thai": "lcp-Thai-CN", + "lcp-Thai-CN": "lcp-Thai-CN", + "lcq": "lcq-Latn-ID", + "lcq-ID": "lcq-Latn-ID", + "lcq-Latn": "lcq-Latn-ID", + "lcs": "lcs-Latn-ID", + "lcs-ID": "lcs-Latn-ID", + "lcs-Latn": "lcs-Latn-ID", + "lda": "lda-Latn-CI", + "lda-CI": "lda-Latn-CI", + "lda-Latn": "lda-Latn-CI", + "ldb": "ldb-Latn-NG", + "ldb-Latn": "ldb-Latn-NG", + "ldb-NG": "ldb-Latn-NG", + "ldd": "ldd-Latn-NG", + "ldd-Latn": "ldd-Latn-NG", + "ldd-NG": "ldd-Latn-NG", + "ldg": "ldg-Latn-NG", + "ldg-Latn": "ldg-Latn-NG", + "ldg-NG": "ldg-Latn-NG", + "ldh": "ldh-Latn-NG", + "ldh-Latn": "ldh-Latn-NG", + "ldh-NG": "ldh-Latn-NG", + "ldi": "ldi-Latn-CG", + "ldi-CG": "ldi-Latn-CG", + "ldi-Latn": "ldi-Latn-CG", + "ldj": "ldj-Latn-NG", + "ldj-Latn": "ldj-Latn-NG", + "ldj-NG": "ldj-Latn-NG", + "ldk": "ldk-Latn-NG", + "ldk-Latn": "ldk-Latn-NG", + "ldk-NG": "ldk-Latn-NG", + "ldl": "ldl-Latn-NG", + "ldl-Latn": "ldl-Latn-NG", + "ldl-NG": "ldl-Latn-NG", + "ldm": "ldm-Latn-GN", + "ldm-GN": "ldm-Latn-GN", + "ldm-Latn": "ldm-Latn-GN", + "ldn": "ldn-Latn-001", + "ldn-001": "ldn-Latn-001", + "ldn-Latn": "ldn-Latn-001", + "ldo": "ldo-Latn-NG", + "ldo-Latn": "ldo-Latn-NG", + "ldo-NG": "ldo-Latn-NG", + "ldp": "ldp-Latn-NG", + "ldp-Latn": "ldp-Latn-NG", + "ldp-NG": "ldp-Latn-NG", + "ldq": "ldq-Latn-NG", + "ldq-Latn": "ldq-Latn-NG", + "ldq-NG": "ldq-Latn-NG", + "lea": "lea-Latn-CD", + "lea-CD": "lea-Latn-CD", + "lea-Latn": "lea-Latn-CD", + "leb": "leb-Latn-ZM", + "leb-Latn": "leb-Latn-ZM", + "leb-ZM": "leb-Latn-ZM", + "lec": "lec-Latn-BO", + "lec-BO": "lec-Latn-BO", + "lec-Latn": "lec-Latn-BO", + "led": "led-Latn-CD", + "led-CD": "led-Latn-CD", + "led-Latn": "led-Latn-CD", + "lee": "lee-Latn-BF", + "lee-BF": "lee-Latn-BF", + "lee-Latn": "lee-Latn-BF", + "lef": "lef-Latn-GH", + "lef-GH": "lef-Latn-GH", + "lef-Latn": "lef-Latn-GH", + "leh": "leh-Latn-ZM", + "leh-Latn": "leh-Latn-ZM", + "leh-ZM": "leh-Latn-ZM", + "lei": "lei-Latn-PG", + "lei-Latn": "lei-Latn-PG", + "lei-PG": "lei-Latn-PG", + "lej": "lej-Latn-CD", + "lej-CD": "lej-Latn-CD", + "lej-Latn": "lej-Latn-CD", + "lek": "lek-Latn-PG", + "lek-Latn": "lek-Latn-PG", + "lek-PG": "lek-Latn-PG", + "lel": "lel-Latn-CD", + "lel-CD": "lel-Latn-CD", + "lel-Latn": "lel-Latn-CD", + "lem": "lem-Latn-CM", + "lem-CM": "lem-Latn-CM", + "lem-Latn": "lem-Latn-CM", + "len": "len-Latn-HN", + "len-HN": "len-Latn-HN", + "len-Latn": "len-Latn-HN", + "leo": "leo-Latn-CM", + "leo-CM": "leo-Latn-CM", + "leo-Latn": "leo-Latn-CM", + "lep": "lep-Lepc-IN", + "lep-IN": "lep-Lepc-IN", + "lep-Lepc": "lep-Lepc-IN", + "leq": "leq-Latn-PG", + "leq-Latn": "leq-Latn-PG", + "leq-PG": "leq-Latn-PG", + "ler": "ler-Latn-PG", + "ler-Latn": "ler-Latn-PG", + "ler-PG": "ler-Latn-PG", + "les": "les-Latn-CD", + "les-CD": "les-Latn-CD", + "les-Latn": "les-Latn-CD", + "let": "let-Latn-PG", + "let-Latn": "let-Latn-PG", + "let-PG": "let-Latn-PG", + "leu": "leu-Latn-PG", + "leu-Latn": "leu-Latn-PG", + "leu-PG": "leu-Latn-PG", + "lev": "lev-Latn-ID", + "lev-ID": "lev-Latn-ID", + "lev-Latn": "lev-Latn-ID", + "lew": "lew-Latn-ID", + "lew-ID": "lew-Latn-ID", + "lew-Latn": "lew-Latn-ID", + "lex": "lex-Latn-ID", + "lex-ID": "lex-Latn-ID", + "lex-Latn": "lex-Latn-ID", + "ley": "ley-Latn-ID", + "ley-ID": "ley-Latn-ID", + "ley-Latn": "ley-Latn-ID", + "lez": "lez-Cyrl-RU", + "lez-Cyrl": "lez-Cyrl-RU", + "lez-RU": "lez-Cyrl-RU", + "lfa": "lfa-Latn-CM", + "lfa-CM": "lfa-Latn-CM", + "lfa-Latn": "lfa-Latn-CM", + "lfn": "lfn-Latn-001", + "lfn-001": "lfn-Latn-001", + "lfn-Latn": "lfn-Latn-001", + "lg": "lg-Latn-UG", + "lg-Latn": "lg-Latn-UG", + "lg-UG": "lg-Latn-UG", + "lga": "lga-Latn-SB", + "lga-Latn": "lga-Latn-SB", + "lga-SB": "lga-Latn-SB", + "lgb": "lgb-Latn-SB", + "lgb-Latn": "lgb-Latn-SB", + "lgb-SB": "lgb-Latn-SB", + "lgg": "lgg-Latn-UG", + "lgg-Latn": "lgg-Latn-UG", + "lgg-UG": "lgg-Latn-UG", + "lgh": "lgh-Latn-VN", + "lgh-Latn": "lgh-Latn-VN", + "lgh-VN": "lgh-Latn-VN", + "lgi": "lgi-Latn-ID", + "lgi-ID": "lgi-Latn-ID", + "lgi-Latn": "lgi-Latn-ID", + "lgk": "lgk-Latn-VU", + "lgk-Latn": "lgk-Latn-VU", + "lgk-VU": "lgk-Latn-VU", + "lgl": "lgl-Latn-SB", + "lgl-Latn": "lgl-Latn-SB", + "lgl-SB": "lgl-Latn-SB", + "lgm": "lgm-Latn-CD", + "lgm-CD": "lgm-Latn-CD", + "lgm-Latn": "lgm-Latn-CD", + "lgn": "lgn-Latn-ET", + "lgn-ET": "lgn-Latn-ET", + "lgn-Latn": "lgn-Latn-ET", + "lgo": "lgo-Latn-SS", + "lgo-Latn": "lgo-Latn-SS", + "lgo-SS": "lgo-Latn-SS", + "lgq": "lgq-Latn-GH", + "lgq-GH": "lgq-Latn-GH", + "lgq-Latn": "lgq-Latn-GH", + "lgr": "lgr-Latn-SB", + "lgr-Latn": "lgr-Latn-SB", + "lgr-SB": "lgr-Latn-SB", + "lgt": "lgt-Latn-PG", + "lgt-Latn": "lgt-Latn-PG", + "lgt-PG": "lgt-Latn-PG", + "lgu": "lgu-Latn-SB", + "lgu-Latn": "lgu-Latn-SB", + "lgu-SB": "lgu-Latn-SB", + "lgz": "lgz-Latn-CD", + "lgz-CD": "lgz-Latn-CD", + "lgz-Latn": "lgz-Latn-CD", + "lha": "lha-Latn-VN", + "lha-Latn": "lha-Latn-VN", + "lha-VN": "lha-Latn-VN", + "lhh": "lhh-Latn-ID", + "lhh-ID": "lhh-Latn-ID", + "lhh-Latn": "lhh-Latn-ID", + "lhi": "lhi-Latn-CN", + "lhi-CN": "lhi-Latn-CN", + "lhi-Latn": "lhi-Latn-CN", + "lhm": "lhm-Deva-NP", + "lhm-Deva": "lhm-Deva-NP", + "lhm-NP": "lhm-Deva-NP", + "lhn": "lhn-Latn-MY", + "lhn-Latn": "lhn-Latn-MY", + "lhn-MY": "lhn-Latn-MY", + "lhs": "lhs-Syrc-SY", + "lhs-SY": "lhs-Syrc-SY", + "lhs-Syrc": "lhs-Syrc-SY", + "lht": "lht-Latn-VU", + "lht-Latn": "lht-Latn-VU", + "lht-VU": "lht-Latn-VU", + "lhu": "lhu-Latn-CN", + "lhu-CN": "lhu-Latn-CN", + "lhu-Latn": "lhu-Latn-CN", + "li": "li-Latn-NL", + "li-Latn": "li-Latn-NL", + "li-NL": "li-Latn-NL", + "lia": "lia-Latn-SL", + "lia-Latn": "lia-Latn-SL", + "lia-SL": "lia-Latn-SL", + "lib": "lib-Latn-PG", + "lib-Latn": "lib-Latn-PG", + "lib-PG": "lib-Latn-PG", + "lic": "lic-Latn-CN", + "lic-CN": "lic-Latn-CN", + "lic-Latn": "lic-Latn-CN", + "lid": "lid-Latn-PG", + "lid-Latn": "lid-Latn-PG", + "lid-PG": "lid-Latn-PG", + "lie": "lie-Latn-CD", + "lie-CD": "lie-Latn-CD", + "lie-Latn": "lie-Latn-CD", + "lif": "lif-Deva-NP", + "lif-Deva": "lif-Deva-NP", + "lif-Limb": "lif-Limb-IN", + "lif-NP": "lif-Deva-NP", + "lig": "lig-Latn-GH", + "lig-GH": "lig-Latn-GH", + "lig-Latn": "lig-Latn-GH", + "lih": "lih-Latn-PG", + "lih-Latn": "lih-Latn-PG", + "lih-PG": "lih-Latn-PG", + "lij": "lij-Latn-IT", + "lij-IT": "lij-Latn-IT", + "lij-Latn": "lij-Latn-IT", + "lik": "lik-Latn-CD", + "lik-CD": "lik-Latn-CD", + "lik-Latn": "lik-Latn-CD", + "lil": "lil-Latn-CA", + "lil-CA": "lil-Latn-CA", + "lil-Latn": "lil-Latn-CA", + "lio": "lio-Latn-ID", + "lio-ID": "lio-Latn-ID", + "lio-Latn": "lio-Latn-ID", + "lip": "lip-Latn-GH", + "lip-GH": "lip-Latn-GH", + "lip-Latn": "lip-Latn-GH", + "liq": "liq-Latn-ET", + "liq-ET": "liq-Latn-ET", + "liq-Latn": "liq-Latn-ET", + "lir": "lir-Latn-LR", + "lir-LR": "lir-Latn-LR", + "lir-Latn": "lir-Latn-LR", + "lis": "lis-Lisu-CN", + "lis-CN": "lis-Lisu-CN", + "lis-Lisu": "lis-Lisu-CN", + "liu": "liu-Latn-SD", + "liu-Latn": "liu-Latn-SD", + "liu-SD": "liu-Latn-SD", + "liv": "liv-Latn-LV", + "liv-LV": "liv-Latn-LV", + "liv-Latn": "liv-Latn-LV", + "liw": "liw-Latn-ID", + "liw-ID": "liw-Latn-ID", + "liw-Latn": "liw-Latn-ID", + "lix": "lix-Latn-ID", + "lix-ID": "lix-Latn-ID", + "lix-Latn": "lix-Latn-ID", + "liy": "liy-Latn-CF", + "liy-CF": "liy-Latn-CF", + "liy-Latn": "liy-Latn-CF", + "liz": "liz-Latn-CD", + "liz-CD": "liz-Latn-CD", + "liz-Latn": "liz-Latn-CD", + "lja": "lja-Latn-AU", + "lja-AU": "lja-Latn-AU", + "lja-Latn": "lja-Latn-AU", + "lje": "lje-Latn-ID", + "lje-ID": "lje-Latn-ID", + "lje-Latn": "lje-Latn-ID", + "lji": "lji-Latn-ID", + "lji-ID": "lji-Latn-ID", + "lji-Latn": "lji-Latn-ID", + "ljl": "ljl-Latn-ID", + "ljl-ID": "ljl-Latn-ID", + "ljl-Latn": "ljl-Latn-ID", + "ljp": "ljp-Latn-ID", + "ljp-ID": "ljp-Latn-ID", + "ljp-Latn": "ljp-Latn-ID", + "ljw": "ljw-Latn-AU", + "ljw-AU": "ljw-Latn-AU", + "ljw-Latn": "ljw-Latn-AU", + "ljx": "ljx-Latn-AU", + "ljx-AU": "ljx-Latn-AU", + "ljx-Latn": "ljx-Latn-AU", + "lka": "lka-Latn-TL", + "lka-Latn": "lka-Latn-TL", + "lka-TL": "lka-Latn-TL", + "lkb": "lkb-Latn-KE", + "lkb-KE": "lkb-Latn-KE", + "lkb-Latn": "lkb-Latn-KE", + "lkc": "lkc-Latn-VN", + "lkc-Latn": "lkc-Latn-VN", + "lkc-VN": "lkc-Latn-VN", + "lkd": "lkd-Latn-BR", + "lkd-BR": "lkd-Latn-BR", + "lkd-Latn": "lkd-Latn-BR", + "lke": "lke-Latn-UG", + "lke-Latn": "lke-Latn-UG", + "lke-UG": "lke-Latn-UG", + "lkh": "lkh-Tibt-BT", + "lkh-BT": "lkh-Tibt-BT", + "lkh-Tibt": "lkh-Tibt-BT", + "lki": "lki-Arab-IR", + "lki-Arab": "lki-Arab-IR", + "lki-IR": "lki-Arab-IR", + "lkj": "lkj-Latn-MY", + "lkj-Latn": "lkj-Latn-MY", + "lkj-MY": "lkj-Latn-MY", + "lkl": "lkl-Latn-PG", + "lkl-Latn": "lkl-Latn-PG", + "lkl-PG": "lkl-Latn-PG", + "lkm": "lkm-Latn-AU", + "lkm-AU": "lkm-Latn-AU", + "lkm-Latn": "lkm-Latn-AU", + "lkn": "lkn-Latn-VU", + "lkn-Latn": "lkn-Latn-VU", + "lkn-VU": "lkn-Latn-VU", + "lko": "lko-Latn-KE", + "lko-KE": "lko-Latn-KE", + "lko-Latn": "lko-Latn-KE", + "lkr": "lkr-Latn-SS", + "lkr-Latn": "lkr-Latn-SS", + "lkr-SS": "lkr-Latn-SS", + "lks": "lks-Latn-KE", + "lks-KE": "lks-Latn-KE", + "lks-Latn": "lks-Latn-KE", + "lkt": "lkt-Latn-US", + "lkt-Latn": "lkt-Latn-US", + "lkt-US": "lkt-Latn-US", + "lku": "lku-Latn-AU", + "lku-AU": "lku-Latn-AU", + "lku-Latn": "lku-Latn-AU", + "lky": "lky-Latn-SS", + "lky-Latn": "lky-Latn-SS", + "lky-SS": "lky-Latn-SS", + "lla": "lla-Latn-NG", + "lla-Latn": "lla-Latn-NG", + "lla-NG": "lla-Latn-NG", + "llb": "llb-Latn-MZ", + "llb-Latn": "llb-Latn-MZ", + "llb-MZ": "llb-Latn-MZ", + "llc": "llc-Latn-GN", + "llc-GN": "llc-Latn-GN", + "llc-Latn": "llc-Latn-GN", + "lld": "lld-Latn-IT", + "lld-IT": "lld-Latn-IT", + "lld-Latn": "lld-Latn-IT", + "lle": "lle-Latn-PG", + "lle-Latn": "lle-Latn-PG", + "lle-PG": "lle-Latn-PG", + "llf": "llf-Latn-PG", + "llf-Latn": "llf-Latn-PG", + "llf-PG": "llf-Latn-PG", + "llg": "llg-Latn-ID", + "llg-ID": "llg-Latn-ID", + "llg-Latn": "llg-Latn-ID", + "lli": "lli-Latn-CG", + "lli-CG": "lli-Latn-CG", + "lli-Latn": "lli-Latn-CG", + "llj": "llj-Latn-AU", + "llj-AU": "llj-Latn-AU", + "llj-Latn": "llj-Latn-AU", + "llk": "llk-Latn-MY", + "llk-Latn": "llk-Latn-MY", + "llk-MY": "llk-Latn-MY", + "lll": "lll-Latn-PG", + "lll-Latn": "lll-Latn-PG", + "lll-PG": "lll-Latn-PG", + "llm": "llm-Latn-ID", + "llm-ID": "llm-Latn-ID", + "llm-Latn": "llm-Latn-ID", + "lln": "lln-Latn-TD", + "lln-Latn": "lln-Latn-TD", + "lln-TD": "lln-Latn-TD", + "llp": "llp-Latn-VU", + "llp-Latn": "llp-Latn-VU", + "llp-VU": "llp-Latn-VU", + "llq": "llq-Latn-ID", + "llq-ID": "llq-Latn-ID", + "llq-Latn": "llq-Latn-ID", + "llu": "llu-Latn-SB", + "llu-Latn": "llu-Latn-SB", + "llu-SB": "llu-Latn-SB", + "llx": "llx-Latn-FJ", + "llx-FJ": "llx-Latn-FJ", + "llx-Latn": "llx-Latn-FJ", + "lma": "lma-Latn-GN", + "lma-GN": "lma-Latn-GN", + "lma-Latn": "lma-Latn-GN", + "lmb": "lmb-Latn-VU", + "lmb-Latn": "lmb-Latn-VU", + "lmb-VU": "lmb-Latn-VU", + "lmc": "lmc-Latn-AU", + "lmc-AU": "lmc-Latn-AU", + "lmc-Latn": "lmc-Latn-AU", + "lmd": "lmd-Latn-SD", + "lmd-Latn": "lmd-Latn-SD", + "lmd-SD": "lmd-Latn-SD", + "lme": "lme-Latn-TD", + "lme-Latn": "lme-Latn-TD", + "lme-TD": "lme-Latn-TD", + "lmf": "lmf-Latn-ID", + "lmf-ID": "lmf-Latn-ID", + "lmf-Latn": "lmf-Latn-ID", + "lmg": "lmg-Latn-PG", + "lmg-Latn": "lmg-Latn-PG", + "lmg-PG": "lmg-Latn-PG", + "lmh": "lmh-Deva-NP", + "lmh-Deva": "lmh-Deva-NP", + "lmh-NP": "lmh-Deva-NP", + "lmi": "lmi-Latn-CD", + "lmi-CD": "lmi-Latn-CD", + "lmi-Latn": "lmi-Latn-CD", + "lmj": "lmj-Latn-ID", + "lmj-ID": "lmj-Latn-ID", + "lmj-Latn": "lmj-Latn-ID", + "lmk": "lmk-Latn-IN", + "lmk-IN": "lmk-Latn-IN", + "lmk-Latn": "lmk-Latn-IN", + "lml": "lml-Latn-VU", + "lml-Latn": "lml-Latn-VU", + "lml-VU": "lml-Latn-VU", + "lmn": "lmn-Telu-IN", + "lmn-IN": "lmn-Telu-IN", + "lmn-Telu": "lmn-Telu-IN", + "lmo": "lmo-Latn-IT", + "lmo-IT": "lmo-Latn-IT", + "lmo-Latn": "lmo-Latn-IT", + "lmp": "lmp-Latn-CM", + "lmp-CM": "lmp-Latn-CM", + "lmp-Latn": "lmp-Latn-CM", + "lmq": "lmq-Latn-ID", + "lmq-ID": "lmq-Latn-ID", + "lmq-Latn": "lmq-Latn-ID", + "lmr": "lmr-Latn-ID", + "lmr-ID": "lmr-Latn-ID", + "lmr-Latn": "lmr-Latn-ID", + "lmu": "lmu-Latn-VU", + "lmu-Latn": "lmu-Latn-VU", + "lmu-VU": "lmu-Latn-VU", + "lmv": "lmv-Latn-FJ", + "lmv-FJ": "lmv-Latn-FJ", + "lmv-Latn": "lmv-Latn-FJ", + "lmw": "lmw-Latn-US", + "lmw-Latn": "lmw-Latn-US", + "lmw-US": "lmw-Latn-US", + "lmx": "lmx-Latn-CM", + "lmx-CM": "lmx-Latn-CM", + "lmx-Latn": "lmx-Latn-CM", + "lmy": "lmy-Latn-ID", + "lmy-ID": "lmy-Latn-ID", + "lmy-Latn": "lmy-Latn-ID", + "ln": "ln-Latn-CD", + "ln-CD": "ln-Latn-CD", + "ln-Latn": "ln-Latn-CD", + "lna": "lna-Latn-CF", + "lna-CF": "lna-Latn-CF", + "lna-Latn": "lna-Latn-CF", + "lnb": "lnb-Latn-NA", + "lnb-Latn": "lnb-Latn-NA", + "lnb-NA": "lnb-Latn-NA", + "lnd": "lnd-Latn-ID", + "lnd-ID": "lnd-Latn-ID", + "lnd-Latn": "lnd-Latn-ID", + "lng": "lng-Latn-HU", + "lng-HU": "lng-Latn-HU", + "lng-Latn": "lng-Latn-HU", + "lnh": "lnh-Latn-MY", + "lnh-Latn": "lnh-Latn-MY", + "lnh-MY": "lnh-Latn-MY", + "lni": "lni-Latn-PG", + "lni-Latn": "lni-Latn-PG", + "lni-PG": "lni-Latn-PG", + "lnj": "lnj-Latn-AU", + "lnj-AU": "lnj-Latn-AU", + "lnj-Latn": "lnj-Latn-AU", + "lnl": "lnl-Latn-CF", + "lnl-CF": "lnl-Latn-CF", + "lnl-Latn": "lnl-Latn-CF", + "lnm": "lnm-Latn-PG", + "lnm-Latn": "lnm-Latn-PG", + "lnm-PG": "lnm-Latn-PG", + "lnn": "lnn-Latn-VU", + "lnn-Latn": "lnn-Latn-VU", + "lnn-VU": "lnn-Latn-VU", + "lns": "lns-Latn-CM", + "lns-CM": "lns-Latn-CM", + "lns-Latn": "lns-Latn-CM", + "lnu": "lnu-Latn-NG", + "lnu-Latn": "lnu-Latn-NG", + "lnu-NG": "lnu-Latn-NG", + "lnw": "lnw-Latn-AU", + "lnw-AU": "lnw-Latn-AU", + "lnw-Latn": "lnw-Latn-AU", + "lnz": "lnz-Latn-CD", + "lnz-CD": "lnz-Latn-CD", + "lnz-Latn": "lnz-Latn-CD", + "lo": "lo-Laoo-LA", + "lo-LA": "lo-Laoo-LA", + "lo-Laoo": "lo-Laoo-LA", + "loa": "loa-Latn-ID", + "loa-ID": "loa-Latn-ID", + "loa-Latn": "loa-Latn-ID", + "lob": "lob-Latn-BF", + "lob-BF": "lob-Latn-BF", + "lob-Latn": "lob-Latn-BF", + "loc": "loc-Latn-PH", + "loc-Latn": "loc-Latn-PH", + "loc-PH": "loc-Latn-PH", + "loe": "loe-Latn-ID", + "loe-ID": "loe-Latn-ID", + "loe-Latn": "loe-Latn-ID", + "log": "log-Latn-CD", + "log-CD": "log-Latn-CD", + "log-Latn": "log-Latn-CD", + "loh": "loh-Latn-SS", + "loh-Latn": "loh-Latn-SS", + "loh-SS": "loh-Latn-SS", + "loi": "loi-Latn-CI", + "loi-CI": "loi-Latn-CI", + "loi-Latn": "loi-Latn-CI", + "loj": "loj-Latn-PG", + "loj-Latn": "loj-Latn-PG", + "loj-PG": "loj-Latn-PG", + "lok": "lok-Latn-SL", + "lok-Latn": "lok-Latn-SL", + "lok-SL": "lok-Latn-SL", + "lol": "lol-Latn-CD", + "lol-CD": "lol-Latn-CD", + "lol-Latn": "lol-Latn-CD", + "lom": "lom-Latn-LR", + "lom-LR": "lom-Latn-LR", + "lom-Latn": "lom-Latn-LR", + "lon": "lon-Latn-MW", + "lon-Latn": "lon-Latn-MW", + "lon-MW": "lon-Latn-MW", + "loo": "loo-Latn-CD", + "loo-CD": "loo-Latn-CD", + "loo-Latn": "loo-Latn-CD", + "lop": "lop-Latn-NG", + "lop-Latn": "lop-Latn-NG", + "lop-NG": "lop-Latn-NG", + "loq": "loq-Latn-CD", + "loq-CD": "loq-Latn-CD", + "loq-Latn": "loq-Latn-CD", + "lor": "lor-Latn-CI", + "lor-CI": "lor-Latn-CI", + "lor-Latn": "lor-Latn-CI", + "los": "los-Latn-PG", + "los-Latn": "los-Latn-PG", + "los-PG": "los-Latn-PG", + "lot": "lot-Latn-SS", + "lot-Latn": "lot-Latn-SS", + "lot-SS": "lot-Latn-SS", + "lou": "lou-Latn-US", + "lou-Latn": "lou-Latn-US", + "lou-US": "lou-Latn-US", + "low": "low-Latn-MY", + "low-Latn": "low-Latn-MY", + "low-MY": "low-Latn-MY", + "lox": "lox-Latn-ID", + "lox-ID": "lox-Latn-ID", + "lox-Latn": "lox-Latn-ID", + "loy": "loy-Deva-NP", + "loy-Deva": "loy-Deva-NP", + "loy-NP": "loy-Deva-NP", + "loz": "loz-Latn-ZM", + "loz-Latn": "loz-Latn-ZM", + "loz-ZM": "loz-Latn-ZM", + "lpa": "lpa-Latn-VU", + "lpa-Latn": "lpa-Latn-VU", + "lpa-VU": "lpa-Latn-VU", + "lpe": "lpe-Latn-ID", + "lpe-ID": "lpe-Latn-ID", + "lpe-Latn": "lpe-Latn-ID", + "lpn": "lpn-Latn-MM", + "lpn-Latn": "lpn-Latn-MM", + "lpn-MM": "lpn-Latn-MM", + "lpo": "lpo-Plrd-CN", + "lpo-CN": "lpo-Plrd-CN", + "lpo-Plrd": "lpo-Plrd-CN", + "lpx": "lpx-Latn-SS", + "lpx-Latn": "lpx-Latn-SS", + "lpx-SS": "lpx-Latn-SS", + "lqr": "lqr-Latn-SS", + "lqr-Latn": "lqr-Latn-SS", + "lqr-SS": "lqr-Latn-SS", + "lra": "lra-Latn-MY", + "lra-Latn": "lra-Latn-MY", + "lra-MY": "lra-Latn-MY", + "lrc": "lrc-Arab-IR", + "lrc-Arab": "lrc-Arab-IR", + "lrc-IR": "lrc-Arab-IR", + "lrg": "lrg-Latn-AU", + "lrg-AU": "lrg-Latn-AU", + "lrg-Latn": "lrg-Latn-AU", + "lri": "lri-Latn-KE", + "lri-KE": "lri-Latn-KE", + "lri-Latn": "lri-Latn-KE", + "lrk": "lrk-Arab-PK", + "lrk-Arab": "lrk-Arab-PK", + "lrk-PK": "lrk-Arab-PK", + "lrl": "lrl-Arab-IR", + "lrl-Arab": "lrl-Arab-IR", + "lrl-IR": "lrl-Arab-IR", + "lrm": "lrm-Latn-KE", + "lrm-KE": "lrm-Latn-KE", + "lrm-Latn": "lrm-Latn-KE", + "lrn": "lrn-Latn-ID", + "lrn-ID": "lrn-Latn-ID", + "lrn-Latn": "lrn-Latn-ID", + "lro": "lro-Latn-SD", + "lro-Latn": "lro-Latn-SD", + "lro-SD": "lro-Latn-SD", + "lrt": "lrt-Latn-ID", + "lrt-ID": "lrt-Latn-ID", + "lrt-Latn": "lrt-Latn-ID", + "lrv": "lrv-Latn-VU", + "lrv-Latn": "lrv-Latn-VU", + "lrv-VU": "lrv-Latn-VU", + "lrz": "lrz-Latn-VU", + "lrz-Latn": "lrz-Latn-VU", + "lrz-VU": "lrz-Latn-VU", + "lsa": "lsa-Arab-IR", + "lsa-Arab": "lsa-Arab-IR", + "lsa-IR": "lsa-Arab-IR", + "lsd": "lsd-Hebr-IL", + "lsd-Hebr": "lsd-Hebr-IL", + "lsd-IL": "lsd-Hebr-IL", + "lse": "lse-Latn-CD", + "lse-CD": "lse-Latn-CD", + "lse-Latn": "lse-Latn-CD", + "lsi": "lsi-Latn-MM", + "lsi-Latn": "lsi-Latn-MM", + "lsi-MM": "lsi-Latn-MM", + "lsm": "lsm-Latn-UG", + "lsm-Latn": "lsm-Latn-UG", + "lsm-UG": "lsm-Latn-UG", + "lsr": "lsr-Latn-PG", + "lsr-Latn": "lsr-Latn-PG", + "lsr-PG": "lsr-Latn-PG", + "lss": "lss-Arab-PK", + "lss-Arab": "lss-Arab-PK", + "lss-PK": "lss-Arab-PK", + "lt": "lt-Latn-LT", + "lt-LT": "lt-Latn-LT", + "lt-Latn": "lt-Latn-LT", + "ltc": "ltc-Hant-CN", + "ltc-CN": "ltc-Hant-CN", + "ltc-Hant": "ltc-Hant-CN", + "ltg": "ltg-Latn-LV", + "ltg-LV": "ltg-Latn-LV", + "ltg-Latn": "ltg-Latn-LV", + "lth": "lth-Latn-UG", + "lth-Latn": "lth-Latn-UG", + "lth-UG": "lth-Latn-UG", + "lti": "lti-Latn-ID", + "lti-ID": "lti-Latn-ID", + "lti-Latn": "lti-Latn-ID", + "ltn": "ltn-Latn-BR", + "ltn-BR": "ltn-Latn-BR", + "ltn-Latn": "ltn-Latn-BR", + "lto": "lto-Latn-KE", + "lto-KE": "lto-Latn-KE", + "lto-Latn": "lto-Latn-KE", + "lts": "lts-Latn-KE", + "lts-KE": "lts-Latn-KE", + "lts-Latn": "lts-Latn-KE", + "ltu": "ltu-Latn-ID", + "ltu-ID": "ltu-Latn-ID", + "ltu-Latn": "ltu-Latn-ID", + "lu": "lu-Latn-CD", + "lu-CD": "lu-Latn-CD", + "lu-Latn": "lu-Latn-CD", + "lua": "lua-Latn-CD", + "lua-CD": "lua-Latn-CD", + "lua-Latn": "lua-Latn-CD", + "luc": "luc-Latn-UG", + "luc-Latn": "luc-Latn-UG", + "luc-UG": "luc-Latn-UG", + "lud": "lud-Latn-RU", + "lud-Latn": "lud-Latn-RU", + "lud-RU": "lud-Latn-RU", + "lue": "lue-Latn-ZM", + "lue-Latn": "lue-Latn-ZM", + "lue-ZM": "lue-Latn-ZM", + "luf": "luf-Latn-PG", + "luf-Latn": "luf-Latn-PG", + "luf-PG": "luf-Latn-PG", + "lui": "lui-Latn-US", + "lui-Latn": "lui-Latn-US", + "lui-US": "lui-Latn-US", + "luj": "luj-Latn-CD", + "luj-CD": "luj-Latn-CD", + "luj-Latn": "luj-Latn-CD", + "luk": "luk-Tibt-BT", + "luk-BT": "luk-Tibt-BT", + "luk-Tibt": "luk-Tibt-BT", + "lul": "lul-Latn-SS", + "lul-Latn": "lul-Latn-SS", + "lul-SS": "lul-Latn-SS", + "lum": "lum-Latn-AO", + "lum-AO": "lum-Latn-AO", + "lum-Latn": "lum-Latn-AO", + "lun": "lun-Latn-ZM", + "lun-Latn": "lun-Latn-ZM", + "lun-ZM": "lun-Latn-ZM", + "luo": "luo-Latn-KE", + "luo-KE": "luo-Latn-KE", + "luo-Latn": "luo-Latn-KE", + "lup": "lup-Latn-GA", + "lup-GA": "lup-Latn-GA", + "lup-Latn": "lup-Latn-GA", + "luq": "luq-Latn-CU", + "luq-CU": "luq-Latn-CU", + "luq-Latn": "luq-Latn-CU", + "lur": "lur-Latn-ID", + "lur-ID": "lur-Latn-ID", + "lur-Latn": "lur-Latn-ID", + "lus": "lus-Latn-IN", + "lus-IN": "lus-Latn-IN", + "lus-Latn": "lus-Latn-IN", + "lut": "lut-Latn-US", + "lut-Latn": "lut-Latn-US", + "lut-US": "lut-Latn-US", + "luu": "luu-Deva-NP", + "luu-Deva": "luu-Deva-NP", + "luu-NP": "luu-Deva-NP", + "luv": "luv-Arab-OM", + "luv-Arab": "luv-Arab-OM", + "luv-OM": "luv-Arab-OM", + "luw": "luw-Latn-CM", + "luw-CM": "luw-Latn-CM", + "luw-Latn": "luw-Latn-CM", + "luy": "luy-Latn-KE", + "luy-KE": "luy-Latn-KE", + "luy-Latn": "luy-Latn-KE", + "luz": "luz-Arab-IR", + "luz-Arab": "luz-Arab-IR", + "luz-IR": "luz-Arab-IR", + "lv": "lv-Latn-LV", + "lv-LV": "lv-Latn-LV", + "lv-Latn": "lv-Latn-LV", + "lva": "lva-Latn-TL", + "lva-Latn": "lva-Latn-TL", + "lva-TL": "lva-Latn-TL", + "lvi": "lvi-Latn-LA", + "lvi-LA": "lvi-Latn-LA", + "lvi-Latn": "lvi-Latn-LA", + "lvk": "lvk-Latn-SB", + "lvk-Latn": "lvk-Latn-SB", + "lvk-SB": "lvk-Latn-SB", + "lvl": "lvl-Latn-CD", + "lvl-CD": "lvl-Latn-CD", + "lvl-Latn": "lvl-Latn-CD", + "lvu": "lvu-Latn-ID", + "lvu-ID": "lvu-Latn-ID", + "lvu-Latn": "lvu-Latn-ID", + "lwa": "lwa-Latn-CD", + "lwa-CD": "lwa-Latn-CD", + "lwa-Latn": "lwa-Latn-CD", + "lwe": "lwe-Latn-ID", + "lwe-ID": "lwe-Latn-ID", + "lwe-Latn": "lwe-Latn-ID", + "lwg": "lwg-Latn-KE", + "lwg-KE": "lwg-Latn-KE", + "lwg-Latn": "lwg-Latn-KE", + "lwh": "lwh-Latn-VN", + "lwh-Latn": "lwh-Latn-VN", + "lwh-VN": "lwh-Latn-VN", + "lwl": "lwl-Thai-TH", + "lwl-TH": "lwl-Thai-TH", + "lwl-Thai": "lwl-Thai-TH", + "lwm": "lwm-Thai-CN", + "lwm-CN": "lwm-Thai-CN", + "lwm-Thai": "lwm-Thai-CN", + "lwo": "lwo-Latn-SS", + "lwo-Latn": "lwo-Latn-SS", + "lwo-SS": "lwo-Latn-SS", + "lwt": "lwt-Latn-ID", + "lwt-ID": "lwt-Latn-ID", + "lwt-Latn": "lwt-Latn-ID", + "lww": "lww-Latn-VU", + "lww-Latn": "lww-Latn-VU", + "lww-VU": "lww-Latn-VU", + "lxm": "lxm-Latn-PG", + "lxm-Latn": "lxm-Latn-PG", + "lxm-PG": "lxm-Latn-PG", + "lya": "lya-Tibt-BT", + "lya-BT": "lya-Tibt-BT", + "lya-Tibt": "lya-Tibt-BT", + "lyn": "lyn-Latn-ZM", + "lyn-Latn": "lyn-Latn-ZM", + "lyn-ZM": "lyn-Latn-ZM", + "lzh": "lzh-Hans-CN", + "lzh-CN": "lzh-Hans-CN", + "lzh-Hans": "lzh-Hans-CN", + "lzh-Phag": "lzh-Phag-CN", + "lzl": "lzl-Latn-VU", + "lzl-Latn": "lzl-Latn-VU", + "lzl-VU": "lzl-Latn-VU", + "lzn": "lzn-Latn-MM", + "lzn-Latn": "lzn-Latn-MM", + "lzn-MM": "lzn-Latn-MM", + "lzz": "lzz-Latn-TR", + "lzz-Latn": "lzz-Latn-TR", + "lzz-TR": "lzz-Latn-TR", + "maa": "maa-Latn-MX", + "maa-Latn": "maa-Latn-MX", + "maa-MX": "maa-Latn-MX", + "mab": "mab-Latn-MX", + "mab-Latn": "mab-Latn-MX", + "mab-MX": "mab-Latn-MX", + "mad": "mad-Latn-ID", + "mad-ID": "mad-Latn-ID", + "mad-Latn": "mad-Latn-ID", + "mae": "mae-Latn-NG", + "mae-Latn": "mae-Latn-NG", + "mae-NG": "mae-Latn-NG", + "maf": "maf-Latn-CM", + "maf-CM": "maf-Latn-CM", + "maf-Latn": "maf-Latn-CM", + "mag": "mag-Deva-IN", + "mag-Deva": "mag-Deva-IN", + "mag-IN": "mag-Deva-IN", + "mai": "mai-Deva-IN", + "mai-Deva": "mai-Deva-IN", + "mai-IN": "mai-Deva-IN", + "mai-Tirh": "mai-Tirh-IN", + "maj": "maj-Latn-MX", + "maj-Latn": "maj-Latn-MX", + "maj-MX": "maj-Latn-MX", + "mak": "mak-Latn-ID", + "mak-ID": "mak-Latn-ID", + "mak-Latn": "mak-Latn-ID", + "mak-Maka": "mak-Maka-ID", + "mam": "mam-Latn-GT", + "mam-GT": "mam-Latn-GT", + "mam-Latn": "mam-Latn-GT", + "man": "man-Latn-GM", + "man-GM": "man-Latn-GM", + "man-GN": "man-Nkoo-GN", + "man-Latn": "man-Latn-GM", + "man-Nkoo": "man-Nkoo-GN", + "maq": "maq-Latn-MX", + "maq-Latn": "maq-Latn-MX", + "maq-MX": "maq-Latn-MX", + "mas": "mas-Latn-KE", + "mas-KE": "mas-Latn-KE", + "mas-Latn": "mas-Latn-KE", + "mat": "mat-Latn-MX", + "mat-Latn": "mat-Latn-MX", + "mat-MX": "mat-Latn-MX", + "mau": "mau-Latn-MX", + "mau-Latn": "mau-Latn-MX", + "mau-MX": "mau-Latn-MX", + "mav": "mav-Latn-BR", + "mav-BR": "mav-Latn-BR", + "mav-Latn": "mav-Latn-BR", + "maw": "maw-Latn-GH", + "maw-GH": "maw-Latn-GH", + "maw-Latn": "maw-Latn-GH", + "max": "max-Latn-ID", + "max-ID": "max-Latn-ID", + "max-Latn": "max-Latn-ID", + "maz": "maz-Latn-MX", + "maz-Latn": "maz-Latn-MX", + "maz-MX": "maz-Latn-MX", + "mba": "mba-Latn-PH", + "mba-Latn": "mba-Latn-PH", + "mba-PH": "mba-Latn-PH", + "mbb": "mbb-Latn-PH", + "mbb-Latn": "mbb-Latn-PH", + "mbb-PH": "mbb-Latn-PH", + "mbc": "mbc-Latn-BR", + "mbc-BR": "mbc-Latn-BR", + "mbc-Latn": "mbc-Latn-BR", + "mbd": "mbd-Latn-PH", + "mbd-Latn": "mbd-Latn-PH", + "mbd-PH": "mbd-Latn-PH", + "mbf": "mbf-Latn-SG", + "mbf-Latn": "mbf-Latn-SG", + "mbf-SG": "mbf-Latn-SG", + "mbh": "mbh-Latn-PG", + "mbh-Latn": "mbh-Latn-PG", + "mbh-PG": "mbh-Latn-PG", + "mbi": "mbi-Latn-PH", + "mbi-Latn": "mbi-Latn-PH", + "mbi-PH": "mbi-Latn-PH", + "mbj": "mbj-Latn-BR", + "mbj-BR": "mbj-Latn-BR", + "mbj-Latn": "mbj-Latn-BR", + "mbk": "mbk-Latn-PG", + "mbk-Latn": "mbk-Latn-PG", + "mbk-PG": "mbk-Latn-PG", + "mbl": "mbl-Latn-BR", + "mbl-BR": "mbl-Latn-BR", + "mbl-Latn": "mbl-Latn-BR", + "mbm": "mbm-Latn-CG", + "mbm-CG": "mbm-Latn-CG", + "mbm-Latn": "mbm-Latn-CG", + "mbn": "mbn-Latn-CO", + "mbn-CO": "mbn-Latn-CO", + "mbn-Latn": "mbn-Latn-CO", + "mbo": "mbo-Latn-CM", + "mbo-CM": "mbo-Latn-CM", + "mbo-Latn": "mbo-Latn-CM", + "mbp": "mbp-Latn-CO", + "mbp-CO": "mbp-Latn-CO", + "mbp-Latn": "mbp-Latn-CO", + "mbq": "mbq-Latn-PG", + "mbq-Latn": "mbq-Latn-PG", + "mbq-PG": "mbq-Latn-PG", + "mbr": "mbr-Latn-CO", + "mbr-CO": "mbr-Latn-CO", + "mbr-Latn": "mbr-Latn-CO", + "mbs": "mbs-Latn-PH", + "mbs-Latn": "mbs-Latn-PH", + "mbs-PH": "mbs-Latn-PH", + "mbt": "mbt-Latn-PH", + "mbt-Latn": "mbt-Latn-PH", + "mbt-PH": "mbt-Latn-PH", + "mbu": "mbu-Latn-NG", + "mbu-Latn": "mbu-Latn-NG", + "mbu-NG": "mbu-Latn-NG", + "mbv": "mbv-Latn-GN", + "mbv-GN": "mbv-Latn-GN", + "mbv-Latn": "mbv-Latn-GN", + "mbw": "mbw-Latn-PG", + "mbw-Latn": "mbw-Latn-PG", + "mbw-PG": "mbw-Latn-PG", + "mbx": "mbx-Latn-PG", + "mbx-Latn": "mbx-Latn-PG", + "mbx-PG": "mbx-Latn-PG", + "mby": "mby-Arab-PK", + "mby-Arab": "mby-Arab-PK", + "mby-PK": "mby-Arab-PK", + "mbz": "mbz-Latn-MX", + "mbz-Latn": "mbz-Latn-MX", + "mbz-MX": "mbz-Latn-MX", + "mca": "mca-Latn-PY", + "mca-Latn": "mca-Latn-PY", + "mca-PY": "mca-Latn-PY", + "mcb": "mcb-Latn-PE", + "mcb-Latn": "mcb-Latn-PE", + "mcb-PE": "mcb-Latn-PE", + "mcc": "mcc-Latn-PG", + "mcc-Latn": "mcc-Latn-PG", + "mcc-PG": "mcc-Latn-PG", + "mcd": "mcd-Latn-PE", + "mcd-Latn": "mcd-Latn-PE", + "mcd-PE": "mcd-Latn-PE", + "mce": "mce-Latn-MX", + "mce-Latn": "mce-Latn-MX", + "mce-MX": "mce-Latn-MX", + "mcf": "mcf-Latn-PE", + "mcf-Latn": "mcf-Latn-PE", + "mcf-PE": "mcf-Latn-PE", + "mcg": "mcg-Latn-VE", + "mcg-Latn": "mcg-Latn-VE", + "mcg-VE": "mcg-Latn-VE", + "mch": "mch-Latn-VE", + "mch-Latn": "mch-Latn-VE", + "mch-VE": "mch-Latn-VE", + "mci": "mci-Latn-PG", + "mci-Latn": "mci-Latn-PG", + "mci-PG": "mci-Latn-PG", + "mcj": "mcj-Latn-NG", + "mcj-Latn": "mcj-Latn-NG", + "mcj-NG": "mcj-Latn-NG", + "mck": "mck-Latn-AO", + "mck-AO": "mck-Latn-AO", + "mck-Latn": "mck-Latn-AO", + "mcl": "mcl-Latn-CO", + "mcl-CO": "mcl-Latn-CO", + "mcl-Latn": "mcl-Latn-CO", + "mcm": "mcm-Latn-MY", + "mcm-Latn": "mcm-Latn-MY", + "mcm-MY": "mcm-Latn-MY", + "mcn": "mcn-Latn-TD", + "mcn-Latn": "mcn-Latn-TD", + "mcn-TD": "mcn-Latn-TD", + "mco": "mco-Latn-MX", + "mco-Latn": "mco-Latn-MX", + "mco-MX": "mco-Latn-MX", + "mcp": "mcp-Latn-CM", + "mcp-CM": "mcp-Latn-CM", + "mcp-Latn": "mcp-Latn-CM", + "mcq": "mcq-Latn-PG", + "mcq-Latn": "mcq-Latn-PG", + "mcq-PG": "mcq-Latn-PG", + "mcr": "mcr-Latn-PG", + "mcr-Latn": "mcr-Latn-PG", + "mcr-PG": "mcr-Latn-PG", + "mcs": "mcs-Latn-CM", + "mcs-CM": "mcs-Latn-CM", + "mcs-Latn": "mcs-Latn-CM", + "mct": "mct-Latn-CM", + "mct-CM": "mct-Latn-CM", + "mct-Latn": "mct-Latn-CM", + "mcu": "mcu-Latn-CM", + "mcu-CM": "mcu-Latn-CM", + "mcu-Latn": "mcu-Latn-CM", + "mcv": "mcv-Latn-PG", + "mcv-Latn": "mcv-Latn-PG", + "mcv-PG": "mcv-Latn-PG", + "mcw": "mcw-Latn-TD", + "mcw-Latn": "mcw-Latn-TD", + "mcw-TD": "mcw-Latn-TD", + "mcx": "mcx-Latn-CF", + "mcx-CF": "mcx-Latn-CF", + "mcx-Latn": "mcx-Latn-CF", + "mcy": "mcy-Latn-PG", + "mcy-Latn": "mcy-Latn-PG", + "mcy-PG": "mcy-Latn-PG", + "mcz": "mcz-Latn-PG", + "mcz-Latn": "mcz-Latn-PG", + "mcz-PG": "mcz-Latn-PG", + "mda": "mda-Latn-NG", + "mda-Latn": "mda-Latn-NG", + "mda-NG": "mda-Latn-NG", + "mdb": "mdb-Latn-PG", + "mdb-Latn": "mdb-Latn-PG", + "mdb-PG": "mdb-Latn-PG", + "mdc": "mdc-Latn-PG", + "mdc-Latn": "mdc-Latn-PG", + "mdc-PG": "mdc-Latn-PG", + "mdd": "mdd-Latn-CM", + "mdd-CM": "mdd-Latn-CM", + "mdd-Latn": "mdd-Latn-CM", + "mde": "mde-Arab-TD", + "mde-Arab": "mde-Arab-TD", + "mde-TD": "mde-Arab-TD", + "mdf": "mdf-Cyrl-RU", + "mdf-Cyrl": "mdf-Cyrl-RU", + "mdf-RU": "mdf-Cyrl-RU", + "mdg": "mdg-Latn-TD", + "mdg-Latn": "mdg-Latn-TD", + "mdg-TD": "mdg-Latn-TD", + "mdh": "mdh-Latn-PH", + "mdh-Latn": "mdh-Latn-PH", + "mdh-PH": "mdh-Latn-PH", + "mdi": "mdi-Latn-CD", + "mdi-CD": "mdi-Latn-CD", + "mdi-Latn": "mdi-Latn-CD", + "mdj": "mdj-Latn-CD", + "mdj-CD": "mdj-Latn-CD", + "mdj-Latn": "mdj-Latn-CD", + "mdk": "mdk-Latn-CD", + "mdk-CD": "mdk-Latn-CD", + "mdk-Latn": "mdk-Latn-CD", + "mdm": "mdm-Latn-CD", + "mdm-CD": "mdm-Latn-CD", + "mdm-Latn": "mdm-Latn-CD", + "mdn": "mdn-Latn-CF", + "mdn-CF": "mdn-Latn-CF", + "mdn-Latn": "mdn-Latn-CF", + "mdp": "mdp-Latn-CD", + "mdp-CD": "mdp-Latn-CD", + "mdp-Latn": "mdp-Latn-CD", + "mdq": "mdq-Latn-CD", + "mdq-CD": "mdq-Latn-CD", + "mdq-Latn": "mdq-Latn-CD", + "mdr": "mdr-Latn-ID", + "mdr-ID": "mdr-Latn-ID", + "mdr-Latn": "mdr-Latn-ID", + "mds": "mds-Latn-PG", + "mds-Latn": "mds-Latn-PG", + "mds-PG": "mds-Latn-PG", + "mdt": "mdt-Latn-CG", + "mdt-CG": "mdt-Latn-CG", + "mdt-Latn": "mdt-Latn-CG", + "mdu": "mdu-Latn-CG", + "mdu-CG": "mdu-Latn-CG", + "mdu-Latn": "mdu-Latn-CG", + "mdv": "mdv-Latn-MX", + "mdv-Latn": "mdv-Latn-MX", + "mdv-MX": "mdv-Latn-MX", + "mdw": "mdw-Latn-CG", + "mdw-CG": "mdw-Latn-CG", + "mdw-Latn": "mdw-Latn-CG", + "mdx": "mdx-Ethi-ET", + "mdx-ET": "mdx-Ethi-ET", + "mdx-Ethi": "mdx-Ethi-ET", + "mdy": "mdy-Ethi-ET", + "mdy-ET": "mdy-Ethi-ET", + "mdy-Ethi": "mdy-Ethi-ET", + "mdz": "mdz-Latn-BR", + "mdz-BR": "mdz-Latn-BR", + "mdz-Latn": "mdz-Latn-BR", + "mea": "mea-Latn-CM", + "mea-CM": "mea-Latn-CM", + "mea-Latn": "mea-Latn-CM", + "meb": "meb-Latn-PG", + "meb-Latn": "meb-Latn-PG", + "meb-PG": "meb-Latn-PG", + "mec": "mec-Latn-AU", + "mec-AU": "mec-Latn-AU", + "mec-Latn": "mec-Latn-AU", + "med": "med-Latn-PG", + "med-Latn": "med-Latn-PG", + "med-PG": "med-Latn-PG", + "mee": "mee-Latn-PG", + "mee-Latn": "mee-Latn-PG", + "mee-PG": "mee-Latn-PG", + "meh": "meh-Latn-MX", + "meh-Latn": "meh-Latn-MX", + "meh-MX": "meh-Latn-MX", + "mej": "mej-Latn-ID", + "mej-ID": "mej-Latn-ID", + "mej-Latn": "mej-Latn-ID", + "mek": "mek-Latn-PG", + "mek-Latn": "mek-Latn-PG", + "mek-PG": "mek-Latn-PG", + "mel": "mel-Latn-MY", + "mel-Latn": "mel-Latn-MY", + "mel-MY": "mel-Latn-MY", + "mem": "mem-Latn-AU", + "mem-AU": "mem-Latn-AU", + "mem-Latn": "mem-Latn-AU", + "men": "men-Latn-SL", + "men-Latn": "men-Latn-SL", + "men-Mend": "men-Mend-SL", + "men-SL": "men-Latn-SL", + "meo": "meo-Latn-MY", + "meo-Latn": "meo-Latn-MY", + "meo-MY": "meo-Latn-MY", + "mep": "mep-Latn-AU", + "mep-AU": "mep-Latn-AU", + "mep-Latn": "mep-Latn-AU", + "meq": "meq-Latn-CM", + "meq-CM": "meq-Latn-CM", + "meq-Latn": "meq-Latn-CM", + "mer": "mer-Latn-KE", + "mer-KE": "mer-Latn-KE", + "mer-Latn": "mer-Latn-KE", + "mes": "mes-Latn-TD", + "mes-Latn": "mes-Latn-TD", + "mes-TD": "mes-Latn-TD", + "met": "met-Latn-PG", + "met-Latn": "met-Latn-PG", + "met-PG": "met-Latn-PG", + "meu": "meu-Latn-PG", + "meu-Latn": "meu-Latn-PG", + "meu-PG": "meu-Latn-PG", + "mev": "mev-Latn-LR", + "mev-LR": "mev-Latn-LR", + "mev-Latn": "mev-Latn-LR", + "mew": "mew-Latn-NG", + "mew-Latn": "mew-Latn-NG", + "mew-NG": "mew-Latn-NG", + "mey": "mey-Latn-SN", + "mey-Latn": "mey-Latn-SN", + "mey-SN": "mey-Latn-SN", + "mez": "mez-Latn-US", + "mez-Latn": "mez-Latn-US", + "mez-US": "mez-Latn-US", + "mfa": "mfa-Arab-TH", + "mfa-Arab": "mfa-Arab-TH", + "mfa-Arab-TH": "mfa-Arab-TH", + "mfa-TH": "mfa-Arab-TH", + "mfb": "mfb-Latn-ID", + "mfb-ID": "mfb-Latn-ID", + "mfb-Latn": "mfb-Latn-ID", + "mfc": "mfc-Latn-CD", + "mfc-CD": "mfc-Latn-CD", + "mfc-Latn": "mfc-Latn-CD", + "mfd": "mfd-Latn-CM", + "mfd-CM": "mfd-Latn-CM", + "mfd-Latn": "mfd-Latn-CM", + "mfe": "mfe-Latn-MU", + "mfe-Latn": "mfe-Latn-MU", + "mfe-MU": "mfe-Latn-MU", + "mff": "mff-Latn-CM", + "mff-CM": "mff-Latn-CM", + "mff-Latn": "mff-Latn-CM", + "mfg": "mfg-Latn-GN", + "mfg-GN": "mfg-Latn-GN", + "mfg-Latn": "mfg-Latn-GN", + "mfh": "mfh-Latn-CM", + "mfh-CM": "mfh-Latn-CM", + "mfh-Latn": "mfh-Latn-CM", + "mfi": "mfi-Arab-CM", + "mfi-Arab": "mfi-Arab-CM", + "mfi-CM": "mfi-Arab-CM", + "mfj": "mfj-Latn-CM", + "mfj-CM": "mfj-Latn-CM", + "mfj-Latn": "mfj-Latn-CM", + "mfk": "mfk-Latn-CM", + "mfk-CM": "mfk-Latn-CM", + "mfk-Latn": "mfk-Latn-CM", + "mfl": "mfl-Latn-NG", + "mfl-Latn": "mfl-Latn-NG", + "mfl-NG": "mfl-Latn-NG", + "mfm": "mfm-Latn-NG", + "mfm-Latn": "mfm-Latn-NG", + "mfm-NG": "mfm-Latn-NG", + "mfn": "mfn-Latn-NG", + "mfn-Latn": "mfn-Latn-NG", + "mfn-NG": "mfn-Latn-NG", + "mfo": "mfo-Latn-NG", + "mfo-Latn": "mfo-Latn-NG", + "mfo-NG": "mfo-Latn-NG", + "mfp": "mfp-Latn-ID", + "mfp-ID": "mfp-Latn-ID", + "mfp-Latn": "mfp-Latn-ID", + "mfq": "mfq-Latn-TG", + "mfq-Latn": "mfq-Latn-TG", + "mfq-TG": "mfq-Latn-TG", + "mfr": "mfr-Latn-AU", + "mfr-AU": "mfr-Latn-AU", + "mfr-Latn": "mfr-Latn-AU", + "mft": "mft-Latn-PG", + "mft-Latn": "mft-Latn-PG", + "mft-PG": "mft-Latn-PG", + "mfu": "mfu-Latn-AO", + "mfu-AO": "mfu-Latn-AO", + "mfu-Latn": "mfu-Latn-AO", + "mfv": "mfv-Latn-SN", + "mfv-Latn": "mfv-Latn-SN", + "mfv-SN": "mfv-Latn-SN", + "mfw": "mfw-Latn-PG", + "mfw-Latn": "mfw-Latn-PG", + "mfw-PG": "mfw-Latn-PG", + "mfx": "mfx-Latn-ET", + "mfx-ET": "mfx-Latn-ET", + "mfx-Latn": "mfx-Latn-ET", + "mfy": "mfy-Latn-MX", + "mfy-Latn": "mfy-Latn-MX", + "mfy-MX": "mfy-Latn-MX", + "mfz": "mfz-Latn-SS", + "mfz-Latn": "mfz-Latn-SS", + "mfz-SS": "mfz-Latn-SS", + "mg": "mg-Latn-MG", + "mg-Latn": "mg-Latn-MG", + "mg-MG": "mg-Latn-MG", + "mga": "mga-Latg-IE", + "mga-IE": "mga-Latg-IE", + "mga-Latg": "mga-Latg-IE", + "mgb": "mgb-Latn-TD", + "mgb-Latn": "mgb-Latn-TD", + "mgb-TD": "mgb-Latn-TD", + "mgc": "mgc-Latn-SS", + "mgc-Latn": "mgc-Latn-SS", + "mgc-SS": "mgc-Latn-SS", + "mgd": "mgd-Latn-SS", + "mgd-Latn": "mgd-Latn-SS", + "mgd-SS": "mgd-Latn-SS", + "mge": "mge-Latn-TD", + "mge-Latn": "mge-Latn-TD", + "mge-TD": "mge-Latn-TD", + "mgf": "mgf-Latn-ID", + "mgf-ID": "mgf-Latn-ID", + "mgf-Latn": "mgf-Latn-ID", + "mgg": "mgg-Latn-CM", + "mgg-CM": "mgg-Latn-CM", + "mgg-Latn": "mgg-Latn-CM", + "mgh": "mgh-Latn-MZ", + "mgh-Latn": "mgh-Latn-MZ", + "mgh-MZ": "mgh-Latn-MZ", + "mgi": "mgi-Latn-NG", + "mgi-Latn": "mgi-Latn-NG", + "mgi-NG": "mgi-Latn-NG", + "mgj": "mgj-Latn-NG", + "mgj-Latn": "mgj-Latn-NG", + "mgj-NG": "mgj-Latn-NG", + "mgk": "mgk-Latn-ID", + "mgk-ID": "mgk-Latn-ID", + "mgk-Latn": "mgk-Latn-ID", + "mgl": "mgl-Latn-PG", + "mgl-Latn": "mgl-Latn-PG", + "mgl-PG": "mgl-Latn-PG", + "mgm": "mgm-Latn-TL", + "mgm-Latn": "mgm-Latn-TL", + "mgm-TL": "mgm-Latn-TL", + "mgn": "mgn-Latn-CF", + "mgn-CF": "mgn-Latn-CF", + "mgn-Latn": "mgn-Latn-CF", + "mgo": "mgo-Latn-CM", + "mgo-CM": "mgo-Latn-CM", + "mgo-Latn": "mgo-Latn-CM", + "mgp": "mgp-Deva-NP", + "mgp-Deva": "mgp-Deva-NP", + "mgp-NP": "mgp-Deva-NP", + "mgq": "mgq-Latn-TZ", + "mgq-Latn": "mgq-Latn-TZ", + "mgq-TZ": "mgq-Latn-TZ", + "mgr": "mgr-Latn-ZM", + "mgr-Latn": "mgr-Latn-ZM", + "mgr-ZM": "mgr-Latn-ZM", + "mgs": "mgs-Latn-TZ", + "mgs-Latn": "mgs-Latn-TZ", + "mgs-TZ": "mgs-Latn-TZ", + "mgt": "mgt-Latn-PG", + "mgt-Latn": "mgt-Latn-PG", + "mgt-PG": "mgt-Latn-PG", + "mgu": "mgu-Latn-PG", + "mgu-Latn": "mgu-Latn-PG", + "mgu-PG": "mgu-Latn-PG", + "mgv": "mgv-Latn-TZ", + "mgv-Latn": "mgv-Latn-TZ", + "mgv-TZ": "mgv-Latn-TZ", + "mgw": "mgw-Latn-TZ", + "mgw-Latn": "mgw-Latn-TZ", + "mgw-TZ": "mgw-Latn-TZ", + "mgy": "mgy-Latn-TZ", + "mgy-Latn": "mgy-Latn-TZ", + "mgy-TZ": "mgy-Latn-TZ", + "mgz": "mgz-Latn-TZ", + "mgz-Latn": "mgz-Latn-TZ", + "mgz-TZ": "mgz-Latn-TZ", + "mh": "mh-Latn-MH", + "mh-Latn": "mh-Latn-MH", + "mh-MH": "mh-Latn-MH", + "mhb": "mhb-Latn-GA", + "mhb-GA": "mhb-Latn-GA", + "mhb-Latn": "mhb-Latn-GA", + "mhc": "mhc-Latn-MX", + "mhc-Latn": "mhc-Latn-MX", + "mhc-MX": "mhc-Latn-MX", + "mhd": "mhd-Latn-TZ", + "mhd-Latn": "mhd-Latn-TZ", + "mhd-TZ": "mhd-Latn-TZ", + "mhe": "mhe-Latn-MY", + "mhe-Latn": "mhe-Latn-MY", + "mhe-MY": "mhe-Latn-MY", + "mhf": "mhf-Latn-PG", + "mhf-Latn": "mhf-Latn-PG", + "mhf-PG": "mhf-Latn-PG", + "mhg": "mhg-Latn-AU", + "mhg-AU": "mhg-Latn-AU", + "mhg-Latn": "mhg-Latn-AU", + "mhi": "mhi-Latn-UG", + "mhi-Latn": "mhi-Latn-UG", + "mhi-UG": "mhi-Latn-UG", + "mhj": "mhj-Arab-AF", + "mhj-AF": "mhj-Arab-AF", + "mhj-Arab": "mhj-Arab-AF", + "mhk": "mhk-Latn-CM", + "mhk-CM": "mhk-Latn-CM", + "mhk-Latn": "mhk-Latn-CM", + "mhl": "mhl-Latn-PG", + "mhl-Latn": "mhl-Latn-PG", + "mhl-PG": "mhl-Latn-PG", + "mhm": "mhm-Latn-MZ", + "mhm-Latn": "mhm-Latn-MZ", + "mhm-MZ": "mhm-Latn-MZ", + "mhn": "mhn-Latn-IT", + "mhn-IT": "mhn-Latn-IT", + "mhn-Latn": "mhn-Latn-IT", + "mho": "mho-Latn-ZM", + "mho-Latn": "mho-Latn-ZM", + "mho-ZM": "mho-Latn-ZM", + "mhp": "mhp-Latn-ID", + "mhp-ID": "mhp-Latn-ID", + "mhp-Latn": "mhp-Latn-ID", + "mhq": "mhq-Latn-US", + "mhq-Latn": "mhq-Latn-US", + "mhq-US": "mhq-Latn-US", + "mhs": "mhs-Latn-ID", + "mhs-ID": "mhs-Latn-ID", + "mhs-Latn": "mhs-Latn-ID", + "mht": "mht-Latn-VE", + "mht-Latn": "mht-Latn-VE", + "mht-VE": "mht-Latn-VE", + "mhu": "mhu-Latn-IN", + "mhu-IN": "mhu-Latn-IN", + "mhu-Latn": "mhu-Latn-IN", + "mhw": "mhw-Latn-BW", + "mhw-BW": "mhw-Latn-BW", + "mhw-Latn": "mhw-Latn-BW", + "mhx": "mhx-Latn-MM", + "mhx-Latn": "mhx-Latn-MM", + "mhx-MM": "mhx-Latn-MM", + "mhy": "mhy-Latn-ID", + "mhy-ID": "mhy-Latn-ID", + "mhy-Latn": "mhy-Latn-ID", + "mhz": "mhz-Latn-ID", + "mhz-ID": "mhz-Latn-ID", + "mhz-Latn": "mhz-Latn-ID", + "mi": "mi-Latn-NZ", + "mi-Latn": "mi-Latn-NZ", + "mi-NZ": "mi-Latn-NZ", + "mia": "mia-Latn-US", + "mia-Latn": "mia-Latn-US", + "mia-US": "mia-Latn-US", + "mib": "mib-Latn-MX", + "mib-Latn": "mib-Latn-MX", + "mib-MX": "mib-Latn-MX", + "mic": "mic-Latn-CA", + "mic-CA": "mic-Latn-CA", + "mic-Latn": "mic-Latn-CA", + "mid": "mid-Mand-IQ", + "mid-IQ": "mid-Mand-IQ", + "mid-Mand": "mid-Mand-IQ", + "mie": "mie-Latn-MX", + "mie-Latn": "mie-Latn-MX", + "mie-MX": "mie-Latn-MX", + "mif": "mif-Latn-CM", + "mif-CM": "mif-Latn-CM", + "mif-Latn": "mif-Latn-CM", + "mig": "mig-Latn-MX", + "mig-Latn": "mig-Latn-MX", + "mig-MX": "mig-Latn-MX", + "mih": "mih-Latn-MX", + "mih-Latn": "mih-Latn-MX", + "mih-MX": "mih-Latn-MX", + "mii": "mii-Latn-MX", + "mii-Latn": "mii-Latn-MX", + "mii-MX": "mii-Latn-MX", + "mij": "mij-Latn-CM", + "mij-CM": "mij-Latn-CM", + "mij-Latn": "mij-Latn-CM", + "mik": "mik-Latn-US", + "mik-Latn": "mik-Latn-US", + "mik-US": "mik-Latn-US", + "mil": "mil-Latn-MX", + "mil-Latn": "mil-Latn-MX", + "mil-MX": "mil-Latn-MX", + "mim": "mim-Latn-MX", + "mim-Latn": "mim-Latn-MX", + "mim-MX": "mim-Latn-MX", + "min": "min-Latn-ID", + "min-ID": "min-Latn-ID", + "min-Latn": "min-Latn-ID", + "mio": "mio-Latn-MX", + "mio-Latn": "mio-Latn-MX", + "mio-MX": "mio-Latn-MX", + "mip": "mip-Latn-MX", + "mip-Latn": "mip-Latn-MX", + "mip-MX": "mip-Latn-MX", + "miq": "miq-Latn-NI", + "miq-Latn": "miq-Latn-NI", + "miq-NI": "miq-Latn-NI", + "mir": "mir-Latn-MX", + "mir-Latn": "mir-Latn-MX", + "mir-MX": "mir-Latn-MX", + "mit": "mit-Latn-MX", + "mit-Latn": "mit-Latn-MX", + "mit-MX": "mit-Latn-MX", + "miu": "miu-Latn-MX", + "miu-Latn": "miu-Latn-MX", + "miu-MX": "miu-Latn-MX", + "miw": "miw-Latn-PG", + "miw-Latn": "miw-Latn-PG", + "miw-PG": "miw-Latn-PG", + "mix": "mix-Latn-MX", + "mix-Latn": "mix-Latn-MX", + "mix-MX": "mix-Latn-MX", + "miy": "miy-Latn-MX", + "miy-Latn": "miy-Latn-MX", + "miy-MX": "miy-Latn-MX", + "miz": "miz-Latn-MX", + "miz-Latn": "miz-Latn-MX", + "miz-MX": "miz-Latn-MX", + "mjb": "mjb-Latn-TL", + "mjb-Latn": "mjb-Latn-TL", + "mjb-TL": "mjb-Latn-TL", + "mjc": "mjc-Latn-MX", + "mjc-Latn": "mjc-Latn-MX", + "mjc-MX": "mjc-Latn-MX", + "mjd": "mjd-Latn-US", + "mjd-Latn": "mjd-Latn-US", + "mjd-US": "mjd-Latn-US", + "mje": "mje-Latn-TD", + "mje-Latn": "mje-Latn-TD", + "mje-TD": "mje-Latn-TD", + "mjg": "mjg-Latn-CN", + "mjg-CN": "mjg-Latn-CN", + "mjg-Latn": "mjg-Latn-CN", + "mjh": "mjh-Latn-TZ", + "mjh-Latn": "mjh-Latn-TZ", + "mjh-TZ": "mjh-Latn-TZ", + "mji": "mji-Latn-CN", + "mji-CN": "mji-Latn-CN", + "mji-Latn": "mji-Latn-CN", + "mjj": "mjj-Latn-PG", + "mjj-Latn": "mjj-Latn-PG", + "mjj-PG": "mjj-Latn-PG", + "mjk": "mjk-Latn-PG", + "mjk-Latn": "mjk-Latn-PG", + "mjk-PG": "mjk-Latn-PG", + "mjl": "mjl-Deva-IN", + "mjl-Deva": "mjl-Deva-IN", + "mjl-IN": "mjl-Deva-IN", + "mjm": "mjm-Latn-PG", + "mjm-Latn": "mjm-Latn-PG", + "mjm-PG": "mjm-Latn-PG", + "mjn": "mjn-Latn-PG", + "mjn-Latn": "mjn-Latn-PG", + "mjn-PG": "mjn-Latn-PG", + "mjq": "mjq-Mlym-IN", + "mjq-IN": "mjq-Mlym-IN", + "mjq-Mlym": "mjq-Mlym-IN", + "mjr": "mjr-Mlym-IN", + "mjr-IN": "mjr-Mlym-IN", + "mjr-Mlym": "mjr-Mlym-IN", + "mjs": "mjs-Latn-NG", + "mjs-Latn": "mjs-Latn-NG", + "mjs-NG": "mjs-Latn-NG", + "mjt": "mjt-Deva-IN", + "mjt-Deva": "mjt-Deva-IN", + "mjt-IN": "mjt-Deva-IN", + "mju": "mju-Telu-IN", + "mju-IN": "mju-Telu-IN", + "mju-Telu": "mju-Telu-IN", + "mjv": "mjv-Mlym-IN", + "mjv-IN": "mjv-Mlym-IN", + "mjv-Mlym": "mjv-Mlym-IN", + "mjw": "mjw-Latn-IN", + "mjw-IN": "mjw-Latn-IN", + "mjw-Latn": "mjw-Latn-IN", + "mjx": "mjx-Latn-BD", + "mjx-BD": "mjx-Latn-BD", + "mjx-Latn": "mjx-Latn-BD", + "mjy": "mjy-Latn-US", + "mjy-Latn": "mjy-Latn-US", + "mjy-US": "mjy-Latn-US", + "mjz": "mjz-Deva-NP", + "mjz-Deva": "mjz-Deva-NP", + "mjz-NP": "mjz-Deva-NP", + "mk": "mk-Cyrl-MK", + "mk-Cyrl": "mk-Cyrl-MK", + "mk-Cyrl-AL": "mk-Cyrl-AL", + "mk-Cyrl-GR": "mk-Cyrl-GR", + "mk-Cyrl-MK": "mk-Cyrl-MK", + "mk-MK": "mk-Cyrl-MK", + "mka": "mka-Latn-CI", + "mka-CI": "mka-Latn-CI", + "mka-Latn": "mka-Latn-CI", + "mkb": "mkb-Deva-IN", + "mkb-Deva": "mkb-Deva-IN", + "mkb-IN": "mkb-Deva-IN", + "mkc": "mkc-Latn-PG", + "mkc-Latn": "mkc-Latn-PG", + "mkc-PG": "mkc-Latn-PG", + "mke": "mke-Deva-IN", + "mke-Deva": "mke-Deva-IN", + "mke-IN": "mke-Deva-IN", + "mkf": "mkf-Latn-NG", + "mkf-Latn": "mkf-Latn-NG", + "mkf-NG": "mkf-Latn-NG", + "mki": "mki-Arab-PK", + "mki-Arab": "mki-Arab-PK", + "mki-PK": "mki-Arab-PK", + "mkj": "mkj-Latn-FM", + "mkj-FM": "mkj-Latn-FM", + "mkj-Latn": "mkj-Latn-FM", + "mkk": "mkk-Latn-CM", + "mkk-CM": "mkk-Latn-CM", + "mkk-Latn": "mkk-Latn-CM", + "mkl": "mkl-Latn-BJ", + "mkl-BJ": "mkl-Latn-BJ", + "mkl-Latn": "mkl-Latn-BJ", + "mkm": "mkm-Thai-TH", + "mkm-TH": "mkm-Thai-TH", + "mkm-Thai": "mkm-Thai-TH", + "mkn": "mkn-Latn-ID", + "mkn-ID": "mkn-Latn-ID", + "mkn-Latn": "mkn-Latn-ID", + "mko": "mko-Latn-NG", + "mko-Latn": "mko-Latn-NG", + "mko-NG": "mko-Latn-NG", + "mkp": "mkp-Latn-PG", + "mkp-Latn": "mkp-Latn-PG", + "mkp-PG": "mkp-Latn-PG", + "mkr": "mkr-Latn-PG", + "mkr-Latn": "mkr-Latn-PG", + "mkr-PG": "mkr-Latn-PG", + "mks": "mks-Latn-MX", + "mks-Latn": "mks-Latn-MX", + "mks-MX": "mks-Latn-MX", + "mkt": "mkt-Latn-NC", + "mkt-Latn": "mkt-Latn-NC", + "mkt-NC": "mkt-Latn-NC", + "mku": "mku-Latn-GN", + "mku-GN": "mku-Latn-GN", + "mku-Latn": "mku-Latn-GN", + "mkv": "mkv-Latn-VU", + "mkv-Latn": "mkv-Latn-VU", + "mkv-VU": "mkv-Latn-VU", + "mkw": "mkw-Latn-CG", + "mkw-CG": "mkw-Latn-CG", + "mkw-Latn": "mkw-Latn-CG", + "mkx": "mkx-Latn-PH", + "mkx-Latn": "mkx-Latn-PH", + "mkx-PH": "mkx-Latn-PH", + "mky": "mky-Latn-ID", + "mky-ID": "mky-Latn-ID", + "mky-Latn": "mky-Latn-ID", + "mkz": "mkz-Latn-TL", + "mkz-Latn": "mkz-Latn-TL", + "mkz-TL": "mkz-Latn-TL", + "ml": "ml-Mlym-IN", + "ml-IN": "ml-Mlym-IN", + "ml-Mlym": "ml-Mlym-IN", + "ml-XX": "ml-Mlym-XX", + "mla": "mla-Latn-VU", + "mla-Latn": "mla-Latn-VU", + "mla-VU": "mla-Latn-VU", + "mlb": "mlb-Latn-CM", + "mlb-CM": "mlb-Latn-CM", + "mlb-Latn": "mlb-Latn-CM", + "mlc": "mlc-Latn-VN", + "mlc-Latn": "mlc-Latn-VN", + "mlc-VN": "mlc-Latn-VN", + "mle": "mle-Latn-PG", + "mle-Latn": "mle-Latn-PG", + "mle-PG": "mle-Latn-PG", + "mlf": "mlf-Thai-LA", + "mlf-LA": "mlf-Thai-LA", + "mlf-Thai": "mlf-Thai-LA", + "mlh": "mlh-Latn-PG", + "mlh-Latn": "mlh-Latn-PG", + "mlh-PG": "mlh-Latn-PG", + "mli": "mli-Latn-ID", + "mli-ID": "mli-Latn-ID", + "mli-Latn": "mli-Latn-ID", + "mlj": "mlj-Latn-TD", + "mlj-Latn": "mlj-Latn-TD", + "mlj-TD": "mlj-Latn-TD", + "mlk": "mlk-Latn-KE", + "mlk-KE": "mlk-Latn-KE", + "mlk-Latn": "mlk-Latn-KE", + "mll": "mll-Latn-VU", + "mll-Latn": "mll-Latn-VU", + "mll-VU": "mll-Latn-VU", + "mln": "mln-Latn-SB", + "mln-Latn": "mln-Latn-SB", + "mln-SB": "mln-Latn-SB", + "mlo": "mlo-Latn-SN", + "mlo-Latn": "mlo-Latn-SN", + "mlo-SN": "mlo-Latn-SN", + "mlp": "mlp-Latn-PG", + "mlp-Latn": "mlp-Latn-PG", + "mlp-PG": "mlp-Latn-PG", + "mlq": "mlq-Latn-SN", + "mlq-Latn": "mlq-Latn-SN", + "mlq-SN": "mlq-Latn-SN", + "mlr": "mlr-Latn-CM", + "mlr-CM": "mlr-Latn-CM", + "mlr-Latn": "mlr-Latn-CM", + "mls": "mls-Latn-SD", + "mls-Latn": "mls-Latn-SD", + "mls-SD": "mls-Latn-SD", + "mlu": "mlu-Latn-SB", + "mlu-Latn": "mlu-Latn-SB", + "mlu-SB": "mlu-Latn-SB", + "mlv": "mlv-Latn-VU", + "mlv-Latn": "mlv-Latn-VU", + "mlv-VU": "mlv-Latn-VU", + "mlw": "mlw-Latn-CM", + "mlw-CM": "mlw-Latn-CM", + "mlw-Latn": "mlw-Latn-CM", + "mlx": "mlx-Latn-VU", + "mlx-Latn": "mlx-Latn-VU", + "mlx-VU": "mlx-Latn-VU", + "mlz": "mlz-Latn-PH", + "mlz-Latn": "mlz-Latn-PH", + "mlz-PH": "mlz-Latn-PH", + "mma": "mma-Latn-NG", + "mma-Latn": "mma-Latn-NG", + "mma-NG": "mma-Latn-NG", + "mmb": "mmb-Latn-ID", + "mmb-ID": "mmb-Latn-ID", + "mmb-Latn": "mmb-Latn-ID", + "mmc": "mmc-Latn-MX", + "mmc-Latn": "mmc-Latn-MX", + "mmc-MX": "mmc-Latn-MX", + "mmd": "mmd-Latn-CN", + "mmd-CN": "mmd-Latn-CN", + "mmd-Latn": "mmd-Latn-CN", + "mme": "mme-Latn-VU", + "mme-Latn": "mme-Latn-VU", + "mme-VU": "mme-Latn-VU", + "mmf": "mmf-Latn-NG", + "mmf-Latn": "mmf-Latn-NG", + "mmf-NG": "mmf-Latn-NG", + "mmg": "mmg-Latn-VU", + "mmg-Latn": "mmg-Latn-VU", + "mmg-VU": "mmg-Latn-VU", + "mmh": "mmh-Latn-BR", + "mmh-BR": "mmh-Latn-BR", + "mmh-Latn": "mmh-Latn-BR", + "mmi": "mmi-Latn-PG", + "mmi-Latn": "mmi-Latn-PG", + "mmi-PG": "mmi-Latn-PG", + "mmm": "mmm-Latn-VU", + "mmm-Latn": "mmm-Latn-VU", + "mmm-VU": "mmm-Latn-VU", + "mmn": "mmn-Latn-PH", + "mmn-Latn": "mmn-Latn-PH", + "mmn-PH": "mmn-Latn-PH", + "mmo": "mmo-Latn-PG", + "mmo-Latn": "mmo-Latn-PG", + "mmo-PG": "mmo-Latn-PG", + "mmp": "mmp-Latn-PG", + "mmp-Latn": "mmp-Latn-PG", + "mmp-PG": "mmp-Latn-PG", + "mmq": "mmq-Latn-PG", + "mmq-Latn": "mmq-Latn-PG", + "mmq-PG": "mmq-Latn-PG", + "mmr": "mmr-Latn-CN", + "mmr-CN": "mmr-Latn-CN", + "mmr-Latn": "mmr-Latn-CN", + "mmt": "mmt-Latn-PG", + "mmt-Latn": "mmt-Latn-PG", + "mmt-PG": "mmt-Latn-PG", + "mmu": "mmu-Latn-CM", + "mmu-CM": "mmu-Latn-CM", + "mmu-Latn": "mmu-Latn-CM", + "mmv": "mmv-Latn-BR", + "mmv-BR": "mmv-Latn-BR", + "mmv-Latn": "mmv-Latn-BR", + "mmw": "mmw-Latn-VU", + "mmw-Latn": "mmw-Latn-VU", + "mmw-VU": "mmw-Latn-VU", + "mmx": "mmx-Latn-PG", + "mmx-Latn": "mmx-Latn-PG", + "mmx-PG": "mmx-Latn-PG", + "mmy": "mmy-Latn-TD", + "mmy-Latn": "mmy-Latn-TD", + "mmy-TD": "mmy-Latn-TD", + "mmz": "mmz-Latn-CD", + "mmz-CD": "mmz-Latn-CD", + "mmz-Latn": "mmz-Latn-CD", + "mn": "mn-Cyrl-MN", + "mn-CN": "mn-Mong-CN", + "mn-Cyrl": "mn-Cyrl-MN", + "mn-Cyrl-MN": "mn-Cyrl-MN", + "mn-MN": "mn-Cyrl-MN", + "mn-Mong": "mn-Mong-CN", + "mna": "mna-Latn-PG", + "mna-Latn": "mna-Latn-PG", + "mna-PG": "mna-Latn-PG", + "mnb": "mnb-Latn-ID", + "mnb-ID": "mnb-Latn-ID", + "mnb-Latn": "mnb-Latn-ID", + "mnc": "mnc-Mong-CN", + "mnc-CN": "mnc-Mong-CN", + "mnc-Mong": "mnc-Mong-CN", + "mnd": "mnd-Latn-BR", + "mnd-BR": "mnd-Latn-BR", + "mnd-Latn": "mnd-Latn-BR", + "mne": "mne-Latn-TD", + "mne-Latn": "mne-Latn-TD", + "mne-TD": "mne-Latn-TD", + "mnf": "mnf-Latn-CM", + "mnf-CM": "mnf-Latn-CM", + "mnf-Latn": "mnf-Latn-CM", + "mng": "mng-Latn-VN", + "mng-Latn": "mng-Latn-VN", + "mng-VN": "mng-Latn-VN", + "mnh": "mnh-Latn-CD", + "mnh-CD": "mnh-Latn-CD", + "mnh-Latn": "mnh-Latn-CD", + "mni": "mni-Beng-IN", + "mni-Beng": "mni-Beng-IN", + "mni-IN": "mni-Beng-IN", + "mni-Mtei": "mni-Mtei-IN", + "mnj": "mnj-Arab-AF", + "mnj-AF": "mnj-Arab-AF", + "mnj-Arab": "mnj-Arab-AF", + "mnl": "mnl-Latn-VU", + "mnl-Latn": "mnl-Latn-VU", + "mnl-VU": "mnl-Latn-VU", + "mnm": "mnm-Latn-PG", + "mnm-Latn": "mnm-Latn-PG", + "mnm-PG": "mnm-Latn-PG", + "mnn": "mnn-Latn-VN", + "mnn-Latn": "mnn-Latn-VN", + "mnn-VN": "mnn-Latn-VN", + "mnp": "mnp-Latn-CN", + "mnp-CN": "mnp-Latn-CN", + "mnp-Latn": "mnp-Latn-CN", + "mnq": "mnq-Latn-MY", + "mnq-Latn": "mnq-Latn-MY", + "mnq-MY": "mnq-Latn-MY", + "mnr": "mnr-Latn-US", + "mnr-Latn": "mnr-Latn-US", + "mnr-US": "mnr-Latn-US", + "mns": "mns-Cyrl-RU", + "mns-Cyrl": "mns-Cyrl-RU", + "mns-RU": "mns-Cyrl-RU", + "mnu": "mnu-Latn-ID", + "mnu-ID": "mnu-Latn-ID", + "mnu-Latn": "mnu-Latn-ID", + "mnv": "mnv-Latn-SB", + "mnv-Latn": "mnv-Latn-SB", + "mnv-SB": "mnv-Latn-SB", + "mnw": "mnw-Mymr-MM", + "mnw-MM": "mnw-Mymr-MM", + "mnw-Mymr": "mnw-Mymr-MM", + "mnw-Mymr-TH": "mnw-Mymr-TH", + "mnx": "mnx-Latn-ID", + "mnx-ID": "mnx-Latn-ID", + "mnx-Latn": "mnx-Latn-ID", + "mny": "mny-Latn-MZ", + "mny-Latn": "mny-Latn-MZ", + "mny-MZ": "mny-Latn-MZ", + "mnz": "mnz-Latn-ID", + "mnz-ID": "mnz-Latn-ID", + "mnz-Latn": "mnz-Latn-ID", + "mo": "mo-Latn-RO", + "mo-Latn": "mo-Latn-RO", + "mo-RO": "mo-Latn-RO", + "moa": "moa-Latn-CI", + "moa-CI": "moa-Latn-CI", + "moa-Latn": "moa-Latn-CI", + "moc": "moc-Latn-AR", + "moc-AR": "moc-Latn-AR", + "moc-Latn": "moc-Latn-AR", + "mod": "mod-Latn-US", + "mod-Latn": "mod-Latn-US", + "mod-US": "mod-Latn-US", + "moe": "moe-Latn-CA", + "moe-CA": "moe-Latn-CA", + "moe-Latn": "moe-Latn-CA", + "mog": "mog-Latn-ID", + "mog-ID": "mog-Latn-ID", + "mog-Latn": "mog-Latn-ID", + "moh": "moh-Latn-CA", + "moh-CA": "moh-Latn-CA", + "moh-Latn": "moh-Latn-CA", + "moi": "moi-Latn-NG", + "moi-Latn": "moi-Latn-NG", + "moi-NG": "moi-Latn-NG", + "moj": "moj-Latn-CG", + "moj-CG": "moj-Latn-CG", + "moj-Latn": "moj-Latn-CG", + "mok": "mok-Latn-ID", + "mok-ID": "mok-Latn-ID", + "mok-Latn": "mok-Latn-ID", + "mom": "mom-Latn-NI", + "mom-Latn": "mom-Latn-NI", + "mom-NI": "mom-Latn-NI", + "moo": "moo-Latn-VN", + "moo-Latn": "moo-Latn-VN", + "moo-VN": "moo-Latn-VN", + "mop": "mop-Latn-BZ", + "mop-BZ": "mop-Latn-BZ", + "mop-Latn": "mop-Latn-BZ", + "moq": "moq-Latn-ID", + "moq-ID": "moq-Latn-ID", + "moq-Latn": "moq-Latn-ID", + "mor": "mor-Latn-SD", + "mor-Latn": "mor-Latn-SD", + "mor-SD": "mor-Latn-SD", + "mos": "mos-Latn-BF", + "mos-BF": "mos-Latn-BF", + "mos-Latn": "mos-Latn-BF", + "mot": "mot-Latn-CO", + "mot-CO": "mot-Latn-CO", + "mot-Latn": "mot-Latn-CO", + "mou": "mou-Latn-TD", + "mou-Latn": "mou-Latn-TD", + "mou-TD": "mou-Latn-TD", + "mov": "mov-Latn-US", + "mov-Latn": "mov-Latn-US", + "mov-US": "mov-Latn-US", + "mow": "mow-Latn-CG", + "mow-CG": "mow-Latn-CG", + "mow-Latn": "mow-Latn-CG", + "mox": "mox-Latn-PG", + "mox-Latn": "mox-Latn-PG", + "mox-PG": "mox-Latn-PG", + "moy": "moy-Latn-ET", + "moy-ET": "moy-Latn-ET", + "moy-Latn": "moy-Latn-ET", + "moz": "moz-Latn-TD", + "moz-Latn": "moz-Latn-TD", + "moz-TD": "moz-Latn-TD", + "mpa": "mpa-Latn-TZ", + "mpa-Latn": "mpa-Latn-TZ", + "mpa-TZ": "mpa-Latn-TZ", + "mpb": "mpb-Latn-AU", + "mpb-AU": "mpb-Latn-AU", + "mpb-Latn": "mpb-Latn-AU", + "mpc": "mpc-Latn-AU", + "mpc-AU": "mpc-Latn-AU", + "mpc-Latn": "mpc-Latn-AU", + "mpd": "mpd-Latn-BR", + "mpd-BR": "mpd-Latn-BR", + "mpd-Latn": "mpd-Latn-BR", + "mpe": "mpe-Latn-ET", + "mpe-ET": "mpe-Latn-ET", + "mpe-Latn": "mpe-Latn-ET", + "mpg": "mpg-Latn-TD", + "mpg-Latn": "mpg-Latn-TD", + "mpg-TD": "mpg-Latn-TD", + "mph": "mph-Latn-AU", + "mph-AU": "mph-Latn-AU", + "mph-Latn": "mph-Latn-AU", + "mpi": "mpi-Latn-CM", + "mpi-CM": "mpi-Latn-CM", + "mpi-Latn": "mpi-Latn-CM", + "mpj": "mpj-Latn-AU", + "mpj-AU": "mpj-Latn-AU", + "mpj-Latn": "mpj-Latn-AU", + "mpk": "mpk-Latn-TD", + "mpk-Latn": "mpk-Latn-TD", + "mpk-TD": "mpk-Latn-TD", + "mpl": "mpl-Latn-PG", + "mpl-Latn": "mpl-Latn-PG", + "mpl-PG": "mpl-Latn-PG", + "mpm": "mpm-Latn-MX", + "mpm-Latn": "mpm-Latn-MX", + "mpm-MX": "mpm-Latn-MX", + "mpn": "mpn-Latn-PG", + "mpn-Latn": "mpn-Latn-PG", + "mpn-PG": "mpn-Latn-PG", + "mpo": "mpo-Latn-PG", + "mpo-Latn": "mpo-Latn-PG", + "mpo-PG": "mpo-Latn-PG", + "mpp": "mpp-Latn-PG", + "mpp-Latn": "mpp-Latn-PG", + "mpp-PG": "mpp-Latn-PG", + "mpq": "mpq-Latn-BR", + "mpq-BR": "mpq-Latn-BR", + "mpq-Latn": "mpq-Latn-BR", + "mpr": "mpr-Latn-SB", + "mpr-Latn": "mpr-Latn-SB", + "mpr-SB": "mpr-Latn-SB", + "mps": "mps-Latn-PG", + "mps-Latn": "mps-Latn-PG", + "mps-PG": "mps-Latn-PG", + "mpt": "mpt-Latn-PG", + "mpt-Latn": "mpt-Latn-PG", + "mpt-PG": "mpt-Latn-PG", + "mpu": "mpu-Latn-BR", + "mpu-BR": "mpu-Latn-BR", + "mpu-Latn": "mpu-Latn-BR", + "mpv": "mpv-Latn-PG", + "mpv-Latn": "mpv-Latn-PG", + "mpv-PG": "mpv-Latn-PG", + "mpw": "mpw-Latn-BR", + "mpw-BR": "mpw-Latn-BR", + "mpw-Latn": "mpw-Latn-BR", + "mpx": "mpx-Latn-PG", + "mpx-Latn": "mpx-Latn-PG", + "mpx-PG": "mpx-Latn-PG", + "mpy": "mpy-Latn-ID", + "mpy-ID": "mpy-Latn-ID", + "mpy-Latn": "mpy-Latn-ID", + "mpz": "mpz-Thai-TH", + "mpz-TH": "mpz-Thai-TH", + "mpz-Thai": "mpz-Thai-TH", + "mqa": "mqa-Latn-ID", + "mqa-ID": "mqa-Latn-ID", + "mqa-Latn": "mqa-Latn-ID", + "mqb": "mqb-Latn-CM", + "mqb-CM": "mqb-Latn-CM", + "mqb-Latn": "mqb-Latn-CM", + "mqc": "mqc-Latn-ID", + "mqc-ID": "mqc-Latn-ID", + "mqc-Latn": "mqc-Latn-ID", + "mqe": "mqe-Latn-PG", + "mqe-Latn": "mqe-Latn-PG", + "mqe-PG": "mqe-Latn-PG", + "mqf": "mqf-Latn-ID", + "mqf-ID": "mqf-Latn-ID", + "mqf-Latn": "mqf-Latn-ID", + "mqg": "mqg-Latn-ID", + "mqg-ID": "mqg-Latn-ID", + "mqg-Latn": "mqg-Latn-ID", + "mqh": "mqh-Latn-MX", + "mqh-Latn": "mqh-Latn-MX", + "mqh-MX": "mqh-Latn-MX", + "mqi": "mqi-Latn-ID", + "mqi-ID": "mqi-Latn-ID", + "mqi-Latn": "mqi-Latn-ID", + "mqj": "mqj-Latn-ID", + "mqj-ID": "mqj-Latn-ID", + "mqj-Latn": "mqj-Latn-ID", + "mqk": "mqk-Latn-PH", + "mqk-Latn": "mqk-Latn-PH", + "mqk-PH": "mqk-Latn-PH", + "mql": "mql-Latn-BJ", + "mql-BJ": "mql-Latn-BJ", + "mql-Latn": "mql-Latn-BJ", + "mqm": "mqm-Latn-PF", + "mqm-Latn": "mqm-Latn-PF", + "mqm-PF": "mqm-Latn-PF", + "mqn": "mqn-Latn-ID", + "mqn-ID": "mqn-Latn-ID", + "mqn-Latn": "mqn-Latn-ID", + "mqo": "mqo-Latn-ID", + "mqo-ID": "mqo-Latn-ID", + "mqo-Latn": "mqo-Latn-ID", + "mqp": "mqp-Latn-ID", + "mqp-ID": "mqp-Latn-ID", + "mqp-Latn": "mqp-Latn-ID", + "mqq": "mqq-Latn-MY", + "mqq-Latn": "mqq-Latn-MY", + "mqq-MY": "mqq-Latn-MY", + "mqr": "mqr-Latn-ID", + "mqr-ID": "mqr-Latn-ID", + "mqr-Latn": "mqr-Latn-ID", + "mqs": "mqs-Latn-ID", + "mqs-ID": "mqs-Latn-ID", + "mqs-Latn": "mqs-Latn-ID", + "mqu": "mqu-Latn-SS", + "mqu-Latn": "mqu-Latn-SS", + "mqu-SS": "mqu-Latn-SS", + "mqv": "mqv-Latn-PG", + "mqv-Latn": "mqv-Latn-PG", + "mqv-PG": "mqv-Latn-PG", + "mqw": "mqw-Latn-PG", + "mqw-Latn": "mqw-Latn-PG", + "mqw-PG": "mqw-Latn-PG", + "mqx": "mqx-Latn-ID", + "mqx-ID": "mqx-Latn-ID", + "mqx-Latn": "mqx-Latn-ID", + "mqy": "mqy-Latn-ID", + "mqy-ID": "mqy-Latn-ID", + "mqy-Latn": "mqy-Latn-ID", + "mqz": "mqz-Latn-PG", + "mqz-Latn": "mqz-Latn-PG", + "mqz-PG": "mqz-Latn-PG", + "mr": "mr-Deva-IN", + "mr-Deva": "mr-Deva-IN", + "mr-IN": "mr-Deva-IN", + "mr-Modi": "mr-Modi-IN", + "mr-XX": "mr-Deva-XX", + "mra": "mra-Thai-TH", + "mra-TH": "mra-Thai-TH", + "mra-Thai": "mra-Thai-TH", + "mrb": "mrb-Latn-VU", + "mrb-Latn": "mrb-Latn-VU", + "mrb-VU": "mrb-Latn-VU", + "mrc": "mrc-Latn-US", + "mrc-Latn": "mrc-Latn-US", + "mrc-US": "mrc-Latn-US", + "mrd": "mrd-Deva-NP", + "mrd-Deva": "mrd-Deva-NP", + "mrd-NP": "mrd-Deva-NP", + "mrf": "mrf-Latn-ID", + "mrf-ID": "mrf-Latn-ID", + "mrf-Latn": "mrf-Latn-ID", + "mrg": "mrg-Latn-IN", + "mrg-IN": "mrg-Latn-IN", + "mrg-Latn": "mrg-Latn-IN", + "mrh": "mrh-Latn-IN", + "mrh-IN": "mrh-Latn-IN", + "mrh-Latn": "mrh-Latn-IN", + "mrj": "mrj-Cyrl-RU", + "mrj-Cyrl": "mrj-Cyrl-RU", + "mrj-RU": "mrj-Cyrl-RU", + "mrk": "mrk-Latn-NC", + "mrk-Latn": "mrk-Latn-NC", + "mrk-NC": "mrk-Latn-NC", + "mrl": "mrl-Latn-FM", + "mrl-FM": "mrl-Latn-FM", + "mrl-Latn": "mrl-Latn-FM", + "mrm": "mrm-Latn-VU", + "mrm-Latn": "mrm-Latn-VU", + "mrm-VU": "mrm-Latn-VU", + "mrn": "mrn-Latn-SB", + "mrn-Latn": "mrn-Latn-SB", + "mrn-SB": "mrn-Latn-SB", + "mro": "mro-Mroo-BD", + "mro-BD": "mro-Mroo-BD", + "mro-Mroo": "mro-Mroo-BD", + "mrp": "mrp-Latn-VU", + "mrp-Latn": "mrp-Latn-VU", + "mrp-VU": "mrp-Latn-VU", + "mrq": "mrq-Latn-PF", + "mrq-Latn": "mrq-Latn-PF", + "mrq-PF": "mrq-Latn-PF", + "mrr": "mrr-Deva-IN", + "mrr-Deva": "mrr-Deva-IN", + "mrr-IN": "mrr-Deva-IN", + "mrs": "mrs-Latn-VU", + "mrs-Latn": "mrs-Latn-VU", + "mrs-VU": "mrs-Latn-VU", + "mrt": "mrt-Latn-NG", + "mrt-Latn": "mrt-Latn-NG", + "mrt-NG": "mrt-Latn-NG", + "mru": "mru-Latn-CM", + "mru-CM": "mru-Latn-CM", + "mru-Latn": "mru-Latn-CM", + "mrv": "mrv-Latn-PF", + "mrv-Latn": "mrv-Latn-PF", + "mrv-PF": "mrv-Latn-PF", + "mrw": "mrw-Latn-PH", + "mrw-Latn": "mrw-Latn-PH", + "mrw-PH": "mrw-Latn-PH", + "mrx": "mrx-Latn-ID", + "mrx-ID": "mrx-Latn-ID", + "mrx-Latn": "mrx-Latn-ID", + "mry": "mry-Latn-PH", + "mry-Latn": "mry-Latn-PH", + "mry-PH": "mry-Latn-PH", + "mrz": "mrz-Latn-ID", + "mrz-ID": "mrz-Latn-ID", + "mrz-Latn": "mrz-Latn-ID", + "ms": "ms-Latn-MY", + "ms-Arab": "ms-Arab-CC", + "ms-Arab-BN": "ms-Arab-BN", + "ms-Arab-CC": "ms-Arab-CC", + "ms-Arab-ID": "ms-Arab-ID", + "ms-BN": "ms-Latn-BN", + "ms-CC": "ms-Arab-CC", + "ms-Latn": "ms-Latn-MY", + "ms-MY": "ms-Latn-MY", + "ms-SG": "ms-Latn-SG", + "msb": "msb-Latn-PH", + "msb-Latn": "msb-Latn-PH", + "msb-PH": "msb-Latn-PH", + "msc": "msc-Latn-GN", + "msc-GN": "msc-Latn-GN", + "msc-Latn": "msc-Latn-GN", + "mse": "mse-Latn-TD", + "mse-Latn": "mse-Latn-TD", + "mse-TD": "mse-Latn-TD", + "msf": "msf-Latn-ID", + "msf-ID": "msf-Latn-ID", + "msf-Latn": "msf-Latn-ID", + "msg": "msg-Latn-ID", + "msg-ID": "msg-Latn-ID", + "msg-Latn": "msg-Latn-ID", + "msh": "msh-Latn-MG", + "msh-Latn": "msh-Latn-MG", + "msh-MG": "msh-Latn-MG", + "msi": "msi-Latn-MY", + "msi-Latn": "msi-Latn-MY", + "msi-MY": "msi-Latn-MY", + "msj": "msj-Latn-CD", + "msj-CD": "msj-Latn-CD", + "msj-Latn": "msj-Latn-CD", + "msk": "msk-Latn-PH", + "msk-Latn": "msk-Latn-PH", + "msk-PH": "msk-Latn-PH", + "msl": "msl-Latn-ID", + "msl-ID": "msl-Latn-ID", + "msl-Latn": "msl-Latn-ID", + "msm": "msm-Latn-PH", + "msm-Latn": "msm-Latn-PH", + "msm-PH": "msm-Latn-PH", + "msn": "msn-Latn-VU", + "msn-Latn": "msn-Latn-VU", + "msn-VU": "msn-Latn-VU", + "mso": "mso-Latn-ID", + "mso-ID": "mso-Latn-ID", + "mso-Latn": "mso-Latn-ID", + "msp": "msp-Latn-BR", + "msp-BR": "msp-Latn-BR", + "msp-Latn": "msp-Latn-BR", + "msq": "msq-Latn-NC", + "msq-Latn": "msq-Latn-NC", + "msq-NC": "msq-Latn-NC", + "mss": "mss-Latn-ID", + "mss-ID": "mss-Latn-ID", + "mss-Latn": "mss-Latn-ID", + "msu": "msu-Latn-PG", + "msu-Latn": "msu-Latn-PG", + "msu-PG": "msu-Latn-PG", + "msv": "msv-Latn-CM", + "msv-CM": "msv-Latn-CM", + "msv-Latn": "msv-Latn-CM", + "msw": "msw-Latn-GW", + "msw-GW": "msw-Latn-GW", + "msw-Latn": "msw-Latn-GW", + "msx": "msx-Latn-PG", + "msx-Latn": "msx-Latn-PG", + "msx-PG": "msx-Latn-PG", + "msy": "msy-Latn-PG", + "msy-Latn": "msy-Latn-PG", + "msy-PG": "msy-Latn-PG", + "msz": "msz-Latn-PG", + "msz-Latn": "msz-Latn-PG", + "msz-PG": "msz-Latn-PG", + "mt": "mt-Latn-MT", + "mt-Latn": "mt-Latn-MT", + "mt-MT": "mt-Latn-MT", + "mta": "mta-Latn-PH", + "mta-Latn": "mta-Latn-PH", + "mta-PH": "mta-Latn-PH", + "mtb": "mtb-Latn-CI", + "mtb-CI": "mtb-Latn-CI", + "mtb-Latn": "mtb-Latn-CI", + "mtc": "mtc-Latn-PG", + "mtc-Latn": "mtc-Latn-PG", + "mtc-PG": "mtc-Latn-PG", + "mtd": "mtd-Latn-ID", + "mtd-ID": "mtd-Latn-ID", + "mtd-Latn": "mtd-Latn-ID", + "mte": "mte-Latn-SB", + "mte-Latn": "mte-Latn-SB", + "mte-SB": "mte-Latn-SB", + "mtf": "mtf-Latn-PG", + "mtf-Latn": "mtf-Latn-PG", + "mtf-PG": "mtf-Latn-PG", + "mtg": "mtg-Latn-ID", + "mtg-ID": "mtg-Latn-ID", + "mtg-Latn": "mtg-Latn-ID", + "mth": "mth-Latn-ID", + "mth-ID": "mth-Latn-ID", + "mth-Latn": "mth-Latn-ID", + "mti": "mti-Latn-PG", + "mti-Latn": "mti-Latn-PG", + "mti-PG": "mti-Latn-PG", + "mtj": "mtj-Latn-ID", + "mtj-ID": "mtj-Latn-ID", + "mtj-Latn": "mtj-Latn-ID", + "mtk": "mtk-Latn-CM", + "mtk-CM": "mtk-Latn-CM", + "mtk-Latn": "mtk-Latn-CM", + "mtl": "mtl-Latn-NG", + "mtl-Latn": "mtl-Latn-NG", + "mtl-NG": "mtl-Latn-NG", + "mtm": "mtm-Cyrl-RU", + "mtm-Cyrl": "mtm-Cyrl-RU", + "mtm-RU": "mtm-Cyrl-RU", + "mtn": "mtn-Latn-NI", + "mtn-Latn": "mtn-Latn-NI", + "mtn-NI": "mtn-Latn-NI", + "mto": "mto-Latn-MX", + "mto-Latn": "mto-Latn-MX", + "mto-MX": "mto-Latn-MX", + "mtp": "mtp-Latn-BO", + "mtp-BO": "mtp-Latn-BO", + "mtp-Latn": "mtp-Latn-BO", + "mtq": "mtq-Latn-VN", + "mtq-Latn": "mtq-Latn-VN", + "mtq-VN": "mtq-Latn-VN", + "mtr": "mtr-Deva-IN", + "mtr-Deva": "mtr-Deva-IN", + "mtr-IN": "mtr-Deva-IN", + "mts": "mts-Latn-PE", + "mts-Latn": "mts-Latn-PE", + "mts-PE": "mts-Latn-PE", + "mtt": "mtt-Latn-VU", + "mtt-Latn": "mtt-Latn-VU", + "mtt-VU": "mtt-Latn-VU", + "mtu": "mtu-Latn-MX", + "mtu-Latn": "mtu-Latn-MX", + "mtu-MX": "mtu-Latn-MX", + "mtv": "mtv-Latn-PG", + "mtv-Latn": "mtv-Latn-PG", + "mtv-PG": "mtv-Latn-PG", + "mtw": "mtw-Latn-PH", + "mtw-Latn": "mtw-Latn-PH", + "mtw-PH": "mtw-Latn-PH", + "mtx": "mtx-Latn-MX", + "mtx-Latn": "mtx-Latn-MX", + "mtx-MX": "mtx-Latn-MX", + "mty": "mty-Latn-PG", + "mty-Latn": "mty-Latn-PG", + "mty-PG": "mty-Latn-PG", + "mua": "mua-Latn-CM", + "mua-CM": "mua-Latn-CM", + "mua-Latn": "mua-Latn-CM", + "mub": "mub-Latn-TD", + "mub-Latn": "mub-Latn-TD", + "mub-TD": "mub-Latn-TD", + "muc": "muc-Latn-CM", + "muc-CM": "muc-Latn-CM", + "muc-Latn": "muc-Latn-CM", + "mud": "mud-Cyrl-RU", + "mud-Cyrl": "mud-Cyrl-RU", + "mud-RU": "mud-Cyrl-RU", + "mue": "mue-Latn-EC", + "mue-EC": "mue-Latn-EC", + "mue-Latn": "mue-Latn-EC", + "mug": "mug-Latn-CM", + "mug-CM": "mug-Latn-CM", + "mug-Latn": "mug-Latn-CM", + "muh": "muh-Latn-SS", + "muh-Latn": "muh-Latn-SS", + "muh-SS": "muh-Latn-SS", + "mui": "mui-Latn-ID", + "mui-ID": "mui-Latn-ID", + "mui-Latn": "mui-Latn-ID", + "muj": "muj-Latn-TD", + "muj-Latn": "muj-Latn-TD", + "muj-TD": "muj-Latn-TD", + "muk": "muk-Tibt-NP", + "muk-NP": "muk-Tibt-NP", + "muk-Tibt": "muk-Tibt-NP", + "mum": "mum-Latn-PG", + "mum-Latn": "mum-Latn-PG", + "mum-PG": "mum-Latn-PG", + "muo": "muo-Latn-CM", + "muo-CM": "muo-Latn-CM", + "muo-Latn": "muo-Latn-CM", + "muq": "muq-Latn-CN", + "muq-CN": "muq-Latn-CN", + "muq-Latn": "muq-Latn-CN", + "mur": "mur-Latn-SS", + "mur-Latn": "mur-Latn-SS", + "mur-SS": "mur-Latn-SS", + "mus": "mus-Latn-US", + "mus-Latn": "mus-Latn-US", + "mus-US": "mus-Latn-US", + "mut": "mut-Deva-IN", + "mut-Deva": "mut-Deva-IN", + "mut-IN": "mut-Deva-IN", + "muu": "muu-Latn-KE", + "muu-KE": "muu-Latn-KE", + "muu-Latn": "muu-Latn-KE", + "muv": "muv-Taml-IN", + "muv-IN": "muv-Taml-IN", + "muv-Taml": "muv-Taml-IN", + "mux": "mux-Latn-PG", + "mux-Latn": "mux-Latn-PG", + "mux-PG": "mux-Latn-PG", + "muy": "muy-Latn-CM", + "muy-CM": "muy-Latn-CM", + "muy-Latn": "muy-Latn-CM", + "muz": "muz-Ethi-ET", + "muz-ET": "muz-Ethi-ET", + "muz-Ethi": "muz-Ethi-ET", + "mva": "mva-Latn-PG", + "mva-Latn": "mva-Latn-PG", + "mva-PG": "mva-Latn-PG", + "mvd": "mvd-Latn-ID", + "mvd-ID": "mvd-Latn-ID", + "mvd-Latn": "mvd-Latn-ID", + "mve": "mve-Arab-PK", + "mve-Arab": "mve-Arab-PK", + "mve-PK": "mve-Arab-PK", + "mvf": "mvf-Mong-CN", + "mvf-CN": "mvf-Mong-CN", + "mvf-Mong": "mvf-Mong-CN", + "mvg": "mvg-Latn-MX", + "mvg-Latn": "mvg-Latn-MX", + "mvg-MX": "mvg-Latn-MX", + "mvh": "mvh-Latn-TD", + "mvh-Latn": "mvh-Latn-TD", + "mvh-TD": "mvh-Latn-TD", + "mvk": "mvk-Latn-PG", + "mvk-Latn": "mvk-Latn-PG", + "mvk-PG": "mvk-Latn-PG", + "mvl": "mvl-Latn-AU", + "mvl-AU": "mvl-Latn-AU", + "mvl-Latn": "mvl-Latn-AU", + "mvn": "mvn-Latn-PG", + "mvn-Latn": "mvn-Latn-PG", + "mvn-PG": "mvn-Latn-PG", + "mvo": "mvo-Latn-SB", + "mvo-Latn": "mvo-Latn-SB", + "mvo-SB": "mvo-Latn-SB", + "mvp": "mvp-Latn-ID", + "mvp-ID": "mvp-Latn-ID", + "mvp-Latn": "mvp-Latn-ID", + "mvq": "mvq-Latn-PG", + "mvq-Latn": "mvq-Latn-PG", + "mvq-PG": "mvq-Latn-PG", + "mvr": "mvr-Latn-ID", + "mvr-ID": "mvr-Latn-ID", + "mvr-Latn": "mvr-Latn-ID", + "mvs": "mvs-Latn-ID", + "mvs-ID": "mvs-Latn-ID", + "mvs-Latn": "mvs-Latn-ID", + "mvt": "mvt-Latn-VU", + "mvt-Latn": "mvt-Latn-VU", + "mvt-VU": "mvt-Latn-VU", + "mvu": "mvu-Latn-TD", + "mvu-Latn": "mvu-Latn-TD", + "mvu-TD": "mvu-Latn-TD", + "mvv": "mvv-Latn-MY", + "mvv-Latn": "mvv-Latn-MY", + "mvv-MY": "mvv-Latn-MY", + "mvw": "mvw-Latn-TZ", + "mvw-Latn": "mvw-Latn-TZ", + "mvw-TZ": "mvw-Latn-TZ", + "mvx": "mvx-Latn-ID", + "mvx-ID": "mvx-Latn-ID", + "mvx-Latn": "mvx-Latn-ID", + "mvy": "mvy-Arab-PK", + "mvy-Arab": "mvy-Arab-PK", + "mvy-PK": "mvy-Arab-PK", + "mvz": "mvz-Ethi-ET", + "mvz-ET": "mvz-Ethi-ET", + "mvz-Ethi": "mvz-Ethi-ET", + "mwa": "mwa-Latn-PG", + "mwa-Latn": "mwa-Latn-PG", + "mwa-PG": "mwa-Latn-PG", + "mwb": "mwb-Latn-PG", + "mwb-Latn": "mwb-Latn-PG", + "mwb-PG": "mwb-Latn-PG", + "mwc": "mwc-Latn-PG", + "mwc-Latn": "mwc-Latn-PG", + "mwc-PG": "mwc-Latn-PG", + "mwe": "mwe-Latn-TZ", + "mwe-Latn": "mwe-Latn-TZ", + "mwe-TZ": "mwe-Latn-TZ", + "mwf": "mwf-Latn-AU", + "mwf-AU": "mwf-Latn-AU", + "mwf-Latn": "mwf-Latn-AU", + "mwg": "mwg-Latn-PG", + "mwg-Latn": "mwg-Latn-PG", + "mwg-PG": "mwg-Latn-PG", + "mwh": "mwh-Latn-PG", + "mwh-Latn": "mwh-Latn-PG", + "mwh-PG": "mwh-Latn-PG", + "mwi": "mwi-Latn-VU", + "mwi-Latn": "mwi-Latn-VU", + "mwi-VU": "mwi-Latn-VU", + "mwk": "mwk-Latn-ML", + "mwk-Latn": "mwk-Latn-ML", + "mwk-ML": "mwk-Latn-ML", + "mwl": "mwl-Latn-PT", + "mwl-Latn": "mwl-Latn-PT", + "mwl-PT": "mwl-Latn-PT", + "mwm": "mwm-Latn-TD", + "mwm-Latn": "mwm-Latn-TD", + "mwm-TD": "mwm-Latn-TD", + "mwn": "mwn-Latn-ZM", + "mwn-Latn": "mwn-Latn-ZM", + "mwn-ZM": "mwn-Latn-ZM", + "mwo": "mwo-Latn-VU", + "mwo-Latn": "mwo-Latn-VU", + "mwo-VU": "mwo-Latn-VU", + "mwp": "mwp-Latn-AU", + "mwp-AU": "mwp-Latn-AU", + "mwp-Latn": "mwp-Latn-AU", + "mwq": "mwq-Latn-MM", + "mwq-Latn": "mwq-Latn-MM", + "mwq-MM": "mwq-Latn-MM", + "mwr": "mwr-Deva-IN", + "mwr-Deva": "mwr-Deva-IN", + "mwr-IN": "mwr-Deva-IN", + "mws": "mws-Latn-KE", + "mws-KE": "mws-Latn-KE", + "mws-Latn": "mws-Latn-KE", + "mwt": "mwt-Mymr-MM", + "mwt-MM": "mwt-Mymr-MM", + "mwt-Mymr": "mwt-Mymr-MM", + "mwu": "mwu-Latn-SS", + "mwu-Latn": "mwu-Latn-SS", + "mwu-SS": "mwu-Latn-SS", + "mwv": "mwv-Latn-ID", + "mwv-ID": "mwv-Latn-ID", + "mwv-Latn": "mwv-Latn-ID", + "mww": "mww-Hmnp-US", + "mww-Hmnp": "mww-Hmnp-US", + "mww-US": "mww-Hmnp-US", + "mwz": "mwz-Latn-CD", + "mwz-CD": "mwz-Latn-CD", + "mwz-Latn": "mwz-Latn-CD", + "mxa": "mxa-Latn-MX", + "mxa-Latn": "mxa-Latn-MX", + "mxa-MX": "mxa-Latn-MX", + "mxb": "mxb-Latn-MX", + "mxb-Latn": "mxb-Latn-MX", + "mxb-MX": "mxb-Latn-MX", + "mxc": "mxc-Latn-ZW", + "mxc-Latn": "mxc-Latn-ZW", + "mxc-ZW": "mxc-Latn-ZW", + "mxd": "mxd-Latn-ID", + "mxd-ID": "mxd-Latn-ID", + "mxd-Latn": "mxd-Latn-ID", + "mxe": "mxe-Latn-VU", + "mxe-Latn": "mxe-Latn-VU", + "mxe-VU": "mxe-Latn-VU", + "mxf": "mxf-Latn-CM", + "mxf-CM": "mxf-Latn-CM", + "mxf-Latn": "mxf-Latn-CM", + "mxg": "mxg-Latn-AO", + "mxg-AO": "mxg-Latn-AO", + "mxg-Latn": "mxg-Latn-AO", + "mxh": "mxh-Latn-CD", + "mxh-CD": "mxh-Latn-CD", + "mxh-Latn": "mxh-Latn-CD", + "mxi": "mxi-Latn-ES", + "mxi-ES": "mxi-Latn-ES", + "mxi-Latn": "mxi-Latn-ES", + "mxj": "mxj-Latn-IN", + "mxj-IN": "mxj-Latn-IN", + "mxj-Latn": "mxj-Latn-IN", + "mxk": "mxk-Latn-PG", + "mxk-Latn": "mxk-Latn-PG", + "mxk-PG": "mxk-Latn-PG", + "mxl": "mxl-Latn-BJ", + "mxl-BJ": "mxl-Latn-BJ", + "mxl-Latn": "mxl-Latn-BJ", + "mxm": "mxm-Latn-PG", + "mxm-Latn": "mxm-Latn-PG", + "mxm-PG": "mxm-Latn-PG", + "mxn": "mxn-Latn-ID", + "mxn-ID": "mxn-Latn-ID", + "mxn-Latn": "mxn-Latn-ID", + "mxo": "mxo-Latn-ZM", + "mxo-Latn": "mxo-Latn-ZM", + "mxo-ZM": "mxo-Latn-ZM", + "mxp": "mxp-Latn-MX", + "mxp-Latn": "mxp-Latn-MX", + "mxp-MX": "mxp-Latn-MX", + "mxq": "mxq-Latn-MX", + "mxq-Latn": "mxq-Latn-MX", + "mxq-MX": "mxq-Latn-MX", + "mxr": "mxr-Latn-MY", + "mxr-Latn": "mxr-Latn-MY", + "mxr-MY": "mxr-Latn-MY", + "mxs": "mxs-Latn-MX", + "mxs-Latn": "mxs-Latn-MX", + "mxs-MX": "mxs-Latn-MX", + "mxt": "mxt-Latn-MX", + "mxt-Latn": "mxt-Latn-MX", + "mxt-MX": "mxt-Latn-MX", + "mxu": "mxu-Latn-CM", + "mxu-CM": "mxu-Latn-CM", + "mxu-Latn": "mxu-Latn-CM", + "mxv": "mxv-Latn-MX", + "mxv-Latn": "mxv-Latn-MX", + "mxv-MX": "mxv-Latn-MX", + "mxw": "mxw-Latn-PG", + "mxw-Latn": "mxw-Latn-PG", + "mxw-PG": "mxw-Latn-PG", + "mxx": "mxx-Latn-CI", + "mxx-CI": "mxx-Latn-CI", + "mxx-Latn": "mxx-Latn-CI", + "mxy": "mxy-Latn-MX", + "mxy-Latn": "mxy-Latn-MX", + "mxy-MX": "mxy-Latn-MX", + "mxz": "mxz-Latn-ID", + "mxz-ID": "mxz-Latn-ID", + "mxz-Latn": "mxz-Latn-ID", + "my": "my-Mymr-MM", + "my-Khmr": "my-Khmr-MM", + "my-MM": "my-Mymr-MM", + "my-Mymr": "my-Mymr-MM", + "myb": "myb-Latn-TD", + "myb-Latn": "myb-Latn-TD", + "myb-TD": "myb-Latn-TD", + "myc": "myc-Latn-CD", + "myc-CD": "myc-Latn-CD", + "myc-Latn": "myc-Latn-CD", + "mye": "mye-Latn-GA", + "mye-GA": "mye-Latn-GA", + "mye-Latn": "mye-Latn-GA", + "myf": "myf-Latn-ET", + "myf-ET": "myf-Latn-ET", + "myf-Latn": "myf-Latn-ET", + "myg": "myg-Latn-CM", + "myg-CM": "myg-Latn-CM", + "myg-Latn": "myg-Latn-CM", + "myh": "myh-Latn-US", + "myh-Latn": "myh-Latn-US", + "myh-US": "myh-Latn-US", + "myj": "myj-Latn-SS", + "myj-Latn": "myj-Latn-SS", + "myj-SS": "myj-Latn-SS", + "myk": "myk-Latn-ML", + "myk-Latn": "myk-Latn-ML", + "myk-ML": "myk-Latn-ML", + "myl": "myl-Latn-ID", + "myl-ID": "myl-Latn-ID", + "myl-Latn": "myl-Latn-ID", + "mym": "mym-Ethi-ET", + "mym-ET": "mym-Ethi-ET", + "mym-Ethi": "mym-Ethi-ET", + "myp": "myp-Latn-BR", + "myp-BR": "myp-Latn-BR", + "myp-Latn": "myp-Latn-BR", + "myr": "myr-Latn-PE", + "myr-Latn": "myr-Latn-PE", + "myr-PE": "myr-Latn-PE", + "myu": "myu-Latn-BR", + "myu-BR": "myu-Latn-BR", + "myu-Latn": "myu-Latn-BR", + "myv": "myv-Cyrl-RU", + "myv-Cyrl": "myv-Cyrl-RU", + "myv-RU": "myv-Cyrl-RU", + "myw": "myw-Latn-PG", + "myw-Latn": "myw-Latn-PG", + "myw-PG": "myw-Latn-PG", + "myx": "myx-Latn-UG", + "myx-Latn": "myx-Latn-UG", + "myx-UG": "myx-Latn-UG", + "myy": "myy-Latn-CO", + "myy-CO": "myy-Latn-CO", + "myy-Latn": "myy-Latn-CO", + "myz": "myz-Mand-IR", + "myz-IR": "myz-Mand-IR", + "myz-Mand": "myz-Mand-IR", + "mza": "mza-Latn-MX", + "mza-Latn": "mza-Latn-MX", + "mza-MX": "mza-Latn-MX", + "mzd": "mzd-Latn-CM", + "mzd-CM": "mzd-Latn-CM", + "mzd-Latn": "mzd-Latn-CM", + "mze": "mze-Latn-PG", + "mze-Latn": "mze-Latn-PG", + "mze-PG": "mze-Latn-PG", + "mzh": "mzh-Latn-AR", + "mzh-AR": "mzh-Latn-AR", + "mzh-Latn": "mzh-Latn-AR", + "mzi": "mzi-Latn-MX", + "mzi-Latn": "mzi-Latn-MX", + "mzi-MX": "mzi-Latn-MX", + "mzj": "mzj-Latn-LR", + "mzj-LR": "mzj-Latn-LR", + "mzj-Latn": "mzj-Latn-LR", + "mzk": "mzk-Latn-NG", + "mzk-Latn": "mzk-Latn-NG", + "mzk-NG": "mzk-Latn-NG", + "mzl": "mzl-Latn-MX", + "mzl-Latn": "mzl-Latn-MX", + "mzl-MX": "mzl-Latn-MX", + "mzm": "mzm-Latn-NG", + "mzm-Latn": "mzm-Latn-NG", + "mzm-NG": "mzm-Latn-NG", + "mzn": "mzn-Arab-IR", + "mzn-Arab": "mzn-Arab-IR", + "mzn-IR": "mzn-Arab-IR", + "mzo": "mzo-Latn-BR", + "mzo-BR": "mzo-Latn-BR", + "mzo-Latn": "mzo-Latn-BR", + "mzp": "mzp-Latn-BO", + "mzp-BO": "mzp-Latn-BO", + "mzp-Latn": "mzp-Latn-BO", + "mzq": "mzq-Latn-ID", + "mzq-ID": "mzq-Latn-ID", + "mzq-Latn": "mzq-Latn-ID", + "mzr": "mzr-Latn-BR", + "mzr-BR": "mzr-Latn-BR", + "mzr-Latn": "mzr-Latn-BR", + "mzt": "mzt-Latn-MY", + "mzt-Latn": "mzt-Latn-MY", + "mzt-MY": "mzt-Latn-MY", + "mzu": "mzu-Latn-PG", + "mzu-Latn": "mzu-Latn-PG", + "mzu-PG": "mzu-Latn-PG", + "mzv": "mzv-Latn-CF", + "mzv-CF": "mzv-Latn-CF", + "mzv-Latn": "mzv-Latn-CF", + "mzw": "mzw-Latn-GH", + "mzw-GH": "mzw-Latn-GH", + "mzw-Latn": "mzw-Latn-GH", + "mzx": "mzx-Latn-GY", + "mzx-GY": "mzx-Latn-GY", + "mzx-Latn": "mzx-Latn-GY", + "mzz": "mzz-Latn-PG", + "mzz-Latn": "mzz-Latn-PG", + "mzz-PG": "mzz-Latn-PG", + "na": "na-Latn-NR", + "na-Latn": "na-Latn-NR", + "na-NR": "na-Latn-NR", + "naa": "naa-Latn-ID", + "naa-ID": "naa-Latn-ID", + "naa-Latn": "naa-Latn-ID", + "nab": "nab-Latn-BR", + "nab-BR": "nab-Latn-BR", + "nab-Latn": "nab-Latn-BR", + "nac": "nac-Latn-PG", + "nac-Latn": "nac-Latn-PG", + "nac-PG": "nac-Latn-PG", + "nae": "nae-Latn-ID", + "nae-ID": "nae-Latn-ID", + "nae-Latn": "nae-Latn-ID", + "naf": "naf-Latn-PG", + "naf-Latn": "naf-Latn-PG", + "naf-PG": "naf-Latn-PG", + "nag": "nag-Latn-IN", + "nag-IN": "nag-Latn-IN", + "nag-Latn": "nag-Latn-IN", + "naj": "naj-Latn-GN", + "naj-GN": "naj-Latn-GN", + "naj-Latn": "naj-Latn-GN", + "nak": "nak-Latn-PG", + "nak-Latn": "nak-Latn-PG", + "nak-PG": "nak-Latn-PG", + "nal": "nal-Latn-PG", + "nal-Latn": "nal-Latn-PG", + "nal-PG": "nal-Latn-PG", + "nam": "nam-Latn-AU", + "nam-AU": "nam-Latn-AU", + "nam-Latn": "nam-Latn-AU", + "nan": "nan-Hans-CN", + "nan-CN": "nan-Hans-CN", + "nan-Hans": "nan-Hans-CN", + "nao": "nao-Deva-NP", + "nao-Deva": "nao-Deva-NP", + "nao-NP": "nao-Deva-NP", + "nap": "nap-Latn-IT", + "nap-IT": "nap-Latn-IT", + "nap-Latn": "nap-Latn-IT", + "naq": "naq-Latn-NA", + "naq-Latn": "naq-Latn-NA", + "naq-NA": "naq-Latn-NA", + "nar": "nar-Latn-NG", + "nar-Latn": "nar-Latn-NG", + "nar-NG": "nar-Latn-NG", + "nas": "nas-Latn-PG", + "nas-Latn": "nas-Latn-PG", + "nas-PG": "nas-Latn-PG", + "nat": "nat-Latn-NG", + "nat-Latn": "nat-Latn-NG", + "nat-NG": "nat-Latn-NG", + "naw": "naw-Latn-GH", + "naw-GH": "naw-Latn-GH", + "naw-Latn": "naw-Latn-GH", + "nax": "nax-Latn-PG", + "nax-Latn": "nax-Latn-PG", + "nax-PG": "nax-Latn-PG", + "nay": "nay-Latn-AU", + "nay-AU": "nay-Latn-AU", + "nay-Latn": "nay-Latn-AU", + "naz": "naz-Latn-MX", + "naz-Latn": "naz-Latn-MX", + "naz-MX": "naz-Latn-MX", + "nb": "nb-Latn-NO", + "nb-Latn": "nb-Latn-NO", + "nb-NO": "nb-Latn-NO", + "nb-SJ": "nb-Latn-SJ", + "nba": "nba-Latn-AO", + "nba-AO": "nba-Latn-AO", + "nba-Latn": "nba-Latn-AO", + "nbb": "nbb-Latn-NG", + "nbb-Latn": "nbb-Latn-NG", + "nbb-NG": "nbb-Latn-NG", + "nbc": "nbc-Latn-IN", + "nbc-IN": "nbc-Latn-IN", + "nbc-Latn": "nbc-Latn-IN", + "nbd": "nbd-Latn-CD", + "nbd-CD": "nbd-Latn-CD", + "nbd-Latn": "nbd-Latn-CD", + "nbe": "nbe-Latn-IN", + "nbe-IN": "nbe-Latn-IN", + "nbe-Latn": "nbe-Latn-IN", + "nbh": "nbh-Latn-NG", + "nbh-Latn": "nbh-Latn-NG", + "nbh-NG": "nbh-Latn-NG", + "nbi": "nbi-Latn-IN", + "nbi-IN": "nbi-Latn-IN", + "nbi-Latn": "nbi-Latn-IN", + "nbj": "nbj-Latn-AU", + "nbj-AU": "nbj-Latn-AU", + "nbj-Latn": "nbj-Latn-AU", + "nbk": "nbk-Latn-PG", + "nbk-Latn": "nbk-Latn-PG", + "nbk-PG": "nbk-Latn-PG", + "nbm": "nbm-Latn-CF", + "nbm-CF": "nbm-Latn-CF", + "nbm-Latn": "nbm-Latn-CF", + "nbn": "nbn-Latn-ID", + "nbn-ID": "nbn-Latn-ID", + "nbn-Latn": "nbn-Latn-ID", + "nbo": "nbo-Latn-NG", + "nbo-Latn": "nbo-Latn-NG", + "nbo-NG": "nbo-Latn-NG", + "nbp": "nbp-Latn-NG", + "nbp-Latn": "nbp-Latn-NG", + "nbp-NG": "nbp-Latn-NG", + "nbq": "nbq-Latn-ID", + "nbq-ID": "nbq-Latn-ID", + "nbq-Latn": "nbq-Latn-ID", + "nbr": "nbr-Latn-NG", + "nbr-Latn": "nbr-Latn-NG", + "nbr-NG": "nbr-Latn-NG", + "nbt": "nbt-Latn-IN", + "nbt-IN": "nbt-Latn-IN", + "nbt-Latn": "nbt-Latn-IN", + "nbu": "nbu-Latn-IN", + "nbu-IN": "nbu-Latn-IN", + "nbu-Latn": "nbu-Latn-IN", + "nbv": "nbv-Latn-CM", + "nbv-CM": "nbv-Latn-CM", + "nbv-Latn": "nbv-Latn-CM", + "nbw": "nbw-Latn-CD", + "nbw-CD": "nbw-Latn-CD", + "nbw-Latn": "nbw-Latn-CD", + "nby": "nby-Latn-PG", + "nby-Latn": "nby-Latn-PG", + "nby-PG": "nby-Latn-PG", + "nca": "nca-Latn-PG", + "nca-Latn": "nca-Latn-PG", + "nca-PG": "nca-Latn-PG", + "ncb": "ncb-Latn-IN", + "ncb-IN": "ncb-Latn-IN", + "ncb-Latn": "ncb-Latn-IN", + "ncc": "ncc-Latn-PG", + "ncc-Latn": "ncc-Latn-PG", + "ncc-PG": "ncc-Latn-PG", + "ncd": "ncd-Deva-NP", + "ncd-Deva": "ncd-Deva-NP", + "ncd-NP": "ncd-Deva-NP", + "nce": "nce-Latn-PG", + "nce-Latn": "nce-Latn-PG", + "nce-PG": "nce-Latn-PG", + "ncf": "ncf-Latn-PG", + "ncf-Latn": "ncf-Latn-PG", + "ncf-PG": "ncf-Latn-PG", + "ncg": "ncg-Latn-CA", + "ncg-CA": "ncg-Latn-CA", + "ncg-Latn": "ncg-Latn-CA", + "nch": "nch-Latn-MX", + "nch-Latn": "nch-Latn-MX", + "nch-MX": "nch-Latn-MX", + "nci": "nci-Latn-MX", + "nci-Latn": "nci-Latn-MX", + "nci-MX": "nci-Latn-MX", + "ncj": "ncj-Latn-MX", + "ncj-Latn": "ncj-Latn-MX", + "ncj-MX": "ncj-Latn-MX", + "nck": "nck-Latn-AU", + "nck-AU": "nck-Latn-AU", + "nck-Latn": "nck-Latn-AU", + "ncl": "ncl-Latn-MX", + "ncl-Latn": "ncl-Latn-MX", + "ncl-MX": "ncl-Latn-MX", + "ncm": "ncm-Latn-PG", + "ncm-Latn": "ncm-Latn-PG", + "ncm-PG": "ncm-Latn-PG", + "ncn": "ncn-Latn-PG", + "ncn-Latn": "ncn-Latn-PG", + "ncn-PG": "ncn-Latn-PG", + "nco": "nco-Latn-PG", + "nco-Latn": "nco-Latn-PG", + "nco-PG": "nco-Latn-PG", + "ncq": "ncq-Laoo-LA", + "ncq-LA": "ncq-Laoo-LA", + "ncq-Laoo": "ncq-Laoo-LA", + "ncr": "ncr-Latn-CM", + "ncr-CM": "ncr-Latn-CM", + "ncr-Latn": "ncr-Latn-CM", + "nct": "nct-Latn-IN", + "nct-IN": "nct-Latn-IN", + "nct-Latn": "nct-Latn-IN", + "ncu": "ncu-Latn-GH", + "ncu-GH": "ncu-Latn-GH", + "ncu-Latn": "ncu-Latn-GH", + "ncx": "ncx-Latn-MX", + "ncx-Latn": "ncx-Latn-MX", + "ncx-MX": "ncx-Latn-MX", + "ncz": "ncz-Latn-US", + "ncz-Latn": "ncz-Latn-US", + "ncz-US": "ncz-Latn-US", + "nd": "nd-Latn-ZW", + "nd-Latn": "nd-Latn-ZW", + "nd-ZW": "nd-Latn-ZW", + "nda": "nda-Latn-CG", + "nda-CG": "nda-Latn-CG", + "nda-Latn": "nda-Latn-CG", + "ndb": "ndb-Latn-CM", + "ndb-CM": "ndb-Latn-CM", + "ndb-Latn": "ndb-Latn-CM", + "ndc": "ndc-Latn-MZ", + "ndc-Latn": "ndc-Latn-MZ", + "ndc-MZ": "ndc-Latn-MZ", + "ndd": "ndd-Latn-NG", + "ndd-Latn": "ndd-Latn-NG", + "ndd-NG": "ndd-Latn-NG", + "ndf": "ndf-Cyrl-RU", + "ndf-Cyrl": "ndf-Cyrl-RU", + "ndf-RU": "ndf-Cyrl-RU", + "ndg": "ndg-Latn-TZ", + "ndg-Latn": "ndg-Latn-TZ", + "ndg-TZ": "ndg-Latn-TZ", + "ndh": "ndh-Latn-TZ", + "ndh-Latn": "ndh-Latn-TZ", + "ndh-TZ": "ndh-Latn-TZ", + "ndi": "ndi-Latn-NG", + "ndi-Latn": "ndi-Latn-NG", + "ndi-NG": "ndi-Latn-NG", + "ndj": "ndj-Latn-TZ", + "ndj-Latn": "ndj-Latn-TZ", + "ndj-TZ": "ndj-Latn-TZ", + "ndk": "ndk-Latn-CD", + "ndk-CD": "ndk-Latn-CD", + "ndk-Latn": "ndk-Latn-CD", + "ndl": "ndl-Latn-CD", + "ndl-CD": "ndl-Latn-CD", + "ndl-Latn": "ndl-Latn-CD", + "ndm": "ndm-Latn-TD", + "ndm-Latn": "ndm-Latn-TD", + "ndm-TD": "ndm-Latn-TD", + "ndn": "ndn-Latn-CG", + "ndn-CG": "ndn-Latn-CG", + "ndn-Latn": "ndn-Latn-CG", + "ndp": "ndp-Latn-UG", + "ndp-Latn": "ndp-Latn-UG", + "ndp-UG": "ndp-Latn-UG", + "ndq": "ndq-Latn-AO", + "ndq-AO": "ndq-Latn-AO", + "ndq-Latn": "ndq-Latn-AO", + "ndr": "ndr-Latn-NG", + "ndr-Latn": "ndr-Latn-NG", + "ndr-NG": "ndr-Latn-NG", + "nds": "nds-Latn-DE", + "nds-DE": "nds-Latn-DE", + "nds-Latn": "nds-Latn-DE", + "ndt": "ndt-Latn-CD", + "ndt-CD": "ndt-Latn-CD", + "ndt-Latn": "ndt-Latn-CD", + "ndu": "ndu-Latn-CM", + "ndu-CM": "ndu-Latn-CM", + "ndu-Latn": "ndu-Latn-CM", + "ndv": "ndv-Latn-SN", + "ndv-Latn": "ndv-Latn-SN", + "ndv-SN": "ndv-Latn-SN", + "ndw": "ndw-Latn-CD", + "ndw-CD": "ndw-Latn-CD", + "ndw-Latn": "ndw-Latn-CD", + "ndx": "ndx-Latn-ID", + "ndx-ID": "ndx-Latn-ID", + "ndx-Latn": "ndx-Latn-ID", + "ndy": "ndy-Latn-CF", + "ndy-CF": "ndy-Latn-CF", + "ndy-Latn": "ndy-Latn-CF", + "ndz": "ndz-Latn-SS", + "ndz-Latn": "ndz-Latn-SS", + "ndz-SS": "ndz-Latn-SS", + "ne": "ne-Deva-NP", + "ne-Deva": "ne-Deva-NP", + "ne-Deva-BT": "ne-Deva-BT", + "ne-Deva-NP": "ne-Deva-NP", + "ne-NP": "ne-Deva-NP", + "nea": "nea-Latn-ID", + "nea-ID": "nea-Latn-ID", + "nea-Latn": "nea-Latn-ID", + "neb": "neb-Latn-CI", + "neb-CI": "neb-Latn-CI", + "neb-Latn": "neb-Latn-CI", + "nec": "nec-Latn-ID", + "nec-ID": "nec-Latn-ID", + "nec-Latn": "nec-Latn-ID", + "ned": "ned-Latn-NG", + "ned-Latn": "ned-Latn-NG", + "ned-NG": "ned-Latn-NG", + "nee": "nee-Latn-NC", + "nee-Latn": "nee-Latn-NC", + "nee-NC": "nee-Latn-NC", + "neg": "neg-Cyrl-RU", + "neg-Cyrl": "neg-Cyrl-RU", + "neg-RU": "neg-Cyrl-RU", + "neh": "neh-Tibt-BT", + "neh-BT": "neh-Tibt-BT", + "neh-Tibt": "neh-Tibt-BT", + "nei": "nei-Xsux-TR", + "nei-TR": "nei-Xsux-TR", + "nei-Xsux": "nei-Xsux-TR", + "nej": "nej-Latn-PG", + "nej-Latn": "nej-Latn-PG", + "nej-PG": "nej-Latn-PG", + "nek": "nek-Latn-NC", + "nek-Latn": "nek-Latn-NC", + "nek-NC": "nek-Latn-NC", + "nem": "nem-Latn-NC", + "nem-Latn": "nem-Latn-NC", + "nem-NC": "nem-Latn-NC", + "nen": "nen-Latn-NC", + "nen-Latn": "nen-Latn-NC", + "nen-NC": "nen-Latn-NC", + "neo": "neo-Latn-VN", + "neo-Latn": "neo-Latn-VN", + "neo-VN": "neo-Latn-VN", + "neq": "neq-Latn-MX", + "neq-Latn": "neq-Latn-MX", + "neq-MX": "neq-Latn-MX", + "ner": "ner-Latn-ID", + "ner-ID": "ner-Latn-ID", + "ner-Latn": "ner-Latn-ID", + "net": "net-Latn-PG", + "net-Latn": "net-Latn-PG", + "net-PG": "net-Latn-PG", + "neu": "neu-Latn-001", + "neu-001": "neu-Latn-001", + "neu-Latn": "neu-Latn-001", + "new": "new-Deva-NP", + "new-Deva": "new-Deva-NP", + "new-NP": "new-Deva-NP", + "new-Newa": "new-Newa-NP", + "nex": "nex-Latn-PG", + "nex-Latn": "nex-Latn-PG", + "nex-PG": "nex-Latn-PG", + "ney": "ney-Latn-CI", + "ney-CI": "ney-Latn-CI", + "ney-Latn": "ney-Latn-CI", + "nez": "nez-Latn-US", + "nez-Latn": "nez-Latn-US", + "nez-US": "nez-Latn-US", + "nfa": "nfa-Latn-ID", + "nfa-ID": "nfa-Latn-ID", + "nfa-Latn": "nfa-Latn-ID", + "nfd": "nfd-Latn-NG", + "nfd-Latn": "nfd-Latn-NG", + "nfd-NG": "nfd-Latn-NG", + "nfl": "nfl-Latn-SB", + "nfl-Latn": "nfl-Latn-SB", + "nfl-SB": "nfl-Latn-SB", + "nfr": "nfr-Latn-GH", + "nfr-GH": "nfr-Latn-GH", + "nfr-Latn": "nfr-Latn-GH", + "nfu": "nfu-Latn-CM", + "nfu-CM": "nfu-Latn-CM", + "nfu-Latn": "nfu-Latn-CM", + "ng": "ng-Latn-NA", + "ng-Latn": "ng-Latn-NA", + "ng-NA": "ng-Latn-NA", + "nga": "nga-Latn-CD", + "nga-CD": "nga-Latn-CD", + "nga-Latn": "nga-Latn-CD", + "ngb": "ngb-Latn-CD", + "ngb-CD": "ngb-Latn-CD", + "ngb-Latn": "ngb-Latn-CD", + "ngc": "ngc-Latn-CD", + "ngc-CD": "ngc-Latn-CD", + "ngc-Latn": "ngc-Latn-CD", + "ngd": "ngd-Latn-CF", + "ngd-CF": "ngd-Latn-CF", + "ngd-Latn": "ngd-Latn-CF", + "nge": "nge-Latn-CM", + "nge-CM": "nge-Latn-CM", + "nge-Latn": "nge-Latn-CM", + "ngg": "ngg-Latn-CF", + "ngg-CF": "ngg-Latn-CF", + "ngg-Latn": "ngg-Latn-CF", + "ngh": "ngh-Latn-ZA", + "ngh-Latn": "ngh-Latn-ZA", + "ngh-ZA": "ngh-Latn-ZA", + "ngi": "ngi-Latn-NG", + "ngi-Latn": "ngi-Latn-NG", + "ngi-NG": "ngi-Latn-NG", + "ngj": "ngj-Latn-CM", + "ngj-CM": "ngj-Latn-CM", + "ngj-Latn": "ngj-Latn-CM", + "ngk": "ngk-Latn-AU", + "ngk-AU": "ngk-Latn-AU", + "ngk-Latn": "ngk-Latn-AU", + "ngl": "ngl-Latn-MZ", + "ngl-Latn": "ngl-Latn-MZ", + "ngl-MZ": "ngl-Latn-MZ", + "ngm": "ngm-Latn-FM", + "ngm-FM": "ngm-Latn-FM", + "ngm-Latn": "ngm-Latn-FM", + "ngn": "ngn-Latn-CM", + "ngn-CM": "ngn-Latn-CM", + "ngn-Latn": "ngn-Latn-CM", + "ngp": "ngp-Latn-TZ", + "ngp-Latn": "ngp-Latn-TZ", + "ngp-TZ": "ngp-Latn-TZ", + "ngq": "ngq-Latn-TZ", + "ngq-Latn": "ngq-Latn-TZ", + "ngq-TZ": "ngq-Latn-TZ", + "ngr": "ngr-Latn-SB", + "ngr-Latn": "ngr-Latn-SB", + "ngr-SB": "ngr-Latn-SB", + "ngs": "ngs-Latn-NG", + "ngs-Latn": "ngs-Latn-NG", + "ngs-NG": "ngs-Latn-NG", + "ngt": "ngt-Laoo-LA", + "ngt-LA": "ngt-Laoo-LA", + "ngt-Laoo": "ngt-Laoo-LA", + "ngu": "ngu-Latn-MX", + "ngu-Latn": "ngu-Latn-MX", + "ngu-MX": "ngu-Latn-MX", + "ngv": "ngv-Latn-CM", + "ngv-CM": "ngv-Latn-CM", + "ngv-Latn": "ngv-Latn-CM", + "ngw": "ngw-Latn-NG", + "ngw-Latn": "ngw-Latn-NG", + "ngw-NG": "ngw-Latn-NG", + "ngx": "ngx-Latn-NG", + "ngx-Latn": "ngx-Latn-NG", + "ngx-NG": "ngx-Latn-NG", + "ngy": "ngy-Latn-CM", + "ngy-CM": "ngy-Latn-CM", + "ngy-Latn": "ngy-Latn-CM", + "ngz": "ngz-Latn-CG", + "ngz-CG": "ngz-Latn-CG", + "ngz-Latn": "ngz-Latn-CG", + "nha": "nha-Latn-AU", + "nha-AU": "nha-Latn-AU", + "nha-Latn": "nha-Latn-AU", + "nhb": "nhb-Latn-CI", + "nhb-CI": "nhb-Latn-CI", + "nhb-Latn": "nhb-Latn-CI", + "nhc": "nhc-Latn-MX", + "nhc-Latn": "nhc-Latn-MX", + "nhc-MX": "nhc-Latn-MX", + "nhd": "nhd-Latn-PY", + "nhd-Latn": "nhd-Latn-PY", + "nhd-PY": "nhd-Latn-PY", + "nhe": "nhe-Latn-MX", + "nhe-Latn": "nhe-Latn-MX", + "nhe-MX": "nhe-Latn-MX", + "nhf": "nhf-Latn-AU", + "nhf-AU": "nhf-Latn-AU", + "nhf-Latn": "nhf-Latn-AU", + "nhg": "nhg-Latn-MX", + "nhg-Latn": "nhg-Latn-MX", + "nhg-MX": "nhg-Latn-MX", + "nhi": "nhi-Latn-MX", + "nhi-Latn": "nhi-Latn-MX", + "nhi-MX": "nhi-Latn-MX", + "nhk": "nhk-Latn-MX", + "nhk-Latn": "nhk-Latn-MX", + "nhk-MX": "nhk-Latn-MX", + "nhm": "nhm-Latn-MX", + "nhm-Latn": "nhm-Latn-MX", + "nhm-MX": "nhm-Latn-MX", + "nhn": "nhn-Latn-MX", + "nhn-Latn": "nhn-Latn-MX", + "nhn-MX": "nhn-Latn-MX", + "nho": "nho-Latn-PG", + "nho-Latn": "nho-Latn-PG", + "nho-PG": "nho-Latn-PG", + "nhp": "nhp-Latn-MX", + "nhp-Latn": "nhp-Latn-MX", + "nhp-MX": "nhp-Latn-MX", + "nhq": "nhq-Latn-MX", + "nhq-Latn": "nhq-Latn-MX", + "nhq-MX": "nhq-Latn-MX", + "nhr": "nhr-Latn-BW", + "nhr-BW": "nhr-Latn-BW", + "nhr-Latn": "nhr-Latn-BW", + "nht": "nht-Latn-MX", + "nht-Latn": "nht-Latn-MX", + "nht-MX": "nht-Latn-MX", + "nhu": "nhu-Latn-CM", + "nhu-CM": "nhu-Latn-CM", + "nhu-Latn": "nhu-Latn-CM", + "nhv": "nhv-Latn-MX", + "nhv-Latn": "nhv-Latn-MX", + "nhv-MX": "nhv-Latn-MX", + "nhw": "nhw-Latn-MX", + "nhw-Latn": "nhw-Latn-MX", + "nhw-MX": "nhw-Latn-MX", + "nhx": "nhx-Latn-MX", + "nhx-Latn": "nhx-Latn-MX", + "nhx-MX": "nhx-Latn-MX", + "nhy": "nhy-Latn-MX", + "nhy-Latn": "nhy-Latn-MX", + "nhy-MX": "nhy-Latn-MX", + "nhz": "nhz-Latn-MX", + "nhz-Latn": "nhz-Latn-MX", + "nhz-MX": "nhz-Latn-MX", + "nia": "nia-Latn-ID", + "nia-ID": "nia-Latn-ID", + "nia-Latn": "nia-Latn-ID", + "nib": "nib-Latn-PG", + "nib-Latn": "nib-Latn-PG", + "nib-PG": "nib-Latn-PG", + "nid": "nid-Latn-AU", + "nid-AU": "nid-Latn-AU", + "nid-Latn": "nid-Latn-AU", + "nie": "nie-Latn-TD", + "nie-Latn": "nie-Latn-TD", + "nie-TD": "nie-Latn-TD", + "nif": "nif-Latn-PG", + "nif-Latn": "nif-Latn-PG", + "nif-PG": "nif-Latn-PG", + "nig": "nig-Latn-AU", + "nig-AU": "nig-Latn-AU", + "nig-Latn": "nig-Latn-AU", + "nih": "nih-Latn-TZ", + "nih-Latn": "nih-Latn-TZ", + "nih-TZ": "nih-Latn-TZ", + "nii": "nii-Latn-PG", + "nii-Latn": "nii-Latn-PG", + "nii-PG": "nii-Latn-PG", + "nij": "nij-Latn-ID", + "nij-ID": "nij-Latn-ID", + "nij-Latn": "nij-Latn-ID", + "nil": "nil-Latn-ID", + "nil-ID": "nil-Latn-ID", + "nil-Latn": "nil-Latn-ID", + "nim": "nim-Latn-TZ", + "nim-Latn": "nim-Latn-TZ", + "nim-TZ": "nim-Latn-TZ", + "nin": "nin-Latn-NG", + "nin-Latn": "nin-Latn-NG", + "nin-NG": "nin-Latn-NG", + "nio": "nio-Cyrl-RU", + "nio-Cyrl": "nio-Cyrl-RU", + "nio-RU": "nio-Cyrl-RU", + "niq": "niq-Latn-KE", + "niq-KE": "niq-Latn-KE", + "niq-Latn": "niq-Latn-KE", + "nir": "nir-Latn-ID", + "nir-ID": "nir-Latn-ID", + "nir-Latn": "nir-Latn-ID", + "nis": "nis-Latn-PG", + "nis-Latn": "nis-Latn-PG", + "nis-PG": "nis-Latn-PG", + "nit": "nit-Telu-IN", + "nit-IN": "nit-Telu-IN", + "nit-Telu": "nit-Telu-IN", + "niu": "niu-Latn-NU", + "niu-Latn": "niu-Latn-NU", + "niu-NU": "niu-Latn-NU", + "niv": "niv-Cyrl-RU", + "niv-Cyrl": "niv-Cyrl-RU", + "niv-RU": "niv-Cyrl-RU", + "niw": "niw-Latn-PG", + "niw-Latn": "niw-Latn-PG", + "niw-PG": "niw-Latn-PG", + "nix": "nix-Latn-CD", + "nix-CD": "nix-Latn-CD", + "nix-Latn": "nix-Latn-CD", + "niy": "niy-Latn-CD", + "niy-CD": "niy-Latn-CD", + "niy-Latn": "niy-Latn-CD", + "niz": "niz-Latn-PG", + "niz-Latn": "niz-Latn-PG", + "niz-PG": "niz-Latn-PG", + "nja": "nja-Latn-NG", + "nja-Latn": "nja-Latn-NG", + "nja-NG": "nja-Latn-NG", + "njb": "njb-Latn-IN", + "njb-IN": "njb-Latn-IN", + "njb-Latn": "njb-Latn-IN", + "njd": "njd-Latn-TZ", + "njd-Latn": "njd-Latn-TZ", + "njd-TZ": "njd-Latn-TZ", + "njh": "njh-Latn-IN", + "njh-IN": "njh-Latn-IN", + "njh-Latn": "njh-Latn-IN", + "nji": "nji-Latn-AU", + "nji-AU": "nji-Latn-AU", + "nji-Latn": "nji-Latn-AU", + "njj": "njj-Latn-CM", + "njj-CM": "njj-Latn-CM", + "njj-Latn": "njj-Latn-CM", + "njl": "njl-Latn-SS", + "njl-Latn": "njl-Latn-SS", + "njl-SS": "njl-Latn-SS", + "njm": "njm-Latn-IN", + "njm-IN": "njm-Latn-IN", + "njm-Latn": "njm-Latn-IN", + "njn": "njn-Latn-IN", + "njn-IN": "njn-Latn-IN", + "njn-Latn": "njn-Latn-IN", + "njo": "njo-Latn-IN", + "njo-IN": "njo-Latn-IN", + "njo-Latn": "njo-Latn-IN", + "njr": "njr-Latn-NG", + "njr-Latn": "njr-Latn-NG", + "njr-NG": "njr-Latn-NG", + "njs": "njs-Latn-ID", + "njs-ID": "njs-Latn-ID", + "njs-Latn": "njs-Latn-ID", + "njt": "njt-Latn-SR", + "njt-Latn": "njt-Latn-SR", + "njt-SR": "njt-Latn-SR", + "nju": "nju-Latn-AU", + "nju-AU": "nju-Latn-AU", + "nju-Latn": "nju-Latn-AU", + "njx": "njx-Latn-CG", + "njx-CG": "njx-Latn-CG", + "njx-Latn": "njx-Latn-CG", + "njy": "njy-Latn-CM", + "njy-CM": "njy-Latn-CM", + "njy-Latn": "njy-Latn-CM", + "njz": "njz-Latn-IN", + "njz-IN": "njz-Latn-IN", + "njz-Latn": "njz-Latn-IN", + "nka": "nka-Latn-ZM", + "nka-Latn": "nka-Latn-ZM", + "nka-ZM": "nka-Latn-ZM", + "nkb": "nkb-Latn-IN", + "nkb-IN": "nkb-Latn-IN", + "nkb-Latn": "nkb-Latn-IN", + "nkc": "nkc-Latn-CM", + "nkc-CM": "nkc-Latn-CM", + "nkc-Latn": "nkc-Latn-CM", + "nkd": "nkd-Latn-IN", + "nkd-IN": "nkd-Latn-IN", + "nkd-Latn": "nkd-Latn-IN", + "nke": "nke-Latn-SB", + "nke-Latn": "nke-Latn-SB", + "nke-SB": "nke-Latn-SB", + "nkf": "nkf-Latn-IN", + "nkf-IN": "nkf-Latn-IN", + "nkf-Latn": "nkf-Latn-IN", + "nkg": "nkg-Latn-PG", + "nkg-Latn": "nkg-Latn-PG", + "nkg-PG": "nkg-Latn-PG", + "nkh": "nkh-Latn-IN", + "nkh-IN": "nkh-Latn-IN", + "nkh-Latn": "nkh-Latn-IN", + "nki": "nki-Latn-IN", + "nki-IN": "nki-Latn-IN", + "nki-Latn": "nki-Latn-IN", + "nkj": "nkj-Latn-ID", + "nkj-ID": "nkj-Latn-ID", + "nkj-Latn": "nkj-Latn-ID", + "nkk": "nkk-Latn-VU", + "nkk-Latn": "nkk-Latn-VU", + "nkk-VU": "nkk-Latn-VU", + "nkm": "nkm-Latn-PG", + "nkm-Latn": "nkm-Latn-PG", + "nkm-PG": "nkm-Latn-PG", + "nkn": "nkn-Latn-AO", + "nkn-AO": "nkn-Latn-AO", + "nkn-Latn": "nkn-Latn-AO", + "nko": "nko-Latn-GH", + "nko-GH": "nko-Latn-GH", + "nko-Latn": "nko-Latn-GH", + "nkq": "nkq-Latn-GH", + "nkq-GH": "nkq-Latn-GH", + "nkq-Latn": "nkq-Latn-GH", + "nkr": "nkr-Latn-FM", + "nkr-FM": "nkr-Latn-FM", + "nkr-Latn": "nkr-Latn-FM", + "nks": "nks-Latn-ID", + "nks-ID": "nks-Latn-ID", + "nks-Latn": "nks-Latn-ID", + "nkt": "nkt-Latn-TZ", + "nkt-Latn": "nkt-Latn-TZ", + "nkt-TZ": "nkt-Latn-TZ", + "nku": "nku-Latn-CI", + "nku-CI": "nku-Latn-CI", + "nku-Latn": "nku-Latn-CI", + "nkv": "nkv-Latn-MW", + "nkv-Latn": "nkv-Latn-MW", + "nkv-MW": "nkv-Latn-MW", + "nkw": "nkw-Latn-CD", + "nkw-CD": "nkw-Latn-CD", + "nkw-Latn": "nkw-Latn-CD", + "nkx": "nkx-Latn-NG", + "nkx-Latn": "nkx-Latn-NG", + "nkx-NG": "nkx-Latn-NG", + "nkz": "nkz-Latn-NG", + "nkz-Latn": "nkz-Latn-NG", + "nkz-NG": "nkz-Latn-NG", + "nl": "nl-Latn-NL", + "nl-AW": "nl-Latn-AW", + "nl-BE": "nl-Latn-BE", + "nl-BQ": "nl-Latn-BQ", + "nl-CW": "nl-Latn-CW", + "nl-Latn": "nl-Latn-NL", + "nl-NL": "nl-Latn-NL", + "nl-SR": "nl-Latn-SR", + "nla": "nla-Latn-CM", + "nla-CM": "nla-Latn-CM", + "nla-Latn": "nla-Latn-CM", + "nlc": "nlc-Latn-ID", + "nlc-ID": "nlc-Latn-ID", + "nlc-Latn": "nlc-Latn-ID", + "nle": "nle-Latn-KE", + "nle-KE": "nle-Latn-KE", + "nle-Latn": "nle-Latn-KE", + "nlg": "nlg-Latn-SB", + "nlg-Latn": "nlg-Latn-SB", + "nlg-SB": "nlg-Latn-SB", + "nli": "nli-Arab-AF", + "nli-AF": "nli-Arab-AF", + "nli-Arab": "nli-Arab-AF", + "nlj": "nlj-Latn-CD", + "nlj-CD": "nlj-Latn-CD", + "nlj-Latn": "nlj-Latn-CD", + "nlk": "nlk-Latn-ID", + "nlk-ID": "nlk-Latn-ID", + "nlk-Latn": "nlk-Latn-ID", + "nlm": "nlm-Arab-PK", + "nlm-Arab": "nlm-Arab-PK", + "nlm-PK": "nlm-Arab-PK", + "nlo": "nlo-Latn-CD", + "nlo-CD": "nlo-Latn-CD", + "nlo-Latn": "nlo-Latn-CD", + "nlq": "nlq-Latn-MM", + "nlq-Latn": "nlq-Latn-MM", + "nlq-MM": "nlq-Latn-MM", + "nlu": "nlu-Latn-GH", + "nlu-GH": "nlu-Latn-GH", + "nlu-Latn": "nlu-Latn-GH", + "nlv": "nlv-Latn-MX", + "nlv-Latn": "nlv-Latn-MX", + "nlv-MX": "nlv-Latn-MX", + "nlw": "nlw-Latn-AU", + "nlw-AU": "nlw-Latn-AU", + "nlw-Latn": "nlw-Latn-AU", + "nlx": "nlx-Deva-IN", + "nlx-Deva": "nlx-Deva-IN", + "nlx-IN": "nlx-Deva-IN", + "nly": "nly-Latn-AU", + "nly-AU": "nly-Latn-AU", + "nly-Latn": "nly-Latn-AU", + "nlz": "nlz-Latn-SB", + "nlz-Latn": "nlz-Latn-SB", + "nlz-SB": "nlz-Latn-SB", + "nma": "nma-Latn-IN", + "nma-IN": "nma-Latn-IN", + "nma-Latn": "nma-Latn-IN", + "nmb": "nmb-Latn-VU", + "nmb-Latn": "nmb-Latn-VU", + "nmb-VU": "nmb-Latn-VU", + "nmc": "nmc-Latn-TD", + "nmc-Latn": "nmc-Latn-TD", + "nmc-TD": "nmc-Latn-TD", + "nmd": "nmd-Latn-GA", + "nmd-GA": "nmd-Latn-GA", + "nmd-Latn": "nmd-Latn-GA", + "nme": "nme-Latn-IN", + "nme-IN": "nme-Latn-IN", + "nme-Latn": "nme-Latn-IN", + "nmf": "nmf-Latn-IN", + "nmf-IN": "nmf-Latn-IN", + "nmf-Latn": "nmf-Latn-IN", + "nmg": "nmg-Latn-CM", + "nmg-CM": "nmg-Latn-CM", + "nmg-Latn": "nmg-Latn-CM", + "nmh": "nmh-Latn-IN", + "nmh-IN": "nmh-Latn-IN", + "nmh-Latn": "nmh-Latn-IN", + "nmi": "nmi-Latn-NG", + "nmi-Latn": "nmi-Latn-NG", + "nmi-NG": "nmi-Latn-NG", + "nmj": "nmj-Latn-CF", + "nmj-CF": "nmj-Latn-CF", + "nmj-Latn": "nmj-Latn-CF", + "nmk": "nmk-Latn-VU", + "nmk-Latn": "nmk-Latn-VU", + "nmk-VU": "nmk-Latn-VU", + "nml": "nml-Latn-CM", + "nml-CM": "nml-Latn-CM", + "nml-Latn": "nml-Latn-CM", + "nmm": "nmm-Deva-NP", + "nmm-Deva": "nmm-Deva-NP", + "nmm-NP": "nmm-Deva-NP", + "nmn": "nmn-Latn-BW", + "nmn-BW": "nmn-Latn-BW", + "nmn-Latn": "nmn-Latn-BW", + "nmo": "nmo-Latn-IN", + "nmo-IN": "nmo-Latn-IN", + "nmo-Latn": "nmo-Latn-IN", + "nmp": "nmp-Latn-AU", + "nmp-AU": "nmp-Latn-AU", + "nmp-Latn": "nmp-Latn-AU", + "nmq": "nmq-Latn-ZW", + "nmq-Latn": "nmq-Latn-ZW", + "nmq-ZW": "nmq-Latn-ZW", + "nmr": "nmr-Latn-CM", + "nmr-CM": "nmr-Latn-CM", + "nmr-Latn": "nmr-Latn-CM", + "nms": "nms-Latn-VU", + "nms-Latn": "nms-Latn-VU", + "nms-VU": "nms-Latn-VU", + "nmt": "nmt-Latn-FM", + "nmt-FM": "nmt-Latn-FM", + "nmt-Latn": "nmt-Latn-FM", + "nmu": "nmu-Latn-US", + "nmu-Latn": "nmu-Latn-US", + "nmu-US": "nmu-Latn-US", + "nmv": "nmv-Latn-AU", + "nmv-AU": "nmv-Latn-AU", + "nmv-Latn": "nmv-Latn-AU", + "nmw": "nmw-Latn-PG", + "nmw-Latn": "nmw-Latn-PG", + "nmw-PG": "nmw-Latn-PG", + "nmx": "nmx-Latn-PG", + "nmx-Latn": "nmx-Latn-PG", + "nmx-PG": "nmx-Latn-PG", + "nmz": "nmz-Latn-TG", + "nmz-Latn": "nmz-Latn-TG", + "nmz-TG": "nmz-Latn-TG", + "nn": "nn-Latn-NO", + "nn-Latn": "nn-Latn-NO", + "nn-NO": "nn-Latn-NO", + "nna": "nna-Latn-AU", + "nna-AU": "nna-Latn-AU", + "nna-Latn": "nna-Latn-AU", + "nnb": "nnb-Latn-CD", + "nnb-CD": "nnb-Latn-CD", + "nnb-Latn": "nnb-Latn-CD", + "nnc": "nnc-Latn-TD", + "nnc-Latn": "nnc-Latn-TD", + "nnc-TD": "nnc-Latn-TD", + "nnd": "nnd-Latn-VU", + "nnd-Latn": "nnd-Latn-VU", + "nnd-VU": "nnd-Latn-VU", + "nne": "nne-Latn-AO", + "nne-AO": "nne-Latn-AO", + "nne-Latn": "nne-Latn-AO", + "nnf": "nnf-Latn-PG", + "nnf-Latn": "nnf-Latn-PG", + "nnf-PG": "nnf-Latn-PG", + "nng": "nng-Latn-IN", + "nng-IN": "nng-Latn-IN", + "nng-Latn": "nng-Latn-IN", + "nnh": "nnh-Latn-CM", + "nnh-CM": "nnh-Latn-CM", + "nnh-Latn": "nnh-Latn-CM", + "nni": "nni-Latn-ID", + "nni-ID": "nni-Latn-ID", + "nni-Latn": "nni-Latn-ID", + "nnj": "nnj-Latn-ET", + "nnj-ET": "nnj-Latn-ET", + "nnj-Latn": "nnj-Latn-ET", + "nnk": "nnk-Latn-PG", + "nnk-Latn": "nnk-Latn-PG", + "nnk-PG": "nnk-Latn-PG", + "nnl": "nnl-Latn-IN", + "nnl-IN": "nnl-Latn-IN", + "nnl-Latn": "nnl-Latn-IN", + "nnm": "nnm-Latn-PG", + "nnm-Latn": "nnm-Latn-PG", + "nnm-PG": "nnm-Latn-PG", + "nnn": "nnn-Latn-TD", + "nnn-Latn": "nnn-Latn-TD", + "nnn-TD": "nnn-Latn-TD", + "nnp": "nnp-Wcho-IN", + "nnp-IN": "nnp-Wcho-IN", + "nnp-Wcho": "nnp-Wcho-IN", + "nnq": "nnq-Latn-TZ", + "nnq-Latn": "nnq-Latn-TZ", + "nnq-TZ": "nnq-Latn-TZ", + "nnr": "nnr-Latn-AU", + "nnr-AU": "nnr-Latn-AU", + "nnr-Latn": "nnr-Latn-AU", + "nnt": "nnt-Latn-US", + "nnt-Latn": "nnt-Latn-US", + "nnt-US": "nnt-Latn-US", + "nnu": "nnu-Latn-GH", + "nnu-GH": "nnu-Latn-GH", + "nnu-Latn": "nnu-Latn-GH", + "nnv": "nnv-Latn-AU", + "nnv-AU": "nnv-Latn-AU", + "nnv-Latn": "nnv-Latn-AU", + "nnw": "nnw-Latn-BF", + "nnw-BF": "nnw-Latn-BF", + "nnw-Latn": "nnw-Latn-BF", + "nny": "nny-Latn-AU", + "nny-AU": "nny-Latn-AU", + "nny-Latn": "nny-Latn-AU", + "nnz": "nnz-Latn-CM", + "nnz-CM": "nnz-Latn-CM", + "nnz-Latn": "nnz-Latn-CM", + "no": "no-Latn-NO", + "no-BV": "no-Latn-BV", + "no-Latn": "no-Latn-NO", + "no-NO": "no-Latn-NO", + "no-SJ": "no-Latn-SJ", + "noa": "noa-Latn-CO", + "noa-CO": "noa-Latn-CO", + "noa-Latn": "noa-Latn-CO", + "noc": "noc-Latn-PG", + "noc-Latn": "noc-Latn-PG", + "noc-PG": "noc-Latn-PG", + "nod": "nod-Lana-TH", + "nod-Lana": "nod-Lana-TH", + "nod-TH": "nod-Lana-TH", + "noe": "noe-Deva-IN", + "noe-Deva": "noe-Deva-IN", + "noe-IN": "noe-Deva-IN", + "nof": "nof-Latn-PG", + "nof-Latn": "nof-Latn-PG", + "nof-PG": "nof-Latn-PG", + "nog": "nog-Cyrl-RU", + "nog-Cyrl": "nog-Cyrl-RU", + "nog-RU": "nog-Cyrl-RU", + "noh": "noh-Latn-PG", + "noh-Latn": "noh-Latn-PG", + "noh-PG": "noh-Latn-PG", + "noi": "noi-Deva-IN", + "noi-Deva": "noi-Deva-IN", + "noi-IN": "noi-Deva-IN", + "noj": "noj-Latn-CO", + "noj-CO": "noj-Latn-CO", + "noj-Latn": "noj-Latn-CO", + "nok": "nok-Latn-US", + "nok-Latn": "nok-Latn-US", + "nok-US": "nok-Latn-US", + "non": "non-Runr-SE", + "non-Runr": "non-Runr-SE", + "non-SE": "non-Runr-SE", + "nop": "nop-Latn-PG", + "nop-Latn": "nop-Latn-PG", + "nop-PG": "nop-Latn-PG", + "noq": "noq-Latn-CD", + "noq-CD": "noq-Latn-CD", + "noq-Latn": "noq-Latn-CD", + "nos": "nos-Yiii-CN", + "nos-CN": "nos-Yiii-CN", + "nos-Yiii": "nos-Yiii-CN", + "not": "not-Latn-PE", + "not-Latn": "not-Latn-PE", + "not-PE": "not-Latn-PE", + "nou": "nou-Latn-PG", + "nou-Latn": "nou-Latn-PG", + "nou-PG": "nou-Latn-PG", + "nov": "nov-Latn-001", + "nov-001": "nov-Latn-001", + "nov-Latn": "nov-Latn-001", + "now": "now-Latn-TZ", + "now-Latn": "now-Latn-TZ", + "now-TZ": "now-Latn-TZ", + "noy": "noy-Latn-TD", + "noy-Latn": "noy-Latn-TD", + "noy-TD": "noy-Latn-TD", + "npb": "npb-Tibt-BT", + "npb-BT": "npb-Tibt-BT", + "npb-Tibt": "npb-Tibt-BT", + "npg": "npg-Latn-MM", + "npg-Latn": "npg-Latn-MM", + "npg-MM": "npg-Latn-MM", + "nph": "nph-Latn-IN", + "nph-IN": "nph-Latn-IN", + "nph-Latn": "nph-Latn-IN", + "npl": "npl-Latn-MX", + "npl-Latn": "npl-Latn-MX", + "npl-MX": "npl-Latn-MX", + "npn": "npn-Latn-PG", + "npn-Latn": "npn-Latn-PG", + "npn-PG": "npn-Latn-PG", + "npo": "npo-Latn-IN", + "npo-IN": "npo-Latn-IN", + "npo-Latn": "npo-Latn-IN", + "nps": "nps-Latn-ID", + "nps-ID": "nps-Latn-ID", + "nps-Latn": "nps-Latn-ID", + "npu": "npu-Latn-IN", + "npu-IN": "npu-Latn-IN", + "npu-Latn": "npu-Latn-IN", + "npx": "npx-Latn-SB", + "npx-Latn": "npx-Latn-SB", + "npx-SB": "npx-Latn-SB", + "npy": "npy-Latn-ID", + "npy-ID": "npy-Latn-ID", + "npy-Latn": "npy-Latn-ID", + "nqg": "nqg-Latn-BJ", + "nqg-BJ": "nqg-Latn-BJ", + "nqg-Latn": "nqg-Latn-BJ", + "nqk": "nqk-Latn-BJ", + "nqk-BJ": "nqk-Latn-BJ", + "nqk-Latn": "nqk-Latn-BJ", + "nql": "nql-Latn-AO", + "nql-AO": "nql-Latn-AO", + "nql-Latn": "nql-Latn-AO", + "nqm": "nqm-Latn-ID", + "nqm-ID": "nqm-Latn-ID", + "nqm-Latn": "nqm-Latn-ID", + "nqn": "nqn-Latn-PG", + "nqn-Latn": "nqn-Latn-PG", + "nqn-PG": "nqn-Latn-PG", + "nqo": "nqo-Nkoo-GN", + "nqo-GN": "nqo-Nkoo-GN", + "nqo-Nkoo": "nqo-Nkoo-GN", + "nqq": "nqq-Latn-MM", + "nqq-Latn": "nqq-Latn-MM", + "nqq-MM": "nqq-Latn-MM", + "nqt": "nqt-Latn-NG", + "nqt-Latn": "nqt-Latn-NG", + "nqt-NG": "nqt-Latn-NG", + "nqy": "nqy-Latn-MM", + "nqy-Latn": "nqy-Latn-MM", + "nqy-MM": "nqy-Latn-MM", + "nr": "nr-Latn-ZA", + "nr-Latn": "nr-Latn-ZA", + "nr-ZA": "nr-Latn-ZA", + "nra": "nra-Latn-GA", + "nra-GA": "nra-Latn-GA", + "nra-Latn": "nra-Latn-GA", + "nrb": "nrb-Latn-ER", + "nrb-ER": "nrb-Latn-ER", + "nrb-Latn": "nrb-Latn-ER", + "nre": "nre-Latn-IN", + "nre-IN": "nre-Latn-IN", + "nre-Latn": "nre-Latn-IN", + "nrf": "nrf-Latn-JE", + "nrf-JE": "nrf-Latn-JE", + "nrf-Latn": "nrf-Latn-JE", + "nrg": "nrg-Latn-VU", + "nrg-Latn": "nrg-Latn-VU", + "nrg-VU": "nrg-Latn-VU", + "nri": "nri-Latn-IN", + "nri-IN": "nri-Latn-IN", + "nri-Latn": "nri-Latn-IN", + "nrk": "nrk-Latn-AU", + "nrk-AU": "nrk-Latn-AU", + "nrk-Latn": "nrk-Latn-AU", + "nrl": "nrl-Latn-AU", + "nrl-AU": "nrl-Latn-AU", + "nrl-Latn": "nrl-Latn-AU", + "nrm": "nrm-Latn-MY", + "nrm-Latn": "nrm-Latn-MY", + "nrm-MY": "nrm-Latn-MY", + "nrn": "nrn-Runr-GB", + "nrn-GB": "nrn-Runr-GB", + "nrn-Runr": "nrn-Runr-GB", + "nrp": "nrp-Latn-IT", + "nrp-IT": "nrp-Latn-IT", + "nrp-Latn": "nrp-Latn-IT", + "nru": "nru-Latn-CN", + "nru-CN": "nru-Latn-CN", + "nru-Latn": "nru-Latn-CN", + "nrx": "nrx-Latn-AU", + "nrx-AU": "nrx-Latn-AU", + "nrx-Latn": "nrx-Latn-AU", + "nrz": "nrz-Latn-PG", + "nrz-Latn": "nrz-Latn-PG", + "nrz-PG": "nrz-Latn-PG", + "nsa": "nsa-Latn-IN", + "nsa-IN": "nsa-Latn-IN", + "nsa-Latn": "nsa-Latn-IN", + "nsb": "nsb-Latn-ZA", + "nsb-Latn": "nsb-Latn-ZA", + "nsb-ZA": "nsb-Latn-ZA", + "nsc": "nsc-Latn-NG", + "nsc-Latn": "nsc-Latn-NG", + "nsc-NG": "nsc-Latn-NG", + "nsd": "nsd-Yiii-CN", + "nsd-CN": "nsd-Yiii-CN", + "nsd-Yiii": "nsd-Yiii-CN", + "nse": "nse-Latn-ZM", + "nse-Latn": "nse-Latn-ZM", + "nse-ZM": "nse-Latn-ZM", + "nsf": "nsf-Yiii-CN", + "nsf-CN": "nsf-Yiii-CN", + "nsf-Yiii": "nsf-Yiii-CN", + "nsg": "nsg-Latn-TZ", + "nsg-Latn": "nsg-Latn-TZ", + "nsg-TZ": "nsg-Latn-TZ", + "nsh": "nsh-Latn-CM", + "nsh-CM": "nsh-Latn-CM", + "nsh-Latn": "nsh-Latn-CM", + "nsk": "nsk-Cans-CA", + "nsk-CA": "nsk-Cans-CA", + "nsk-Cans": "nsk-Cans-CA", + "nsm": "nsm-Latn-IN", + "nsm-IN": "nsm-Latn-IN", + "nsm-Latn": "nsm-Latn-IN", + "nsn": "nsn-Latn-PG", + "nsn-Latn": "nsn-Latn-PG", + "nsn-PG": "nsn-Latn-PG", + "nso": "nso-Latn-ZA", + "nso-Latn": "nso-Latn-ZA", + "nso-ZA": "nso-Latn-ZA", + "nsq": "nsq-Latn-US", + "nsq-Latn": "nsq-Latn-US", + "nsq-US": "nsq-Latn-US", + "nss": "nss-Latn-PG", + "nss-Latn": "nss-Latn-PG", + "nss-PG": "nss-Latn-PG", + "nst": "nst-Tnsa-IN", + "nst-IN": "nst-Tnsa-IN", + "nst-Tnsa": "nst-Tnsa-IN", + "nsu": "nsu-Latn-MX", + "nsu-Latn": "nsu-Latn-MX", + "nsu-MX": "nsu-Latn-MX", + "nsv": "nsv-Yiii-CN", + "nsv-CN": "nsv-Yiii-CN", + "nsv-Yiii": "nsv-Yiii-CN", + "nsw": "nsw-Latn-VU", + "nsw-Latn": "nsw-Latn-VU", + "nsw-VU": "nsw-Latn-VU", + "nsx": "nsx-Latn-AO", + "nsx-AO": "nsx-Latn-AO", + "nsx-Latn": "nsx-Latn-AO", + "nsy": "nsy-Latn-ID", + "nsy-ID": "nsy-Latn-ID", + "nsy-Latn": "nsy-Latn-ID", + "nsz": "nsz-Latn-US", + "nsz-Latn": "nsz-Latn-US", + "nsz-US": "nsz-Latn-US", + "ntd": "ntd-Latn-MY", + "ntd-Latn": "ntd-Latn-MY", + "ntd-MY": "ntd-Latn-MY", + "nte": "nte-Latn-MZ", + "nte-Latn": "nte-Latn-MZ", + "nte-MZ": "nte-Latn-MZ", + "ntg": "ntg-Latn-AU", + "ntg-AU": "ntg-Latn-AU", + "ntg-Latn": "ntg-Latn-AU", + "nti": "nti-Latn-BF", + "nti-BF": "nti-Latn-BF", + "nti-Latn": "nti-Latn-BF", + "ntj": "ntj-Latn-AU", + "ntj-AU": "ntj-Latn-AU", + "ntj-Latn": "ntj-Latn-AU", + "ntk": "ntk-Latn-TZ", + "ntk-Latn": "ntk-Latn-TZ", + "ntk-TZ": "ntk-Latn-TZ", + "ntm": "ntm-Latn-BJ", + "ntm-BJ": "ntm-Latn-BJ", + "ntm-Latn": "ntm-Latn-BJ", + "nto": "nto-Latn-CD", + "nto-CD": "nto-Latn-CD", + "nto-Latn": "nto-Latn-CD", + "ntp": "ntp-Latn-MX", + "ntp-Latn": "ntp-Latn-MX", + "ntp-MX": "ntp-Latn-MX", + "ntr": "ntr-Latn-GH", + "ntr-GH": "ntr-Latn-GH", + "ntr-Latn": "ntr-Latn-GH", + "ntu": "ntu-Latn-SB", + "ntu-Latn": "ntu-Latn-SB", + "ntu-SB": "ntu-Latn-SB", + "ntx": "ntx-Latn-MM", + "ntx-Latn": "ntx-Latn-MM", + "ntx-MM": "ntx-Latn-MM", + "nty": "nty-Yiii-VN", + "nty-VN": "nty-Yiii-VN", + "nty-Yiii": "nty-Yiii-VN", + "ntz": "ntz-Arab-IR", + "ntz-Arab": "ntz-Arab-IR", + "ntz-IR": "ntz-Arab-IR", + "nua": "nua-Latn-NC", + "nua-Latn": "nua-Latn-NC", + "nua-NC": "nua-Latn-NC", + "nuc": "nuc-Latn-BR", + "nuc-BR": "nuc-Latn-BR", + "nuc-Latn": "nuc-Latn-BR", + "nud": "nud-Latn-PG", + "nud-Latn": "nud-Latn-PG", + "nud-PG": "nud-Latn-PG", + "nue": "nue-Latn-CD", + "nue-CD": "nue-Latn-CD", + "nue-Latn": "nue-Latn-CD", + "nuf": "nuf-Latn-CN", + "nuf-CN": "nuf-Latn-CN", + "nuf-Latn": "nuf-Latn-CN", + "nug": "nug-Latn-AU", + "nug-AU": "nug-Latn-AU", + "nug-Latn": "nug-Latn-AU", + "nuh": "nuh-Latn-NG", + "nuh-Latn": "nuh-Latn-NG", + "nuh-NG": "nuh-Latn-NG", + "nui": "nui-Latn-GQ", + "nui-GQ": "nui-Latn-GQ", + "nui-Latn": "nui-Latn-GQ", + "nuj": "nuj-Latn-UG", + "nuj-Latn": "nuj-Latn-UG", + "nuj-UG": "nuj-Latn-UG", + "nuk": "nuk-Latn-CA", + "nuk-CA": "nuk-Latn-CA", + "nuk-Latn": "nuk-Latn-CA", + "num": "num-Latn-TO", + "num-Latn": "num-Latn-TO", + "num-TO": "num-Latn-TO", + "nun": "nun-Latn-MM", + "nun-Latn": "nun-Latn-MM", + "nun-MM": "nun-Latn-MM", + "nuo": "nuo-Latn-VN", + "nuo-Latn": "nuo-Latn-VN", + "nuo-VN": "nuo-Latn-VN", + "nup": "nup-Latn-NG", + "nup-Latn": "nup-Latn-NG", + "nup-NG": "nup-Latn-NG", + "nuq": "nuq-Latn-PG", + "nuq-Latn": "nuq-Latn-PG", + "nuq-PG": "nuq-Latn-PG", + "nur": "nur-Latn-PG", + "nur-Latn": "nur-Latn-PG", + "nur-PG": "nur-Latn-PG", + "nus": "nus-Latn-SS", + "nus-Latn": "nus-Latn-SS", + "nus-SS": "nus-Latn-SS", + "nut": "nut-Latn-VN", + "nut-Latn": "nut-Latn-VN", + "nut-VN": "nut-Latn-VN", + "nuu": "nuu-Latn-CD", + "nuu-CD": "nuu-Latn-CD", + "nuu-Latn": "nuu-Latn-CD", + "nuv": "nuv-Latn-BF", + "nuv-BF": "nuv-Latn-BF", + "nuv-Latn": "nuv-Latn-BF", + "nuw": "nuw-Latn-FM", + "nuw-FM": "nuw-Latn-FM", + "nuw-Latn": "nuw-Latn-FM", + "nux": "nux-Latn-PG", + "nux-Latn": "nux-Latn-PG", + "nux-PG": "nux-Latn-PG", + "nuy": "nuy-Latn-AU", + "nuy-AU": "nuy-Latn-AU", + "nuy-Latn": "nuy-Latn-AU", + "nuz": "nuz-Latn-MX", + "nuz-Latn": "nuz-Latn-MX", + "nuz-MX": "nuz-Latn-MX", + "nv": "nv-Latn-US", + "nv-Latn": "nv-Latn-US", + "nv-US": "nv-Latn-US", + "nvh": "nvh-Latn-VU", + "nvh-Latn": "nvh-Latn-VU", + "nvh-VU": "nvh-Latn-VU", + "nvm": "nvm-Latn-PG", + "nvm-Latn": "nvm-Latn-PG", + "nvm-PG": "nvm-Latn-PG", + "nvo": "nvo-Latn-CM", + "nvo-CM": "nvo-Latn-CM", + "nvo-Latn": "nvo-Latn-CM", + "nwb": "nwb-Latn-CI", + "nwb-CI": "nwb-Latn-CI", + "nwb-Latn": "nwb-Latn-CI", + "nwc": "nwc-Newa-NP", + "nwc-NP": "nwc-Newa-NP", + "nwc-Newa": "nwc-Newa-NP", + "nwe": "nwe-Latn-CM", + "nwe-CM": "nwe-Latn-CM", + "nwe-Latn": "nwe-Latn-CM", + "nwg": "nwg-Latn-AU", + "nwg-AU": "nwg-Latn-AU", + "nwg-Latn": "nwg-Latn-AU", + "nwi": "nwi-Latn-VU", + "nwi-Latn": "nwi-Latn-VU", + "nwi-VU": "nwi-Latn-VU", + "nwm": "nwm-Latn-SS", + "nwm-Latn": "nwm-Latn-SS", + "nwm-SS": "nwm-Latn-SS", + "nwo": "nwo-Latn-AU", + "nwo-AU": "nwo-Latn-AU", + "nwo-Latn": "nwo-Latn-AU", + "nwr": "nwr-Latn-PG", + "nwr-Latn": "nwr-Latn-PG", + "nwr-PG": "nwr-Latn-PG", + "nww": "nww-Latn-TZ", + "nww-Latn": "nww-Latn-TZ", + "nww-TZ": "nww-Latn-TZ", + "nwx": "nwx-Deva-NP", + "nwx-Deva": "nwx-Deva-NP", + "nwx-NP": "nwx-Deva-NP", + "nxa": "nxa-Latn-TL", + "nxa-Latn": "nxa-Latn-TL", + "nxa-TL": "nxa-Latn-TL", + "nxd": "nxd-Latn-CD", + "nxd-CD": "nxd-Latn-CD", + "nxd-Latn": "nxd-Latn-CD", + "nxe": "nxe-Latn-ID", + "nxe-ID": "nxe-Latn-ID", + "nxe-Latn": "nxe-Latn-ID", + "nxg": "nxg-Latn-ID", + "nxg-ID": "nxg-Latn-ID", + "nxg-Latn": "nxg-Latn-ID", + "nxi": "nxi-Latn-TZ", + "nxi-Latn": "nxi-Latn-TZ", + "nxi-TZ": "nxi-Latn-TZ", + "nxl": "nxl-Latn-ID", + "nxl-ID": "nxl-Latn-ID", + "nxl-Latn": "nxl-Latn-ID", + "nxn": "nxn-Latn-AU", + "nxn-AU": "nxn-Latn-AU", + "nxn-Latn": "nxn-Latn-AU", + "nxo": "nxo-Latn-GA", + "nxo-GA": "nxo-Latn-GA", + "nxo-Latn": "nxo-Latn-GA", + "nxq": "nxq-Latn-CN", + "nxq-CN": "nxq-Latn-CN", + "nxq-Latn": "nxq-Latn-CN", + "nxr": "nxr-Latn-PG", + "nxr-Latn": "nxr-Latn-PG", + "nxr-PG": "nxr-Latn-PG", + "nxx": "nxx-Latn-ID", + "nxx-ID": "nxx-Latn-ID", + "nxx-Latn": "nxx-Latn-ID", + "ny": "ny-Latn-MW", + "ny-Latn": "ny-Latn-MW", + "ny-MW": "ny-Latn-MW", + "nyb": "nyb-Latn-GH", + "nyb-GH": "nyb-Latn-GH", + "nyb-Latn": "nyb-Latn-GH", + "nyc": "nyc-Latn-CD", + "nyc-CD": "nyc-Latn-CD", + "nyc-Latn": "nyc-Latn-CD", + "nyd": "nyd-Latn-KE", + "nyd-KE": "nyd-Latn-KE", + "nyd-Latn": "nyd-Latn-KE", + "nye": "nye-Latn-AO", + "nye-AO": "nye-Latn-AO", + "nye-Latn": "nye-Latn-AO", + "nyf": "nyf-Latn-KE", + "nyf-KE": "nyf-Latn-KE", + "nyf-Latn": "nyf-Latn-KE", + "nyg": "nyg-Latn-CD", + "nyg-CD": "nyg-Latn-CD", + "nyg-Latn": "nyg-Latn-CD", + "nyh": "nyh-Latn-AU", + "nyh-AU": "nyh-Latn-AU", + "nyh-Latn": "nyh-Latn-AU", + "nyi": "nyi-Latn-SD", + "nyi-Latn": "nyi-Latn-SD", + "nyi-SD": "nyi-Latn-SD", + "nyj": "nyj-Latn-CD", + "nyj-CD": "nyj-Latn-CD", + "nyj-Latn": "nyj-Latn-CD", + "nyk": "nyk-Latn-AO", + "nyk-AO": "nyk-Latn-AO", + "nyk-Latn": "nyk-Latn-AO", + "nyl": "nyl-Thai-TH", + "nyl-TH": "nyl-Thai-TH", + "nyl-Thai": "nyl-Thai-TH", + "nym": "nym-Latn-TZ", + "nym-Latn": "nym-Latn-TZ", + "nym-TZ": "nym-Latn-TZ", + "nyn": "nyn-Latn-UG", + "nyn-Latn": "nyn-Latn-UG", + "nyn-UG": "nyn-Latn-UG", + "nyo": "nyo-Latn-UG", + "nyo-Latn": "nyo-Latn-UG", + "nyo-UG": "nyo-Latn-UG", + "nyp": "nyp-Latn-UG", + "nyp-Latn": "nyp-Latn-UG", + "nyp-UG": "nyp-Latn-UG", + "nyq": "nyq-Arab-IR", + "nyq-Arab": "nyq-Arab-IR", + "nyq-IR": "nyq-Arab-IR", + "nyr": "nyr-Latn-MW", + "nyr-Latn": "nyr-Latn-MW", + "nyr-MW": "nyr-Latn-MW", + "nys": "nys-Latn-AU", + "nys-AU": "nys-Latn-AU", + "nys-Latn": "nys-Latn-AU", + "nyt": "nyt-Latn-AU", + "nyt-AU": "nyt-Latn-AU", + "nyt-Latn": "nyt-Latn-AU", + "nyu": "nyu-Latn-MZ", + "nyu-Latn": "nyu-Latn-MZ", + "nyu-MZ": "nyu-Latn-MZ", + "nyv": "nyv-Latn-AU", + "nyv-AU": "nyv-Latn-AU", + "nyv-Latn": "nyv-Latn-AU", + "nyw": "nyw-Thai-TH", + "nyw-TH": "nyw-Thai-TH", + "nyw-Thai": "nyw-Thai-TH", + "nyx": "nyx-Latn-AU", + "nyx-AU": "nyx-Latn-AU", + "nyx-Latn": "nyx-Latn-AU", + "nyy": "nyy-Latn-TZ", + "nyy-Latn": "nyy-Latn-TZ", + "nyy-TZ": "nyy-Latn-TZ", + "nza": "nza-Latn-CM", + "nza-CM": "nza-Latn-CM", + "nza-Latn": "nza-Latn-CM", + "nzb": "nzb-Latn-GA", + "nzb-GA": "nzb-Latn-GA", + "nzb-Latn": "nzb-Latn-GA", + "nzd": "nzd-Latn-CD", + "nzd-CD": "nzd-Latn-CD", + "nzd-Latn": "nzd-Latn-CD", + "nzi": "nzi-Latn-GH", + "nzi-GH": "nzi-Latn-GH", + "nzi-Latn": "nzi-Latn-GH", + "nzk": "nzk-Latn-CF", + "nzk-CF": "nzk-Latn-CF", + "nzk-Latn": "nzk-Latn-CF", + "nzm": "nzm-Latn-IN", + "nzm-IN": "nzm-Latn-IN", + "nzm-Latn": "nzm-Latn-IN", + "nzr": "nzr-Latn-NG", + "nzr-Latn": "nzr-Latn-NG", + "nzr-NG": "nzr-Latn-NG", + "nzu": "nzu-Latn-CG", + "nzu-CG": "nzu-Latn-CG", + "nzu-Latn": "nzu-Latn-CG", + "nzy": "nzy-Latn-TD", + "nzy-Latn": "nzy-Latn-TD", + "nzy-TD": "nzy-Latn-TD", + "nzz": "nzz-Latn-ML", + "nzz-Latn": "nzz-Latn-ML", + "nzz-ML": "nzz-Latn-ML", + "oaa": "oaa-Cyrl-RU", + "oaa-Cyrl": "oaa-Cyrl-RU", + "oaa-RU": "oaa-Cyrl-RU", + "oac": "oac-Cyrl-RU", + "oac-Cyrl": "oac-Cyrl-RU", + "oac-RU": "oac-Cyrl-RU", + "oar": "oar-Syrc-SY", + "oar-SY": "oar-Syrc-SY", + "oar-Syrc": "oar-Syrc-SY", + "oav": "oav-Geor-GE", + "oav-GE": "oav-Geor-GE", + "oav-Geor": "oav-Geor-GE", + "obi": "obi-Latn-US", + "obi-Latn": "obi-Latn-US", + "obi-US": "obi-Latn-US", + "obk": "obk-Latn-PH", + "obk-Latn": "obk-Latn-PH", + "obk-PH": "obk-Latn-PH", + "obl": "obl-Latn-CM", + "obl-CM": "obl-Latn-CM", + "obl-Latn": "obl-Latn-CM", + "obm": "obm-Phnx-JO", + "obm-JO": "obm-Phnx-JO", + "obm-Phnx": "obm-Phnx-JO", + "obo": "obo-Latn-PH", + "obo-Latn": "obo-Latn-PH", + "obo-PH": "obo-Latn-PH", + "obr": "obr-Mymr-MM", + "obr-MM": "obr-Mymr-MM", + "obr-Mymr": "obr-Mymr-MM", + "obt": "obt-Latn-FR", + "obt-FR": "obt-Latn-FR", + "obt-Latn": "obt-Latn-FR", + "obu": "obu-Latn-NG", + "obu-Latn": "obu-Latn-NG", + "obu-NG": "obu-Latn-NG", + "oc": "oc-Latn-FR", + "oc-FR": "oc-Latn-FR", + "oc-Latn": "oc-Latn-FR", + "oca": "oca-Latn-PE", + "oca-Latn": "oca-Latn-PE", + "oca-PE": "oca-Latn-PE", + "oco": "oco-Latn-GB", + "oco-GB": "oco-Latn-GB", + "oco-Latn": "oco-Latn-GB", + "ocu": "ocu-Latn-MX", + "ocu-Latn": "ocu-Latn-MX", + "ocu-MX": "ocu-Latn-MX", + "oda": "oda-Latn-NG", + "oda-Latn": "oda-Latn-NG", + "oda-NG": "oda-Latn-NG", + "odk": "odk-Arab-PK", + "odk-Arab": "odk-Arab-PK", + "odk-PK": "odk-Arab-PK", + "odt": "odt-Latn-NL", + "odt-Latn": "odt-Latn-NL", + "odt-NL": "odt-Latn-NL", + "odu": "odu-Latn-NG", + "odu-Latn": "odu-Latn-NG", + "odu-NG": "odu-Latn-NG", + "ofs": "ofs-Latn-NL", + "ofs-Latn": "ofs-Latn-NL", + "ofs-NL": "ofs-Latn-NL", + "ofu": "ofu-Latn-NG", + "ofu-Latn": "ofu-Latn-NG", + "ofu-NG": "ofu-Latn-NG", + "ogb": "ogb-Latn-NG", + "ogb-Latn": "ogb-Latn-NG", + "ogb-NG": "ogb-Latn-NG", + "ogc": "ogc-Latn-NG", + "ogc-Latn": "ogc-Latn-NG", + "ogc-NG": "ogc-Latn-NG", + "ogg": "ogg-Latn-NG", + "ogg-Latn": "ogg-Latn-NG", + "ogg-NG": "ogg-Latn-NG", + "ogo": "ogo-Latn-NG", + "ogo-Latn": "ogo-Latn-NG", + "ogo-NG": "ogo-Latn-NG", + "ogu": "ogu-Latn-NG", + "ogu-Latn": "ogu-Latn-NG", + "ogu-NG": "ogu-Latn-NG", + "oht": "oht-Xsux-TR", + "oht-TR": "oht-Xsux-TR", + "oht-Xsux": "oht-Xsux-TR", + "ohu": "ohu-Latn-HU", + "ohu-HU": "ohu-Latn-HU", + "ohu-Latn": "ohu-Latn-HU", + "oia": "oia-Latn-ID", + "oia-ID": "oia-Latn-ID", + "oia-Latn": "oia-Latn-ID", + "oie": "oie-Latn-SS", + "oie-Latn": "oie-Latn-SS", + "oie-SS": "oie-Latn-SS", + "oin": "oin-Latn-PG", + "oin-Latn": "oin-Latn-PG", + "oin-PG": "oin-Latn-PG", + "oj": "oj-Cans-CA", + "oj-CA": "oj-Cans-CA", + "oj-Cans": "oj-Cans-CA", + "ojb": "ojb-Latn-CA", + "ojb-CA": "ojb-Latn-CA", + "ojb-Latn": "ojb-Latn-CA", + "ojc": "ojc-Latn-CA", + "ojc-CA": "ojc-Latn-CA", + "ojc-Latn": "ojc-Latn-CA", + "ojs": "ojs-Cans-CA", + "ojs-CA": "ojs-Cans-CA", + "ojs-Cans": "ojs-Cans-CA", + "ojv": "ojv-Latn-SB", + "ojv-Latn": "ojv-Latn-SB", + "ojv-SB": "ojv-Latn-SB", + "ojw": "ojw-Latn-CA", + "ojw-CA": "ojw-Latn-CA", + "ojw-Latn": "ojw-Latn-CA", + "oka": "oka-Latn-CA", + "oka-CA": "oka-Latn-CA", + "oka-Latn": "oka-Latn-CA", + "okb": "okb-Latn-NG", + "okb-Latn": "okb-Latn-NG", + "okb-NG": "okb-Latn-NG", + "okc": "okc-Latn-CD", + "okc-CD": "okc-Latn-CD", + "okc-Latn": "okc-Latn-CD", + "okd": "okd-Latn-NG", + "okd-Latn": "okd-Latn-NG", + "okd-NG": "okd-Latn-NG", + "oke": "oke-Latn-NG", + "oke-Latn": "oke-Latn-NG", + "oke-NG": "oke-Latn-NG", + "okg": "okg-Latn-AU", + "okg-AU": "okg-Latn-AU", + "okg-Latn": "okg-Latn-AU", + "oki": "oki-Latn-KE", + "oki-KE": "oki-Latn-KE", + "oki-Latn": "oki-Latn-KE", + "okk": "okk-Latn-PG", + "okk-Latn": "okk-Latn-PG", + "okk-PG": "okk-Latn-PG", + "okm": "okm-Hang-KR", + "okm-Hang": "okm-Hang-KR", + "okm-KR": "okm-Hang-KR", + "oko": "oko-Hani-KR", + "oko-Hani": "oko-Hani-KR", + "oko-KR": "oko-Hani-KR", + "okr": "okr-Latn-NG", + "okr-Latn": "okr-Latn-NG", + "okr-NG": "okr-Latn-NG", + "oks": "oks-Latn-NG", + "oks-Latn": "oks-Latn-NG", + "oks-NG": "oks-Latn-NG", + "oku": "oku-Latn-CM", + "oku-CM": "oku-Latn-CM", + "oku-Latn": "oku-Latn-CM", + "okv": "okv-Latn-PG", + "okv-Latn": "okv-Latn-PG", + "okv-PG": "okv-Latn-PG", + "okx": "okx-Latn-NG", + "okx-Latn": "okx-Latn-NG", + "okx-NG": "okx-Latn-NG", + "okz": "okz-Khmr-KH", + "okz-KH": "okz-Khmr-KH", + "okz-Khmr": "okz-Khmr-KH", + "ola": "ola-Deva-NP", + "ola-Deva": "ola-Deva-NP", + "ola-NP": "ola-Deva-NP", + "old": "old-Latn-TZ", + "old-Latn": "old-Latn-TZ", + "old-TZ": "old-Latn-TZ", + "ole": "ole-Tibt-BT", + "ole-BT": "ole-Tibt-BT", + "ole-Tibt": "ole-Tibt-BT", + "olk": "olk-Latn-AU", + "olk-AU": "olk-Latn-AU", + "olk-Latn": "olk-Latn-AU", + "olm": "olm-Latn-NG", + "olm-Latn": "olm-Latn-NG", + "olm-NG": "olm-Latn-NG", + "olo": "olo-Latn-RU", + "olo-Latn": "olo-Latn-RU", + "olo-RU": "olo-Latn-RU", + "olr": "olr-Latn-VU", + "olr-Latn": "olr-Latn-VU", + "olr-VU": "olr-Latn-VU", + "olt": "olt-Latn-LT", + "olt-LT": "olt-Latn-LT", + "olt-Latn": "olt-Latn-LT", + "olu": "olu-Latn-AO", + "olu-AO": "olu-Latn-AO", + "olu-Latn": "olu-Latn-AO", + "om": "om-Latn-ET", + "om-ET": "om-Latn-ET", + "om-Latn": "om-Latn-ET", + "oma": "oma-Latn-US", + "oma-Latn": "oma-Latn-US", + "oma-US": "oma-Latn-US", + "omb": "omb-Latn-VU", + "omb-Latn": "omb-Latn-VU", + "omb-VU": "omb-Latn-VU", + "omc": "omc-Latn-PE", + "omc-Latn": "omc-Latn-PE", + "omc-PE": "omc-Latn-PE", + "omg": "omg-Latn-PE", + "omg-Latn": "omg-Latn-PE", + "omg-PE": "omg-Latn-PE", + "omi": "omi-Latn-CD", + "omi-CD": "omi-Latn-CD", + "omi-Latn": "omi-Latn-CD", + "omk": "omk-Cyrl-RU", + "omk-Cyrl": "omk-Cyrl-RU", + "omk-RU": "omk-Cyrl-RU", + "oml": "oml-Latn-CD", + "oml-CD": "oml-Latn-CD", + "oml-Latn": "oml-Latn-CD", + "omo": "omo-Latn-PG", + "omo-Latn": "omo-Latn-PG", + "omo-PG": "omo-Latn-PG", + "omp": "omp-Mtei-IN", + "omp-IN": "omp-Mtei-IN", + "omp-Mtei": "omp-Mtei-IN", + "omr": "omr-Modi-IN", + "omr-IN": "omr-Modi-IN", + "omr-Modi": "omr-Modi-IN", + "omt": "omt-Latn-KE", + "omt-KE": "omt-Latn-KE", + "omt-Latn": "omt-Latn-KE", + "omu": "omu-Latn-PE", + "omu-Latn": "omu-Latn-PE", + "omu-PE": "omu-Latn-PE", + "omw": "omw-Latn-PG", + "omw-Latn": "omw-Latn-PG", + "omw-PG": "omw-Latn-PG", + "omx": "omx-Mymr-MM", + "omx-MM": "omx-Mymr-MM", + "omx-Mymr": "omx-Mymr-MM", + "ona": "ona-Latn-AR", + "ona-AR": "ona-Latn-AR", + "ona-Latn": "ona-Latn-AR", + "one": "one-Latn-CA", + "one-CA": "one-Latn-CA", + "one-Latn": "one-Latn-CA", + "ong": "ong-Latn-PG", + "ong-Latn": "ong-Latn-PG", + "ong-PG": "ong-Latn-PG", + "oni": "oni-Latn-ID", + "oni-ID": "oni-Latn-ID", + "oni-Latn": "oni-Latn-ID", + "onj": "onj-Latn-PG", + "onj-Latn": "onj-Latn-PG", + "onj-PG": "onj-Latn-PG", + "onk": "onk-Latn-PG", + "onk-Latn": "onk-Latn-PG", + "onk-PG": "onk-Latn-PG", + "onn": "onn-Latn-PG", + "onn-Latn": "onn-Latn-PG", + "onn-PG": "onn-Latn-PG", + "ono": "ono-Latn-CA", + "ono-CA": "ono-Latn-CA", + "ono-Latn": "ono-Latn-CA", + "onp": "onp-Latn-IN", + "onp-IN": "onp-Latn-IN", + "onp-Latn": "onp-Latn-IN", + "onr": "onr-Latn-PG", + "onr-Latn": "onr-Latn-PG", + "onr-PG": "onr-Latn-PG", + "ons": "ons-Latn-PG", + "ons-Latn": "ons-Latn-PG", + "ons-PG": "ons-Latn-PG", + "ont": "ont-Latn-PG", + "ont-Latn": "ont-Latn-PG", + "ont-PG": "ont-Latn-PG", + "onu": "onu-Latn-VU", + "onu-Latn": "onu-Latn-VU", + "onu-VU": "onu-Latn-VU", + "onx": "onx-Latn-ID", + "onx-ID": "onx-Latn-ID", + "onx-Latn": "onx-Latn-ID", + "ood": "ood-Latn-US", + "ood-Latn": "ood-Latn-US", + "ood-US": "ood-Latn-US", + "oon": "oon-Deva-IN", + "oon-Deva": "oon-Deva-IN", + "oon-IN": "oon-Deva-IN", + "oor": "oor-Latn-ZA", + "oor-Latn": "oor-Latn-ZA", + "oor-ZA": "oor-Latn-ZA", + "opa": "opa-Latn-NG", + "opa-Latn": "opa-Latn-NG", + "opa-NG": "opa-Latn-NG", + "opk": "opk-Latn-ID", + "opk-ID": "opk-Latn-ID", + "opk-Latn": "opk-Latn-ID", + "opm": "opm-Latn-PG", + "opm-Latn": "opm-Latn-PG", + "opm-PG": "opm-Latn-PG", + "opo": "opo-Latn-PG", + "opo-Latn": "opo-Latn-PG", + "opo-PG": "opo-Latn-PG", + "opt": "opt-Latn-MX", + "opt-Latn": "opt-Latn-MX", + "opt-MX": "opt-Latn-MX", + "opy": "opy-Latn-BR", + "opy-BR": "opy-Latn-BR", + "opy-Latn": "opy-Latn-BR", + "or": "or-Orya-IN", + "or-IN": "or-Orya-IN", + "or-Orya": "or-Orya-IN", + "or-XX": "or-Orya-XX", + "ora": "ora-Latn-SB", + "ora-Latn": "ora-Latn-SB", + "ora-SB": "ora-Latn-SB", + "orc": "orc-Latn-KE", + "orc-KE": "orc-Latn-KE", + "orc-Latn": "orc-Latn-KE", + "ore": "ore-Latn-PE", + "ore-Latn": "ore-Latn-PE", + "ore-PE": "ore-Latn-PE", + "org": "org-Latn-NG", + "org-Latn": "org-Latn-NG", + "org-NG": "org-Latn-NG", + "orn": "orn-Latn-MY", + "orn-Latn": "orn-Latn-MY", + "orn-MY": "orn-Latn-MY", + "oro": "oro-Latn-PG", + "oro-Latn": "oro-Latn-PG", + "oro-PG": "oro-Latn-PG", + "orr": "orr-Latn-NG", + "orr-Latn": "orr-Latn-NG", + "orr-NG": "orr-Latn-NG", + "ors": "ors-Latn-MY", + "ors-Latn": "ors-Latn-MY", + "ors-MY": "ors-Latn-MY", + "ort": "ort-Telu-IN", + "ort-IN": "ort-Telu-IN", + "ort-Telu": "ort-Telu-IN", + "oru": "oru-Arab-PK", + "oru-Arab": "oru-Arab-PK", + "oru-PK": "oru-Arab-PK", + "orv": "orv-Cyrl-RU", + "orv-Cyrl": "orv-Cyrl-RU", + "orv-RU": "orv-Cyrl-RU", + "orw": "orw-Latn-BR", + "orw-BR": "orw-Latn-BR", + "orw-Latn": "orw-Latn-BR", + "orx": "orx-Latn-NG", + "orx-Latn": "orx-Latn-NG", + "orx-NG": "orx-Latn-NG", + "orz": "orz-Latn-ID", + "orz-ID": "orz-Latn-ID", + "orz-Latn": "orz-Latn-ID", + "os": "os-Cyrl-GE", + "os-Cyrl": "os-Cyrl-GE", + "os-GE": "os-Cyrl-GE", + "osa": "osa-Osge-US", + "osa-Osge": "osa-Osge-US", + "osa-US": "osa-Osge-US", + "osc": "osc-Ital-IT", + "osc-IT": "osc-Ital-IT", + "osc-Ital": "osc-Ital-IT", + "osi": "osi-Java-ID", + "osi-ID": "osi-Java-ID", + "osi-Java": "osi-Java-ID", + "oso": "oso-Latn-NG", + "oso-Latn": "oso-Latn-NG", + "oso-NG": "oso-Latn-NG", + "osp": "osp-Latn-ES", + "osp-ES": "osp-Latn-ES", + "osp-Latn": "osp-Latn-ES", + "ost": "ost-Latn-CM", + "ost-CM": "ost-Latn-CM", + "ost-Latn": "ost-Latn-CM", + "osu": "osu-Latn-PG", + "osu-Latn": "osu-Latn-PG", + "osu-PG": "osu-Latn-PG", + "osx": "osx-Latn-DE", + "osx-DE": "osx-Latn-DE", + "osx-Latn": "osx-Latn-DE", + "ota": "ota-Arab-TR", + "ota-Arab": "ota-Arab-TR", + "ota-TR": "ota-Arab-TR", + "otb": "otb-Tibt-CN", + "otb-CN": "otb-Tibt-CN", + "otb-Tibt": "otb-Tibt-CN", + "otd": "otd-Latn-ID", + "otd-ID": "otd-Latn-ID", + "otd-Latn": "otd-Latn-ID", + "ote": "ote-Latn-MX", + "ote-Latn": "ote-Latn-MX", + "ote-MX": "ote-Latn-MX", + "oti": "oti-Latn-BR", + "oti-BR": "oti-Latn-BR", + "oti-Latn": "oti-Latn-BR", + "otk": "otk-Orkh-MN", + "otk-MN": "otk-Orkh-MN", + "otk-Orkh": "otk-Orkh-MN", + "otl": "otl-Latn-MX", + "otl-Latn": "otl-Latn-MX", + "otl-MX": "otl-Latn-MX", + "otm": "otm-Latn-MX", + "otm-Latn": "otm-Latn-MX", + "otm-MX": "otm-Latn-MX", + "otn": "otn-Latn-MX", + "otn-Latn": "otn-Latn-MX", + "otn-MX": "otn-Latn-MX", + "otq": "otq-Latn-MX", + "otq-Latn": "otq-Latn-MX", + "otq-MX": "otq-Latn-MX", + "otr": "otr-Latn-SD", + "otr-Latn": "otr-Latn-SD", + "otr-SD": "otr-Latn-SD", + "ots": "ots-Latn-MX", + "ots-Latn": "ots-Latn-MX", + "ots-MX": "ots-Latn-MX", + "ott": "ott-Latn-MX", + "ott-Latn": "ott-Latn-MX", + "ott-MX": "ott-Latn-MX", + "otu": "otu-Latn-BR", + "otu-BR": "otu-Latn-BR", + "otu-Latn": "otu-Latn-BR", + "otw": "otw-Latn-CA", + "otw-CA": "otw-Latn-CA", + "otw-Latn": "otw-Latn-CA", + "otx": "otx-Latn-MX", + "otx-Latn": "otx-Latn-MX", + "otx-MX": "otx-Latn-MX", + "oty": "oty-Gran-IN", + "oty-Gran": "oty-Gran-IN", + "oty-IN": "oty-Gran-IN", + "otz": "otz-Latn-MX", + "otz-Latn": "otz-Latn-MX", + "otz-MX": "otz-Latn-MX", + "oub": "oub-Latn-LR", + "oub-LR": "oub-Latn-LR", + "oub-Latn": "oub-Latn-LR", + "oue": "oue-Latn-PG", + "oue-Latn": "oue-Latn-PG", + "oue-PG": "oue-Latn-PG", + "oui": "oui-Ougr-CN", + "oui-CN": "oui-Ougr-CN", + "oui-Ougr": "oui-Ougr-CN", + "oum": "oum-Latn-PG", + "oum-Latn": "oum-Latn-PG", + "oum-PG": "oum-Latn-PG", + "ovd": "ovd-Latn-SE", + "ovd-Latn": "ovd-Latn-SE", + "ovd-SE": "ovd-Latn-SE", + "owi": "owi-Latn-PG", + "owi-Latn": "owi-Latn-PG", + "owi-PG": "owi-Latn-PG", + "owl": "owl-Latn-GB", + "owl-GB": "owl-Latn-GB", + "owl-Latn": "owl-Latn-GB", + "oyd": "oyd-Latn-ET", + "oyd-ET": "oyd-Latn-ET", + "oyd-Latn": "oyd-Latn-ET", + "oym": "oym-Latn-BR", + "oym-BR": "oym-Latn-BR", + "oym-Latn": "oym-Latn-BR", + "oyy": "oyy-Latn-PG", + "oyy-Latn": "oyy-Latn-PG", + "oyy-PG": "oyy-Latn-PG", + "ozm": "ozm-Latn-CM", + "ozm-CM": "ozm-Latn-CM", + "ozm-Latn": "ozm-Latn-CM", + "pa": "pa-Guru-IN", + "pa-Arab": "pa-Arab-PK", + "pa-Guru": "pa-Guru-IN", + "pa-IN": "pa-Guru-IN", + "pa-PK": "pa-Arab-PK", + "pa-XX": "pa-Guru-XX", + "pab": "pab-Latn-BR", + "pab-BR": "pab-Latn-BR", + "pab-Latn": "pab-Latn-BR", + "pac": "pac-Latn-VN", + "pac-Latn": "pac-Latn-VN", + "pac-VN": "pac-Latn-VN", + "pad": "pad-Latn-BR", + "pad-BR": "pad-Latn-BR", + "pad-Latn": "pad-Latn-BR", + "pae": "pae-Latn-CD", + "pae-CD": "pae-Latn-CD", + "pae-Latn": "pae-Latn-CD", + "paf": "paf-Latn-BR", + "paf-BR": "paf-Latn-BR", + "paf-Latn": "paf-Latn-BR", + "pag": "pag-Latn-PH", + "pag-Latn": "pag-Latn-PH", + "pag-PH": "pag-Latn-PH", + "pah": "pah-Latn-BR", + "pah-BR": "pah-Latn-BR", + "pah-Latn": "pah-Latn-BR", + "pai": "pai-Latn-NG", + "pai-Latn": "pai-Latn-NG", + "pai-NG": "pai-Latn-NG", + "pak": "pak-Latn-BR", + "pak-BR": "pak-Latn-BR", + "pak-Latn": "pak-Latn-BR", + "pal": "pal-Phli-IR", + "pal-IR": "pal-Phli-IR", + "pal-Phli": "pal-Phli-IR", + "pal-Phlp": "pal-Phlp-CN", + "pam": "pam-Latn-PH", + "pam-Latn": "pam-Latn-PH", + "pam-PH": "pam-Latn-PH", + "pao": "pao-Latn-US", + "pao-Latn": "pao-Latn-US", + "pao-US": "pao-Latn-US", + "pap": "pap-Latn-CW", + "pap-BQ": "pap-Latn-BQ", + "pap-CW": "pap-Latn-CW", + "pap-Latn": "pap-Latn-CW", + "paq": "paq-Cyrl-TJ", + "paq-Cyrl": "paq-Cyrl-TJ", + "paq-TJ": "paq-Cyrl-TJ", + "par": "par-Latn-US", + "par-Latn": "par-Latn-US", + "par-US": "par-Latn-US", + "pas": "pas-Latn-ID", + "pas-ID": "pas-Latn-ID", + "pas-Latn": "pas-Latn-ID", + "pau": "pau-Latn-PW", + "pau-Latn": "pau-Latn-PW", + "pau-PW": "pau-Latn-PW", + "pav": "pav-Latn-BR", + "pav-BR": "pav-Latn-BR", + "pav-Latn": "pav-Latn-BR", + "paw": "paw-Latn-US", + "paw-Latn": "paw-Latn-US", + "paw-US": "paw-Latn-US", + "pax": "pax-Latn-BR", + "pax-BR": "pax-Latn-BR", + "pax-Latn": "pax-Latn-BR", + "pay": "pay-Latn-HN", + "pay-HN": "pay-Latn-HN", + "pay-Latn": "pay-Latn-HN", + "paz": "paz-Latn-BR", + "paz-BR": "paz-Latn-BR", + "paz-Latn": "paz-Latn-BR", + "pbb": "pbb-Latn-CO", + "pbb-CO": "pbb-Latn-CO", + "pbb-Latn": "pbb-Latn-CO", + "pbc": "pbc-Latn-GY", + "pbc-GY": "pbc-Latn-GY", + "pbc-Latn": "pbc-Latn-GY", + "pbe": "pbe-Latn-MX", + "pbe-Latn": "pbe-Latn-MX", + "pbe-MX": "pbe-Latn-MX", + "pbf": "pbf-Latn-MX", + "pbf-Latn": "pbf-Latn-MX", + "pbf-MX": "pbf-Latn-MX", + "pbg": "pbg-Latn-VE", + "pbg-Latn": "pbg-Latn-VE", + "pbg-VE": "pbg-Latn-VE", + "pbh": "pbh-Latn-VE", + "pbh-Latn": "pbh-Latn-VE", + "pbh-VE": "pbh-Latn-VE", + "pbi": "pbi-Latn-CM", + "pbi-CM": "pbi-Latn-CM", + "pbi-Latn": "pbi-Latn-CM", + "pbl": "pbl-Latn-NG", + "pbl-Latn": "pbl-Latn-NG", + "pbl-NG": "pbl-Latn-NG", + "pbm": "pbm-Latn-MX", + "pbm-Latn": "pbm-Latn-MX", + "pbm-MX": "pbm-Latn-MX", + "pbn": "pbn-Latn-NG", + "pbn-Latn": "pbn-Latn-NG", + "pbn-NG": "pbn-Latn-NG", + "pbo": "pbo-Latn-GW", + "pbo-GW": "pbo-Latn-GW", + "pbo-Latn": "pbo-Latn-GW", + "pbp": "pbp-Latn-GN", + "pbp-GN": "pbp-Latn-GN", + "pbp-Latn": "pbp-Latn-GN", + "pbr": "pbr-Latn-TZ", + "pbr-Latn": "pbr-Latn-TZ", + "pbr-TZ": "pbr-Latn-TZ", + "pbs": "pbs-Latn-MX", + "pbs-Latn": "pbs-Latn-MX", + "pbs-MX": "pbs-Latn-MX", + "pbt": "pbt-Arab-AF", + "pbt-AF": "pbt-Arab-AF", + "pbt-Arab": "pbt-Arab-AF", + "pbv": "pbv-Latn-IN", + "pbv-IN": "pbv-Latn-IN", + "pbv-Latn": "pbv-Latn-IN", + "pby": "pby-Latn-PG", + "pby-Latn": "pby-Latn-PG", + "pby-PG": "pby-Latn-PG", + "pca": "pca-Latn-MX", + "pca-Latn": "pca-Latn-MX", + "pca-MX": "pca-Latn-MX", + "pcb": "pcb-Khmr-KH", + "pcb-KH": "pcb-Khmr-KH", + "pcb-Khmr": "pcb-Khmr-KH", + "pcc": "pcc-Latn-CN", + "pcc-CN": "pcc-Latn-CN", + "pcc-Latn": "pcc-Latn-CN", + "pcd": "pcd-Latn-FR", + "pcd-FR": "pcd-Latn-FR", + "pcd-Latn": "pcd-Latn-FR", + "pce": "pce-Mymr-MM", + "pce-MM": "pce-Mymr-MM", + "pce-Mymr": "pce-Mymr-MM", + "pcf": "pcf-Mlym-IN", + "pcf-IN": "pcf-Mlym-IN", + "pcf-Mlym": "pcf-Mlym-IN", + "pcg": "pcg-Mlym-IN", + "pcg-IN": "pcg-Mlym-IN", + "pcg-Mlym": "pcg-Mlym-IN", + "pch": "pch-Deva-IN", + "pch-Deva": "pch-Deva-IN", + "pch-IN": "pch-Deva-IN", + "pci": "pci-Deva-IN", + "pci-Deva": "pci-Deva-IN", + "pci-IN": "pci-Deva-IN", + "pcj": "pcj-Telu-IN", + "pcj-IN": "pcj-Telu-IN", + "pcj-Telu": "pcj-Telu-IN", + "pck": "pck-Latn-IN", + "pck-IN": "pck-Latn-IN", + "pck-Latn": "pck-Latn-IN", + "pcm": "pcm-Latn-NG", + "pcm-Latn": "pcm-Latn-NG", + "pcm-NG": "pcm-Latn-NG", + "pcn": "pcn-Latn-NG", + "pcn-Latn": "pcn-Latn-NG", + "pcn-NG": "pcn-Latn-NG", + "pcp": "pcp-Latn-BO", + "pcp-BO": "pcp-Latn-BO", + "pcp-Latn": "pcp-Latn-BO", + "pcw": "pcw-Latn-NG", + "pcw-Latn": "pcw-Latn-NG", + "pcw-NG": "pcw-Latn-NG", + "pda": "pda-Latn-PG", + "pda-Latn": "pda-Latn-PG", + "pda-PG": "pda-Latn-PG", + "pdc": "pdc-Latn-US", + "pdc-Latn": "pdc-Latn-US", + "pdc-US": "pdc-Latn-US", + "pdn": "pdn-Latn-ID", + "pdn-ID": "pdn-Latn-ID", + "pdn-Latn": "pdn-Latn-ID", + "pdo": "pdo-Latn-ID", + "pdo-ID": "pdo-Latn-ID", + "pdo-Latn": "pdo-Latn-ID", + "pdt": "pdt-Latn-CA", + "pdt-CA": "pdt-Latn-CA", + "pdt-Latn": "pdt-Latn-CA", + "pdu": "pdu-Latn-MM", + "pdu-Latn": "pdu-Latn-MM", + "pdu-MM": "pdu-Latn-MM", + "pea": "pea-Latn-ID", + "pea-ID": "pea-Latn-ID", + "pea-Latn": "pea-Latn-ID", + "peb": "peb-Latn-US", + "peb-Latn": "peb-Latn-US", + "peb-US": "peb-Latn-US", + "ped": "ped-Latn-PG", + "ped-Latn": "ped-Latn-PG", + "ped-PG": "ped-Latn-PG", + "pee": "pee-Latn-ID", + "pee-ID": "pee-Latn-ID", + "pee-Latn": "pee-Latn-ID", + "peg": "peg-Orya-IN", + "peg-IN": "peg-Orya-IN", + "peg-Orya": "peg-Orya-IN", + "pei": "pei-Latn-MX", + "pei-Latn": "pei-Latn-MX", + "pei-MX": "pei-Latn-MX", + "pek": "pek-Latn-PG", + "pek-Latn": "pek-Latn-PG", + "pek-PG": "pek-Latn-PG", + "pel": "pel-Latn-ID", + "pel-ID": "pel-Latn-ID", + "pel-Latn": "pel-Latn-ID", + "pem": "pem-Latn-CD", + "pem-CD": "pem-Latn-CD", + "pem-Latn": "pem-Latn-CD", + "peo": "peo-Xpeo-IR", + "peo-IR": "peo-Xpeo-IR", + "peo-Xpeo": "peo-Xpeo-IR", + "pep": "pep-Latn-PG", + "pep-Latn": "pep-Latn-PG", + "pep-PG": "pep-Latn-PG", + "peq": "peq-Latn-US", + "peq-Latn": "peq-Latn-US", + "peq-US": "peq-Latn-US", + "pev": "pev-Latn-VE", + "pev-Latn": "pev-Latn-VE", + "pev-VE": "pev-Latn-VE", + "pex": "pex-Latn-PG", + "pex-Latn": "pex-Latn-PG", + "pex-PG": "pex-Latn-PG", + "pey": "pey-Latn-ID", + "pey-ID": "pey-Latn-ID", + "pey-Latn": "pey-Latn-ID", + "pez": "pez-Latn-MY", + "pez-Latn": "pez-Latn-MY", + "pez-MY": "pez-Latn-MY", + "pfa": "pfa-Latn-FM", + "pfa-FM": "pfa-Latn-FM", + "pfa-Latn": "pfa-Latn-FM", + "pfe": "pfe-Latn-CM", + "pfe-CM": "pfe-Latn-CM", + "pfe-Latn": "pfe-Latn-CM", + "pfl": "pfl-Latn-DE", + "pfl-DE": "pfl-Latn-DE", + "pfl-Latn": "pfl-Latn-DE", + "pga": "pga-Latn-SS", + "pga-Latn": "pga-Latn-SS", + "pga-SS": "pga-Latn-SS", + "pgd": "pgd-Khar-PK", + "pgd-Khar": "pgd-Khar-PK", + "pgd-PK": "pgd-Khar-PK", + "pgg": "pgg-Deva-IN", + "pgg-Deva": "pgg-Deva-IN", + "pgg-IN": "pgg-Deva-IN", + "pgi": "pgi-Latn-PG", + "pgi-Latn": "pgi-Latn-PG", + "pgi-PG": "pgi-Latn-PG", + "pgk": "pgk-Latn-VU", + "pgk-Latn": "pgk-Latn-VU", + "pgk-VU": "pgk-Latn-VU", + "pgl": "pgl-Ogam-IE", + "pgl-IE": "pgl-Ogam-IE", + "pgl-Ogam": "pgl-Ogam-IE", + "pgn": "pgn-Ital-IT", + "pgn-IT": "pgn-Ital-IT", + "pgn-Ital": "pgn-Ital-IT", + "pgs": "pgs-Latn-NG", + "pgs-Latn": "pgs-Latn-NG", + "pgs-NG": "pgs-Latn-NG", + "pgu": "pgu-Latn-ID", + "pgu-ID": "pgu-Latn-ID", + "pgu-Latn": "pgu-Latn-ID", + "phd": "phd-Deva-IN", + "phd-Deva": "phd-Deva-IN", + "phd-IN": "phd-Deva-IN", + "phg": "phg-Latn-VN", + "phg-Latn": "phg-Latn-VN", + "phg-VN": "phg-Latn-VN", + "phh": "phh-Latn-VN", + "phh-Latn": "phh-Latn-VN", + "phh-VN": "phh-Latn-VN", + "phk": "phk-Mymr-IN", + "phk-IN": "phk-Mymr-IN", + "phk-Mymr": "phk-Mymr-IN", + "phl": "phl-Arab-PK", + "phl-Arab": "phl-Arab-PK", + "phl-PK": "phl-Arab-PK", + "phm": "phm-Latn-MZ", + "phm-Latn": "phm-Latn-MZ", + "phm-MZ": "phm-Latn-MZ", + "phn": "phn-Phnx-LB", + "phn-LB": "phn-Phnx-LB", + "phn-Phnx": "phn-Phnx-LB", + "pho": "pho-Laoo-LA", + "pho-LA": "pho-Laoo-LA", + "pho-Laoo": "pho-Laoo-LA", + "phr": "phr-Arab-PK", + "phr-Arab": "phr-Arab-PK", + "phr-PK": "phr-Arab-PK", + "pht": "pht-Thai-TH", + "pht-TH": "pht-Thai-TH", + "pht-Thai": "pht-Thai-TH", + "phu": "phu-Thai-TH", + "phu-TH": "phu-Thai-TH", + "phu-Thai": "phu-Thai-TH", + "phv": "phv-Arab-AF", + "phv-AF": "phv-Arab-AF", + "phv-Arab": "phv-Arab-AF", + "phw": "phw-Deva-NP", + "phw-Deva": "phw-Deva-NP", + "phw-NP": "phw-Deva-NP", + "pi": "pi-Sinh-IN", + "pi-IN": "pi-Sinh-IN", + "pi-Sinh": "pi-Sinh-IN", + "pia": "pia-Latn-MX", + "pia-Latn": "pia-Latn-MX", + "pia-MX": "pia-Latn-MX", + "pib": "pib-Latn-PE", + "pib-Latn": "pib-Latn-PE", + "pib-PE": "pib-Latn-PE", + "pic": "pic-Latn-GA", + "pic-GA": "pic-Latn-GA", + "pic-Latn": "pic-Latn-GA", + "pid": "pid-Latn-VE", + "pid-Latn": "pid-Latn-VE", + "pid-VE": "pid-Latn-VE", + "pif": "pif-Latn-FM", + "pif-FM": "pif-Latn-FM", + "pif-Latn": "pif-Latn-FM", + "pig": "pig-Latn-PE", + "pig-Latn": "pig-Latn-PE", + "pig-PE": "pig-Latn-PE", + "pih": "pih-Latn-NF", + "pih-Latn": "pih-Latn-NF", + "pih-NF": "pih-Latn-NF", + "pij": "pij-Latn-CO", + "pij-CO": "pij-Latn-CO", + "pij-Latn": "pij-Latn-CO", + "pil": "pil-Latn-BJ", + "pil-BJ": "pil-Latn-BJ", + "pil-Latn": "pil-Latn-BJ", + "pim": "pim-Latn-US", + "pim-Latn": "pim-Latn-US", + "pim-US": "pim-Latn-US", + "pin": "pin-Latn-PG", + "pin-Latn": "pin-Latn-PG", + "pin-PG": "pin-Latn-PG", + "pio": "pio-Latn-CO", + "pio-CO": "pio-Latn-CO", + "pio-Latn": "pio-Latn-CO", + "pip": "pip-Latn-NG", + "pip-Latn": "pip-Latn-NG", + "pip-NG": "pip-Latn-NG", + "pir": "pir-Latn-BR", + "pir-BR": "pir-Latn-BR", + "pir-Latn": "pir-Latn-BR", + "pis": "pis-Latn-SB", + "pis-Latn": "pis-Latn-SB", + "pis-SB": "pis-Latn-SB", + "pit": "pit-Latn-AU", + "pit-AU": "pit-Latn-AU", + "pit-Latn": "pit-Latn-AU", + "piu": "piu-Latn-AU", + "piu-AU": "piu-Latn-AU", + "piu-Latn": "piu-Latn-AU", + "piv": "piv-Latn-SB", + "piv-Latn": "piv-Latn-SB", + "piv-SB": "piv-Latn-SB", + "piw": "piw-Latn-TZ", + "piw-Latn": "piw-Latn-TZ", + "piw-TZ": "piw-Latn-TZ", + "pix": "pix-Latn-PG", + "pix-Latn": "pix-Latn-PG", + "pix-PG": "pix-Latn-PG", + "piy": "piy-Latn-NG", + "piy-Latn": "piy-Latn-NG", + "piy-NG": "piy-Latn-NG", + "piz": "piz-Latn-NC", + "piz-Latn": "piz-Latn-NC", + "piz-NC": "piz-Latn-NC", + "pjt": "pjt-Latn-AU", + "pjt-AU": "pjt-Latn-AU", + "pjt-Latn": "pjt-Latn-AU", + "pka": "pka-Brah-IN", + "pka-Brah": "pka-Brah-IN", + "pka-IN": "pka-Brah-IN", + "pkb": "pkb-Latn-KE", + "pkb-KE": "pkb-Latn-KE", + "pkb-Latn": "pkb-Latn-KE", + "pkg": "pkg-Latn-PG", + "pkg-Latn": "pkg-Latn-PG", + "pkg-PG": "pkg-Latn-PG", + "pkh": "pkh-Latn-BD", + "pkh-BD": "pkh-Latn-BD", + "pkh-Latn": "pkh-Latn-BD", + "pkn": "pkn-Latn-AU", + "pkn-AU": "pkn-Latn-AU", + "pkn-Latn": "pkn-Latn-AU", + "pko": "pko-Latn-KE", + "pko-KE": "pko-Latn-KE", + "pko-Latn": "pko-Latn-KE", + "pkp": "pkp-Latn-CK", + "pkp-CK": "pkp-Latn-CK", + "pkp-Latn": "pkp-Latn-CK", + "pkr": "pkr-Mlym-IN", + "pkr-IN": "pkr-Mlym-IN", + "pkr-Mlym": "pkr-Mlym-IN", + "pku": "pku-Latn-ID", + "pku-ID": "pku-Latn-ID", + "pku-Latn": "pku-Latn-ID", + "pl": "pl-Latn-PL", + "pl-Latn": "pl-Latn-PL", + "pl-Latn-UA": "pl-Latn-UA", + "pl-PL": "pl-Latn-PL", + "pla": "pla-Latn-PG", + "pla-Latn": "pla-Latn-PG", + "pla-PG": "pla-Latn-PG", + "plb": "plb-Latn-VU", + "plb-Latn": "plb-Latn-VU", + "plb-VU": "plb-Latn-VU", + "plc": "plc-Latn-PH", + "plc-Latn": "plc-Latn-PH", + "plc-PH": "plc-Latn-PH", + "pld": "pld-Latn-GB", + "pld-GB": "pld-Latn-GB", + "pld-Latn": "pld-Latn-GB", + "ple": "ple-Latn-ID", + "ple-ID": "ple-Latn-ID", + "ple-Latn": "ple-Latn-ID", + "plg": "plg-Latn-AR", + "plg-AR": "plg-Latn-AR", + "plg-Latn": "plg-Latn-AR", + "plh": "plh-Latn-ID", + "plh-ID": "plh-Latn-ID", + "plh-Latn": "plh-Latn-ID", + "plk": "plk-Arab-PK", + "plk-Arab": "plk-Arab-PK", + "plk-PK": "plk-Arab-PK", + "pll": "pll-Mymr-MM", + "pll-MM": "pll-Mymr-MM", + "pll-Mymr": "pll-Mymr-MM", + "pln": "pln-Latn-CO", + "pln-CO": "pln-Latn-CO", + "pln-Latn": "pln-Latn-CO", + "plo": "plo-Latn-MX", + "plo-Latn": "plo-Latn-MX", + "plo-MX": "plo-Latn-MX", + "plr": "plr-Latn-CI", + "plr-CI": "plr-Latn-CI", + "plr-Latn": "plr-Latn-CI", + "pls": "pls-Latn-MX", + "pls-Latn": "pls-Latn-MX", + "pls-MX": "pls-Latn-MX", + "plu": "plu-Latn-BR", + "plu-BR": "plu-Latn-BR", + "plu-Latn": "plu-Latn-BR", + "plv": "plv-Latn-PH", + "plv-Latn": "plv-Latn-PH", + "plv-PH": "plv-Latn-PH", + "plw": "plw-Latn-PH", + "plw-Latn": "plw-Latn-PH", + "plw-PH": "plw-Latn-PH", + "plz": "plz-Latn-MY", + "plz-Latn": "plz-Latn-MY", + "plz-MY": "plz-Latn-MY", + "pma": "pma-Latn-VU", + "pma-Latn": "pma-Latn-VU", + "pma-VU": "pma-Latn-VU", + "pmb": "pmb-Latn-CD", + "pmb-CD": "pmb-Latn-CD", + "pmb-Latn": "pmb-Latn-CD", + "pmd": "pmd-Latn-AU", + "pmd-AU": "pmd-Latn-AU", + "pmd-Latn": "pmd-Latn-AU", + "pme": "pme-Latn-NC", + "pme-Latn": "pme-Latn-NC", + "pme-NC": "pme-Latn-NC", + "pmf": "pmf-Latn-ID", + "pmf-ID": "pmf-Latn-ID", + "pmf-Latn": "pmf-Latn-ID", + "pmh": "pmh-Brah-IN", + "pmh-Brah": "pmh-Brah-IN", + "pmh-IN": "pmh-Brah-IN", + "pmi": "pmi-Latn-CN", + "pmi-CN": "pmi-Latn-CN", + "pmi-Latn": "pmi-Latn-CN", + "pmj": "pmj-Latn-CN", + "pmj-CN": "pmj-Latn-CN", + "pmj-Latn": "pmj-Latn-CN", + "pml": "pml-Latn-TN", + "pml-Latn": "pml-Latn-TN", + "pml-TN": "pml-Latn-TN", + "pmm": "pmm-Latn-CM", + "pmm-CM": "pmm-Latn-CM", + "pmm-Latn": "pmm-Latn-CM", + "pmn": "pmn-Latn-CM", + "pmn-CM": "pmn-Latn-CM", + "pmn-Latn": "pmn-Latn-CM", + "pmo": "pmo-Latn-ID", + "pmo-ID": "pmo-Latn-ID", + "pmo-Latn": "pmo-Latn-ID", + "pmq": "pmq-Latn-MX", + "pmq-Latn": "pmq-Latn-MX", + "pmq-MX": "pmq-Latn-MX", + "pmr": "pmr-Latn-PG", + "pmr-Latn": "pmr-Latn-PG", + "pmr-PG": "pmr-Latn-PG", + "pms": "pms-Latn-IT", + "pms-IT": "pms-Latn-IT", + "pms-Latn": "pms-Latn-IT", + "pmt": "pmt-Latn-PF", + "pmt-Latn": "pmt-Latn-PF", + "pmt-PF": "pmt-Latn-PF", + "pmw": "pmw-Latn-US", + "pmw-Latn": "pmw-Latn-US", + "pmw-US": "pmw-Latn-US", + "pmx": "pmx-Latn-IN", + "pmx-IN": "pmx-Latn-IN", + "pmx-Latn": "pmx-Latn-IN", + "pmy": "pmy-Latn-ID", + "pmy-ID": "pmy-Latn-ID", + "pmy-Latn": "pmy-Latn-ID", + "pmz": "pmz-Latn-MX", + "pmz-Latn": "pmz-Latn-MX", + "pmz-MX": "pmz-Latn-MX", + "pna": "pna-Latn-MY", + "pna-Latn": "pna-Latn-MY", + "pna-MY": "pna-Latn-MY", + "pnc": "pnc-Latn-ID", + "pnc-ID": "pnc-Latn-ID", + "pnc-Latn": "pnc-Latn-ID", + "pnd": "pnd-Latn-AO", + "pnd-AO": "pnd-Latn-AO", + "pnd-Latn": "pnd-Latn-AO", + "pne": "pne-Latn-MY", + "pne-Latn": "pne-Latn-MY", + "pne-MY": "pne-Latn-MY", + "png": "png-Latn-NG", + "png-Latn": "png-Latn-NG", + "png-NG": "png-Latn-NG", + "pnh": "pnh-Latn-CK", + "pnh-CK": "pnh-Latn-CK", + "pnh-Latn": "pnh-Latn-CK", + "pni": "pni-Latn-ID", + "pni-ID": "pni-Latn-ID", + "pni-Latn": "pni-Latn-ID", + "pnj": "pnj-Latn-AU", + "pnj-AU": "pnj-Latn-AU", + "pnj-Latn": "pnj-Latn-AU", + "pnk": "pnk-Latn-BO", + "pnk-BO": "pnk-Latn-BO", + "pnk-Latn": "pnk-Latn-BO", + "pnl": "pnl-Latn-BF", + "pnl-BF": "pnl-Latn-BF", + "pnl-Latn": "pnl-Latn-BF", + "pnm": "pnm-Latn-MY", + "pnm-Latn": "pnm-Latn-MY", + "pnm-MY": "pnm-Latn-MY", + "pnn": "pnn-Latn-PG", + "pnn-Latn": "pnn-Latn-PG", + "pnn-PG": "pnn-Latn-PG", + "pno": "pno-Latn-PE", + "pno-Latn": "pno-Latn-PE", + "pno-PE": "pno-Latn-PE", + "pnp": "pnp-Latn-ID", + "pnp-ID": "pnp-Latn-ID", + "pnp-Latn": "pnp-Latn-ID", + "pnq": "pnq-Latn-BF", + "pnq-BF": "pnq-Latn-BF", + "pnq-Latn": "pnq-Latn-BF", + "pnr": "pnr-Latn-PG", + "pnr-Latn": "pnr-Latn-PG", + "pnr-PG": "pnr-Latn-PG", + "pns": "pns-Latn-ID", + "pns-ID": "pns-Latn-ID", + "pns-Latn": "pns-Latn-ID", + "pnt": "pnt-Grek-GR", + "pnt-GR": "pnt-Grek-GR", + "pnt-Grek": "pnt-Grek-GR", + "pnv": "pnv-Latn-AU", + "pnv-AU": "pnv-Latn-AU", + "pnv-Latn": "pnv-Latn-AU", + "pnw": "pnw-Latn-AU", + "pnw-AU": "pnw-Latn-AU", + "pnw-Latn": "pnw-Latn-AU", + "pny": "pny-Latn-CM", + "pny-CM": "pny-Latn-CM", + "pny-Latn": "pny-Latn-CM", + "pnz": "pnz-Latn-CF", + "pnz-CF": "pnz-Latn-CF", + "pnz-Latn": "pnz-Latn-CF", + "poc": "poc-Latn-GT", + "poc-GT": "poc-Latn-GT", + "poc-Latn": "poc-Latn-GT", + "poe": "poe-Latn-MX", + "poe-Latn": "poe-Latn-MX", + "poe-MX": "poe-Latn-MX", + "pof": "pof-Latn-CD", + "pof-CD": "pof-Latn-CD", + "pof-Latn": "pof-Latn-CD", + "pog": "pog-Latn-BR", + "pog-BR": "pog-Latn-BR", + "pog-Latn": "pog-Latn-BR", + "poh": "poh-Latn-GT", + "poh-GT": "poh-Latn-GT", + "poh-Latn": "poh-Latn-GT", + "poi": "poi-Latn-MX", + "poi-Latn": "poi-Latn-MX", + "poi-MX": "poi-Latn-MX", + "pok": "pok-Latn-BR", + "pok-BR": "pok-Latn-BR", + "pok-Latn": "pok-Latn-BR", + "pom": "pom-Latn-US", + "pom-Latn": "pom-Latn-US", + "pom-US": "pom-Latn-US", + "pon": "pon-Latn-FM", + "pon-FM": "pon-Latn-FM", + "pon-Latn": "pon-Latn-FM", + "poo": "poo-Latn-US", + "poo-Latn": "poo-Latn-US", + "poo-US": "poo-Latn-US", + "pop": "pop-Latn-NC", + "pop-Latn": "pop-Latn-NC", + "pop-NC": "pop-Latn-NC", + "poq": "poq-Latn-MX", + "poq-Latn": "poq-Latn-MX", + "poq-MX": "poq-Latn-MX", + "pos": "pos-Latn-MX", + "pos-Latn": "pos-Latn-MX", + "pos-MX": "pos-Latn-MX", + "pot": "pot-Latn-US", + "pot-Latn": "pot-Latn-US", + "pot-US": "pot-Latn-US", + "pov": "pov-Latn-GW", + "pov-GW": "pov-Latn-GW", + "pov-Latn": "pov-Latn-GW", + "pow": "pow-Latn-MX", + "pow-Latn": "pow-Latn-MX", + "pow-MX": "pow-Latn-MX", + "poy": "poy-Latn-TZ", + "poy-Latn": "poy-Latn-TZ", + "poy-TZ": "poy-Latn-TZ", + "ppe": "ppe-Latn-PG", + "ppe-Latn": "ppe-Latn-PG", + "ppe-PG": "ppe-Latn-PG", + "ppi": "ppi-Latn-MX", + "ppi-Latn": "ppi-Latn-MX", + "ppi-MX": "ppi-Latn-MX", + "ppk": "ppk-Latn-ID", + "ppk-ID": "ppk-Latn-ID", + "ppk-Latn": "ppk-Latn-ID", + "ppl": "ppl-Latn-SV", + "ppl-Latn": "ppl-Latn-SV", + "ppl-SV": "ppl-Latn-SV", + "ppm": "ppm-Latn-ID", + "ppm-ID": "ppm-Latn-ID", + "ppm-Latn": "ppm-Latn-ID", + "ppn": "ppn-Latn-PG", + "ppn-Latn": "ppn-Latn-PG", + "ppn-PG": "ppn-Latn-PG", + "ppo": "ppo-Latn-PG", + "ppo-Latn": "ppo-Latn-PG", + "ppo-PG": "ppo-Latn-PG", + "ppp": "ppp-Latn-CD", + "ppp-CD": "ppp-Latn-CD", + "ppp-Latn": "ppp-Latn-CD", + "ppq": "ppq-Latn-PG", + "ppq-Latn": "ppq-Latn-PG", + "ppq-PG": "ppq-Latn-PG", + "pps": "pps-Latn-MX", + "pps-Latn": "pps-Latn-MX", + "pps-MX": "pps-Latn-MX", + "ppt": "ppt-Latn-PG", + "ppt-Latn": "ppt-Latn-PG", + "ppt-PG": "ppt-Latn-PG", + "pqa": "pqa-Latn-NG", + "pqa-Latn": "pqa-Latn-NG", + "pqa-NG": "pqa-Latn-NG", + "pqm": "pqm-Latn-CA", + "pqm-CA": "pqm-Latn-CA", + "pqm-Latn": "pqm-Latn-CA", + "pra": "pra-Khar-PK", + "pra-Khar": "pra-Khar-PK", + "pra-PK": "pra-Khar-PK", + "prc": "prc-Arab-AF", + "prc-AF": "prc-Arab-AF", + "prc-Arab": "prc-Arab-AF", + "prd": "prd-Arab-IR", + "prd-Arab": "prd-Arab-IR", + "prd-IR": "prd-Arab-IR", + "pre": "pre-Latn-ST", + "pre-Latn": "pre-Latn-ST", + "pre-ST": "pre-Latn-ST", + "prf": "prf-Latn-PH", + "prf-Latn": "prf-Latn-PH", + "prf-PH": "prf-Latn-PH", + "prg": "prg-Latn-PL", + "prg-Latn": "prg-Latn-PL", + "prg-PL": "prg-Latn-PL", + "prh": "prh-Latn-PH", + "prh-Latn": "prh-Latn-PH", + "prh-PH": "prh-Latn-PH", + "pri": "pri-Latn-NC", + "pri-Latn": "pri-Latn-NC", + "pri-NC": "pri-Latn-NC", + "prk": "prk-Latn-MM", + "prk-Latn": "prk-Latn-MM", + "prk-MM": "prk-Latn-MM", + "prm": "prm-Latn-PG", + "prm-Latn": "prm-Latn-PG", + "prm-PG": "prm-Latn-PG", + "pro": "pro-Latn-FR", + "pro-FR": "pro-Latn-FR", + "pro-Latn": "pro-Latn-FR", + "prq": "prq-Latn-PE", + "prq-Latn": "prq-Latn-PE", + "prq-PE": "prq-Latn-PE", + "prr": "prr-Latn-BR", + "prr-BR": "prr-Latn-BR", + "prr-Latn": "prr-Latn-BR", + "prt": "prt-Thai-TH", + "prt-TH": "prt-Thai-TH", + "prt-Thai": "prt-Thai-TH", + "pru": "pru-Latn-ID", + "pru-ID": "pru-Latn-ID", + "pru-Latn": "pru-Latn-ID", + "prw": "prw-Latn-PG", + "prw-Latn": "prw-Latn-PG", + "prw-PG": "prw-Latn-PG", + "prx": "prx-Arab-IN", + "prx-Arab": "prx-Arab-IN", + "prx-IN": "prx-Arab-IN", + "ps": "ps-Arab-AF", + "ps-AF": "ps-Arab-AF", + "ps-Arab": "ps-Arab-AF", + "ps-PK": "ps-Arab-PK", + "psa": "psa-Latn-ID", + "psa-ID": "psa-Latn-ID", + "psa-Latn": "psa-Latn-ID", + "pse": "pse-Latn-ID", + "pse-ID": "pse-Latn-ID", + "pse-Latn": "pse-Latn-ID", + "psh": "psh-Arab-AF", + "psh-AF": "psh-Arab-AF", + "psh-Arab": "psh-Arab-AF", + "psi": "psi-Arab-AF", + "psi-AF": "psi-Arab-AF", + "psi-Arab": "psi-Arab-AF", + "psm": "psm-Latn-BO", + "psm-BO": "psm-Latn-BO", + "psm-Latn": "psm-Latn-BO", + "psn": "psn-Latn-ID", + "psn-ID": "psn-Latn-ID", + "psn-Latn": "psn-Latn-ID", + "psq": "psq-Latn-PG", + "psq-Latn": "psq-Latn-PG", + "psq-PG": "psq-Latn-PG", + "pss": "pss-Latn-PG", + "pss-Latn": "pss-Latn-PG", + "pss-PG": "pss-Latn-PG", + "pst": "pst-Arab-PK", + "pst-Arab": "pst-Arab-PK", + "pst-PK": "pst-Arab-PK", + "psu": "psu-Brah-IN", + "psu-Brah": "psu-Brah-IN", + "psu-IN": "psu-Brah-IN", + "psw": "psw-Latn-VU", + "psw-Latn": "psw-Latn-VU", + "psw-VU": "psw-Latn-VU", + "pt": "pt-Latn-BR", + "pt-AO": "pt-Latn-AO", + "pt-BR": "pt-Latn-BR", + "pt-CV": "pt-Latn-CV", + "pt-GQ": "pt-Latn-GQ", + "pt-GW": "pt-Latn-GW", + "pt-Latn": "pt-Latn-BR", + "pt-Latn-MO": "pt-Latn-MO", + "pt-MO": "pt-Latn-MO", + "pt-MZ": "pt-Latn-MZ", + "pt-PT": "pt-Latn-PT", + "pt-ST": "pt-Latn-ST", + "pt-TL": "pt-Latn-TL", + "pta": "pta-Latn-PY", + "pta-Latn": "pta-Latn-PY", + "pta-PY": "pta-Latn-PY", + "pth": "pth-Latn-BR", + "pth-BR": "pth-Latn-BR", + "pth-Latn": "pth-Latn-BR", + "pti": "pti-Latn-AU", + "pti-AU": "pti-Latn-AU", + "pti-Latn": "pti-Latn-AU", + "ptn": "ptn-Latn-ID", + "ptn-ID": "ptn-Latn-ID", + "ptn-Latn": "ptn-Latn-ID", + "pto": "pto-Latn-BR", + "pto-BR": "pto-Latn-BR", + "pto-Latn": "pto-Latn-BR", + "ptp": "ptp-Latn-PG", + "ptp-Latn": "ptp-Latn-PG", + "ptp-PG": "ptp-Latn-PG", + "ptr": "ptr-Latn-VU", + "ptr-Latn": "ptr-Latn-VU", + "ptr-VU": "ptr-Latn-VU", + "ptt": "ptt-Latn-ID", + "ptt-ID": "ptt-Latn-ID", + "ptt-Latn": "ptt-Latn-ID", + "ptu": "ptu-Latn-ID", + "ptu-ID": "ptu-Latn-ID", + "ptu-Latn": "ptu-Latn-ID", + "ptv": "ptv-Latn-VU", + "ptv-Latn": "ptv-Latn-VU", + "ptv-VU": "ptv-Latn-VU", + "pua": "pua-Latn-MX", + "pua-Latn": "pua-Latn-MX", + "pua-MX": "pua-Latn-MX", + "pub": "pub-Latn-IN", + "pub-IN": "pub-Latn-IN", + "pub-Latn": "pub-Latn-IN", + "puc": "puc-Latn-ID", + "puc-ID": "puc-Latn-ID", + "puc-Latn": "puc-Latn-ID", + "pud": "pud-Latn-ID", + "pud-ID": "pud-Latn-ID", + "pud-Latn": "pud-Latn-ID", + "pue": "pue-Latn-AR", + "pue-AR": "pue-Latn-AR", + "pue-Latn": "pue-Latn-AR", + "puf": "puf-Latn-ID", + "puf-ID": "puf-Latn-ID", + "puf-Latn": "puf-Latn-ID", + "pug": "pug-Latn-BF", + "pug-BF": "pug-Latn-BF", + "pug-Latn": "pug-Latn-BF", + "pui": "pui-Latn-CO", + "pui-CO": "pui-Latn-CO", + "pui-Latn": "pui-Latn-CO", + "puj": "puj-Latn-ID", + "puj-ID": "puj-Latn-ID", + "puj-Latn": "puj-Latn-ID", + "pum": "pum-Deva-NP", + "pum-Deva": "pum-Deva-NP", + "pum-NP": "pum-Deva-NP", + "puo": "puo-Latn-VN", + "puo-Latn": "puo-Latn-VN", + "puo-VN": "puo-Latn-VN", + "pup": "pup-Latn-PG", + "pup-Latn": "pup-Latn-PG", + "pup-PG": "pup-Latn-PG", + "puq": "puq-Latn-BO", + "puq-BO": "puq-Latn-BO", + "puq-Latn": "puq-Latn-BO", + "pur": "pur-Latn-BR", + "pur-BR": "pur-Latn-BR", + "pur-Latn": "pur-Latn-BR", + "put": "put-Latn-ID", + "put-ID": "put-Latn-ID", + "put-Latn": "put-Latn-ID", + "puu": "puu-Latn-GA", + "puu-GA": "puu-Latn-GA", + "puu-Latn": "puu-Latn-GA", + "puw": "puw-Latn-FM", + "puw-FM": "puw-Latn-FM", + "puw-Latn": "puw-Latn-FM", + "pux": "pux-Latn-PG", + "pux-Latn": "pux-Latn-PG", + "pux-PG": "pux-Latn-PG", + "puy": "puy-Latn-US", + "puy-Latn": "puy-Latn-US", + "puy-US": "puy-Latn-US", + "pwa": "pwa-Latn-PG", + "pwa-Latn": "pwa-Latn-PG", + "pwa-PG": "pwa-Latn-PG", + "pwb": "pwb-Latn-NG", + "pwb-Latn": "pwb-Latn-NG", + "pwb-NG": "pwb-Latn-NG", + "pwg": "pwg-Latn-PG", + "pwg-Latn": "pwg-Latn-PG", + "pwg-PG": "pwg-Latn-PG", + "pwm": "pwm-Latn-PH", + "pwm-Latn": "pwm-Latn-PH", + "pwm-PH": "pwm-Latn-PH", + "pwn": "pwn-Latn-TW", + "pwn-Latn": "pwn-Latn-TW", + "pwn-TW": "pwn-Latn-TW", + "pwo": "pwo-Mymr-MM", + "pwo-MM": "pwo-Mymr-MM", + "pwo-Mymr": "pwo-Mymr-MM", + "pwr": "pwr-Deva-IN", + "pwr-Deva": "pwr-Deva-IN", + "pwr-IN": "pwr-Deva-IN", + "pww": "pww-Thai-TH", + "pww-TH": "pww-Thai-TH", + "pww-Thai": "pww-Thai-TH", + "pxm": "pxm-Latn-MX", + "pxm-Latn": "pxm-Latn-MX", + "pxm-MX": "pxm-Latn-MX", + "pye": "pye-Latn-CI", + "pye-CI": "pye-Latn-CI", + "pye-Latn": "pye-Latn-CI", + "pym": "pym-Latn-NG", + "pym-Latn": "pym-Latn-NG", + "pym-NG": "pym-Latn-NG", + "pyn": "pyn-Latn-BR", + "pyn-BR": "pyn-Latn-BR", + "pyn-Latn": "pyn-Latn-BR", + "pyu": "pyu-Latn-TW", + "pyu-Latn": "pyu-Latn-TW", + "pyu-TW": "pyu-Latn-TW", + "pyx": "pyx-Mymr-MM", + "pyx-MM": "pyx-Mymr-MM", + "pyx-Mymr": "pyx-Mymr-MM", + "pyy": "pyy-Latn-MM", + "pyy-Latn": "pyy-Latn-MM", + "pyy-MM": "pyy-Latn-MM", + "pze": "pze-Latn-NG", + "pze-Latn": "pze-Latn-NG", + "pze-NG": "pze-Latn-NG", + "pzh": "pzh-Latn-TW", + "pzh-Latn": "pzh-Latn-TW", + "pzh-TW": "pzh-Latn-TW", + "pzn": "pzn-Latn-MM", + "pzn-Latn": "pzn-Latn-MM", + "pzn-MM": "pzn-Latn-MM", + "qu": "qu-Latn-PE", + "qu-Latn": "qu-Latn-PE", + "qu-PE": "qu-Latn-PE", + "qua": "qua-Latn-US", + "qua-Latn": "qua-Latn-US", + "qua-US": "qua-Latn-US", + "qub": "qub-Latn-PE", + "qub-Latn": "qub-Latn-PE", + "qub-PE": "qub-Latn-PE", + "quc": "quc-Latn-GT", + "quc-GT": "quc-Latn-GT", + "quc-Latn": "quc-Latn-GT", + "qud": "qud-Latn-EC", + "qud-EC": "qud-Latn-EC", + "qud-Latn": "qud-Latn-EC", + "quf": "quf-Latn-PE", + "quf-Latn": "quf-Latn-PE", + "quf-PE": "quf-Latn-PE", + "qug": "qug-Latn-EC", + "qug-EC": "qug-Latn-EC", + "qug-Latn": "qug-Latn-EC", + "qui": "qui-Latn-US", + "qui-Latn": "qui-Latn-US", + "qui-US": "qui-Latn-US", + "quk": "quk-Latn-PE", + "quk-Latn": "quk-Latn-PE", + "quk-PE": "quk-Latn-PE", + "qul": "qul-Latn-BO", + "qul-BO": "qul-Latn-BO", + "qul-Latn": "qul-Latn-BO", + "qum": "qum-Latn-GT", + "qum-GT": "qum-Latn-GT", + "qum-Latn": "qum-Latn-GT", + "qun": "qun-Latn-US", + "qun-Latn": "qun-Latn-US", + "qun-US": "qun-Latn-US", + "qup": "qup-Latn-PE", + "qup-Latn": "qup-Latn-PE", + "qup-PE": "qup-Latn-PE", + "quq": "quq-Latn-ES", + "quq-ES": "quq-Latn-ES", + "quq-Latn": "quq-Latn-ES", + "qur": "qur-Latn-PE", + "qur-Latn": "qur-Latn-PE", + "qur-PE": "qur-Latn-PE", + "qus": "qus-Latn-AR", + "qus-AR": "qus-Latn-AR", + "qus-Latn": "qus-Latn-AR", + "quv": "quv-Latn-GT", + "quv-GT": "quv-Latn-GT", + "quv-Latn": "quv-Latn-GT", + "quw": "quw-Latn-EC", + "quw-EC": "quw-Latn-EC", + "quw-Latn": "quw-Latn-EC", + "qux": "qux-Latn-PE", + "qux-Latn": "qux-Latn-PE", + "qux-PE": "qux-Latn-PE", + "quy": "quy-Latn-PE", + "quy-Latn": "quy-Latn-PE", + "quy-PE": "quy-Latn-PE", + "qva": "qva-Latn-PE", + "qva-Latn": "qva-Latn-PE", + "qva-PE": "qva-Latn-PE", + "qvc": "qvc-Latn-PE", + "qvc-Latn": "qvc-Latn-PE", + "qvc-PE": "qvc-Latn-PE", + "qve": "qve-Latn-PE", + "qve-Latn": "qve-Latn-PE", + "qve-PE": "qve-Latn-PE", + "qvh": "qvh-Latn-PE", + "qvh-Latn": "qvh-Latn-PE", + "qvh-PE": "qvh-Latn-PE", + "qvi": "qvi-Latn-EC", + "qvi-EC": "qvi-Latn-EC", + "qvi-Latn": "qvi-Latn-EC", + "qvj": "qvj-Latn-EC", + "qvj-EC": "qvj-Latn-EC", + "qvj-Latn": "qvj-Latn-EC", + "qvl": "qvl-Latn-PE", + "qvl-Latn": "qvl-Latn-PE", + "qvl-PE": "qvl-Latn-PE", + "qvm": "qvm-Latn-PE", + "qvm-Latn": "qvm-Latn-PE", + "qvm-PE": "qvm-Latn-PE", + "qvn": "qvn-Latn-PE", + "qvn-Latn": "qvn-Latn-PE", + "qvn-PE": "qvn-Latn-PE", + "qvo": "qvo-Latn-PE", + "qvo-Latn": "qvo-Latn-PE", + "qvo-PE": "qvo-Latn-PE", + "qvp": "qvp-Latn-PE", + "qvp-Latn": "qvp-Latn-PE", + "qvp-PE": "qvp-Latn-PE", + "qvs": "qvs-Latn-PE", + "qvs-Latn": "qvs-Latn-PE", + "qvs-PE": "qvs-Latn-PE", + "qvw": "qvw-Latn-PE", + "qvw-Latn": "qvw-Latn-PE", + "qvw-PE": "qvw-Latn-PE", + "qvz": "qvz-Latn-EC", + "qvz-EC": "qvz-Latn-EC", + "qvz-Latn": "qvz-Latn-EC", + "qwa": "qwa-Latn-PE", + "qwa-Latn": "qwa-Latn-PE", + "qwa-PE": "qwa-Latn-PE", + "qwc": "qwc-Latn-PE", + "qwc-Latn": "qwc-Latn-PE", + "qwc-PE": "qwc-Latn-PE", + "qwh": "qwh-Latn-PE", + "qwh-Latn": "qwh-Latn-PE", + "qwh-PE": "qwh-Latn-PE", + "qwm": "qwm-Latn-HU", + "qwm-HU": "qwm-Latn-HU", + "qwm-Latn": "qwm-Latn-HU", + "qws": "qws-Latn-PE", + "qws-Latn": "qws-Latn-PE", + "qws-PE": "qws-Latn-PE", + "qwt": "qwt-Latn-US", + "qwt-Latn": "qwt-Latn-US", + "qwt-US": "qwt-Latn-US", + "qxa": "qxa-Latn-PE", + "qxa-Latn": "qxa-Latn-PE", + "qxa-PE": "qxa-Latn-PE", + "qxc": "qxc-Latn-PE", + "qxc-Latn": "qxc-Latn-PE", + "qxc-PE": "qxc-Latn-PE", + "qxh": "qxh-Latn-PE", + "qxh-Latn": "qxh-Latn-PE", + "qxh-PE": "qxh-Latn-PE", + "qxl": "qxl-Latn-EC", + "qxl-EC": "qxl-Latn-EC", + "qxl-Latn": "qxl-Latn-EC", + "qxn": "qxn-Latn-PE", + "qxn-Latn": "qxn-Latn-PE", + "qxn-PE": "qxn-Latn-PE", + "qxo": "qxo-Latn-PE", + "qxo-Latn": "qxo-Latn-PE", + "qxo-PE": "qxo-Latn-PE", + "qxp": "qxp-Latn-PE", + "qxp-Latn": "qxp-Latn-PE", + "qxp-PE": "qxp-Latn-PE", + "qxq": "qxq-Arab-IR", + "qxq-Arab": "qxq-Arab-IR", + "qxq-IR": "qxq-Arab-IR", + "qxr": "qxr-Latn-EC", + "qxr-EC": "qxr-Latn-EC", + "qxr-Latn": "qxr-Latn-EC", + "qxt": "qxt-Latn-PE", + "qxt-Latn": "qxt-Latn-PE", + "qxt-PE": "qxt-Latn-PE", + "qxu": "qxu-Latn-PE", + "qxu-Latn": "qxu-Latn-PE", + "qxu-PE": "qxu-Latn-PE", + "qxw": "qxw-Latn-PE", + "qxw-Latn": "qxw-Latn-PE", + "qxw-PE": "qxw-Latn-PE", + "qya": "qya-Latn-001", + "qya-001": "qya-Latn-001", + "qya-Latn": "qya-Latn-001", + "qyp": "qyp-Latn-US", + "qyp-Latn": "qyp-Latn-US", + "qyp-US": "qyp-Latn-US", + "raa": "raa-Deva-NP", + "raa-Deva": "raa-Deva-NP", + "raa-NP": "raa-Deva-NP", + "rab": "rab-Deva-NP", + "rab-Deva": "rab-Deva-NP", + "rab-NP": "rab-Deva-NP", + "rac": "rac-Latn-ID", + "rac-ID": "rac-Latn-ID", + "rac-Latn": "rac-Latn-ID", + "rad": "rad-Latn-VN", + "rad-Latn": "rad-Latn-VN", + "rad-VN": "rad-Latn-VN", + "raf": "raf-Deva-NP", + "raf-Deva": "raf-Deva-NP", + "raf-NP": "raf-Deva-NP", + "rag": "rag-Latn-KE", + "rag-KE": "rag-Latn-KE", + "rag-Latn": "rag-Latn-KE", + "rah": "rah-Beng-IN", + "rah-Beng": "rah-Beng-IN", + "rah-IN": "rah-Beng-IN", + "rai": "rai-Latn-PG", + "rai-Latn": "rai-Latn-PG", + "rai-PG": "rai-Latn-PG", + "raj": "raj-Deva-IN", + "raj-Deva": "raj-Deva-IN", + "raj-IN": "raj-Deva-IN", + "rak": "rak-Latn-PG", + "rak-Latn": "rak-Latn-PG", + "rak-PG": "rak-Latn-PG", + "ram": "ram-Latn-BR", + "ram-BR": "ram-Latn-BR", + "ram-Latn": "ram-Latn-BR", + "ran": "ran-Latn-ID", + "ran-ID": "ran-Latn-ID", + "ran-Latn": "ran-Latn-ID", + "rao": "rao-Latn-PG", + "rao-Latn": "rao-Latn-PG", + "rao-PG": "rao-Latn-PG", + "rap": "rap-Latn-CL", + "rap-CL": "rap-Latn-CL", + "rap-Latn": "rap-Latn-CL", + "rar": "rar-Latn-CK", + "rar-CK": "rar-Latn-CK", + "rar-Latn": "rar-Latn-CK", + "rav": "rav-Deva-NP", + "rav-Deva": "rav-Deva-NP", + "rav-NP": "rav-Deva-NP", + "raw": "raw-Latn-MM", + "raw-Latn": "raw-Latn-MM", + "raw-MM": "raw-Latn-MM", + "rax": "rax-Latn-NG", + "rax-Latn": "rax-Latn-NG", + "rax-NG": "rax-Latn-NG", + "ray": "ray-Latn-PF", + "ray-Latn": "ray-Latn-PF", + "ray-PF": "ray-Latn-PF", + "raz": "raz-Latn-ID", + "raz-ID": "raz-Latn-ID", + "raz-Latn": "raz-Latn-ID", + "rbb": "rbb-Mymr-MM", + "rbb-MM": "rbb-Mymr-MM", + "rbb-Mymr": "rbb-Mymr-MM", + "rbk": "rbk-Latn-PH", + "rbk-Latn": "rbk-Latn-PH", + "rbk-PH": "rbk-Latn-PH", + "rbl": "rbl-Latn-PH", + "rbl-Latn": "rbl-Latn-PH", + "rbl-PH": "rbl-Latn-PH", + "rbp": "rbp-Latn-AU", + "rbp-AU": "rbp-Latn-AU", + "rbp-Latn": "rbp-Latn-AU", + "rcf": "rcf-Latn-RE", + "rcf-Latn": "rcf-Latn-RE", + "rcf-RE": "rcf-Latn-RE", + "rdb": "rdb-Arab-IR", + "rdb-Arab": "rdb-Arab-IR", + "rdb-IR": "rdb-Arab-IR", + "rea": "rea-Latn-PG", + "rea-Latn": "rea-Latn-PG", + "rea-PG": "rea-Latn-PG", + "reb": "reb-Latn-ID", + "reb-ID": "reb-Latn-ID", + "reb-Latn": "reb-Latn-ID", + "ree": "ree-Latn-MY", + "ree-Latn": "ree-Latn-MY", + "ree-MY": "ree-Latn-MY", + "reg": "reg-Latn-TZ", + "reg-Latn": "reg-Latn-TZ", + "reg-TZ": "reg-Latn-TZ", + "rei": "rei-Orya-IN", + "rei-IN": "rei-Orya-IN", + "rei-Orya": "rei-Orya-IN", + "rej": "rej-Latn-ID", + "rej-ID": "rej-Latn-ID", + "rej-Latn": "rej-Latn-ID", + "rej-Rjng": "rej-Rjng-ID", + "rel": "rel-Latn-KE", + "rel-KE": "rel-Latn-KE", + "rel-Latn": "rel-Latn-KE", + "rem": "rem-Latn-PE", + "rem-Latn": "rem-Latn-PE", + "rem-PE": "rem-Latn-PE", + "ren": "ren-Latn-VN", + "ren-Latn": "ren-Latn-VN", + "ren-VN": "ren-Latn-VN", + "res": "res-Latn-NG", + "res-Latn": "res-Latn-NG", + "res-NG": "res-Latn-NG", + "ret": "ret-Latn-ID", + "ret-ID": "ret-Latn-ID", + "ret-Latn": "ret-Latn-ID", + "rey": "rey-Latn-BO", + "rey-BO": "rey-Latn-BO", + "rey-Latn": "rey-Latn-BO", + "rga": "rga-Latn-VU", + "rga-Latn": "rga-Latn-VU", + "rga-VU": "rga-Latn-VU", + "rgn": "rgn-Latn-IT", + "rgn-IT": "rgn-Latn-IT", + "rgn-Latn": "rgn-Latn-IT", + "rgr": "rgr-Latn-PE", + "rgr-Latn": "rgr-Latn-PE", + "rgr-PE": "rgr-Latn-PE", + "rgs": "rgs-Latn-VN", + "rgs-Latn": "rgs-Latn-VN", + "rgs-VN": "rgs-Latn-VN", + "rgu": "rgu-Latn-ID", + "rgu-ID": "rgu-Latn-ID", + "rgu-Latn": "rgu-Latn-ID", + "rhg": "rhg-Rohg-MM", + "rhg-Arab-MM": "rhg-Arab-MM", + "rhg-MM": "rhg-Rohg-MM", + "rhg-Rohg": "rhg-Rohg-MM", + "rhp": "rhp-Latn-PG", + "rhp-Latn": "rhp-Latn-PG", + "rhp-PG": "rhp-Latn-PG", + "ria": "ria-Latn-IN", + "ria-IN": "ria-Latn-IN", + "ria-Latn": "ria-Latn-IN", + "rif": "rif-Latn-MA", + "rif-Latn": "rif-Latn-MA", + "rif-MA": "rif-Latn-MA", + "ril": "ril-Latn-MM", + "ril-Latn": "ril-Latn-MM", + "ril-MM": "ril-Latn-MM", + "rim": "rim-Latn-TZ", + "rim-Latn": "rim-Latn-TZ", + "rim-TZ": "rim-Latn-TZ", + "rin": "rin-Latn-NG", + "rin-Latn": "rin-Latn-NG", + "rin-NG": "rin-Latn-NG", + "rir": "rir-Latn-ID", + "rir-ID": "rir-Latn-ID", + "rir-Latn": "rir-Latn-ID", + "rit": "rit-Latn-AU", + "rit-AU": "rit-Latn-AU", + "rit-Latn": "rit-Latn-AU", + "riu": "riu-Latn-ID", + "riu-ID": "riu-Latn-ID", + "riu-Latn": "riu-Latn-ID", + "rjg": "rjg-Latn-ID", + "rjg-ID": "rjg-Latn-ID", + "rjg-Latn": "rjg-Latn-ID", + "rji": "rji-Deva-NP", + "rji-Deva": "rji-Deva-NP", + "rji-NP": "rji-Deva-NP", + "rjs": "rjs-Deva-NP", + "rjs-Deva": "rjs-Deva-NP", + "rjs-NP": "rjs-Deva-NP", + "rka": "rka-Khmr-KH", + "rka-KH": "rka-Khmr-KH", + "rka-Khmr": "rka-Khmr-KH", + "rkb": "rkb-Latn-BR", + "rkb-BR": "rkb-Latn-BR", + "rkb-Latn": "rkb-Latn-BR", + "rkh": "rkh-Latn-CK", + "rkh-CK": "rkh-Latn-CK", + "rkh-Latn": "rkh-Latn-CK", + "rki": "rki-Mymr-MM", + "rki-MM": "rki-Mymr-MM", + "rki-Mymr": "rki-Mymr-MM", + "rkm": "rkm-Latn-BF", + "rkm-BF": "rkm-Latn-BF", + "rkm-Latn": "rkm-Latn-BF", + "rkt": "rkt-Beng-BD", + "rkt-BD": "rkt-Beng-BD", + "rkt-Beng": "rkt-Beng-BD", + "rkw": "rkw-Latn-AU", + "rkw-AU": "rkw-Latn-AU", + "rkw-Latn": "rkw-Latn-AU", + "rm": "rm-Latn-CH", + "rm-CH": "rm-Latn-CH", + "rm-Latn": "rm-Latn-CH", + "rma": "rma-Latn-NI", + "rma-Latn": "rma-Latn-NI", + "rma-NI": "rma-Latn-NI", + "rmb": "rmb-Latn-AU", + "rmb-AU": "rmb-Latn-AU", + "rmb-Latn": "rmb-Latn-AU", + "rmc": "rmc-Latn-SK", + "rmc-Latn": "rmc-Latn-SK", + "rmc-SK": "rmc-Latn-SK", + "rmd": "rmd-Latn-DK", + "rmd-DK": "rmd-Latn-DK", + "rmd-Latn": "rmd-Latn-DK", + "rme": "rme-Latn-GB", + "rme-GB": "rme-Latn-GB", + "rme-Latn": "rme-Latn-GB", + "rmf": "rmf-Latn-FI", + "rmf-FI": "rmf-Latn-FI", + "rmf-Latn": "rmf-Latn-FI", + "rmg": "rmg-Latn-NO", + "rmg-Latn": "rmg-Latn-NO", + "rmg-NO": "rmg-Latn-NO", + "rmh": "rmh-Latn-ID", + "rmh-ID": "rmh-Latn-ID", + "rmh-Latn": "rmh-Latn-ID", + "rmi": "rmi-Armn-AM", + "rmi-AM": "rmi-Armn-AM", + "rmi-Armn": "rmi-Armn-AM", + "rmk": "rmk-Latn-PG", + "rmk-Latn": "rmk-Latn-PG", + "rmk-PG": "rmk-Latn-PG", + "rml": "rml-Latn-PL", + "rml-Latn": "rml-Latn-PL", + "rml-PL": "rml-Latn-PL", + "rmm": "rmm-Latn-ID", + "rmm-ID": "rmm-Latn-ID", + "rmm-Latn": "rmm-Latn-ID", + "rmn": "rmn-Latn-RS", + "rmn-Latn": "rmn-Latn-RS", + "rmn-RS": "rmn-Latn-RS", + "rmo": "rmo-Latn-CH", + "rmo-CH": "rmo-Latn-CH", + "rmo-Latn": "rmo-Latn-CH", + "rmp": "rmp-Latn-PG", + "rmp-Latn": "rmp-Latn-PG", + "rmp-PG": "rmp-Latn-PG", + "rmq": "rmq-Latn-ES", + "rmq-ES": "rmq-Latn-ES", + "rmq-Latn": "rmq-Latn-ES", + "rmt": "rmt-Arab-IR", + "rmt-Arab": "rmt-Arab-IR", + "rmt-IR": "rmt-Arab-IR", + "rmu": "rmu-Latn-SE", + "rmu-Latn": "rmu-Latn-SE", + "rmu-SE": "rmu-Latn-SE", + "rmw": "rmw-Latn-GB", + "rmw-GB": "rmw-Latn-GB", + "rmw-Latn": "rmw-Latn-GB", + "rmx": "rmx-Latn-VN", + "rmx-Latn": "rmx-Latn-VN", + "rmx-VN": "rmx-Latn-VN", + "rmz": "rmz-Mymr-IN", + "rmz-IN": "rmz-Mymr-IN", + "rmz-Mymr": "rmz-Mymr-IN", + "rn": "rn-Latn-BI", + "rn-BI": "rn-Latn-BI", + "rn-Latn": "rn-Latn-BI", + "rnd": "rnd-Latn-CD", + "rnd-CD": "rnd-Latn-CD", + "rnd-Latn": "rnd-Latn-CD", + "rng": "rng-Latn-MZ", + "rng-Latn": "rng-Latn-MZ", + "rng-MZ": "rng-Latn-MZ", + "rnl": "rnl-Latn-IN", + "rnl-IN": "rnl-Latn-IN", + "rnl-Latn": "rnl-Latn-IN", + "rnn": "rnn-Latn-ID", + "rnn-ID": "rnn-Latn-ID", + "rnn-Latn": "rnn-Latn-ID", + "rnr": "rnr-Latn-AU", + "rnr-AU": "rnr-Latn-AU", + "rnr-Latn": "rnr-Latn-AU", + "rnw": "rnw-Latn-TZ", + "rnw-Latn": "rnw-Latn-TZ", + "rnw-TZ": "rnw-Latn-TZ", + "ro": "ro-Latn-RO", + "ro-Latn": "ro-Latn-RO", + "ro-MD": "ro-Latn-MD", + "ro-RO": "ro-Latn-RO", + "rob": "rob-Latn-ID", + "rob-ID": "rob-Latn-ID", + "rob-Latn": "rob-Latn-ID", + "roc": "roc-Latn-VN", + "roc-Latn": "roc-Latn-VN", + "roc-VN": "roc-Latn-VN", + "rod": "rod-Latn-NG", + "rod-Latn": "rod-Latn-NG", + "rod-NG": "rod-Latn-NG", + "roe": "roe-Latn-PG", + "roe-Latn": "roe-Latn-PG", + "roe-PG": "roe-Latn-PG", + "rof": "rof-Latn-TZ", + "rof-Latn": "rof-Latn-TZ", + "rof-TZ": "rof-Latn-TZ", + "rog": "rog-Latn-VN", + "rog-Latn": "rog-Latn-VN", + "rog-VN": "rog-Latn-VN", + "rol": "rol-Latn-PH", + "rol-Latn": "rol-Latn-PH", + "rol-PH": "rol-Latn-PH", + "rom": "rom-Latn-RO", + "rom-Latn": "rom-Latn-RO", + "rom-RO": "rom-Latn-RO", + "roo": "roo-Latn-PG", + "roo-Latn": "roo-Latn-PG", + "roo-PG": "roo-Latn-PG", + "rop": "rop-Latn-AU", + "rop-AU": "rop-Latn-AU", + "rop-Latn": "rop-Latn-AU", + "ror": "ror-Latn-ID", + "ror-ID": "ror-Latn-ID", + "ror-Latn": "ror-Latn-ID", + "rou": "rou-Latn-TD", + "rou-Latn": "rou-Latn-TD", + "rou-TD": "rou-Latn-TD", + "row": "row-Latn-ID", + "row-ID": "row-Latn-ID", + "row-Latn": "row-Latn-ID", + "rpn": "rpn-Latn-VU", + "rpn-Latn": "rpn-Latn-VU", + "rpn-VU": "rpn-Latn-VU", + "rpt": "rpt-Latn-PG", + "rpt-Latn": "rpt-Latn-PG", + "rpt-PG": "rpt-Latn-PG", + "rri": "rri-Latn-SB", + "rri-Latn": "rri-Latn-SB", + "rri-SB": "rri-Latn-SB", + "rrm": "rrm-Latn-NZ", + "rrm-Latn": "rrm-Latn-NZ", + "rrm-NZ": "rrm-Latn-NZ", + "rro": "rro-Latn-PG", + "rro-Latn": "rro-Latn-PG", + "rro-PG": "rro-Latn-PG", + "rrt": "rrt-Latn-AU", + "rrt-AU": "rrt-Latn-AU", + "rrt-Latn": "rrt-Latn-AU", + "rsk": "rsk-Cyrl-RS", + "rsk-Cyrl": "rsk-Cyrl-RS", + "rsk-RS": "rsk-Cyrl-RS", + "rsw": "rsw-Latn-NG", + "rsw-Latn": "rsw-Latn-NG", + "rsw-NG": "rsw-Latn-NG", + "rtc": "rtc-Latn-MM", + "rtc-Latn": "rtc-Latn-MM", + "rtc-MM": "rtc-Latn-MM", + "rth": "rth-Latn-ID", + "rth-ID": "rth-Latn-ID", + "rth-Latn": "rth-Latn-ID", + "rtm": "rtm-Latn-FJ", + "rtm-FJ": "rtm-Latn-FJ", + "rtm-Latn": "rtm-Latn-FJ", + "rtw": "rtw-Deva-IN", + "rtw-Deva": "rtw-Deva-IN", + "rtw-IN": "rtw-Deva-IN", + "ru": "ru-Cyrl-RU", + "ru-BY": "ru-Cyrl-BY", + "ru-Cyrl": "ru-Cyrl-RU", + "ru-Cyrs": "ru-Cyrs-RU", + "ru-GE": "ru-Cyrl-GE", + "ru-KG": "ru-Cyrl-KG", + "ru-KZ": "ru-Cyrl-KZ", + "ru-RU": "ru-Cyrl-RU", + "ru-UA": "ru-Cyrl-UA", + "rub": "rub-Latn-UG", + "rub-Latn": "rub-Latn-UG", + "rub-UG": "rub-Latn-UG", + "ruc": "ruc-Latn-UG", + "ruc-Latn": "ruc-Latn-UG", + "ruc-UG": "ruc-Latn-UG", + "rue": "rue-Cyrl-UA", + "rue-Cyrl": "rue-Cyrl-UA", + "rue-UA": "rue-Cyrl-UA", + "ruf": "ruf-Latn-TZ", + "ruf-Latn": "ruf-Latn-TZ", + "ruf-TZ": "ruf-Latn-TZ", + "rug": "rug-Latn-SB", + "rug-Latn": "rug-Latn-SB", + "rug-SB": "rug-Latn-SB", + "rui": "rui-Latn-TZ", + "rui-Latn": "rui-Latn-TZ", + "rui-TZ": "rui-Latn-TZ", + "ruk": "ruk-Latn-NG", + "ruk-Latn": "ruk-Latn-NG", + "ruk-NG": "ruk-Latn-NG", + "ruo": "ruo-Latn-HR", + "ruo-HR": "ruo-Latn-HR", + "ruo-Latn": "ruo-Latn-HR", + "rup": "rup-Latn-RO", + "rup-Latn": "rup-Latn-RO", + "rup-RO": "rup-Latn-RO", + "ruq": "ruq-Latn-GR", + "ruq-GR": "ruq-Latn-GR", + "ruq-Latn": "ruq-Latn-GR", + "rut": "rut-Cyrl-RU", + "rut-Cyrl": "rut-Cyrl-RU", + "rut-RU": "rut-Cyrl-RU", + "ruu": "ruu-Latn-MY", + "ruu-Latn": "ruu-Latn-MY", + "ruu-MY": "ruu-Latn-MY", + "ruy": "ruy-Latn-NG", + "ruy-Latn": "ruy-Latn-NG", + "ruy-NG": "ruy-Latn-NG", + "ruz": "ruz-Latn-NG", + "ruz-Latn": "ruz-Latn-NG", + "ruz-NG": "ruz-Latn-NG", + "rw": "rw-Latn-RW", + "rw-Latn": "rw-Latn-RW", + "rw-RW": "rw-Latn-RW", + "rwa": "rwa-Latn-PG", + "rwa-Latn": "rwa-Latn-PG", + "rwa-PG": "rwa-Latn-PG", + "rwk": "rwk-Latn-TZ", + "rwk-Latn": "rwk-Latn-TZ", + "rwk-TZ": "rwk-Latn-TZ", + "rwl": "rwl-Latn-TZ", + "rwl-Latn": "rwl-Latn-TZ", + "rwl-TZ": "rwl-Latn-TZ", + "rwm": "rwm-Latn-UG", + "rwm-Latn": "rwm-Latn-UG", + "rwm-UG": "rwm-Latn-UG", + "rwo": "rwo-Latn-PG", + "rwo-Latn": "rwo-Latn-PG", + "rwo-PG": "rwo-Latn-PG", + "rwr": "rwr-Deva-IN", + "rwr-Deva": "rwr-Deva-IN", + "rwr-IN": "rwr-Deva-IN", + "rxd": "rxd-Latn-AU", + "rxd-AU": "rxd-Latn-AU", + "rxd-Latn": "rxd-Latn-AU", + "rxw": "rxw-Latn-AU", + "rxw-AU": "rxw-Latn-AU", + "rxw-Latn": "rxw-Latn-AU", + "ryu": "ryu-Kana-JP", + "ryu-JP": "ryu-Kana-JP", + "ryu-Kana": "ryu-Kana-JP", + "sa": "sa-Deva-IN", + "sa-Bhks": "sa-Bhks-IN", + "sa-Deva": "sa-Deva-IN", + "sa-Gran": "sa-Gran-IN", + "sa-IN": "sa-Deva-IN", + "sa-Nand": "sa-Nand-IN", + "sa-Shrd": "sa-Shrd-IN", + "sa-Sidd": "sa-Sidd-IN", + "sa-Tutg": "sa-Tutg-IN", + "saa": "saa-Latn-TD", + "saa-Latn": "saa-Latn-TD", + "saa-TD": "saa-Latn-TD", + "sab": "sab-Latn-PA", + "sab-Latn": "sab-Latn-PA", + "sab-PA": "sab-Latn-PA", + "sac": "sac-Latn-US", + "sac-Latn": "sac-Latn-US", + "sac-US": "sac-Latn-US", + "sad": "sad-Latn-TZ", + "sad-Latn": "sad-Latn-TZ", + "sad-TZ": "sad-Latn-TZ", + "sae": "sae-Latn-BR", + "sae-BR": "sae-Latn-BR", + "sae-Latn": "sae-Latn-BR", + "saf": "saf-Latn-GH", + "saf-GH": "saf-Latn-GH", + "saf-Latn": "saf-Latn-GH", + "sah": "sah-Cyrl-RU", + "sah-Cyrl": "sah-Cyrl-RU", + "sah-RU": "sah-Cyrl-RU", + "saj": "saj-Latn-ID", + "saj-ID": "saj-Latn-ID", + "saj-Latn": "saj-Latn-ID", + "sak": "sak-Latn-GA", + "sak-GA": "sak-Latn-GA", + "sak-Latn": "sak-Latn-GA", + "sam": "sam-Samr-PS", + "sam-PS": "sam-Samr-PS", + "sam-Samr": "sam-Samr-PS", + "sao": "sao-Latn-ID", + "sao-ID": "sao-Latn-ID", + "sao-Latn": "sao-Latn-ID", + "saq": "saq-Latn-KE", + "saq-KE": "saq-Latn-KE", + "saq-Latn": "saq-Latn-KE", + "sar": "sar-Latn-BO", + "sar-BO": "sar-Latn-BO", + "sar-Latn": "sar-Latn-BO", + "sas": "sas-Latn-ID", + "sas-ID": "sas-Latn-ID", + "sas-Latn": "sas-Latn-ID", + "sat": "sat-Olck-IN", + "sat-IN": "sat-Olck-IN", + "sat-Olck": "sat-Olck-IN", + "sau": "sau-Latn-ID", + "sau-ID": "sau-Latn-ID", + "sau-Latn": "sau-Latn-ID", + "sav": "sav-Latn-SN", + "sav-Latn": "sav-Latn-SN", + "sav-SN": "sav-Latn-SN", + "saw": "saw-Latn-ID", + "saw-ID": "saw-Latn-ID", + "saw-Latn": "saw-Latn-ID", + "sax": "sax-Latn-VU", + "sax-Latn": "sax-Latn-VU", + "sax-VU": "sax-Latn-VU", + "say": "say-Latn-NG", + "say-Latn": "say-Latn-NG", + "say-NG": "say-Latn-NG", + "saz": "saz-Saur-IN", + "saz-IN": "saz-Saur-IN", + "saz-Saur": "saz-Saur-IN", + "sba": "sba-Latn-TD", + "sba-Latn": "sba-Latn-TD", + "sba-TD": "sba-Latn-TD", + "sbb": "sbb-Latn-SB", + "sbb-Latn": "sbb-Latn-SB", + "sbb-SB": "sbb-Latn-SB", + "sbc": "sbc-Latn-PG", + "sbc-Latn": "sbc-Latn-PG", + "sbc-PG": "sbc-Latn-PG", + "sbd": "sbd-Latn-BF", + "sbd-BF": "sbd-Latn-BF", + "sbd-Latn": "sbd-Latn-BF", + "sbe": "sbe-Latn-PG", + "sbe-Latn": "sbe-Latn-PG", + "sbe-PG": "sbe-Latn-PG", + "sbg": "sbg-Latn-ID", + "sbg-ID": "sbg-Latn-ID", + "sbg-Latn": "sbg-Latn-ID", + "sbh": "sbh-Latn-PG", + "sbh-Latn": "sbh-Latn-PG", + "sbh-PG": "sbh-Latn-PG", + "sbi": "sbi-Latn-PG", + "sbi-Latn": "sbi-Latn-PG", + "sbi-PG": "sbi-Latn-PG", + "sbj": "sbj-Latn-TD", + "sbj-Latn": "sbj-Latn-TD", + "sbj-TD": "sbj-Latn-TD", + "sbk": "sbk-Latn-TZ", + "sbk-Latn": "sbk-Latn-TZ", + "sbk-TZ": "sbk-Latn-TZ", + "sbl": "sbl-Latn-PH", + "sbl-Latn": "sbl-Latn-PH", + "sbl-PH": "sbl-Latn-PH", + "sbm": "sbm-Latn-TZ", + "sbm-Latn": "sbm-Latn-TZ", + "sbm-TZ": "sbm-Latn-TZ", + "sbn": "sbn-Arab-PK", + "sbn-Arab": "sbn-Arab-PK", + "sbn-PK": "sbn-Arab-PK", + "sbo": "sbo-Latn-MY", + "sbo-Latn": "sbo-Latn-MY", + "sbo-MY": "sbo-Latn-MY", + "sbp": "sbp-Latn-TZ", + "sbp-Latn": "sbp-Latn-TZ", + "sbp-TZ": "sbp-Latn-TZ", + "sbq": "sbq-Latn-PG", + "sbq-Latn": "sbq-Latn-PG", + "sbq-PG": "sbq-Latn-PG", + "sbr": "sbr-Latn-ID", + "sbr-ID": "sbr-Latn-ID", + "sbr-Latn": "sbr-Latn-ID", + "sbs": "sbs-Latn-NA", + "sbs-Latn": "sbs-Latn-NA", + "sbs-NA": "sbs-Latn-NA", + "sbt": "sbt-Latn-ID", + "sbt-ID": "sbt-Latn-ID", + "sbt-Latn": "sbt-Latn-ID", + "sbu": "sbu-Tibt-IN", + "sbu-IN": "sbu-Tibt-IN", + "sbu-Tibt": "sbu-Tibt-IN", + "sbv": "sbv-Latn-IT", + "sbv-IT": "sbv-Latn-IT", + "sbv-Latn": "sbv-Latn-IT", + "sbw": "sbw-Latn-GA", + "sbw-GA": "sbw-Latn-GA", + "sbw-Latn": "sbw-Latn-GA", + "sbx": "sbx-Latn-ID", + "sbx-ID": "sbx-Latn-ID", + "sbx-Latn": "sbx-Latn-ID", + "sby": "sby-Latn-ZM", + "sby-Latn": "sby-Latn-ZM", + "sby-ZM": "sby-Latn-ZM", + "sbz": "sbz-Latn-CF", + "sbz-CF": "sbz-Latn-CF", + "sbz-Latn": "sbz-Latn-CF", + "sc": "sc-Latn-IT", + "sc-IT": "sc-Latn-IT", + "sc-Latn": "sc-Latn-IT", + "scb": "scb-Latn-VN", + "scb-Latn": "scb-Latn-VN", + "scb-VN": "scb-Latn-VN", + "sce": "sce-Latn-CN", + "sce-CN": "sce-Latn-CN", + "sce-Latn": "sce-Latn-CN", + "scf": "scf-Latn-PA", + "scf-Latn": "scf-Latn-PA", + "scf-PA": "scf-Latn-PA", + "scg": "scg-Latn-ID", + "scg-ID": "scg-Latn-ID", + "scg-Latn": "scg-Latn-ID", + "sch": "sch-Latn-IN", + "sch-IN": "sch-Latn-IN", + "sch-Latn": "sch-Latn-IN", + "sci": "sci-Latn-LK", + "sci-LK": "sci-Latn-LK", + "sci-Latn": "sci-Latn-LK", + "sck": "sck-Deva-IN", + "sck-Deva": "sck-Deva-IN", + "sck-IN": "sck-Deva-IN", + "scl": "scl-Arab-PK", + "scl-Arab": "scl-Arab-PK", + "scl-PK": "scl-Arab-PK", + "scn": "scn-Latn-IT", + "scn-IT": "scn-Latn-IT", + "scn-Latn": "scn-Latn-IT", + "sco": "sco-Latn-GB", + "sco-GB": "sco-Latn-GB", + "sco-Latn": "sco-Latn-GB", + "scp": "scp-Deva-NP", + "scp-Deva": "scp-Deva-NP", + "scp-NP": "scp-Deva-NP", + "scs": "scs-Latn-CA", + "scs-CA": "scs-Latn-CA", + "scs-Latn": "scs-Latn-CA", + "sct": "sct-Laoo-LA", + "sct-LA": "sct-Laoo-LA", + "sct-Laoo": "sct-Laoo-LA", + "scu": "scu-Takr-IN", + "scu-IN": "scu-Takr-IN", + "scu-Takr": "scu-Takr-IN", + "scv": "scv-Latn-NG", + "scv-Latn": "scv-Latn-NG", + "scv-NG": "scv-Latn-NG", + "scw": "scw-Latn-NG", + "scw-Latn": "scw-Latn-NG", + "scw-NG": "scw-Latn-NG", + "scx": "scx-Grek-IT", + "scx-Grek": "scx-Grek-IT", + "scx-IT": "scx-Grek-IT", + "sd": "sd-Arab-PK", + "sd-Arab": "sd-Arab-PK", + "sd-Deva": "sd-Deva-IN", + "sd-IN": "sd-Deva-IN", + "sd-Khoj": "sd-Khoj-IN", + "sd-PK": "sd-Arab-PK", + "sd-Sind": "sd-Sind-IN", + "sda": "sda-Latn-ID", + "sda-ID": "sda-Latn-ID", + "sda-Latn": "sda-Latn-ID", + "sdb": "sdb-Arab-IQ", + "sdb-Arab": "sdb-Arab-IQ", + "sdb-IQ": "sdb-Arab-IQ", + "sdc": "sdc-Latn-IT", + "sdc-IT": "sdc-Latn-IT", + "sdc-Latn": "sdc-Latn-IT", + "sde": "sde-Latn-NG", + "sde-Latn": "sde-Latn-NG", + "sde-NG": "sde-Latn-NG", + "sdf": "sdf-Arab-IQ", + "sdf-Arab": "sdf-Arab-IQ", + "sdf-IQ": "sdf-Arab-IQ", + "sdg": "sdg-Arab-AF", + "sdg-AF": "sdg-Arab-AF", + "sdg-Arab": "sdg-Arab-AF", + "sdh": "sdh-Arab-IR", + "sdh-Arab": "sdh-Arab-IR", + "sdh-IR": "sdh-Arab-IR", + "sdj": "sdj-Latn-CG", + "sdj-CG": "sdj-Latn-CG", + "sdj-Latn": "sdj-Latn-CG", + "sdk": "sdk-Latn-PG", + "sdk-Latn": "sdk-Latn-PG", + "sdk-PG": "sdk-Latn-PG", + "sdn": "sdn-Latn-IT", + "sdn-IT": "sdn-Latn-IT", + "sdn-Latn": "sdn-Latn-IT", + "sdo": "sdo-Latn-MY", + "sdo-Latn": "sdo-Latn-MY", + "sdo-MY": "sdo-Latn-MY", + "sdq": "sdq-Latn-ID", + "sdq-ID": "sdq-Latn-ID", + "sdq-Latn": "sdq-Latn-ID", + "sdr": "sdr-Beng-BD", + "sdr-BD": "sdr-Beng-BD", + "sdr-Beng": "sdr-Beng-BD", + "sds": "sds-Arab-TN", + "sds-Arab": "sds-Arab-TN", + "sds-TN": "sds-Arab-TN", + "sdu": "sdu-Latn-ID", + "sdu-ID": "sdu-Latn-ID", + "sdu-Latn": "sdu-Latn-ID", + "sdx": "sdx-Latn-MY", + "sdx-Latn": "sdx-Latn-MY", + "sdx-MY": "sdx-Latn-MY", + "se": "se-Latn-NO", + "se-Latn": "se-Latn-NO", + "se-NO": "se-Latn-NO", + "sea": "sea-Latn-MY", + "sea-Latn": "sea-Latn-MY", + "sea-MY": "sea-Latn-MY", + "seb": "seb-Latn-CI", + "seb-CI": "seb-Latn-CI", + "seb-Latn": "seb-Latn-CI", + "sec": "sec-Latn-CA", + "sec-CA": "sec-Latn-CA", + "sec-Latn": "sec-Latn-CA", + "sed": "sed-Latn-VN", + "sed-Latn": "sed-Latn-VN", + "sed-VN": "sed-Latn-VN", + "see": "see-Latn-US", + "see-Latn": "see-Latn-US", + "see-US": "see-Latn-US", + "sef": "sef-Latn-CI", + "sef-CI": "sef-Latn-CI", + "sef-Latn": "sef-Latn-CI", + "seg": "seg-Latn-TZ", + "seg-Latn": "seg-Latn-TZ", + "seg-TZ": "seg-Latn-TZ", + "seh": "seh-Latn-MZ", + "seh-Latn": "seh-Latn-MZ", + "seh-MZ": "seh-Latn-MZ", + "sei": "sei-Latn-MX", + "sei-Latn": "sei-Latn-MX", + "sei-MX": "sei-Latn-MX", + "sej": "sej-Latn-PG", + "sej-Latn": "sej-Latn-PG", + "sej-PG": "sej-Latn-PG", + "sek": "sek-Latn-CA", + "sek-CA": "sek-Latn-CA", + "sek-Latn": "sek-Latn-CA", + "sel": "sel-Cyrl-RU", + "sel-Cyrl": "sel-Cyrl-RU", + "sel-RU": "sel-Cyrl-RU", + "sen": "sen-Latn-BF", + "sen-BF": "sen-Latn-BF", + "sen-Latn": "sen-Latn-BF", + "seo": "seo-Latn-PG", + "seo-Latn": "seo-Latn-PG", + "seo-PG": "seo-Latn-PG", + "sep": "sep-Latn-BF", + "sep-BF": "sep-Latn-BF", + "sep-Latn": "sep-Latn-BF", + "seq": "seq-Latn-BF", + "seq-BF": "seq-Latn-BF", + "seq-Latn": "seq-Latn-BF", + "ser": "ser-Latn-US", + "ser-Latn": "ser-Latn-US", + "ser-US": "ser-Latn-US", + "ses": "ses-Latn-ML", + "ses-Latn": "ses-Latn-ML", + "ses-ML": "ses-Latn-ML", + "set": "set-Latn-ID", + "set-ID": "set-Latn-ID", + "set-Latn": "set-Latn-ID", + "seu": "seu-Latn-ID", + "seu-ID": "seu-Latn-ID", + "seu-Latn": "seu-Latn-ID", + "sev": "sev-Latn-CI", + "sev-CI": "sev-Latn-CI", + "sev-Latn": "sev-Latn-CI", + "sew": "sew-Latn-PG", + "sew-Latn": "sew-Latn-PG", + "sew-PG": "sew-Latn-PG", + "sey": "sey-Latn-EC", + "sey-EC": "sey-Latn-EC", + "sey-Latn": "sey-Latn-EC", + "sez": "sez-Latn-MM", + "sez-Latn": "sez-Latn-MM", + "sez-MM": "sez-Latn-MM", + "sfe": "sfe-Latn-PH", + "sfe-Latn": "sfe-Latn-PH", + "sfe-PH": "sfe-Latn-PH", + "sfm": "sfm-Plrd-CN", + "sfm-CN": "sfm-Plrd-CN", + "sfm-Plrd": "sfm-Plrd-CN", + "sfw": "sfw-Latn-GH", + "sfw-GH": "sfw-Latn-GH", + "sfw-Latn": "sfw-Latn-GH", + "sg": "sg-Latn-CF", + "sg-CF": "sg-Latn-CF", + "sg-Latn": "sg-Latn-CF", + "sga": "sga-Ogam-IE", + "sga-IE": "sga-Ogam-IE", + "sga-Ogam": "sga-Ogam-IE", + "sgb": "sgb-Latn-PH", + "sgb-Latn": "sgb-Latn-PH", + "sgb-PH": "sgb-Latn-PH", + "sgc": "sgc-Latn-KE", + "sgc-KE": "sgc-Latn-KE", + "sgc-Latn": "sgc-Latn-KE", + "sgd": "sgd-Latn-PH", + "sgd-Latn": "sgd-Latn-PH", + "sgd-PH": "sgd-Latn-PH", + "sge": "sge-Latn-ID", + "sge-ID": "sge-Latn-ID", + "sge-Latn": "sge-Latn-ID", + "sgh": "sgh-Cyrl-TJ", + "sgh-Cyrl": "sgh-Cyrl-TJ", + "sgh-TJ": "sgh-Cyrl-TJ", + "sgi": "sgi-Latn-CM", + "sgi-CM": "sgi-Latn-CM", + "sgi-Latn": "sgi-Latn-CM", + "sgj": "sgj-Deva-IN", + "sgj-Deva": "sgj-Deva-IN", + "sgj-IN": "sgj-Deva-IN", + "sgm": "sgm-Latn-KE", + "sgm-KE": "sgm-Latn-KE", + "sgm-Latn": "sgm-Latn-KE", + "sgp": "sgp-Latn-IN", + "sgp-IN": "sgp-Latn-IN", + "sgp-Latn": "sgp-Latn-IN", + "sgr": "sgr-Arab-IR", + "sgr-Arab": "sgr-Arab-IR", + "sgr-IR": "sgr-Arab-IR", + "sgs": "sgs-Latn-LT", + "sgs-LT": "sgs-Latn-LT", + "sgs-Latn": "sgs-Latn-LT", + "sgt": "sgt-Tibt-BT", + "sgt-BT": "sgt-Tibt-BT", + "sgt-Tibt": "sgt-Tibt-BT", + "sgu": "sgu-Latn-ID", + "sgu-ID": "sgu-Latn-ID", + "sgu-Latn": "sgu-Latn-ID", + "sgw": "sgw-Ethi-ET", + "sgw-ET": "sgw-Ethi-ET", + "sgw-Ethi": "sgw-Ethi-ET", + "sgy": "sgy-Arab-AF", + "sgy-AF": "sgy-Arab-AF", + "sgy-Arab": "sgy-Arab-AF", + "sgz": "sgz-Latn-PG", + "sgz-Latn": "sgz-Latn-PG", + "sgz-PG": "sgz-Latn-PG", + "sha": "sha-Latn-NG", + "sha-Latn": "sha-Latn-NG", + "sha-NG": "sha-Latn-NG", + "shb": "shb-Latn-BR", + "shb-BR": "shb-Latn-BR", + "shb-Latn": "shb-Latn-BR", + "shc": "shc-Latn-CD", + "shc-CD": "shc-Latn-CD", + "shc-Latn": "shc-Latn-CD", + "shd": "shd-Arab-PK", + "shd-Arab": "shd-Arab-PK", + "shd-PK": "shd-Arab-PK", + "she": "she-Latn-ET", + "she-ET": "she-Latn-ET", + "she-Latn": "she-Latn-ET", + "shg": "shg-Latn-BW", + "shg-BW": "shg-Latn-BW", + "shg-Latn": "shg-Latn-BW", + "shh": "shh-Latn-US", + "shh-Latn": "shh-Latn-US", + "shh-US": "shh-Latn-US", + "shi": "shi-Tfng-MA", + "shi-MA": "shi-Tfng-MA", + "shi-Tfng": "shi-Tfng-MA", + "shj": "shj-Latn-SD", + "shj-Latn": "shj-Latn-SD", + "shj-SD": "shj-Latn-SD", + "shk": "shk-Latn-SS", + "shk-Latn": "shk-Latn-SS", + "shk-SS": "shk-Latn-SS", + "shm": "shm-Arab-IR", + "shm-Arab": "shm-Arab-IR", + "shm-IR": "shm-Arab-IR", + "shn": "shn-Mymr-MM", + "shn-MM": "shn-Mymr-MM", + "shn-Mymr": "shn-Mymr-MM", + "sho": "sho-Latn-NG", + "sho-Latn": "sho-Latn-NG", + "sho-NG": "sho-Latn-NG", + "shp": "shp-Latn-PE", + "shp-Latn": "shp-Latn-PE", + "shp-PE": "shp-Latn-PE", + "shq": "shq-Latn-ZM", + "shq-Latn": "shq-Latn-ZM", + "shq-ZM": "shq-Latn-ZM", + "shr": "shr-Latn-CD", + "shr-CD": "shr-Latn-CD", + "shr-Latn": "shr-Latn-CD", + "shs": "shs-Latn-CA", + "shs-CA": "shs-Latn-CA", + "shs-Latn": "shs-Latn-CA", + "sht": "sht-Latn-US", + "sht-Latn": "sht-Latn-US", + "sht-US": "sht-Latn-US", + "shu": "shu-Arab-TD", + "shu-Arab": "shu-Arab-TD", + "shu-TD": "shu-Arab-TD", + "shv": "shv-Arab-OM", + "shv-Arab": "shv-Arab-OM", + "shv-OM": "shv-Arab-OM", + "shw": "shw-Latn-SD", + "shw-Latn": "shw-Latn-SD", + "shw-SD": "shw-Latn-SD", + "shy": "shy-Latn-DZ", + "shy-DZ": "shy-Latn-DZ", + "shy-Latn": "shy-Latn-DZ", + "shz": "shz-Latn-ML", + "shz-Latn": "shz-Latn-ML", + "shz-ML": "shz-Latn-ML", + "si": "si-Sinh-LK", + "si-LK": "si-Sinh-LK", + "si-Sinh": "si-Sinh-LK", + "si-XX": "si-Sinh-XX", + "sia": "sia-Cyrl-RU", + "sia-Cyrl": "sia-Cyrl-RU", + "sia-RU": "sia-Cyrl-RU", + "sib": "sib-Latn-MY", + "sib-Latn": "sib-Latn-MY", + "sib-MY": "sib-Latn-MY", + "sid": "sid-Latn-ET", + "sid-ET": "sid-Latn-ET", + "sid-Latn": "sid-Latn-ET", + "sie": "sie-Latn-ZM", + "sie-Latn": "sie-Latn-ZM", + "sie-ZM": "sie-Latn-ZM", + "sif": "sif-Latn-BF", + "sif-BF": "sif-Latn-BF", + "sif-Latn": "sif-Latn-BF", + "sig": "sig-Latn-GH", + "sig-GH": "sig-Latn-GH", + "sig-Latn": "sig-Latn-GH", + "sih": "sih-Latn-NC", + "sih-Latn": "sih-Latn-NC", + "sih-NC": "sih-Latn-NC", + "sii": "sii-Latn-IN", + "sii-IN": "sii-Latn-IN", + "sii-Latn": "sii-Latn-IN", + "sij": "sij-Latn-PG", + "sij-Latn": "sij-Latn-PG", + "sij-PG": "sij-Latn-PG", + "sik": "sik-Latn-BR", + "sik-BR": "sik-Latn-BR", + "sik-Latn": "sik-Latn-BR", + "sil": "sil-Latn-GH", + "sil-GH": "sil-Latn-GH", + "sil-Latn": "sil-Latn-GH", + "sim": "sim-Latn-PG", + "sim-Latn": "sim-Latn-PG", + "sim-PG": "sim-Latn-PG", + "sip": "sip-Tibt-IN", + "sip-IN": "sip-Tibt-IN", + "sip-Tibt": "sip-Tibt-IN", + "siq": "siq-Latn-PG", + "siq-Latn": "siq-Latn-PG", + "siq-PG": "siq-Latn-PG", + "sir": "sir-Latn-NG", + "sir-Latn": "sir-Latn-NG", + "sir-NG": "sir-Latn-NG", + "sis": "sis-Latn-US", + "sis-Latn": "sis-Latn-US", + "sis-US": "sis-Latn-US", + "siu": "siu-Latn-PG", + "siu-Latn": "siu-Latn-PG", + "siu-PG": "siu-Latn-PG", + "siv": "siv-Latn-PG", + "siv-Latn": "siv-Latn-PG", + "siv-PG": "siv-Latn-PG", + "siw": "siw-Latn-PG", + "siw-Latn": "siw-Latn-PG", + "siw-PG": "siw-Latn-PG", + "six": "six-Latn-PG", + "six-Latn": "six-Latn-PG", + "six-PG": "six-Latn-PG", + "siy": "siy-Arab-IR", + "siy-Arab": "siy-Arab-IR", + "siy-IR": "siy-Arab-IR", + "siz": "siz-Arab-EG", + "siz-Arab": "siz-Arab-EG", + "siz-EG": "siz-Arab-EG", + "sja": "sja-Latn-CO", + "sja-CO": "sja-Latn-CO", + "sja-Latn": "sja-Latn-CO", + "sjb": "sjb-Latn-ID", + "sjb-ID": "sjb-Latn-ID", + "sjb-Latn": "sjb-Latn-ID", + "sjd": "sjd-Cyrl-RU", + "sjd-Cyrl": "sjd-Cyrl-RU", + "sjd-RU": "sjd-Cyrl-RU", + "sje": "sje-Latn-SE", + "sje-Latn": "sje-Latn-SE", + "sje-SE": "sje-Latn-SE", + "sjg": "sjg-Latn-TD", + "sjg-Latn": "sjg-Latn-TD", + "sjg-TD": "sjg-Latn-TD", + "sjl": "sjl-Latn-IN", + "sjl-IN": "sjl-Latn-IN", + "sjl-Latn": "sjl-Latn-IN", + "sjm": "sjm-Latn-PH", + "sjm-Latn": "sjm-Latn-PH", + "sjm-PH": "sjm-Latn-PH", + "sjp": "sjp-Deva-IN", + "sjp-Deva": "sjp-Deva-IN", + "sjp-IN": "sjp-Deva-IN", + "sjr": "sjr-Latn-PG", + "sjr-Latn": "sjr-Latn-PG", + "sjr-PG": "sjr-Latn-PG", + "sjt": "sjt-Cyrl-RU", + "sjt-Cyrl": "sjt-Cyrl-RU", + "sjt-RU": "sjt-Cyrl-RU", + "sju": "sju-Latn-SE", + "sju-Latn": "sju-Latn-SE", + "sju-SE": "sju-Latn-SE", + "sjw": "sjw-Latn-US", + "sjw-Latn": "sjw-Latn-US", + "sjw-US": "sjw-Latn-US", + "sk": "sk-Latn-SK", + "sk-Latn": "sk-Latn-SK", + "sk-SK": "sk-Latn-SK", + "ska": "ska-Latn-US", + "ska-Latn": "ska-Latn-US", + "ska-US": "ska-Latn-US", + "skb": "skb-Thai-TH", + "skb-TH": "skb-Thai-TH", + "skb-Thai": "skb-Thai-TH", + "skc": "skc-Latn-PG", + "skc-Latn": "skc-Latn-PG", + "skc-PG": "skc-Latn-PG", + "skd": "skd-Latn-US", + "skd-Latn": "skd-Latn-US", + "skd-US": "skd-Latn-US", + "ske": "ske-Latn-VU", + "ske-Latn": "ske-Latn-VU", + "ske-VU": "ske-Latn-VU", + "skf": "skf-Latn-BR", + "skf-BR": "skf-Latn-BR", + "skf-Latn": "skf-Latn-BR", + "skg": "skg-Latn-MG", + "skg-Latn": "skg-Latn-MG", + "skg-MG": "skg-Latn-MG", + "skh": "skh-Latn-ID", + "skh-ID": "skh-Latn-ID", + "skh-Latn": "skh-Latn-ID", + "ski": "ski-Latn-ID", + "ski-ID": "ski-Latn-ID", + "ski-Latn": "ski-Latn-ID", + "skj": "skj-Deva-NP", + "skj-Deva": "skj-Deva-NP", + "skj-NP": "skj-Deva-NP", + "skm": "skm-Latn-PG", + "skm-Latn": "skm-Latn-PG", + "skm-PG": "skm-Latn-PG", + "skn": "skn-Latn-PH", + "skn-Latn": "skn-Latn-PH", + "skn-PH": "skn-Latn-PH", + "sko": "sko-Latn-ID", + "sko-ID": "sko-Latn-ID", + "sko-Latn": "sko-Latn-ID", + "skp": "skp-Latn-MY", + "skp-Latn": "skp-Latn-MY", + "skp-MY": "skp-Latn-MY", + "skq": "skq-Latn-BF", + "skq-BF": "skq-Latn-BF", + "skq-Latn": "skq-Latn-BF", + "skr": "skr-Arab-PK", + "skr-Arab": "skr-Arab-PK", + "skr-Mult": "skr-Mult-PK", + "skr-PK": "skr-Arab-PK", + "sks": "sks-Latn-PG", + "sks-Latn": "sks-Latn-PG", + "sks-PG": "sks-Latn-PG", + "skt": "skt-Latn-CD", + "skt-CD": "skt-Latn-CD", + "skt-Latn": "skt-Latn-CD", + "sku": "sku-Latn-VU", + "sku-Latn": "sku-Latn-VU", + "sku-VU": "sku-Latn-VU", + "skv": "skv-Latn-ID", + "skv-ID": "skv-Latn-ID", + "skv-Latn": "skv-Latn-ID", + "skw": "skw-Latn-GY", + "skw-GY": "skw-Latn-GY", + "skw-Latn": "skw-Latn-GY", + "skx": "skx-Latn-ID", + "skx-ID": "skx-Latn-ID", + "skx-Latn": "skx-Latn-ID", + "sky": "sky-Latn-SB", + "sky-Latn": "sky-Latn-SB", + "sky-SB": "sky-Latn-SB", + "skz": "skz-Latn-ID", + "skz-ID": "skz-Latn-ID", + "skz-Latn": "skz-Latn-ID", + "sl": "sl-Latn-SI", + "sl-Latn": "sl-Latn-SI", + "sl-SI": "sl-Latn-SI", + "slc": "slc-Latn-CO", + "slc-CO": "slc-Latn-CO", + "slc-Latn": "slc-Latn-CO", + "sld": "sld-Latn-BF", + "sld-BF": "sld-Latn-BF", + "sld-Latn": "sld-Latn-BF", + "slg": "slg-Latn-ID", + "slg-ID": "slg-Latn-ID", + "slg-Latn": "slg-Latn-ID", + "slh": "slh-Latn-US", + "slh-Latn": "slh-Latn-US", + "slh-US": "slh-Latn-US", + "sli": "sli-Latn-PL", + "sli-Latn": "sli-Latn-PL", + "sli-PL": "sli-Latn-PL", + "slj": "slj-Latn-BR", + "slj-BR": "slj-Latn-BR", + "slj-Latn": "slj-Latn-BR", + "sll": "sll-Latn-PG", + "sll-Latn": "sll-Latn-PG", + "sll-PG": "sll-Latn-PG", + "slm": "slm-Latn-PH", + "slm-Latn": "slm-Latn-PH", + "slm-PH": "slm-Latn-PH", + "sln": "sln-Latn-US", + "sln-Latn": "sln-Latn-US", + "sln-US": "sln-Latn-US", + "slp": "slp-Latn-ID", + "slp-ID": "slp-Latn-ID", + "slp-Latn": "slp-Latn-ID", + "slr": "slr-Latn-CN", + "slr-CN": "slr-Latn-CN", + "slr-Latn": "slr-Latn-CN", + "slu": "slu-Latn-ID", + "slu-ID": "slu-Latn-ID", + "slu-Latn": "slu-Latn-ID", + "slw": "slw-Latn-PG", + "slw-Latn": "slw-Latn-PG", + "slw-PG": "slw-Latn-PG", + "slx": "slx-Latn-CD", + "slx-CD": "slx-Latn-CD", + "slx-Latn": "slx-Latn-CD", + "sly": "sly-Latn-ID", + "sly-ID": "sly-Latn-ID", + "sly-Latn": "sly-Latn-ID", + "slz": "slz-Latn-ID", + "slz-ID": "slz-Latn-ID", + "slz-Latn": "slz-Latn-ID", + "sm": "sm-Latn-WS", + "sm-AS": "sm-Latn-AS", + "sm-Latn": "sm-Latn-WS", + "sm-WS": "sm-Latn-WS", + "sma": "sma-Latn-SE", + "sma-Latn": "sma-Latn-SE", + "sma-SE": "sma-Latn-SE", + "smb": "smb-Latn-PG", + "smb-Latn": "smb-Latn-PG", + "smb-PG": "smb-Latn-PG", + "smc": "smc-Latn-PG", + "smc-Latn": "smc-Latn-PG", + "smc-PG": "smc-Latn-PG", + "smf": "smf-Latn-PG", + "smf-Latn": "smf-Latn-PG", + "smf-PG": "smf-Latn-PG", + "smg": "smg-Latn-PG", + "smg-Latn": "smg-Latn-PG", + "smg-PG": "smg-Latn-PG", + "smh": "smh-Yiii-CN", + "smh-CN": "smh-Yiii-CN", + "smh-Yiii": "smh-Yiii-CN", + "smj": "smj-Latn-SE", + "smj-Latn": "smj-Latn-SE", + "smj-SE": "smj-Latn-SE", + "smk": "smk-Latn-PH", + "smk-Latn": "smk-Latn-PH", + "smk-PH": "smk-Latn-PH", + "sml": "sml-Latn-PH", + "sml-Latn": "sml-Latn-PH", + "sml-PH": "sml-Latn-PH", + "smn": "smn-Latn-FI", + "smn-FI": "smn-Latn-FI", + "smn-Latn": "smn-Latn-FI", + "smp": "smp-Samr-IL", + "smp-IL": "smp-Samr-IL", + "smp-Samr": "smp-Samr-IL", + "smq": "smq-Latn-PG", + "smq-Latn": "smq-Latn-PG", + "smq-PG": "smq-Latn-PG", + "smr": "smr-Latn-ID", + "smr-ID": "smr-Latn-ID", + "smr-Latn": "smr-Latn-ID", + "sms": "sms-Latn-FI", + "sms-FI": "sms-Latn-FI", + "sms-Latn": "sms-Latn-FI", + "smt": "smt-Latn-IN", + "smt-IN": "smt-Latn-IN", + "smt-Latn": "smt-Latn-IN", + "smu": "smu-Khmr-KH", + "smu-KH": "smu-Khmr-KH", + "smu-Khmr": "smu-Khmr-KH", + "smw": "smw-Latn-ID", + "smw-ID": "smw-Latn-ID", + "smw-Latn": "smw-Latn-ID", + "smx": "smx-Latn-CD", + "smx-CD": "smx-Latn-CD", + "smx-Latn": "smx-Latn-CD", + "smy": "smy-Arab-IR", + "smy-Arab": "smy-Arab-IR", + "smy-IR": "smy-Arab-IR", + "smz": "smz-Latn-PG", + "smz-Latn": "smz-Latn-PG", + "smz-PG": "smz-Latn-PG", + "sn": "sn-Latn-ZW", + "sn-Latn": "sn-Latn-ZW", + "sn-ZW": "sn-Latn-ZW", + "snc": "snc-Latn-PG", + "snc-Latn": "snc-Latn-PG", + "snc-PG": "snc-Latn-PG", + "sne": "sne-Latn-MY", + "sne-Latn": "sne-Latn-MY", + "sne-MY": "sne-Latn-MY", + "snf": "snf-Latn-SN", + "snf-Latn": "snf-Latn-SN", + "snf-SN": "snf-Latn-SN", + "sng": "sng-Latn-CD", + "sng-CD": "sng-Latn-CD", + "sng-Latn": "sng-Latn-CD", + "sni": "sni-Latn-PE", + "sni-Latn": "sni-Latn-PE", + "sni-PE": "sni-Latn-PE", + "snj": "snj-Latn-CF", + "snj-CF": "snj-Latn-CF", + "snj-Latn": "snj-Latn-CF", + "snk": "snk-Latn-ML", + "snk-Latn": "snk-Latn-ML", + "snk-ML": "snk-Latn-ML", + "snl": "snl-Latn-PH", + "snl-Latn": "snl-Latn-PH", + "snl-PH": "snl-Latn-PH", + "snm": "snm-Latn-UG", + "snm-Latn": "snm-Latn-UG", + "snm-UG": "snm-Latn-UG", + "snn": "snn-Latn-CO", + "snn-CO": "snn-Latn-CO", + "snn-Latn": "snn-Latn-CO", + "sno": "sno-Latn-US", + "sno-Latn": "sno-Latn-US", + "sno-US": "sno-Latn-US", + "snp": "snp-Latn-PG", + "snp-Latn": "snp-Latn-PG", + "snp-PG": "snp-Latn-PG", + "snq": "snq-Latn-GA", + "snq-GA": "snq-Latn-GA", + "snq-Latn": "snq-Latn-GA", + "snr": "snr-Latn-PG", + "snr-Latn": "snr-Latn-PG", + "snr-PG": "snr-Latn-PG", + "sns": "sns-Latn-VU", + "sns-Latn": "sns-Latn-VU", + "sns-VU": "sns-Latn-VU", + "snu": "snu-Latn-ID", + "snu-ID": "snu-Latn-ID", + "snu-Latn": "snu-Latn-ID", + "snv": "snv-Latn-MY", + "snv-Latn": "snv-Latn-MY", + "snv-MY": "snv-Latn-MY", + "snw": "snw-Latn-GH", + "snw-GH": "snw-Latn-GH", + "snw-Latn": "snw-Latn-GH", + "snx": "snx-Latn-PG", + "snx-Latn": "snx-Latn-PG", + "snx-PG": "snx-Latn-PG", + "sny": "sny-Latn-PG", + "sny-Latn": "sny-Latn-PG", + "sny-PG": "sny-Latn-PG", + "snz": "snz-Latn-PG", + "snz-Latn": "snz-Latn-PG", + "snz-PG": "snz-Latn-PG", + "so": "so-Latn-SO", + "so-DJ": "so-Latn-DJ", + "so-Latn": "so-Latn-SO", + "so-Osma": "so-Osma-SO", + "so-SO": "so-Latn-SO", + "soa": "soa-Tavt-TH", + "soa-TH": "soa-Tavt-TH", + "soa-Tavt": "soa-Tavt-TH", + "sob": "sob-Latn-ID", + "sob-ID": "sob-Latn-ID", + "sob-Latn": "sob-Latn-ID", + "soc": "soc-Latn-CD", + "soc-CD": "soc-Latn-CD", + "soc-Latn": "soc-Latn-CD", + "sod": "sod-Latn-CD", + "sod-CD": "sod-Latn-CD", + "sod-Latn": "sod-Latn-CD", + "soe": "soe-Latn-CD", + "soe-CD": "soe-Latn-CD", + "soe-Latn": "soe-Latn-CD", + "sog": "sog-Sogd-UZ", + "sog-Sogd": "sog-Sogd-UZ", + "sog-Sogo": "sog-Sogo-UZ", + "sog-UZ": "sog-Sogd-UZ", + "soi": "soi-Deva-NP", + "soi-Deva": "soi-Deva-NP", + "soi-NP": "soi-Deva-NP", + "sok": "sok-Latn-TD", + "sok-Latn": "sok-Latn-TD", + "sok-TD": "sok-Latn-TD", + "sol": "sol-Latn-PG", + "sol-Latn": "sol-Latn-PG", + "sol-PG": "sol-Latn-PG", + "soo": "soo-Latn-CD", + "soo-CD": "soo-Latn-CD", + "soo-Latn": "soo-Latn-CD", + "sop": "sop-Latn-CD", + "sop-CD": "sop-Latn-CD", + "sop-Latn": "sop-Latn-CD", + "soq": "soq-Latn-PG", + "soq-Latn": "soq-Latn-PG", + "soq-PG": "soq-Latn-PG", + "sor": "sor-Latn-TD", + "sor-Latn": "sor-Latn-TD", + "sor-TD": "sor-Latn-TD", + "sos": "sos-Latn-BF", + "sos-BF": "sos-Latn-BF", + "sos-Latn": "sos-Latn-BF", + "sou": "sou-Thai-TH", + "sou-TH": "sou-Thai-TH", + "sou-Thai": "sou-Thai-TH", + "sov": "sov-Latn-PW", + "sov-Latn": "sov-Latn-PW", + "sov-PW": "sov-Latn-PW", + "sow": "sow-Latn-PG", + "sow-Latn": "sow-Latn-PG", + "sow-PG": "sow-Latn-PG", + "sox": "sox-Latn-CM", + "sox-CM": "sox-Latn-CM", + "sox-Latn": "sox-Latn-CM", + "soy": "soy-Latn-BJ", + "soy-BJ": "soy-Latn-BJ", + "soy-Latn": "soy-Latn-BJ", + "soz": "soz-Latn-TZ", + "soz-Latn": "soz-Latn-TZ", + "soz-TZ": "soz-Latn-TZ", + "spb": "spb-Latn-ID", + "spb-ID": "spb-Latn-ID", + "spb-Latn": "spb-Latn-ID", + "spc": "spc-Latn-VE", + "spc-Latn": "spc-Latn-VE", + "spc-VE": "spc-Latn-VE", + "spd": "spd-Latn-PG", + "spd-Latn": "spd-Latn-PG", + "spd-PG": "spd-Latn-PG", + "spe": "spe-Latn-PG", + "spe-Latn": "spe-Latn-PG", + "spe-PG": "spe-Latn-PG", + "spg": "spg-Latn-MY", + "spg-Latn": "spg-Latn-MY", + "spg-MY": "spg-Latn-MY", + "spi": "spi-Latn-ID", + "spi-ID": "spi-Latn-ID", + "spi-Latn": "spi-Latn-ID", + "spk": "spk-Latn-PG", + "spk-Latn": "spk-Latn-PG", + "spk-PG": "spk-Latn-PG", + "spl": "spl-Latn-PG", + "spl-Latn": "spl-Latn-PG", + "spl-PG": "spl-Latn-PG", + "spm": "spm-Latn-PG", + "spm-Latn": "spm-Latn-PG", + "spm-PG": "spm-Latn-PG", + "spn": "spn-Latn-PY", + "spn-Latn": "spn-Latn-PY", + "spn-PY": "spn-Latn-PY", + "spo": "spo-Latn-US", + "spo-Latn": "spo-Latn-US", + "spo-US": "spo-Latn-US", + "spp": "spp-Latn-ML", + "spp-Latn": "spp-Latn-ML", + "spp-ML": "spp-Latn-ML", + "spq": "spq-Latn-PE", + "spq-Latn": "spq-Latn-PE", + "spq-PE": "spq-Latn-PE", + "spr": "spr-Latn-ID", + "spr-ID": "spr-Latn-ID", + "spr-Latn": "spr-Latn-ID", + "sps": "sps-Latn-PG", + "sps-Latn": "sps-Latn-PG", + "sps-PG": "sps-Latn-PG", + "spt": "spt-Tibt-IN", + "spt-IN": "spt-Tibt-IN", + "spt-Tibt": "spt-Tibt-IN", + "spv": "spv-Orya-IN", + "spv-IN": "spv-Orya-IN", + "spv-Orya": "spv-Orya-IN", + "sq": "sq-Latn-AL", + "sq-AL": "sq-Latn-AL", + "sq-Elba": "sq-Elba-AL", + "sq-Latn": "sq-Latn-AL", + "sq-Latn-MK": "sq-Latn-MK", + "sq-ME": "sq-Latn-ME", + "sq-Todr": "sq-Todr-AL", + "sq-Vith": "sq-Vith-AL", + "sq-XK": "sq-Latn-XK", + "sqa": "sqa-Latn-NG", + "sqa-Latn": "sqa-Latn-NG", + "sqa-NG": "sqa-Latn-NG", + "sqh": "sqh-Latn-NG", + "sqh-Latn": "sqh-Latn-NG", + "sqh-NG": "sqh-Latn-NG", + "sqm": "sqm-Latn-CF", + "sqm-CF": "sqm-Latn-CF", + "sqm-Latn": "sqm-Latn-CF", + "sqo": "sqo-Arab-IR", + "sqo-Arab": "sqo-Arab-IR", + "sqo-IR": "sqo-Arab-IR", + "sqq": "sqq-Laoo-LA", + "sqq-LA": "sqq-Laoo-LA", + "sqq-Laoo": "sqq-Laoo-LA", + "sqt": "sqt-Arab-YE", + "sqt-Arab": "sqt-Arab-YE", + "sqt-YE": "sqt-Arab-YE", + "squ": "squ-Latn-CA", + "squ-CA": "squ-Latn-CA", + "squ-Latn": "squ-Latn-CA", + "sr": "sr-Cyrl-RS", + "sr-Cyrl": "sr-Cyrl-RS", + "sr-Cyrl-BA": "sr-Cyrl-BA", + "sr-Cyrl-ME": "sr-Cyrl-ME", + "sr-Cyrl-RS": "sr-Cyrl-RS", + "sr-Cyrl-XK": "sr-Cyrl-XK", + "sr-Latn": "sr-Latn-ME", + "sr-ME": "sr-Latn-ME", + "sr-RO": "sr-Latn-RO", + "sr-RS": "sr-Cyrl-RS", + "sr-RU": "sr-Latn-RU", + "sr-TR": "sr-Latn-TR", + "sra": "sra-Latn-PG", + "sra-Latn": "sra-Latn-PG", + "sra-PG": "sra-Latn-PG", + "srb": "srb-Sora-IN", + "srb-IN": "srb-Sora-IN", + "srb-Sora": "srb-Sora-IN", + "sre": "sre-Latn-ID", + "sre-ID": "sre-Latn-ID", + "sre-Latn": "sre-Latn-ID", + "srf": "srf-Latn-PG", + "srf-Latn": "srf-Latn-PG", + "srf-PG": "srf-Latn-PG", + "srg": "srg-Latn-PH", + "srg-Latn": "srg-Latn-PH", + "srg-PH": "srg-Latn-PH", + "srh": "srh-Arab-CN", + "srh-Arab": "srh-Arab-CN", + "srh-CN": "srh-Arab-CN", + "sri": "sri-Latn-CO", + "sri-CO": "sri-Latn-CO", + "sri-Latn": "sri-Latn-CO", + "srk": "srk-Latn-MY", + "srk-Latn": "srk-Latn-MY", + "srk-MY": "srk-Latn-MY", + "srl": "srl-Latn-ID", + "srl-ID": "srl-Latn-ID", + "srl-Latn": "srl-Latn-ID", + "srm": "srm-Latn-SR", + "srm-Latn": "srm-Latn-SR", + "srm-SR": "srm-Latn-SR", + "srn": "srn-Latn-SR", + "srn-Latn": "srn-Latn-SR", + "srn-SR": "srn-Latn-SR", + "sro": "sro-Latn-IT", + "sro-IT": "sro-Latn-IT", + "sro-Latn": "sro-Latn-IT", + "srq": "srq-Latn-BO", + "srq-BO": "srq-Latn-BO", + "srq-Latn": "srq-Latn-BO", + "srr": "srr-Latn-SN", + "srr-Latn": "srr-Latn-SN", + "srr-SN": "srr-Latn-SN", + "srs": "srs-Latn-CA", + "srs-CA": "srs-Latn-CA", + "srs-Latn": "srs-Latn-CA", + "srt": "srt-Latn-ID", + "srt-ID": "srt-Latn-ID", + "srt-Latn": "srt-Latn-ID", + "sru": "sru-Latn-BR", + "sru-BR": "sru-Latn-BR", + "sru-Latn": "sru-Latn-BR", + "srv": "srv-Latn-PH", + "srv-Latn": "srv-Latn-PH", + "srv-PH": "srv-Latn-PH", + "srw": "srw-Latn-ID", + "srw-ID": "srw-Latn-ID", + "srw-Latn": "srw-Latn-ID", + "srx": "srx-Deva-IN", + "srx-Deva": "srx-Deva-IN", + "srx-IN": "srx-Deva-IN", + "sry": "sry-Latn-PG", + "sry-Latn": "sry-Latn-PG", + "sry-PG": "sry-Latn-PG", + "srz": "srz-Arab-IR", + "srz-Arab": "srz-Arab-IR", + "srz-IR": "srz-Arab-IR", + "ss": "ss-Latn-ZA", + "ss-Latn": "ss-Latn-ZA", + "ss-SZ": "ss-Latn-SZ", + "ss-ZA": "ss-Latn-ZA", + "ssb": "ssb-Latn-PH", + "ssb-Latn": "ssb-Latn-PH", + "ssb-PH": "ssb-Latn-PH", + "ssc": "ssc-Latn-TZ", + "ssc-Latn": "ssc-Latn-TZ", + "ssc-TZ": "ssc-Latn-TZ", + "ssd": "ssd-Latn-PG", + "ssd-Latn": "ssd-Latn-PG", + "ssd-PG": "ssd-Latn-PG", + "sse": "sse-Latn-PH", + "sse-Latn": "sse-Latn-PH", + "sse-PH": "sse-Latn-PH", + "ssf": "ssf-Latn-TW", + "ssf-Latn": "ssf-Latn-TW", + "ssf-TW": "ssf-Latn-TW", + "ssg": "ssg-Latn-PG", + "ssg-Latn": "ssg-Latn-PG", + "ssg-PG": "ssg-Latn-PG", + "ssh": "ssh-Arab-AE", + "ssh-AE": "ssh-Arab-AE", + "ssh-Arab": "ssh-Arab-AE", + "ssj": "ssj-Latn-PG", + "ssj-Latn": "ssj-Latn-PG", + "ssj-PG": "ssj-Latn-PG", + "ssl": "ssl-Latn-GH", + "ssl-GH": "ssl-Latn-GH", + "ssl-Latn": "ssl-Latn-GH", + "ssm": "ssm-Latn-MY", + "ssm-Latn": "ssm-Latn-MY", + "ssm-MY": "ssm-Latn-MY", + "ssn": "ssn-Latn-KE", + "ssn-KE": "ssn-Latn-KE", + "ssn-Latn": "ssn-Latn-KE", + "sso": "sso-Latn-PG", + "sso-Latn": "sso-Latn-PG", + "sso-PG": "sso-Latn-PG", + "ssq": "ssq-Latn-ID", + "ssq-ID": "ssq-Latn-ID", + "ssq-Latn": "ssq-Latn-ID", + "sss": "sss-Laoo-LA", + "sss-LA": "sss-Laoo-LA", + "sss-Laoo": "sss-Laoo-LA", + "sst": "sst-Latn-PG", + "sst-Latn": "sst-Latn-PG", + "sst-PG": "sst-Latn-PG", + "ssu": "ssu-Latn-PG", + "ssu-Latn": "ssu-Latn-PG", + "ssu-PG": "ssu-Latn-PG", + "ssv": "ssv-Latn-VU", + "ssv-Latn": "ssv-Latn-VU", + "ssv-VU": "ssv-Latn-VU", + "ssx": "ssx-Latn-PG", + "ssx-Latn": "ssx-Latn-PG", + "ssx-PG": "ssx-Latn-PG", + "ssy": "ssy-Latn-ER", + "ssy-ER": "ssy-Latn-ER", + "ssy-Latn": "ssy-Latn-ER", + "ssz": "ssz-Latn-PG", + "ssz-Latn": "ssz-Latn-PG", + "ssz-PG": "ssz-Latn-PG", + "st": "st-Latn-ZA", + "st-LS": "st-Latn-LS", + "st-Latn": "st-Latn-ZA", + "st-ZA": "st-Latn-ZA", + "sta": "sta-Latn-ZM", + "sta-Latn": "sta-Latn-ZM", + "sta-ZM": "sta-Latn-ZM", + "stb": "stb-Latn-PH", + "stb-Latn": "stb-Latn-PH", + "stb-PH": "stb-Latn-PH", + "ste": "ste-Latn-ID", + "ste-ID": "ste-Latn-ID", + "ste-Latn": "ste-Latn-ID", + "stf": "stf-Latn-PG", + "stf-Latn": "stf-Latn-PG", + "stf-PG": "stf-Latn-PG", + "stg": "stg-Latn-VN", + "stg-Latn": "stg-Latn-VN", + "stg-VN": "stg-Latn-VN", + "sth": "sth-Latn-IE", + "sth-IE": "sth-Latn-IE", + "sth-Latn": "sth-Latn-IE", + "sti": "sti-Latn-VN", + "sti-Latn": "sti-Latn-VN", + "sti-VN": "sti-Latn-VN", + "stj": "stj-Latn-BF", + "stj-BF": "stj-Latn-BF", + "stj-Latn": "stj-Latn-BF", + "stk": "stk-Latn-PG", + "stk-Latn": "stk-Latn-PG", + "stk-PG": "stk-Latn-PG", + "stl": "stl-Latn-NL", + "stl-Latn": "stl-Latn-NL", + "stl-NL": "stl-Latn-NL", + "stm": "stm-Latn-PG", + "stm-Latn": "stm-Latn-PG", + "stm-PG": "stm-Latn-PG", + "stn": "stn-Latn-SB", + "stn-Latn": "stn-Latn-SB", + "stn-SB": "stn-Latn-SB", + "sto": "sto-Latn-CA", + "sto-CA": "sto-Latn-CA", + "sto-Latn": "sto-Latn-CA", + "stp": "stp-Latn-MX", + "stp-Latn": "stp-Latn-MX", + "stp-MX": "stp-Latn-MX", + "stq": "stq-Latn-DE", + "stq-DE": "stq-Latn-DE", + "stq-Latn": "stq-Latn-DE", + "str": "str-Latn-CA", + "str-CA": "str-Latn-CA", + "str-Latn": "str-Latn-CA", + "sts": "sts-Arab-AF", + "sts-AF": "sts-Arab-AF", + "sts-Arab": "sts-Arab-AF", + "stt": "stt-Latn-VN", + "stt-Latn": "stt-Latn-VN", + "stt-VN": "stt-Latn-VN", + "stv": "stv-Ethi-ET", + "stv-ET": "stv-Ethi-ET", + "stv-Ethi": "stv-Ethi-ET", + "stw": "stw-Latn-FM", + "stw-FM": "stw-Latn-FM", + "stw-Latn": "stw-Latn-FM", + "sty": "sty-Cyrl-RU", + "sty-Cyrl": "sty-Cyrl-RU", + "sty-RU": "sty-Cyrl-RU", + "su": "su-Latn-ID", + "su-ID": "su-Latn-ID", + "su-Latn": "su-Latn-ID", + "su-Sund": "su-Sund-ID", + "sua": "sua-Latn-PG", + "sua-Latn": "sua-Latn-PG", + "sua-PG": "sua-Latn-PG", + "sub": "sub-Latn-CD", + "sub-CD": "sub-Latn-CD", + "sub-Latn": "sub-Latn-CD", + "suc": "suc-Latn-PH", + "suc-Latn": "suc-Latn-PH", + "suc-PH": "suc-Latn-PH", + "sue": "sue-Latn-PG", + "sue-Latn": "sue-Latn-PG", + "sue-PG": "sue-Latn-PG", + "sug": "sug-Latn-PG", + "sug-Latn": "sug-Latn-PG", + "sug-PG": "sug-Latn-PG", + "sui": "sui-Latn-PG", + "sui-Latn": "sui-Latn-PG", + "sui-PG": "sui-Latn-PG", + "suj": "suj-Latn-TZ", + "suj-Latn": "suj-Latn-TZ", + "suj-TZ": "suj-Latn-TZ", + "suk": "suk-Latn-TZ", + "suk-Latn": "suk-Latn-TZ", + "suk-TZ": "suk-Latn-TZ", + "suo": "suo-Latn-PG", + "suo-Latn": "suo-Latn-PG", + "suo-PG": "suo-Latn-PG", + "suq": "suq-Latn-ET", + "suq-ET": "suq-Latn-ET", + "suq-Latn": "suq-Latn-ET", + "sur": "sur-Latn-NG", + "sur-Latn": "sur-Latn-NG", + "sur-NG": "sur-Latn-NG", + "sus": "sus-Latn-GN", + "sus-GN": "sus-Latn-GN", + "sus-Latn": "sus-Latn-GN", + "sut": "sut-Latn-NI", + "sut-Latn": "sut-Latn-NI", + "sut-NI": "sut-Latn-NI", + "suv": "suv-Latn-IN", + "suv-IN": "suv-Latn-IN", + "suv-Latn": "suv-Latn-IN", + "suw": "suw-Latn-TZ", + "suw-Latn": "suw-Latn-TZ", + "suw-TZ": "suw-Latn-TZ", + "suy": "suy-Latn-BR", + "suy-BR": "suy-Latn-BR", + "suy-Latn": "suy-Latn-BR", + "suz": "suz-Sunu-NP", + "suz-NP": "suz-Sunu-NP", + "suz-Sunu": "suz-Sunu-NP", + "sv": "sv-Latn-SE", + "sv-AX": "sv-Latn-AX", + "sv-FI": "sv-Latn-FI", + "sv-Latn": "sv-Latn-SE", + "sv-SE": "sv-Latn-SE", + "sva": "sva-Geor-GE", + "sva-GE": "sva-Geor-GE", + "sva-Geor": "sva-Geor-GE", + "svb": "svb-Latn-PG", + "svb-Latn": "svb-Latn-PG", + "svb-PG": "svb-Latn-PG", + "svc": "svc-Latn-VC", + "svc-Latn": "svc-Latn-VC", + "svc-VC": "svc-Latn-VC", + "sve": "sve-Latn-ID", + "sve-ID": "sve-Latn-ID", + "sve-Latn": "sve-Latn-ID", + "svm": "svm-Latn-IT", + "svm-IT": "svm-Latn-IT", + "svm-Latn": "svm-Latn-IT", + "svs": "svs-Latn-SB", + "svs-Latn": "svs-Latn-SB", + "svs-SB": "svs-Latn-SB", + "sw": "sw-Latn-TZ", + "sw-CD": "sw-Latn-CD", + "sw-KE": "sw-Latn-KE", + "sw-Latn": "sw-Latn-TZ", + "sw-TZ": "sw-Latn-TZ", + "sw-UG": "sw-Latn-UG", + "swb": "swb-Arab-YT", + "swb-Arab": "swb-Arab-YT", + "swb-Arab-YT": "swb-Arab-YT", + "swb-YT": "swb-Arab-YT", + "swf": "swf-Latn-CD", + "swf-CD": "swf-Latn-CD", + "swf-Latn": "swf-Latn-CD", + "swg": "swg-Latn-DE", + "swg-DE": "swg-Latn-DE", + "swg-Latn": "swg-Latn-DE", + "swi": "swi-Hani-CN", + "swi-CN": "swi-Hani-CN", + "swi-Hani": "swi-Hani-CN", + "swj": "swj-Latn-GA", + "swj-GA": "swj-Latn-GA", + "swj-Latn": "swj-Latn-GA", + "swk": "swk-Latn-MW", + "swk-Latn": "swk-Latn-MW", + "swk-MW": "swk-Latn-MW", + "swm": "swm-Latn-PG", + "swm-Latn": "swm-Latn-PG", + "swm-PG": "swm-Latn-PG", + "swo": "swo-Latn-BR", + "swo-BR": "swo-Latn-BR", + "swo-Latn": "swo-Latn-BR", + "swp": "swp-Latn-PG", + "swp-Latn": "swp-Latn-PG", + "swp-PG": "swp-Latn-PG", + "swq": "swq-Latn-CM", + "swq-CM": "swq-Latn-CM", + "swq-Latn": "swq-Latn-CM", + "swr": "swr-Latn-ID", + "swr-ID": "swr-Latn-ID", + "swr-Latn": "swr-Latn-ID", + "sws": "sws-Latn-ID", + "sws-ID": "sws-Latn-ID", + "sws-Latn": "sws-Latn-ID", + "swt": "swt-Latn-ID", + "swt-ID": "swt-Latn-ID", + "swt-Latn": "swt-Latn-ID", + "swu": "swu-Latn-ID", + "swu-ID": "swu-Latn-ID", + "swu-Latn": "swu-Latn-ID", + "swv": "swv-Deva-IN", + "swv-Deva": "swv-Deva-IN", + "swv-IN": "swv-Deva-IN", + "sww": "sww-Latn-VU", + "sww-Latn": "sww-Latn-VU", + "sww-VU": "sww-Latn-VU", + "swx": "swx-Latn-BR", + "swx-BR": "swx-Latn-BR", + "swx-Latn": "swx-Latn-BR", + "swy": "swy-Latn-TD", + "swy-Latn": "swy-Latn-TD", + "swy-TD": "swy-Latn-TD", + "sxb": "sxb-Latn-KE", + "sxb-KE": "sxb-Latn-KE", + "sxb-Latn": "sxb-Latn-KE", + "sxe": "sxe-Latn-GA", + "sxe-GA": "sxe-Latn-GA", + "sxe-Latn": "sxe-Latn-GA", + "sxn": "sxn-Latn-ID", + "sxn-ID": "sxn-Latn-ID", + "sxn-Latn": "sxn-Latn-ID", + "sxr": "sxr-Latn-TW", + "sxr-Latn": "sxr-Latn-TW", + "sxr-TW": "sxr-Latn-TW", + "sxs": "sxs-Latn-NG", + "sxs-Latn": "sxs-Latn-NG", + "sxs-NG": "sxs-Latn-NG", + "sxu": "sxu-Runr-DE", + "sxu-DE": "sxu-Runr-DE", + "sxu-Runr": "sxu-Runr-DE", + "sxw": "sxw-Latn-BJ", + "sxw-BJ": "sxw-Latn-BJ", + "sxw-Latn": "sxw-Latn-BJ", + "sya": "sya-Latn-ID", + "sya-ID": "sya-Latn-ID", + "sya-Latn": "sya-Latn-ID", + "syb": "syb-Latn-PH", + "syb-Latn": "syb-Latn-PH", + "syb-PH": "syb-Latn-PH", + "syc": "syc-Syrc-TR", + "syc-Syrc": "syc-Syrc-TR", + "syc-TR": "syc-Syrc-TR", + "syi": "syi-Latn-GA", + "syi-GA": "syi-Latn-GA", + "syi-Latn": "syi-Latn-GA", + "syk": "syk-Latn-NG", + "syk-Latn": "syk-Latn-NG", + "syk-NG": "syk-Latn-NG", + "syl": "syl-Beng-BD", + "syl-BD": "syl-Beng-BD", + "syl-Beng": "syl-Beng-BD", + "syl-Sylo": "syl-Sylo-BD", + "sym": "sym-Latn-BF", + "sym-BF": "sym-Latn-BF", + "sym-Latn": "sym-Latn-BF", + "syn": "syn-Syrc-IR", + "syn-IR": "syn-Syrc-IR", + "syn-Syrc": "syn-Syrc-IR", + "syo": "syo-Latn-KH", + "syo-KH": "syo-Latn-KH", + "syo-Latn": "syo-Latn-KH", + "syr": "syr-Syrc-IQ", + "syr-IQ": "syr-Syrc-IQ", + "syr-Syrc": "syr-Syrc-IQ", + "sys": "sys-Latn-TD", + "sys-Latn": "sys-Latn-TD", + "sys-TD": "sys-Latn-TD", + "syw": "syw-Deva-NP", + "syw-Deva": "syw-Deva-NP", + "syw-NP": "syw-Deva-NP", + "syx": "syx-Latn-GA", + "syx-GA": "syx-Latn-GA", + "syx-Latn": "syx-Latn-GA", + "sza": "sza-Latn-MY", + "sza-Latn": "sza-Latn-MY", + "sza-MY": "sza-Latn-MY", + "szb": "szb-Latn-ID", + "szb-ID": "szb-Latn-ID", + "szb-Latn": "szb-Latn-ID", + "szc": "szc-Latn-MY", + "szc-Latn": "szc-Latn-MY", + "szc-MY": "szc-Latn-MY", + "szg": "szg-Latn-CD", + "szg-CD": "szg-Latn-CD", + "szg-Latn": "szg-Latn-CD", + "szl": "szl-Latn-PL", + "szl-Latn": "szl-Latn-PL", + "szl-PL": "szl-Latn-PL", + "szn": "szn-Latn-ID", + "szn-ID": "szn-Latn-ID", + "szn-Latn": "szn-Latn-ID", + "szp": "szp-Latn-ID", + "szp-ID": "szp-Latn-ID", + "szp-Latn": "szp-Latn-ID", + "szv": "szv-Latn-CM", + "szv-CM": "szv-Latn-CM", + "szv-Latn": "szv-Latn-CM", + "szw": "szw-Latn-ID", + "szw-ID": "szw-Latn-ID", + "szw-Latn": "szw-Latn-ID", + "szy": "szy-Latn-TW", + "szy-Latn": "szy-Latn-TW", + "szy-TW": "szy-Latn-TW", + "ta": "ta-Taml-IN", + "ta-IN": "ta-Taml-IN", + "ta-Taml": "ta-Taml-IN", + "ta-XX": "ta-Taml-XX", + "taa": "taa-Latn-US", + "taa-Latn": "taa-Latn-US", + "taa-US": "taa-Latn-US", + "tab": "tab-Cyrl-RU", + "tab-Cyrl": "tab-Cyrl-RU", + "tab-RU": "tab-Cyrl-RU", + "tac": "tac-Latn-MX", + "tac-Latn": "tac-Latn-MX", + "tac-MX": "tac-Latn-MX", + "tad": "tad-Latn-ID", + "tad-ID": "tad-Latn-ID", + "tad-Latn": "tad-Latn-ID", + "tae": "tae-Latn-BR", + "tae-BR": "tae-Latn-BR", + "tae-Latn": "tae-Latn-BR", + "taf": "taf-Latn-BR", + "taf-BR": "taf-Latn-BR", + "taf-Latn": "taf-Latn-BR", + "tag": "tag-Latn-SD", + "tag-Latn": "tag-Latn-SD", + "tag-SD": "tag-Latn-SD", + "taj": "taj-Deva-NP", + "taj-Deva": "taj-Deva-NP", + "taj-NP": "taj-Deva-NP", + "tak": "tak-Latn-NG", + "tak-Latn": "tak-Latn-NG", + "tak-NG": "tak-Latn-NG", + "tal": "tal-Latn-NG", + "tal-Latn": "tal-Latn-NG", + "tal-NG": "tal-Latn-NG", + "tan": "tan-Latn-NG", + "tan-Latn": "tan-Latn-NG", + "tan-NG": "tan-Latn-NG", + "tao": "tao-Latn-TW", + "tao-Latn": "tao-Latn-TW", + "tao-TW": "tao-Latn-TW", + "tap": "tap-Latn-CD", + "tap-CD": "tap-Latn-CD", + "tap-Latn": "tap-Latn-CD", + "taq": "taq-Latn-ML", + "taq-Latn": "taq-Latn-ML", + "taq-ML": "taq-Latn-ML", + "tar": "tar-Latn-MX", + "tar-Latn": "tar-Latn-MX", + "tar-MX": "tar-Latn-MX", + "tas": "tas-Latn-VN", + "tas-Latn": "tas-Latn-VN", + "tas-VN": "tas-Latn-VN", + "tau": "tau-Latn-US", + "tau-Latn": "tau-Latn-US", + "tau-US": "tau-Latn-US", + "tav": "tav-Latn-CO", + "tav-CO": "tav-Latn-CO", + "tav-Latn": "tav-Latn-CO", + "taw": "taw-Latn-PG", + "taw-Latn": "taw-Latn-PG", + "taw-PG": "taw-Latn-PG", + "tax": "tax-Latn-TD", + "tax-Latn": "tax-Latn-TD", + "tax-TD": "tax-Latn-TD", + "tay": "tay-Latn-TW", + "tay-Latn": "tay-Latn-TW", + "tay-TW": "tay-Latn-TW", + "taz": "taz-Latn-SD", + "taz-Latn": "taz-Latn-SD", + "taz-SD": "taz-Latn-SD", + "tba": "tba-Latn-BR", + "tba-BR": "tba-Latn-BR", + "tba-Latn": "tba-Latn-BR", + "tbc": "tbc-Latn-PG", + "tbc-Latn": "tbc-Latn-PG", + "tbc-PG": "tbc-Latn-PG", + "tbd": "tbd-Latn-PG", + "tbd-Latn": "tbd-Latn-PG", + "tbd-PG": "tbd-Latn-PG", + "tbe": "tbe-Latn-SB", + "tbe-Latn": "tbe-Latn-SB", + "tbe-SB": "tbe-Latn-SB", + "tbf": "tbf-Latn-PG", + "tbf-Latn": "tbf-Latn-PG", + "tbf-PG": "tbf-Latn-PG", + "tbg": "tbg-Latn-PG", + "tbg-Latn": "tbg-Latn-PG", + "tbg-PG": "tbg-Latn-PG", + "tbh": "tbh-Latn-AU", + "tbh-AU": "tbh-Latn-AU", + "tbh-Latn": "tbh-Latn-AU", + "tbi": "tbi-Latn-SD", + "tbi-Latn": "tbi-Latn-SD", + "tbi-SD": "tbi-Latn-SD", + "tbj": "tbj-Latn-PG", + "tbj-Latn": "tbj-Latn-PG", + "tbj-PG": "tbj-Latn-PG", + "tbk": "tbk-Tagb-PH", + "tbk-PH": "tbk-Tagb-PH", + "tbk-Tagb": "tbk-Tagb-PH", + "tbl": "tbl-Latn-PH", + "tbl-Latn": "tbl-Latn-PH", + "tbl-PH": "tbl-Latn-PH", + "tbm": "tbm-Latn-CD", + "tbm-CD": "tbm-Latn-CD", + "tbm-Latn": "tbm-Latn-CD", + "tbn": "tbn-Latn-CO", + "tbn-CO": "tbn-Latn-CO", + "tbn-Latn": "tbn-Latn-CO", + "tbo": "tbo-Latn-PG", + "tbo-Latn": "tbo-Latn-PG", + "tbo-PG": "tbo-Latn-PG", + "tbp": "tbp-Latn-ID", + "tbp-ID": "tbp-Latn-ID", + "tbp-Latn": "tbp-Latn-ID", + "tbs": "tbs-Latn-PG", + "tbs-Latn": "tbs-Latn-PG", + "tbs-PG": "tbs-Latn-PG", + "tbt": "tbt-Latn-CD", + "tbt-CD": "tbt-Latn-CD", + "tbt-Latn": "tbt-Latn-CD", + "tbu": "tbu-Latn-MX", + "tbu-Latn": "tbu-Latn-MX", + "tbu-MX": "tbu-Latn-MX", + "tbv": "tbv-Latn-PG", + "tbv-Latn": "tbv-Latn-PG", + "tbv-PG": "tbv-Latn-PG", + "tbw": "tbw-Latn-PH", + "tbw-Latn": "tbw-Latn-PH", + "tbw-PH": "tbw-Latn-PH", + "tbw-Tagb": "tbw-Tagb-PH", + "tbx": "tbx-Latn-PG", + "tbx-Latn": "tbx-Latn-PG", + "tbx-PG": "tbx-Latn-PG", + "tby": "tby-Latn-ID", + "tby-ID": "tby-Latn-ID", + "tby-Latn": "tby-Latn-ID", + "tbz": "tbz-Latn-BJ", + "tbz-BJ": "tbz-Latn-BJ", + "tbz-Latn": "tbz-Latn-BJ", + "tca": "tca-Latn-BR", + "tca-BR": "tca-Latn-BR", + "tca-Latn": "tca-Latn-BR", + "tcb": "tcb-Latn-US", + "tcb-Latn": "tcb-Latn-US", + "tcb-US": "tcb-Latn-US", + "tcc": "tcc-Latn-TZ", + "tcc-Latn": "tcc-Latn-TZ", + "tcc-TZ": "tcc-Latn-TZ", + "tcd": "tcd-Latn-GH", + "tcd-GH": "tcd-Latn-GH", + "tcd-Latn": "tcd-Latn-GH", + "tce": "tce-Latn-CA", + "tce-CA": "tce-Latn-CA", + "tce-Latn": "tce-Latn-CA", + "tcf": "tcf-Latn-MX", + "tcf-Latn": "tcf-Latn-MX", + "tcf-MX": "tcf-Latn-MX", + "tcg": "tcg-Latn-ID", + "tcg-ID": "tcg-Latn-ID", + "tcg-Latn": "tcg-Latn-ID", + "tch": "tch-Latn-TC", + "tch-Latn": "tch-Latn-TC", + "tch-TC": "tch-Latn-TC", + "tci": "tci-Latn-PG", + "tci-Latn": "tci-Latn-PG", + "tci-PG": "tci-Latn-PG", + "tck": "tck-Latn-GA", + "tck-GA": "tck-Latn-GA", + "tck-Latn": "tck-Latn-GA", + "tcm": "tcm-Latn-ID", + "tcm-ID": "tcm-Latn-ID", + "tcm-Latn": "tcm-Latn-ID", + "tcn": "tcn-Tibt-NP", + "tcn-NP": "tcn-Tibt-NP", + "tcn-Tibt": "tcn-Tibt-NP", + "tco": "tco-Mymr-MM", + "tco-MM": "tco-Mymr-MM", + "tco-Mymr": "tco-Mymr-MM", + "tcp": "tcp-Latn-MM", + "tcp-Latn": "tcp-Latn-MM", + "tcp-MM": "tcp-Latn-MM", + "tcq": "tcq-Latn-ID", + "tcq-ID": "tcq-Latn-ID", + "tcq-Latn": "tcq-Latn-ID", + "tcs": "tcs-Latn-AU", + "tcs-AU": "tcs-Latn-AU", + "tcs-Latn": "tcs-Latn-AU", + "tcu": "tcu-Latn-MX", + "tcu-Latn": "tcu-Latn-MX", + "tcu-MX": "tcu-Latn-MX", + "tcw": "tcw-Latn-MX", + "tcw-Latn": "tcw-Latn-MX", + "tcw-MX": "tcw-Latn-MX", + "tcx": "tcx-Taml-IN", + "tcx-IN": "tcx-Taml-IN", + "tcx-Taml": "tcx-Taml-IN", + "tcy": "tcy-Knda-IN", + "tcy-IN": "tcy-Knda-IN", + "tcy-Knda": "tcy-Knda-IN", + "tcz": "tcz-Latn-IN", + "tcz-IN": "tcz-Latn-IN", + "tcz-Latn": "tcz-Latn-IN", + "tda": "tda-Tfng-NE", + "tda-NE": "tda-Tfng-NE", + "tda-Tfng": "tda-Tfng-NE", + "tdb": "tdb-Deva-IN", + "tdb-Deva": "tdb-Deva-IN", + "tdb-IN": "tdb-Deva-IN", + "tdc": "tdc-Latn-CO", + "tdc-CO": "tdc-Latn-CO", + "tdc-Latn": "tdc-Latn-CO", + "tdd": "tdd-Tale-CN", + "tdd-CN": "tdd-Tale-CN", + "tdd-Tale": "tdd-Tale-CN", + "tde": "tde-Latn-ML", + "tde-Latn": "tde-Latn-ML", + "tde-ML": "tde-Latn-ML", + "tdg": "tdg-Deva-NP", + "tdg-Deva": "tdg-Deva-NP", + "tdg-NP": "tdg-Deva-NP", + "tdh": "tdh-Deva-NP", + "tdh-Deva": "tdh-Deva-NP", + "tdh-NP": "tdh-Deva-NP", + "tdi": "tdi-Latn-ID", + "tdi-ID": "tdi-Latn-ID", + "tdi-Latn": "tdi-Latn-ID", + "tdj": "tdj-Latn-ID", + "tdj-ID": "tdj-Latn-ID", + "tdj-Latn": "tdj-Latn-ID", + "tdk": "tdk-Latn-NG", + "tdk-Latn": "tdk-Latn-NG", + "tdk-NG": "tdk-Latn-NG", + "tdl": "tdl-Latn-NG", + "tdl-Latn": "tdl-Latn-NG", + "tdl-NG": "tdl-Latn-NG", + "tdm": "tdm-Latn-GY", + "tdm-GY": "tdm-Latn-GY", + "tdm-Latn": "tdm-Latn-GY", + "tdn": "tdn-Latn-ID", + "tdn-ID": "tdn-Latn-ID", + "tdn-Latn": "tdn-Latn-ID", + "tdo": "tdo-Latn-NG", + "tdo-Latn": "tdo-Latn-NG", + "tdo-NG": "tdo-Latn-NG", + "tdq": "tdq-Latn-NG", + "tdq-Latn": "tdq-Latn-NG", + "tdq-NG": "tdq-Latn-NG", + "tdr": "tdr-Latn-VN", + "tdr-Latn": "tdr-Latn-VN", + "tdr-VN": "tdr-Latn-VN", + "tds": "tds-Latn-ID", + "tds-ID": "tds-Latn-ID", + "tds-Latn": "tds-Latn-ID", + "tdt": "tdt-Latn-TL", + "tdt-Latn": "tdt-Latn-TL", + "tdt-TL": "tdt-Latn-TL", + "tdv": "tdv-Latn-NG", + "tdv-Latn": "tdv-Latn-NG", + "tdv-NG": "tdv-Latn-NG", + "tdx": "tdx-Latn-MG", + "tdx-Latn": "tdx-Latn-MG", + "tdx-MG": "tdx-Latn-MG", + "tdy": "tdy-Latn-PH", + "tdy-Latn": "tdy-Latn-PH", + "tdy-PH": "tdy-Latn-PH", + "te": "te-Telu-IN", + "te-IN": "te-Telu-IN", + "te-Telu": "te-Telu-IN", + "te-XX": "te-Telu-XX", + "tea": "tea-Latn-MY", + "tea-Latn": "tea-Latn-MY", + "tea-MY": "tea-Latn-MY", + "teb": "teb-Latn-EC", + "teb-EC": "teb-Latn-EC", + "teb-Latn": "teb-Latn-EC", + "tec": "tec-Latn-KE", + "tec-KE": "tec-Latn-KE", + "tec-Latn": "tec-Latn-KE", + "ted": "ted-Latn-CI", + "ted-CI": "ted-Latn-CI", + "ted-Latn": "ted-Latn-CI", + "tee": "tee-Latn-MX", + "tee-Latn": "tee-Latn-MX", + "tee-MX": "tee-Latn-MX", + "teg": "teg-Latn-GA", + "teg-GA": "teg-Latn-GA", + "teg-Latn": "teg-Latn-GA", + "teh": "teh-Latn-AR", + "teh-AR": "teh-Latn-AR", + "teh-Latn": "teh-Latn-AR", + "tei": "tei-Latn-PG", + "tei-Latn": "tei-Latn-PG", + "tei-PG": "tei-Latn-PG", + "tek": "tek-Latn-CD", + "tek-CD": "tek-Latn-CD", + "tek-Latn": "tek-Latn-CD", + "tem": "tem-Latn-SL", + "tem-Latn": "tem-Latn-SL", + "tem-SL": "tem-Latn-SL", + "ten": "ten-Latn-CO", + "ten-CO": "ten-Latn-CO", + "ten-Latn": "ten-Latn-CO", + "teo": "teo-Latn-UG", + "teo-Latn": "teo-Latn-UG", + "teo-UG": "teo-Latn-UG", + "tep": "tep-Latn-MX", + "tep-Latn": "tep-Latn-MX", + "tep-MX": "tep-Latn-MX", + "teq": "teq-Latn-SD", + "teq-Latn": "teq-Latn-SD", + "teq-SD": "teq-Latn-SD", + "ter": "ter-Latn-BR", + "ter-BR": "ter-Latn-BR", + "ter-Latn": "ter-Latn-BR", + "tes": "tes-Java-ID", + "tes-ID": "tes-Java-ID", + "tes-Java": "tes-Java-ID", + "tet": "tet-Latn-TL", + "tet-Latn": "tet-Latn-TL", + "tet-TL": "tet-Latn-TL", + "teu": "teu-Latn-UG", + "teu-Latn": "teu-Latn-UG", + "teu-UG": "teu-Latn-UG", + "tev": "tev-Latn-ID", + "tev-ID": "tev-Latn-ID", + "tev-Latn": "tev-Latn-ID", + "tew": "tew-Latn-US", + "tew-Latn": "tew-Latn-US", + "tew-US": "tew-Latn-US", + "tex": "tex-Latn-SS", + "tex-Latn": "tex-Latn-SS", + "tex-SS": "tex-Latn-SS", + "tey": "tey-Latn-SD", + "tey-Latn": "tey-Latn-SD", + "tey-SD": "tey-Latn-SD", + "tez": "tez-Latn-NE", + "tez-Latn": "tez-Latn-NE", + "tez-NE": "tez-Latn-NE", + "tfi": "tfi-Latn-BJ", + "tfi-BJ": "tfi-Latn-BJ", + "tfi-Latn": "tfi-Latn-BJ", + "tfn": "tfn-Latn-US", + "tfn-Latn": "tfn-Latn-US", + "tfn-US": "tfn-Latn-US", + "tfo": "tfo-Latn-ID", + "tfo-ID": "tfo-Latn-ID", + "tfo-Latn": "tfo-Latn-ID", + "tfr": "tfr-Latn-PA", + "tfr-Latn": "tfr-Latn-PA", + "tfr-PA": "tfr-Latn-PA", + "tft": "tft-Latn-ID", + "tft-ID": "tft-Latn-ID", + "tft-Latn": "tft-Latn-ID", + "tg": "tg-Cyrl-TJ", + "tg-Arab": "tg-Arab-PK", + "tg-Cyrl": "tg-Cyrl-TJ", + "tg-Cyrl-TJ": "tg-Cyrl-TJ", + "tg-PK": "tg-Arab-PK", + "tg-TJ": "tg-Cyrl-TJ", + "tga": "tga-Latn-KE", + "tga-KE": "tga-Latn-KE", + "tga-Latn": "tga-Latn-KE", + "tgb": "tgb-Latn-MY", + "tgb-Latn": "tgb-Latn-MY", + "tgb-MY": "tgb-Latn-MY", + "tgc": "tgc-Latn-PG", + "tgc-Latn": "tgc-Latn-PG", + "tgc-PG": "tgc-Latn-PG", + "tgd": "tgd-Latn-NG", + "tgd-Latn": "tgd-Latn-NG", + "tgd-NG": "tgd-Latn-NG", + "tge": "tge-Deva-NP", + "tge-Deva": "tge-Deva-NP", + "tge-NP": "tge-Deva-NP", + "tgf": "tgf-Tibt-BT", + "tgf-BT": "tgf-Tibt-BT", + "tgf-Tibt": "tgf-Tibt-BT", + "tgh": "tgh-Latn-TT", + "tgh-Latn": "tgh-Latn-TT", + "tgh-TT": "tgh-Latn-TT", + "tgi": "tgi-Latn-PG", + "tgi-Latn": "tgi-Latn-PG", + "tgi-PG": "tgi-Latn-PG", + "tgj": "tgj-Latn-IN", + "tgj-IN": "tgj-Latn-IN", + "tgj-Latn": "tgj-Latn-IN", + "tgn": "tgn-Latn-PH", + "tgn-Latn": "tgn-Latn-PH", + "tgn-PH": "tgn-Latn-PH", + "tgo": "tgo-Latn-PG", + "tgo-Latn": "tgo-Latn-PG", + "tgo-PG": "tgo-Latn-PG", + "tgp": "tgp-Latn-VU", + "tgp-Latn": "tgp-Latn-VU", + "tgp-VU": "tgp-Latn-VU", + "tgq": "tgq-Latn-MY", + "tgq-Latn": "tgq-Latn-MY", + "tgq-MY": "tgq-Latn-MY", + "tgs": "tgs-Latn-VU", + "tgs-Latn": "tgs-Latn-VU", + "tgs-VU": "tgs-Latn-VU", + "tgt": "tgt-Latn-PH", + "tgt-Latn": "tgt-Latn-PH", + "tgt-PH": "tgt-Latn-PH", + "tgu": "tgu-Latn-PG", + "tgu-Latn": "tgu-Latn-PG", + "tgu-PG": "tgu-Latn-PG", + "tgv": "tgv-Latn-BR", + "tgv-BR": "tgv-Latn-BR", + "tgv-Latn": "tgv-Latn-BR", + "tgw": "tgw-Latn-CI", + "tgw-CI": "tgw-Latn-CI", + "tgw-Latn": "tgw-Latn-CI", + "tgx": "tgx-Latn-CA", + "tgx-CA": "tgx-Latn-CA", + "tgx-Latn": "tgx-Latn-CA", + "tgy": "tgy-Latn-SS", + "tgy-Latn": "tgy-Latn-SS", + "tgy-SS": "tgy-Latn-SS", + "tgz": "tgz-Latn-AU", + "tgz-AU": "tgz-Latn-AU", + "tgz-Latn": "tgz-Latn-AU", + "th": "th-Thai-TH", + "th-TH": "th-Thai-TH", + "th-Thai": "th-Thai-TH", + "thd": "thd-Latn-AU", + "thd-AU": "thd-Latn-AU", + "thd-Latn": "thd-Latn-AU", + "the": "the-Deva-NP", + "the-Deva": "the-Deva-NP", + "the-NP": "the-Deva-NP", + "thf": "thf-Deva-NP", + "thf-Deva": "thf-Deva-NP", + "thf-NP": "thf-Deva-NP", + "thh": "thh-Latn-MX", + "thh-Latn": "thh-Latn-MX", + "thh-MX": "thh-Latn-MX", + "thi": "thi-Tale-LA", + "thi-LA": "thi-Tale-LA", + "thi-Tale": "thi-Tale-LA", + "thk": "thk-Latn-KE", + "thk-KE": "thk-Latn-KE", + "thk-Latn": "thk-Latn-KE", + "thl": "thl-Deva-NP", + "thl-Deva": "thl-Deva-NP", + "thl-NP": "thl-Deva-NP", + "thm": "thm-Thai-TH", + "thm-TH": "thm-Thai-TH", + "thm-Thai": "thm-Thai-TH", + "thp": "thp-Latn-CA", + "thp-CA": "thp-Latn-CA", + "thp-Latn": "thp-Latn-CA", + "thq": "thq-Deva-NP", + "thq-Deva": "thq-Deva-NP", + "thq-NP": "thq-Deva-NP", + "thr": "thr-Deva-NP", + "thr-Deva": "thr-Deva-NP", + "thr-NP": "thr-Deva-NP", + "ths": "ths-Deva-NP", + "ths-Deva": "ths-Deva-NP", + "ths-NP": "ths-Deva-NP", + "tht": "tht-Latn-CA", + "tht-CA": "tht-Latn-CA", + "tht-Latn": "tht-Latn-CA", + "thu": "thu-Latn-SS", + "thu-Latn": "thu-Latn-SS", + "thu-SS": "thu-Latn-SS", + "thv": "thv-Latn-DZ", + "thv-DZ": "thv-Latn-DZ", + "thv-Latn": "thv-Latn-DZ", + "thy": "thy-Latn-NG", + "thy-Latn": "thy-Latn-NG", + "thy-NG": "thy-Latn-NG", + "thz": "thz-Latn-NE", + "thz-Latn": "thz-Latn-NE", + "thz-NE": "thz-Latn-NE", + "ti": "ti-Ethi-ET", + "ti-ER": "ti-Ethi-ER", + "ti-ET": "ti-Ethi-ET", + "ti-Ethi": "ti-Ethi-ET", + "ti-Ethi-ER": "ti-Ethi-ER", + "tic": "tic-Latn-SD", + "tic-Latn": "tic-Latn-SD", + "tic-SD": "tic-Latn-SD", + "tif": "tif-Latn-PG", + "tif-Latn": "tif-Latn-PG", + "tif-PG": "tif-Latn-PG", + "tig": "tig-Ethi-ER", + "tig-ER": "tig-Ethi-ER", + "tig-Ethi": "tig-Ethi-ER", + "tih": "tih-Latn-MY", + "tih-Latn": "tih-Latn-MY", + "tih-MY": "tih-Latn-MY", + "tii": "tii-Latn-CD", + "tii-CD": "tii-Latn-CD", + "tii-Latn": "tii-Latn-CD", + "tij": "tij-Deva-NP", + "tij-Deva": "tij-Deva-NP", + "tij-NP": "tij-Deva-NP", + "tik": "tik-Latn-CM", + "tik-CM": "tik-Latn-CM", + "tik-Latn": "tik-Latn-CM", + "til": "til-Latn-US", + "til-Latn": "til-Latn-US", + "til-US": "til-Latn-US", + "tim": "tim-Latn-PG", + "tim-Latn": "tim-Latn-PG", + "tim-PG": "tim-Latn-PG", + "tin": "tin-Cyrl-RU", + "tin-Cyrl": "tin-Cyrl-RU", + "tin-RU": "tin-Cyrl-RU", + "tio": "tio-Latn-PG", + "tio-Latn": "tio-Latn-PG", + "tio-PG": "tio-Latn-PG", + "tip": "tip-Latn-ID", + "tip-ID": "tip-Latn-ID", + "tip-Latn": "tip-Latn-ID", + "tiq": "tiq-Latn-BF", + "tiq-BF": "tiq-Latn-BF", + "tiq-Latn": "tiq-Latn-BF", + "tis": "tis-Latn-PH", + "tis-Latn": "tis-Latn-PH", + "tis-PH": "tis-Latn-PH", + "tit": "tit-Latn-CO", + "tit-CO": "tit-Latn-CO", + "tit-Latn": "tit-Latn-CO", + "tiu": "tiu-Latn-PH", + "tiu-Latn": "tiu-Latn-PH", + "tiu-PH": "tiu-Latn-PH", + "tiv": "tiv-Latn-NG", + "tiv-Latn": "tiv-Latn-NG", + "tiv-NG": "tiv-Latn-NG", + "tiw": "tiw-Latn-AU", + "tiw-AU": "tiw-Latn-AU", + "tiw-Latn": "tiw-Latn-AU", + "tix": "tix-Latn-US", + "tix-Latn": "tix-Latn-US", + "tix-US": "tix-Latn-US", + "tiy": "tiy-Latn-PH", + "tiy-Latn": "tiy-Latn-PH", + "tiy-PH": "tiy-Latn-PH", + "tja": "tja-Latn-LR", + "tja-LR": "tja-Latn-LR", + "tja-Latn": "tja-Latn-LR", + "tjg": "tjg-Latn-ID", + "tjg-ID": "tjg-Latn-ID", + "tjg-Latn": "tjg-Latn-ID", + "tji": "tji-Latn-CN", + "tji-CN": "tji-Latn-CN", + "tji-Latn": "tji-Latn-CN", + "tjj": "tjj-Latn-AU", + "tjj-AU": "tjj-Latn-AU", + "tjj-Latn": "tjj-Latn-AU", + "tjl": "tjl-Mymr-MM", + "tjl-MM": "tjl-Mymr-MM", + "tjl-Mymr": "tjl-Mymr-MM", + "tjn": "tjn-Latn-CI", + "tjn-CI": "tjn-Latn-CI", + "tjn-Latn": "tjn-Latn-CI", + "tjo": "tjo-Arab-DZ", + "tjo-Arab": "tjo-Arab-DZ", + "tjo-DZ": "tjo-Arab-DZ", + "tjp": "tjp-Latn-AU", + "tjp-AU": "tjp-Latn-AU", + "tjp-Latn": "tjp-Latn-AU", + "tjs": "tjs-Latn-CN", + "tjs-CN": "tjs-Latn-CN", + "tjs-Latn": "tjs-Latn-CN", + "tju": "tju-Latn-AU", + "tju-AU": "tju-Latn-AU", + "tju-Latn": "tju-Latn-AU", + "tjw": "tjw-Latn-AU", + "tjw-AU": "tjw-Latn-AU", + "tjw-Latn": "tjw-Latn-AU", + "tk": "tk-Latn-TM", + "tk-Latn": "tk-Latn-TM", + "tk-Latn-AF": "tk-Latn-AF", + "tk-Latn-IR": "tk-Latn-IR", + "tk-TM": "tk-Latn-TM", + "tka": "tka-Latn-BR", + "tka-BR": "tka-Latn-BR", + "tka-Latn": "tka-Latn-BR", + "tkb": "tkb-Deva-IN", + "tkb-Deva": "tkb-Deva-IN", + "tkb-IN": "tkb-Deva-IN", + "tkd": "tkd-Latn-TL", + "tkd-Latn": "tkd-Latn-TL", + "tkd-TL": "tkd-Latn-TL", + "tke": "tke-Latn-MZ", + "tke-Latn": "tke-Latn-MZ", + "tke-MZ": "tke-Latn-MZ", + "tkf": "tkf-Latn-BR", + "tkf-BR": "tkf-Latn-BR", + "tkf-Latn": "tkf-Latn-BR", + "tkg": "tkg-Latn-MG", + "tkg-Latn": "tkg-Latn-MG", + "tkg-MG": "tkg-Latn-MG", + "tkl": "tkl-Latn-TK", + "tkl-Latn": "tkl-Latn-TK", + "tkl-TK": "tkl-Latn-TK", + "tkp": "tkp-Latn-SB", + "tkp-Latn": "tkp-Latn-SB", + "tkp-SB": "tkp-Latn-SB", + "tkq": "tkq-Latn-NG", + "tkq-Latn": "tkq-Latn-NG", + "tkq-NG": "tkq-Latn-NG", + "tkr": "tkr-Latn-AZ", + "tkr-AZ": "tkr-Latn-AZ", + "tkr-Latn": "tkr-Latn-AZ", + "tks": "tks-Arab-IR", + "tks-Arab": "tks-Arab-IR", + "tks-IR": "tks-Arab-IR", + "tkt": "tkt-Deva-NP", + "tkt-Deva": "tkt-Deva-NP", + "tkt-NP": "tkt-Deva-NP", + "tku": "tku-Latn-MX", + "tku-Latn": "tku-Latn-MX", + "tku-MX": "tku-Latn-MX", + "tkv": "tkv-Latn-PG", + "tkv-Latn": "tkv-Latn-PG", + "tkv-PG": "tkv-Latn-PG", + "tkw": "tkw-Latn-SB", + "tkw-Latn": "tkw-Latn-SB", + "tkw-SB": "tkw-Latn-SB", + "tkx": "tkx-Latn-ID", + "tkx-ID": "tkx-Latn-ID", + "tkx-Latn": "tkx-Latn-ID", + "tkz": "tkz-Latn-VN", + "tkz-Latn": "tkz-Latn-VN", + "tkz-VN": "tkz-Latn-VN", + "tl": "tl-Latn-PH", + "tl-Latn": "tl-Latn-PH", + "tl-PH": "tl-Latn-PH", + "tla": "tla-Latn-MX", + "tla-Latn": "tla-Latn-MX", + "tla-MX": "tla-Latn-MX", + "tlb": "tlb-Latn-ID", + "tlb-ID": "tlb-Latn-ID", + "tlb-Latn": "tlb-Latn-ID", + "tlc": "tlc-Latn-MX", + "tlc-Latn": "tlc-Latn-MX", + "tlc-MX": "tlc-Latn-MX", + "tld": "tld-Latn-ID", + "tld-ID": "tld-Latn-ID", + "tld-Latn": "tld-Latn-ID", + "tlf": "tlf-Latn-PG", + "tlf-Latn": "tlf-Latn-PG", + "tlf-PG": "tlf-Latn-PG", + "tlg": "tlg-Latn-ID", + "tlg-ID": "tlg-Latn-ID", + "tlg-Latn": "tlg-Latn-ID", + "tlh": "tlh-Piqd-XX", + "tlh-Piqd": "tlh-Piqd-XX", + "tlh-XX": "tlh-Piqd-XX", + "tli": "tli-Latn-US", + "tli-Latn": "tli-Latn-US", + "tli-US": "tli-Latn-US", + "tlj": "tlj-Latn-UG", + "tlj-Latn": "tlj-Latn-UG", + "tlj-UG": "tlj-Latn-UG", + "tlk": "tlk-Latn-ID", + "tlk-ID": "tlk-Latn-ID", + "tlk-Latn": "tlk-Latn-ID", + "tll": "tll-Latn-CD", + "tll-CD": "tll-Latn-CD", + "tll-Latn": "tll-Latn-CD", + "tlm": "tlm-Latn-VU", + "tlm-Latn": "tlm-Latn-VU", + "tlm-VU": "tlm-Latn-VU", + "tln": "tln-Latn-ID", + "tln-ID": "tln-Latn-ID", + "tln-Latn": "tln-Latn-ID", + "tlp": "tlp-Latn-MX", + "tlp-Latn": "tlp-Latn-MX", + "tlp-MX": "tlp-Latn-MX", + "tlq": "tlq-Latn-MM", + "tlq-Latn": "tlq-Latn-MM", + "tlq-MM": "tlq-Latn-MM", + "tlr": "tlr-Latn-SB", + "tlr-Latn": "tlr-Latn-SB", + "tlr-SB": "tlr-Latn-SB", + "tls": "tls-Latn-VU", + "tls-Latn": "tls-Latn-VU", + "tls-VU": "tls-Latn-VU", + "tlt": "tlt-Latn-ID", + "tlt-ID": "tlt-Latn-ID", + "tlt-Latn": "tlt-Latn-ID", + "tlu": "tlu-Latn-ID", + "tlu-ID": "tlu-Latn-ID", + "tlu-Latn": "tlu-Latn-ID", + "tlv": "tlv-Latn-ID", + "tlv-ID": "tlv-Latn-ID", + "tlv-Latn": "tlv-Latn-ID", + "tlx": "tlx-Latn-PG", + "tlx-Latn": "tlx-Latn-PG", + "tlx-PG": "tlx-Latn-PG", + "tly": "tly-Latn-AZ", + "tly-AZ": "tly-Latn-AZ", + "tly-Latn": "tly-Latn-AZ", + "tma": "tma-Latn-TD", + "tma-Latn": "tma-Latn-TD", + "tma-TD": "tma-Latn-TD", + "tmb": "tmb-Latn-VU", + "tmb-Latn": "tmb-Latn-VU", + "tmb-VU": "tmb-Latn-VU", + "tmc": "tmc-Latn-TD", + "tmc-Latn": "tmc-Latn-TD", + "tmc-TD": "tmc-Latn-TD", + "tmd": "tmd-Latn-PG", + "tmd-Latn": "tmd-Latn-PG", + "tmd-PG": "tmd-Latn-PG", + "tme": "tme-Latn-BR", + "tme-BR": "tme-Latn-BR", + "tme-Latn": "tme-Latn-BR", + "tmf": "tmf-Latn-PY", + "tmf-Latn": "tmf-Latn-PY", + "tmf-PY": "tmf-Latn-PY", + "tmg": "tmg-Latn-ID", + "tmg-ID": "tmg-Latn-ID", + "tmg-Latn": "tmg-Latn-ID", + "tmh": "tmh-Latn-NE", + "tmh-Latn": "tmh-Latn-NE", + "tmh-NE": "tmh-Latn-NE", + "tmi": "tmi-Latn-VU", + "tmi-Latn": "tmi-Latn-VU", + "tmi-VU": "tmi-Latn-VU", + "tmj": "tmj-Latn-ID", + "tmj-ID": "tmj-Latn-ID", + "tmj-Latn": "tmj-Latn-ID", + "tml": "tml-Latn-ID", + "tml-ID": "tml-Latn-ID", + "tml-Latn": "tml-Latn-ID", + "tmm": "tmm-Latn-VN", + "tmm-Latn": "tmm-Latn-VN", + "tmm-VN": "tmm-Latn-VN", + "tmn": "tmn-Latn-ID", + "tmn-ID": "tmn-Latn-ID", + "tmn-Latn": "tmn-Latn-ID", + "tmo": "tmo-Latn-MY", + "tmo-Latn": "tmo-Latn-MY", + "tmo-MY": "tmo-Latn-MY", + "tmq": "tmq-Latn-PG", + "tmq-Latn": "tmq-Latn-PG", + "tmq-PG": "tmq-Latn-PG", + "tmr": "tmr-Syrc-IL", + "tmr-IL": "tmr-Syrc-IL", + "tmr-Syrc": "tmr-Syrc-IL", + "tmt": "tmt-Latn-VU", + "tmt-Latn": "tmt-Latn-VU", + "tmt-VU": "tmt-Latn-VU", + "tmu": "tmu-Latn-ID", + "tmu-ID": "tmu-Latn-ID", + "tmu-Latn": "tmu-Latn-ID", + "tmv": "tmv-Latn-CD", + "tmv-CD": "tmv-Latn-CD", + "tmv-Latn": "tmv-Latn-CD", + "tmw": "tmw-Latn-MY", + "tmw-Latn": "tmw-Latn-MY", + "tmw-MY": "tmw-Latn-MY", + "tmy": "tmy-Latn-PG", + "tmy-Latn": "tmy-Latn-PG", + "tmy-PG": "tmy-Latn-PG", + "tmz": "tmz-Latn-VE", + "tmz-Latn": "tmz-Latn-VE", + "tmz-VE": "tmz-Latn-VE", + "tn": "tn-Latn-ZA", + "tn-Latn": "tn-Latn-ZA", + "tn-ZA": "tn-Latn-ZA", + "tna": "tna-Latn-BO", + "tna-BO": "tna-Latn-BO", + "tna-Latn": "tna-Latn-BO", + "tnb": "tnb-Latn-CO", + "tnb-CO": "tnb-Latn-CO", + "tnb-Latn": "tnb-Latn-CO", + "tnc": "tnc-Latn-CO", + "tnc-CO": "tnc-Latn-CO", + "tnc-Latn": "tnc-Latn-CO", + "tnd": "tnd-Latn-CO", + "tnd-CO": "tnd-Latn-CO", + "tnd-Latn": "tnd-Latn-CO", + "tng": "tng-Latn-TD", + "tng-Latn": "tng-Latn-TD", + "tng-TD": "tng-Latn-TD", + "tnh": "tnh-Latn-PG", + "tnh-Latn": "tnh-Latn-PG", + "tnh-PG": "tnh-Latn-PG", + "tni": "tni-Latn-ID", + "tni-ID": "tni-Latn-ID", + "tni-Latn": "tni-Latn-ID", + "tnk": "tnk-Latn-VU", + "tnk-Latn": "tnk-Latn-VU", + "tnk-VU": "tnk-Latn-VU", + "tnl": "tnl-Latn-VU", + "tnl-Latn": "tnl-Latn-VU", + "tnl-VU": "tnl-Latn-VU", + "tnm": "tnm-Latn-ID", + "tnm-ID": "tnm-Latn-ID", + "tnm-Latn": "tnm-Latn-ID", + "tnn": "tnn-Latn-VU", + "tnn-Latn": "tnn-Latn-VU", + "tnn-VU": "tnn-Latn-VU", + "tno": "tno-Latn-BO", + "tno-BO": "tno-Latn-BO", + "tno-Latn": "tno-Latn-BO", + "tnp": "tnp-Latn-VU", + "tnp-Latn": "tnp-Latn-VU", + "tnp-VU": "tnp-Latn-VU", + "tnq": "tnq-Latn-PR", + "tnq-Latn": "tnq-Latn-PR", + "tnq-PR": "tnq-Latn-PR", + "tnr": "tnr-Latn-SN", + "tnr-Latn": "tnr-Latn-SN", + "tnr-SN": "tnr-Latn-SN", + "tns": "tns-Latn-PG", + "tns-Latn": "tns-Latn-PG", + "tns-PG": "tns-Latn-PG", + "tnt": "tnt-Latn-ID", + "tnt-ID": "tnt-Latn-ID", + "tnt-Latn": "tnt-Latn-ID", + "tnv": "tnv-Cakm-BD", + "tnv-BD": "tnv-Cakm-BD", + "tnv-Cakm": "tnv-Cakm-BD", + "tnw": "tnw-Latn-ID", + "tnw-ID": "tnw-Latn-ID", + "tnw-Latn": "tnw-Latn-ID", + "tnx": "tnx-Latn-SB", + "tnx-Latn": "tnx-Latn-SB", + "tnx-SB": "tnx-Latn-SB", + "tny": "tny-Latn-TZ", + "tny-Latn": "tny-Latn-TZ", + "tny-TZ": "tny-Latn-TZ", + "to": "to-Latn-TO", + "to-Latn": "to-Latn-TO", + "to-TO": "to-Latn-TO", + "tob": "tob-Latn-AR", + "tob-AR": "tob-Latn-AR", + "tob-Latn": "tob-Latn-AR", + "toc": "toc-Latn-MX", + "toc-Latn": "toc-Latn-MX", + "toc-MX": "toc-Latn-MX", + "tod": "tod-Latn-GN", + "tod-GN": "tod-Latn-GN", + "tod-Latn": "tod-Latn-GN", + "tof": "tof-Latn-PG", + "tof-Latn": "tof-Latn-PG", + "tof-PG": "tof-Latn-PG", + "tog": "tog-Latn-MW", + "tog-Latn": "tog-Latn-MW", + "tog-MW": "tog-Latn-MW", + "toh": "toh-Latn-MZ", + "toh-Latn": "toh-Latn-MZ", + "toh-MZ": "toh-Latn-MZ", + "toi": "toi-Latn-ZM", + "toi-Latn": "toi-Latn-ZM", + "toi-ZM": "toi-Latn-ZM", + "toj": "toj-Latn-MX", + "toj-Latn": "toj-Latn-MX", + "toj-MX": "toj-Latn-MX", + "tok": "tok-Latn-001", + "tok-001": "tok-Latn-001", + "tok-Latn": "tok-Latn-001", + "tol": "tol-Latn-US", + "tol-Latn": "tol-Latn-US", + "tol-US": "tol-Latn-US", + "tom": "tom-Latn-ID", + "tom-ID": "tom-Latn-ID", + "tom-Latn": "tom-Latn-ID", + "too": "too-Latn-MX", + "too-Latn": "too-Latn-MX", + "too-MX": "too-Latn-MX", + "top": "top-Latn-MX", + "top-Latn": "top-Latn-MX", + "top-MX": "top-Latn-MX", + "toq": "toq-Latn-SS", + "toq-Latn": "toq-Latn-SS", + "toq-SS": "toq-Latn-SS", + "tor": "tor-Latn-CD", + "tor-CD": "tor-Latn-CD", + "tor-Latn": "tor-Latn-CD", + "tos": "tos-Latn-MX", + "tos-Latn": "tos-Latn-MX", + "tos-MX": "tos-Latn-MX", + "tou": "tou-Latn-VN", + "tou-Latn": "tou-Latn-VN", + "tou-VN": "tou-Latn-VN", + "tov": "tov-Arab-IR", + "tov-Arab": "tov-Arab-IR", + "tov-IR": "tov-Arab-IR", + "tow": "tow-Latn-US", + "tow-Latn": "tow-Latn-US", + "tow-US": "tow-Latn-US", + "tox": "tox-Latn-PW", + "tox-Latn": "tox-Latn-PW", + "tox-PW": "tox-Latn-PW", + "toy": "toy-Latn-ID", + "toy-ID": "toy-Latn-ID", + "toy-Latn": "toy-Latn-ID", + "toz": "toz-Latn-CM", + "toz-CM": "toz-Latn-CM", + "toz-Latn": "toz-Latn-CM", + "tpa": "tpa-Latn-PG", + "tpa-Latn": "tpa-Latn-PG", + "tpa-PG": "tpa-Latn-PG", + "tpc": "tpc-Latn-MX", + "tpc-Latn": "tpc-Latn-MX", + "tpc-MX": "tpc-Latn-MX", + "tpe": "tpe-Latn-BD", + "tpe-BD": "tpe-Latn-BD", + "tpe-Latn": "tpe-Latn-BD", + "tpf": "tpf-Latn-ID", + "tpf-ID": "tpf-Latn-ID", + "tpf-Latn": "tpf-Latn-ID", + "tpg": "tpg-Latn-ID", + "tpg-ID": "tpg-Latn-ID", + "tpg-Latn": "tpg-Latn-ID", + "tpi": "tpi-Latn-PG", + "tpi-Latn": "tpi-Latn-PG", + "tpi-PG": "tpi-Latn-PG", + "tpj": "tpj-Latn-PY", + "tpj-Latn": "tpj-Latn-PY", + "tpj-PY": "tpj-Latn-PY", + "tpk": "tpk-Latn-BR", + "tpk-BR": "tpk-Latn-BR", + "tpk-Latn": "tpk-Latn-BR", + "tpl": "tpl-Latn-MX", + "tpl-Latn": "tpl-Latn-MX", + "tpl-MX": "tpl-Latn-MX", + "tpm": "tpm-Latn-GH", + "tpm-GH": "tpm-Latn-GH", + "tpm-Latn": "tpm-Latn-GH", + "tpn": "tpn-Latn-BR", + "tpn-BR": "tpn-Latn-BR", + "tpn-Latn": "tpn-Latn-BR", + "tpp": "tpp-Latn-MX", + "tpp-Latn": "tpp-Latn-MX", + "tpp-MX": "tpp-Latn-MX", + "tpr": "tpr-Latn-BR", + "tpr-BR": "tpr-Latn-BR", + "tpr-Latn": "tpr-Latn-BR", + "tpt": "tpt-Latn-MX", + "tpt-Latn": "tpt-Latn-MX", + "tpt-MX": "tpt-Latn-MX", + "tpu": "tpu-Khmr-KH", + "tpu-KH": "tpu-Khmr-KH", + "tpu-Khmr": "tpu-Khmr-KH", + "tpv": "tpv-Latn-MP", + "tpv-Latn": "tpv-Latn-MP", + "tpv-MP": "tpv-Latn-MP", + "tpx": "tpx-Latn-MX", + "tpx-Latn": "tpx-Latn-MX", + "tpx-MX": "tpx-Latn-MX", + "tpy": "tpy-Latn-BR", + "tpy-BR": "tpy-Latn-BR", + "tpy-Latn": "tpy-Latn-BR", + "tpz": "tpz-Latn-PG", + "tpz-Latn": "tpz-Latn-PG", + "tpz-PG": "tpz-Latn-PG", + "tqb": "tqb-Latn-BR", + "tqb-BR": "tqb-Latn-BR", + "tqb-Latn": "tqb-Latn-BR", + "tql": "tql-Latn-VU", + "tql-Latn": "tql-Latn-VU", + "tql-VU": "tql-Latn-VU", + "tqm": "tqm-Latn-PG", + "tqm-Latn": "tqm-Latn-PG", + "tqm-PG": "tqm-Latn-PG", + "tqn": "tqn-Latn-US", + "tqn-Latn": "tqn-Latn-US", + "tqn-US": "tqn-Latn-US", + "tqo": "tqo-Latn-PG", + "tqo-Latn": "tqo-Latn-PG", + "tqo-PG": "tqo-Latn-PG", + "tqp": "tqp-Latn-PG", + "tqp-Latn": "tqp-Latn-PG", + "tqp-PG": "tqp-Latn-PG", + "tqt": "tqt-Latn-MX", + "tqt-Latn": "tqt-Latn-MX", + "tqt-MX": "tqt-Latn-MX", + "tqu": "tqu-Latn-SB", + "tqu-Latn": "tqu-Latn-SB", + "tqu-SB": "tqu-Latn-SB", + "tqw": "tqw-Latn-US", + "tqw-Latn": "tqw-Latn-US", + "tqw-US": "tqw-Latn-US", + "tr": "tr-Latn-TR", + "tr-AM": "tr-Latn-AM", + "tr-AZ": "tr-Latn-AZ", + "tr-CY": "tr-Latn-CY", + "tr-Latn": "tr-Latn-TR", + "tr-Latn-CY": "tr-Latn-CY", + "tr-TR": "tr-Latn-TR", + "tra": "tra-Arab-AF", + "tra-AF": "tra-Arab-AF", + "tra-Arab": "tra-Arab-AF", + "trb": "trb-Latn-PG", + "trb-Latn": "trb-Latn-PG", + "trb-PG": "trb-Latn-PG", + "trc": "trc-Latn-MX", + "trc-Latn": "trc-Latn-MX", + "trc-MX": "trc-Latn-MX", + "tre": "tre-Latn-ID", + "tre-ID": "tre-Latn-ID", + "tre-Latn": "tre-Latn-ID", + "trf": "trf-Latn-TT", + "trf-Latn": "trf-Latn-TT", + "trf-TT": "trf-Latn-TT", + "trg": "trg-Hebr-IL", + "trg-Hebr": "trg-Hebr-IL", + "trg-IL": "trg-Hebr-IL", + "trh": "trh-Latn-PG", + "trh-Latn": "trh-Latn-PG", + "trh-PG": "trh-Latn-PG", + "tri": "tri-Latn-SR", + "tri-Latn": "tri-Latn-SR", + "tri-SR": "tri-Latn-SR", + "trj": "trj-Latn-TD", + "trj-Latn": "trj-Latn-TD", + "trj-TD": "trj-Latn-TD", + "trl": "trl-Latn-GB", + "trl-GB": "trl-Latn-GB", + "trl-Latn": "trl-Latn-GB", + "trm": "trm-Arab-AF", + "trm-AF": "trm-Arab-AF", + "trm-Arab": "trm-Arab-AF", + "trn": "trn-Latn-BO", + "trn-BO": "trn-Latn-BO", + "trn-Latn": "trn-Latn-BO", + "tro": "tro-Latn-IN", + "tro-IN": "tro-Latn-IN", + "tro-Latn": "tro-Latn-IN", + "trp": "trp-Latn-IN", + "trp-IN": "trp-Latn-IN", + "trp-Latn": "trp-Latn-IN", + "trq": "trq-Latn-MX", + "trq-Latn": "trq-Latn-MX", + "trq-MX": "trq-Latn-MX", + "trr": "trr-Latn-PE", + "trr-Latn": "trr-Latn-PE", + "trr-PE": "trr-Latn-PE", + "trs": "trs-Latn-MX", + "trs-Latn": "trs-Latn-MX", + "trs-MX": "trs-Latn-MX", + "trt": "trt-Latn-ID", + "trt-ID": "trt-Latn-ID", + "trt-Latn": "trt-Latn-ID", + "tru": "tru-Latn-TR", + "tru-Latn": "tru-Latn-TR", + "tru-TR": "tru-Latn-TR", + "trv": "trv-Latn-TW", + "trv-Latn": "trv-Latn-TW", + "trv-Latn-TW": "trv-Latn-TW", + "trv-TW": "trv-Latn-TW", + "trw": "trw-Arab-PK", + "trw-Arab": "trw-Arab-PK", + "trw-PK": "trw-Arab-PK", + "trx": "trx-Latn-MY", + "trx-Latn": "trx-Latn-MY", + "trx-MY": "trx-Latn-MY", + "try": "try-Latn-IN", + "try-IN": "try-Latn-IN", + "try-Latn": "try-Latn-IN", + "trz": "trz-Latn-BR", + "trz-BR": "trz-Latn-BR", + "trz-Latn": "trz-Latn-BR", + "ts": "ts-Latn-ZA", + "ts-Latn": "ts-Latn-ZA", + "ts-ZA": "ts-Latn-ZA", + "tsa": "tsa-Latn-CG", + "tsa-CG": "tsa-Latn-CG", + "tsa-Latn": "tsa-Latn-CG", + "tsb": "tsb-Latn-ET", + "tsb-ET": "tsb-Latn-ET", + "tsb-Latn": "tsb-Latn-ET", + "tsc": "tsc-Latn-MZ", + "tsc-Latn": "tsc-Latn-MZ", + "tsc-MZ": "tsc-Latn-MZ", + "tsd": "tsd-Grek-GR", + "tsd-GR": "tsd-Grek-GR", + "tsd-Grek": "tsd-Grek-GR", + "tsg": "tsg-Latn-PH", + "tsg-Latn": "tsg-Latn-PH", + "tsg-PH": "tsg-Latn-PH", + "tsh": "tsh-Latn-CM", + "tsh-CM": "tsh-Latn-CM", + "tsh-Latn": "tsh-Latn-CM", + "tsi": "tsi-Latn-CA", + "tsi-CA": "tsi-Latn-CA", + "tsi-Latn": "tsi-Latn-CA", + "tsj": "tsj-Tibt-BT", + "tsj-BT": "tsj-Tibt-BT", + "tsj-Tibt": "tsj-Tibt-BT", + "tsl": "tsl-Latn-VN", + "tsl-Latn": "tsl-Latn-VN", + "tsl-VN": "tsl-Latn-VN", + "tsp": "tsp-Latn-BF", + "tsp-BF": "tsp-Latn-BF", + "tsp-Latn": "tsp-Latn-BF", + "tsr": "tsr-Latn-VU", + "tsr-Latn": "tsr-Latn-VU", + "tsr-VU": "tsr-Latn-VU", + "tst": "tst-Latn-ML", + "tst-Latn": "tst-Latn-ML", + "tst-ML": "tst-Latn-ML", + "tsu": "tsu-Latn-TW", + "tsu-Latn": "tsu-Latn-TW", + "tsu-TW": "tsu-Latn-TW", + "tsv": "tsv-Latn-GA", + "tsv-GA": "tsv-Latn-GA", + "tsv-Latn": "tsv-Latn-GA", + "tsw": "tsw-Latn-NG", + "tsw-Latn": "tsw-Latn-NG", + "tsw-NG": "tsw-Latn-NG", + "tsx": "tsx-Latn-PG", + "tsx-Latn": "tsx-Latn-PG", + "tsx-PG": "tsx-Latn-PG", + "tsz": "tsz-Latn-MX", + "tsz-Latn": "tsz-Latn-MX", + "tsz-MX": "tsz-Latn-MX", + "tt": "tt-Cyrl-RU", + "tt-Cyrl": "tt-Cyrl-RU", + "tt-RU": "tt-Cyrl-RU", + "ttb": "ttb-Latn-NG", + "ttb-Latn": "ttb-Latn-NG", + "ttb-NG": "ttb-Latn-NG", + "ttc": "ttc-Latn-GT", + "ttc-GT": "ttc-Latn-GT", + "ttc-Latn": "ttc-Latn-GT", + "ttd": "ttd-Latn-PG", + "ttd-Latn": "ttd-Latn-PG", + "ttd-PG": "ttd-Latn-PG", + "tte": "tte-Latn-PG", + "tte-Latn": "tte-Latn-PG", + "tte-PG": "tte-Latn-PG", + "ttf": "ttf-Latn-CM", + "ttf-CM": "ttf-Latn-CM", + "ttf-Latn": "ttf-Latn-CM", + "tth": "tth-Laoo-LA", + "tth-LA": "tth-Laoo-LA", + "tth-Laoo": "tth-Laoo-LA", + "tti": "tti-Latn-ID", + "tti-ID": "tti-Latn-ID", + "tti-Latn": "tti-Latn-ID", + "ttj": "ttj-Latn-UG", + "ttj-Latn": "ttj-Latn-UG", + "ttj-UG": "ttj-Latn-UG", + "ttk": "ttk-Latn-CO", + "ttk-CO": "ttk-Latn-CO", + "ttk-Latn": "ttk-Latn-CO", + "ttl": "ttl-Latn-ZM", + "ttl-Latn": "ttl-Latn-ZM", + "ttl-ZM": "ttl-Latn-ZM", + "ttm": "ttm-Latn-CA", + "ttm-CA": "ttm-Latn-CA", + "ttm-Latn": "ttm-Latn-CA", + "ttn": "ttn-Latn-ID", + "ttn-ID": "ttn-Latn-ID", + "ttn-Latn": "ttn-Latn-ID", + "tto": "tto-Laoo-LA", + "tto-LA": "tto-Laoo-LA", + "tto-Laoo": "tto-Laoo-LA", + "ttp": "ttp-Latn-ID", + "ttp-ID": "ttp-Latn-ID", + "ttp-Latn": "ttp-Latn-ID", + "ttr": "ttr-Latn-NG", + "ttr-Latn": "ttr-Latn-NG", + "ttr-NG": "ttr-Latn-NG", + "tts": "tts-Thai-TH", + "tts-TH": "tts-Thai-TH", + "tts-Thai": "tts-Thai-TH", + "ttt": "ttt-Latn-AZ", + "ttt-AZ": "ttt-Latn-AZ", + "ttt-Latn": "ttt-Latn-AZ", + "ttu": "ttu-Latn-PG", + "ttu-Latn": "ttu-Latn-PG", + "ttu-PG": "ttu-Latn-PG", + "ttv": "ttv-Latn-PG", + "ttv-Latn": "ttv-Latn-PG", + "ttv-PG": "ttv-Latn-PG", + "ttw": "ttw-Latn-MY", + "ttw-Latn": "ttw-Latn-MY", + "ttw-MY": "ttw-Latn-MY", + "tty": "tty-Latn-ID", + "tty-ID": "tty-Latn-ID", + "tty-Latn": "tty-Latn-ID", + "ttz": "ttz-Deva-NP", + "ttz-Deva": "ttz-Deva-NP", + "ttz-NP": "ttz-Deva-NP", + "tua": "tua-Latn-PG", + "tua-Latn": "tua-Latn-PG", + "tua-PG": "tua-Latn-PG", + "tub": "tub-Latn-US", + "tub-Latn": "tub-Latn-US", + "tub-US": "tub-Latn-US", + "tuc": "tuc-Latn-PG", + "tuc-Latn": "tuc-Latn-PG", + "tuc-PG": "tuc-Latn-PG", + "tud": "tud-Latn-BR", + "tud-BR": "tud-Latn-BR", + "tud-Latn": "tud-Latn-BR", + "tue": "tue-Latn-CO", + "tue-CO": "tue-Latn-CO", + "tue-Latn": "tue-Latn-CO", + "tuf": "tuf-Latn-CO", + "tuf-CO": "tuf-Latn-CO", + "tuf-Latn": "tuf-Latn-CO", + "tug": "tug-Latn-TD", + "tug-Latn": "tug-Latn-TD", + "tug-TD": "tug-Latn-TD", + "tuh": "tuh-Latn-PG", + "tuh-Latn": "tuh-Latn-PG", + "tuh-PG": "tuh-Latn-PG", + "tui": "tui-Latn-CM", + "tui-CM": "tui-Latn-CM", + "tui-Latn": "tui-Latn-CM", + "tuj": "tuj-Latn-ID", + "tuj-ID": "tuj-Latn-ID", + "tuj-Latn": "tuj-Latn-ID", + "tul": "tul-Latn-NG", + "tul-Latn": "tul-Latn-NG", + "tul-NG": "tul-Latn-NG", + "tum": "tum-Latn-MW", + "tum-Latn": "tum-Latn-MW", + "tum-MW": "tum-Latn-MW", + "tun": "tun-Latn-US", + "tun-Latn": "tun-Latn-US", + "tun-US": "tun-Latn-US", + "tuo": "tuo-Latn-BR", + "tuo-BR": "tuo-Latn-BR", + "tuo-Latn": "tuo-Latn-BR", + "tuq": "tuq-Latn-TD", + "tuq-Latn": "tuq-Latn-TD", + "tuq-TD": "tuq-Latn-TD", + "tus": "tus-Latn-CA", + "tus-CA": "tus-Latn-CA", + "tus-Latn": "tus-Latn-CA", + "tuu": "tuu-Latn-US", + "tuu-Latn": "tuu-Latn-US", + "tuu-US": "tuu-Latn-US", + "tuv": "tuv-Latn-KE", + "tuv-KE": "tuv-Latn-KE", + "tuv-Latn": "tuv-Latn-KE", + "tux": "tux-Latn-BR", + "tux-BR": "tux-Latn-BR", + "tux-Latn": "tux-Latn-BR", + "tuy": "tuy-Latn-KE", + "tuy-KE": "tuy-Latn-KE", + "tuy-Latn": "tuy-Latn-KE", + "tuz": "tuz-Latn-BF", + "tuz-BF": "tuz-Latn-BF", + "tuz-Latn": "tuz-Latn-BF", + "tva": "tva-Latn-SB", + "tva-Latn": "tva-Latn-SB", + "tva-SB": "tva-Latn-SB", + "tvd": "tvd-Latn-NG", + "tvd-Latn": "tvd-Latn-NG", + "tvd-NG": "tvd-Latn-NG", + "tve": "tve-Latn-ID", + "tve-ID": "tve-Latn-ID", + "tve-Latn": "tve-Latn-ID", + "tvi": "tvi-Latn-NG", + "tvi-Latn": "tvi-Latn-NG", + "tvi-NG": "tvi-Latn-NG", + "tvk": "tvk-Latn-VU", + "tvk-Latn": "tvk-Latn-VU", + "tvk-VU": "tvk-Latn-VU", + "tvl": "tvl-Latn-TV", + "tvl-Latn": "tvl-Latn-TV", + "tvl-TV": "tvl-Latn-TV", + "tvm": "tvm-Latn-ID", + "tvm-ID": "tvm-Latn-ID", + "tvm-Latn": "tvm-Latn-ID", + "tvn": "tvn-Mymr-MM", + "tvn-MM": "tvn-Mymr-MM", + "tvn-Mymr": "tvn-Mymr-MM", + "tvo": "tvo-Latn-ID", + "tvo-ID": "tvo-Latn-ID", + "tvo-Latn": "tvo-Latn-ID", + "tvs": "tvs-Latn-KE", + "tvs-KE": "tvs-Latn-KE", + "tvs-Latn": "tvs-Latn-KE", + "tvt": "tvt-Latn-IN", + "tvt-IN": "tvt-Latn-IN", + "tvt-Latn": "tvt-Latn-IN", + "tvu": "tvu-Latn-CM", + "tvu-CM": "tvu-Latn-CM", + "tvu-Latn": "tvu-Latn-CM", + "tvw": "tvw-Latn-ID", + "tvw-ID": "tvw-Latn-ID", + "tvw-Latn": "tvw-Latn-ID", + "tvx": "tvx-Latn-TW", + "tvx-Latn": "tvx-Latn-TW", + "tvx-TW": "tvx-Latn-TW", + "twa": "twa-Latn-US", + "twa-Latn": "twa-Latn-US", + "twa-US": "twa-Latn-US", + "twb": "twb-Latn-PH", + "twb-Latn": "twb-Latn-PH", + "twb-PH": "twb-Latn-PH", + "twd": "twd-Latn-NL", + "twd-Latn": "twd-Latn-NL", + "twd-NL": "twd-Latn-NL", + "twe": "twe-Latn-ID", + "twe-ID": "twe-Latn-ID", + "twe-Latn": "twe-Latn-ID", + "twf": "twf-Latn-US", + "twf-Latn": "twf-Latn-US", + "twf-US": "twf-Latn-US", + "twg": "twg-Latn-ID", + "twg-ID": "twg-Latn-ID", + "twg-Latn": "twg-Latn-ID", + "twh": "twh-Latn-VN", + "twh-Latn": "twh-Latn-VN", + "twh-VN": "twh-Latn-VN", + "twl": "twl-Latn-MZ", + "twl-Latn": "twl-Latn-MZ", + "twl-MZ": "twl-Latn-MZ", + "twm": "twm-Deva-IN", + "twm-Deva": "twm-Deva-IN", + "twm-IN": "twm-Deva-IN", + "twn": "twn-Latn-CM", + "twn-CM": "twn-Latn-CM", + "twn-Latn": "twn-Latn-CM", + "two": "two-Latn-BW", + "two-BW": "two-Latn-BW", + "two-Latn": "two-Latn-BW", + "twp": "twp-Latn-PG", + "twp-Latn": "twp-Latn-PG", + "twp-PG": "twp-Latn-PG", + "twq": "twq-Latn-NE", + "twq-Latn": "twq-Latn-NE", + "twq-NE": "twq-Latn-NE", + "twr": "twr-Latn-MX", + "twr-Latn": "twr-Latn-MX", + "twr-MX": "twr-Latn-MX", + "twt": "twt-Latn-BR", + "twt-BR": "twt-Latn-BR", + "twt-Latn": "twt-Latn-BR", + "twu": "twu-Latn-ID", + "twu-ID": "twu-Latn-ID", + "twu-Latn": "twu-Latn-ID", + "tww": "tww-Latn-PG", + "tww-Latn": "tww-Latn-PG", + "tww-PG": "tww-Latn-PG", + "twx": "twx-Latn-MZ", + "twx-Latn": "twx-Latn-MZ", + "twx-MZ": "twx-Latn-MZ", + "twy": "twy-Latn-ID", + "twy-ID": "twy-Latn-ID", + "twy-Latn": "twy-Latn-ID", + "txa": "txa-Latn-MY", + "txa-Latn": "txa-Latn-MY", + "txa-MY": "txa-Latn-MY", + "txe": "txe-Latn-ID", + "txe-ID": "txe-Latn-ID", + "txe-Latn": "txe-Latn-ID", + "txg": "txg-Tang-CN", + "txg-CN": "txg-Tang-CN", + "txg-Tang": "txg-Tang-CN", + "txi": "txi-Latn-BR", + "txi-BR": "txi-Latn-BR", + "txi-Latn": "txi-Latn-BR", + "txj": "txj-Latn-NG", + "txj-Latn": "txj-Latn-NG", + "txj-NG": "txj-Latn-NG", + "txm": "txm-Latn-ID", + "txm-ID": "txm-Latn-ID", + "txm-Latn": "txm-Latn-ID", + "txn": "txn-Latn-ID", + "txn-ID": "txn-Latn-ID", + "txn-Latn": "txn-Latn-ID", + "txo": "txo-Toto-IN", + "txo-IN": "txo-Toto-IN", + "txo-Toto": "txo-Toto-IN", + "txq": "txq-Latn-ID", + "txq-ID": "txq-Latn-ID", + "txq-Latn": "txq-Latn-ID", + "txs": "txs-Latn-ID", + "txs-ID": "txs-Latn-ID", + "txs-Latn": "txs-Latn-ID", + "txt": "txt-Latn-ID", + "txt-ID": "txt-Latn-ID", + "txt-Latn": "txt-Latn-ID", + "txu": "txu-Latn-BR", + "txu-BR": "txu-Latn-BR", + "txu-Latn": "txu-Latn-BR", + "txx": "txx-Latn-MY", + "txx-Latn": "txx-Latn-MY", + "txx-MY": "txx-Latn-MY", + "txy": "txy-Latn-MG", + "txy-Latn": "txy-Latn-MG", + "txy-MG": "txy-Latn-MG", + "ty": "ty-Latn-PF", + "ty-Latn": "ty-Latn-PF", + "ty-PF": "ty-Latn-PF", + "tya": "tya-Latn-PG", + "tya-Latn": "tya-Latn-PG", + "tya-PG": "tya-Latn-PG", + "tye": "tye-Latn-NG", + "tye-Latn": "tye-Latn-NG", + "tye-NG": "tye-Latn-NG", + "tyh": "tyh-Latn-VN", + "tyh-Latn": "tyh-Latn-VN", + "tyh-VN": "tyh-Latn-VN", + "tyi": "tyi-Latn-CG", + "tyi-CG": "tyi-Latn-CG", + "tyi-Latn": "tyi-Latn-CG", + "tyj": "tyj-Latn-VN", + "tyj-Latn": "tyj-Latn-VN", + "tyj-VN": "tyj-Latn-VN", + "tyl": "tyl-Latn-VN", + "tyl-Latn": "tyl-Latn-VN", + "tyl-VN": "tyl-Latn-VN", + "tyn": "tyn-Latn-ID", + "tyn-ID": "tyn-Latn-ID", + "tyn-Latn": "tyn-Latn-ID", + "typ": "typ-Latn-AU", + "typ-AU": "typ-Latn-AU", + "typ-Latn": "typ-Latn-AU", + "tyr": "tyr-Tavt-VN", + "tyr-Tavt": "tyr-Tavt-VN", + "tyr-VN": "tyr-Tavt-VN", + "tys": "tys-Latn-VN", + "tys-Latn": "tys-Latn-VN", + "tys-VN": "tys-Latn-VN", + "tyt": "tyt-Latn-VN", + "tyt-Latn": "tyt-Latn-VN", + "tyt-VN": "tyt-Latn-VN", + "tyu": "tyu-Latn-BW", + "tyu-BW": "tyu-Latn-BW", + "tyu-Latn": "tyu-Latn-BW", + "tyv": "tyv-Cyrl-RU", + "tyv-Cyrl": "tyv-Cyrl-RU", + "tyv-RU": "tyv-Cyrl-RU", + "tyx": "tyx-Latn-CG", + "tyx-CG": "tyx-Latn-CG", + "tyx-Latn": "tyx-Latn-CG", + "tyy": "tyy-Latn-NG", + "tyy-Latn": "tyy-Latn-NG", + "tyy-NG": "tyy-Latn-NG", + "tyz": "tyz-Latn-VN", + "tyz-Latn": "tyz-Latn-VN", + "tyz-VN": "tyz-Latn-VN", + "tzh": "tzh-Latn-MX", + "tzh-Latn": "tzh-Latn-MX", + "tzh-MX": "tzh-Latn-MX", + "tzj": "tzj-Latn-GT", + "tzj-GT": "tzj-Latn-GT", + "tzj-Latn": "tzj-Latn-GT", + "tzl": "tzl-Latn-001", + "tzl-001": "tzl-Latn-001", + "tzl-Latn": "tzl-Latn-001", + "tzm": "tzm-Latn-MA", + "tzm-Latn": "tzm-Latn-MA", + "tzm-MA": "tzm-Latn-MA", + "tzn": "tzn-Latn-ID", + "tzn-ID": "tzn-Latn-ID", + "tzn-Latn": "tzn-Latn-ID", + "tzo": "tzo-Latn-MX", + "tzo-Latn": "tzo-Latn-MX", + "tzo-MX": "tzo-Latn-MX", + "tzx": "tzx-Latn-PG", + "tzx-Latn": "tzx-Latn-PG", + "tzx-PG": "tzx-Latn-PG", + "uam": "uam-Latn-BR", + "uam-BR": "uam-Latn-BR", + "uam-Latn": "uam-Latn-BR", + "uar": "uar-Latn-PG", + "uar-Latn": "uar-Latn-PG", + "uar-PG": "uar-Latn-PG", + "uba": "uba-Latn-NG", + "uba-Latn": "uba-Latn-NG", + "uba-NG": "uba-Latn-NG", + "ubi": "ubi-Latn-TD", + "ubi-Latn": "ubi-Latn-TD", + "ubi-TD": "ubi-Latn-TD", + "ubl": "ubl-Latn-PH", + "ubl-Latn": "ubl-Latn-PH", + "ubl-PH": "ubl-Latn-PH", + "ubr": "ubr-Latn-PG", + "ubr-Latn": "ubr-Latn-PG", + "ubr-PG": "ubr-Latn-PG", + "ubu": "ubu-Latn-PG", + "ubu-Latn": "ubu-Latn-PG", + "ubu-PG": "ubu-Latn-PG", + "uby": "uby-Latn-TR", + "uby-Latn": "uby-Latn-TR", + "uby-TR": "uby-Latn-TR", + "uda": "uda-Latn-NG", + "uda-Latn": "uda-Latn-NG", + "uda-NG": "uda-Latn-NG", + "ude": "ude-Cyrl-RU", + "ude-Cyrl": "ude-Cyrl-RU", + "ude-RU": "ude-Cyrl-RU", + "udg": "udg-Mlym-IN", + "udg-IN": "udg-Mlym-IN", + "udg-Mlym": "udg-Mlym-IN", + "udi": "udi-Cyrl-RU", + "udi-Cyrl": "udi-Cyrl-RU", + "udi-RU": "udi-Cyrl-RU", + "udj": "udj-Latn-ID", + "udj-ID": "udj-Latn-ID", + "udj-Latn": "udj-Latn-ID", + "udl": "udl-Latn-CM", + "udl-CM": "udl-Latn-CM", + "udl-Latn": "udl-Latn-CM", + "udm": "udm-Cyrl-RU", + "udm-Cyrl": "udm-Cyrl-RU", + "udm-RU": "udm-Cyrl-RU", + "udu": "udu-Latn-SD", + "udu-Latn": "udu-Latn-SD", + "udu-SD": "udu-Latn-SD", + "ues": "ues-Latn-ID", + "ues-ID": "ues-Latn-ID", + "ues-Latn": "ues-Latn-ID", + "ufi": "ufi-Latn-PG", + "ufi-Latn": "ufi-Latn-PG", + "ufi-PG": "ufi-Latn-PG", + "ug": "ug-Arab-CN", + "ug-Arab": "ug-Arab-CN", + "ug-Arab-CN": "ug-Arab-CN", + "ug-CN": "ug-Arab-CN", + "ug-Cyrl": "ug-Cyrl-KZ", + "ug-KZ": "ug-Cyrl-KZ", + "ug-MN": "ug-Cyrl-MN", + "uga": "uga-Ugar-SY", + "uga-SY": "uga-Ugar-SY", + "uga-Ugar": "uga-Ugar-SY", + "ugb": "ugb-Latn-AU", + "ugb-AU": "ugb-Latn-AU", + "ugb-Latn": "ugb-Latn-AU", + "uge": "uge-Latn-SB", + "uge-Latn": "uge-Latn-SB", + "uge-SB": "uge-Latn-SB", + "ugh": "ugh-Cyrl-RU", + "ugh-Cyrl": "ugh-Cyrl-RU", + "ugh-RU": "ugh-Cyrl-RU", + "ugo": "ugo-Thai-TH", + "ugo-TH": "ugo-Thai-TH", + "ugo-Thai": "ugo-Thai-TH", + "uha": "uha-Latn-NG", + "uha-Latn": "uha-Latn-NG", + "uha-NG": "uha-Latn-NG", + "uhn": "uhn-Latn-ID", + "uhn-ID": "uhn-Latn-ID", + "uhn-Latn": "uhn-Latn-ID", + "uis": "uis-Latn-PG", + "uis-Latn": "uis-Latn-PG", + "uis-PG": "uis-Latn-PG", + "uiv": "uiv-Latn-CM", + "uiv-CM": "uiv-Latn-CM", + "uiv-Latn": "uiv-Latn-CM", + "uji": "uji-Latn-NG", + "uji-Latn": "uji-Latn-NG", + "uji-NG": "uji-Latn-NG", + "uk": "uk-Cyrl-UA", + "uk-Cyrl": "uk-Cyrl-UA", + "uk-Cyrl-MD": "uk-Cyrl-MD", + "uk-Cyrl-SK": "uk-Cyrl-SK", + "uk-Cyrl-UA": "uk-Cyrl-UA", + "uk-UA": "uk-Cyrl-UA", + "uka": "uka-Latn-ID", + "uka-ID": "uka-Latn-ID", + "uka-Latn": "uka-Latn-ID", + "ukg": "ukg-Latn-PG", + "ukg-Latn": "ukg-Latn-PG", + "ukg-PG": "ukg-Latn-PG", + "ukh": "ukh-Latn-CF", + "ukh-CF": "ukh-Latn-CF", + "ukh-Latn": "ukh-Latn-CF", + "uki": "uki-Orya-IN", + "uki-IN": "uki-Orya-IN", + "uki-Orya": "uki-Orya-IN", + "ukk": "ukk-Latn-MM", + "ukk-Latn": "ukk-Latn-MM", + "ukk-MM": "ukk-Latn-MM", + "ukp": "ukp-Latn-NG", + "ukp-Latn": "ukp-Latn-NG", + "ukp-NG": "ukp-Latn-NG", + "ukq": "ukq-Latn-NG", + "ukq-Latn": "ukq-Latn-NG", + "ukq-NG": "ukq-Latn-NG", + "uku": "uku-Latn-NG", + "uku-Latn": "uku-Latn-NG", + "uku-NG": "uku-Latn-NG", + "ukv": "ukv-Latn-SS", + "ukv-Latn": "ukv-Latn-SS", + "ukv-SS": "ukv-Latn-SS", + "ukw": "ukw-Latn-NG", + "ukw-Latn": "ukw-Latn-NG", + "ukw-NG": "ukw-Latn-NG", + "uky": "uky-Latn-AU", + "uky-AU": "uky-Latn-AU", + "uky-Latn": "uky-Latn-AU", + "ula": "ula-Latn-NG", + "ula-Latn": "ula-Latn-NG", + "ula-NG": "ula-Latn-NG", + "ulb": "ulb-Latn-NG", + "ulb-Latn": "ulb-Latn-NG", + "ulb-NG": "ulb-Latn-NG", + "ulc": "ulc-Cyrl-RU", + "ulc-Cyrl": "ulc-Cyrl-RU", + "ulc-RU": "ulc-Cyrl-RU", + "ule": "ule-Latn-AR", + "ule-AR": "ule-Latn-AR", + "ule-Latn": "ule-Latn-AR", + "ulf": "ulf-Latn-ID", + "ulf-ID": "ulf-Latn-ID", + "ulf-Latn": "ulf-Latn-ID", + "uli": "uli-Latn-FM", + "uli-FM": "uli-Latn-FM", + "uli-Latn": "uli-Latn-FM", + "ulk": "ulk-Latn-AU", + "ulk-AU": "ulk-Latn-AU", + "ulk-Latn": "ulk-Latn-AU", + "ulm": "ulm-Latn-ID", + "ulm-ID": "ulm-Latn-ID", + "ulm-Latn": "ulm-Latn-ID", + "uln": "uln-Latn-PG", + "uln-Latn": "uln-Latn-PG", + "uln-PG": "uln-Latn-PG", + "ulu": "ulu-Latn-ID", + "ulu-ID": "ulu-Latn-ID", + "ulu-Latn": "ulu-Latn-ID", + "ulw": "ulw-Latn-NI", + "ulw-Latn": "ulw-Latn-NI", + "ulw-NI": "ulw-Latn-NI", + "uly": "uly-Latn-NG", + "uly-Latn": "uly-Latn-NG", + "uly-NG": "uly-Latn-NG", + "uma": "uma-Latn-US", + "uma-Latn": "uma-Latn-US", + "uma-US": "uma-Latn-US", + "umb": "umb-Latn-AO", + "umb-AO": "umb-Latn-AO", + "umb-Latn": "umb-Latn-AO", + "umd": "umd-Latn-AU", + "umd-AU": "umd-Latn-AU", + "umd-Latn": "umd-Latn-AU", + "umg": "umg-Latn-AU", + "umg-AU": "umg-Latn-AU", + "umg-Latn": "umg-Latn-AU", + "umi": "umi-Latn-MY", + "umi-Latn": "umi-Latn-MY", + "umi-MY": "umi-Latn-MY", + "umm": "umm-Latn-NG", + "umm-Latn": "umm-Latn-NG", + "umm-NG": "umm-Latn-NG", + "umn": "umn-Latn-MM", + "umn-Latn": "umn-Latn-MM", + "umn-MM": "umn-Latn-MM", + "umo": "umo-Latn-BR", + "umo-BR": "umo-Latn-BR", + "umo-Latn": "umo-Latn-BR", + "ump": "ump-Latn-AU", + "ump-AU": "ump-Latn-AU", + "ump-Latn": "ump-Latn-AU", + "umr": "umr-Latn-AU", + "umr-AU": "umr-Latn-AU", + "umr-Latn": "umr-Latn-AU", + "ums": "ums-Latn-ID", + "ums-ID": "ums-Latn-ID", + "ums-Latn": "ums-Latn-ID", + "una": "una-Latn-PG", + "una-Latn": "una-Latn-PG", + "una-PG": "una-Latn-PG", + "und": "en-Latn-US", + "und-419": "es-Latn-419", + "und-AC": "en-Latn-AC", + "und-AD": "ca-Latn-AD", + "und-AE": "ar-Arab-AE", + "und-AF": "fa-Arab-AF", + "und-AG": "en-Latn-AG", + "und-AI": "en-Latn-AI", + "und-AL": "sq-Latn-AL", + "und-AM": "hy-Armn-AM", + "und-AO": "pt-Latn-AO", + "und-AQ": "en-Latn-AQ", + "und-AR": "es-Latn-AR", + "und-AS": "sm-Latn-AS", + "und-AT": "de-Latn-AT", + "und-AU": "en-Latn-AU", + "und-AW": "nl-Latn-AW", + "und-AX": "sv-Latn-AX", + "und-AZ": "az-Latn-AZ", + "und-Adlm": "ff-Adlm-GN", + "und-Aghb": "xag-Aghb-AZ", + "und-Ahom": "aho-Ahom-IN", + "und-Arab": "ar-Arab-EG", + "und-Arab-AF": "fa-Arab-AF", + "und-Arab-BN": "ms-Arab-BN", + "und-Arab-CC": "ms-Arab-CC", + "und-Arab-CN": "ug-Arab-CN", + "und-Arab-GB": "ur-Arab-GB", + "und-Arab-ID": "ms-Arab-ID", + "und-Arab-IN": "ur-Arab-IN", + "und-Arab-IR": "fa-Arab-IR", + "und-Arab-KH": "cja-Arab-KH", + "und-Arab-MM": "rhg-Arab-MM", + "und-Arab-MN": "kk-Arab-MN", + "und-Arab-MU": "ur-Arab-MU", + "und-Arab-NG": "ha-Arab-NG", + "und-Arab-PK": "ur-Arab-PK", + "und-Arab-TG": "apd-Arab-TG", + "und-Arab-TH": "mfa-Arab-TH", + "und-Arab-TJ": "fa-Arab-TJ", + "und-Arab-TR": "apc-Arab-TR", + "und-Arab-YT": "swb-Arab-YT", + "und-Armi": "arc-Armi-IR", + "und-Armn": "hy-Armn-AM", + "und-Avst": "ae-Avst-IR", + "und-BA": "bs-Latn-BA", + "und-BB": "en-Latn-BB", + "und-BD": "bn-Beng-BD", + "und-BE": "nl-Latn-BE", + "und-BF": "fr-Latn-BF", + "und-BG": "bg-Cyrl-BG", + "und-BH": "ar-Arab-BH", + "und-BI": "rn-Latn-BI", + "und-BJ": "fr-Latn-BJ", + "und-BL": "fr-Latn-BL", + "und-BM": "en-Latn-BM", + "und-BN": "ms-Latn-BN", + "und-BO": "es-Latn-BO", + "und-BQ": "pap-Latn-BQ", + "und-BR": "pt-Latn-BR", + "und-BS": "en-Latn-BS", + "und-BT": "dz-Tibt-BT", + "und-BV": "no-Latn-BV", + "und-BW": "en-Latn-BW", + "und-BY": "be-Cyrl-BY", + "und-BZ": "en-Latn-BZ", + "und-Bali": "ban-Bali-ID", + "und-Bamu": "bax-Bamu-CM", + "und-Bass": "bsq-Bass-LR", + "und-Batk": "bbc-Batk-ID", + "und-Beng": "bn-Beng-BD", + "und-Bhks": "sa-Bhks-IN", + "und-Bopo": "zh-Bopo-TW", + "und-Brah": "pka-Brah-IN", + "und-Brai": "fr-Brai-FR", + "und-Bugi": "bug-Bugi-ID", + "und-Buhd": "bku-Buhd-PH", + "und-CA": "en-Latn-CA", + "und-CC": "ms-Arab-CC", + "und-CD": "sw-Latn-CD", + "und-CF": "fr-Latn-CF", + "und-CG": "fr-Latn-CG", + "und-CH": "de-Latn-CH", + "und-CI": "fr-Latn-CI", + "und-CK": "en-Latn-CK", + "und-CL": "es-Latn-CL", + "und-CM": "fr-Latn-CM", + "und-CN": "zh-Hans-CN", + "und-CO": "es-Latn-CO", + "und-CP": "en-Latn-CP", + "und-CQ": "en-Latn-CQ", + "und-CR": "es-Latn-CR", + "und-CU": "es-Latn-CU", + "und-CV": "pt-Latn-CV", + "und-CW": "pap-Latn-CW", + "und-CX": "en-Latn-CX", + "und-CY": "el-Grek-CY", + "und-CZ": "cs-Latn-CZ", + "und-Cakm": "ccp-Cakm-BD", + "und-Cans": "iu-Cans-CA", + "und-Cari": "xcr-Cari-TR", + "und-Cham": "cjm-Cham-VN", + "und-Cher": "chr-Cher-US", + "und-Chrs": "xco-Chrs-UZ", + "und-Copt": "cop-Copt-EG", + "und-Cpmn": "und-Cpmn-CY", + "und-Cprt": "grc-Cprt-CY", + "und-Cyrl": "ru-Cyrl-RU", + "und-Cyrl-AF": "kaa-Cyrl-AF", + "und-Cyrl-AL": "mk-Cyrl-AL", + "und-Cyrl-AZ": "az-Cyrl-AZ", + "und-Cyrl-BA": "sr-Cyrl-BA", + "und-Cyrl-BG": "bg-Cyrl-BG", + "und-Cyrl-BY": "be-Cyrl-BY", + "und-Cyrl-GE": "ab-Cyrl-GE", + "und-Cyrl-GR": "mk-Cyrl-GR", + "und-Cyrl-IR": "kaa-Cyrl-IR", + "und-Cyrl-KG": "ky-Cyrl-KG", + "und-Cyrl-MD": "uk-Cyrl-MD", + "und-Cyrl-ME": "sr-Cyrl-ME", + "und-Cyrl-MK": "mk-Cyrl-MK", + "und-Cyrl-MN": "mn-Cyrl-MN", + "und-Cyrl-RO": "bg-Cyrl-RO", + "und-Cyrl-RS": "sr-Cyrl-RS", + "und-Cyrl-SK": "uk-Cyrl-SK", + "und-Cyrl-TJ": "tg-Cyrl-TJ", + "und-Cyrl-TR": "kbd-Cyrl-TR", + "und-Cyrl-UA": "uk-Cyrl-UA", + "und-Cyrl-UZ": "uz-Cyrl-UZ", + "und-Cyrl-XK": "sr-Cyrl-XK", + "und-DE": "de-Latn-DE", + "und-DG": "en-Latn-DG", + "und-DJ": "aa-Latn-DJ", + "und-DK": "da-Latn-DK", + "und-DM": "en-Latn-DM", + "und-DO": "es-Latn-DO", + "und-DZ": "ar-Arab-DZ", + "und-Deva": "hi-Deva-IN", + "und-Deva-BT": "ne-Deva-BT", + "und-Deva-FJ": "hif-Deva-FJ", + "und-Deva-MU": "bho-Deva-MU", + "und-Deva-NP": "ne-Deva-NP", + "und-Deva-PK": "btv-Deva-PK", + "und-Diak": "dv-Diak-MV", + "und-Dogr": "doi-Dogr-IN", + "und-Dupl": "fr-Dupl-FR", + "und-EA": "es-Latn-EA", + "und-EC": "es-Latn-EC", + "und-EE": "et-Latn-EE", + "und-EG": "ar-Arab-EG", + "und-EH": "ar-Arab-EH", + "und-ER": "ti-Ethi-ER", + "und-ES": "es-Latn-ES", + "und-ET": "am-Ethi-ET", + "und-Egyp": "egy-Egyp-EG", + "und-Elba": "sq-Elba-AL", + "und-Elym": "arc-Elym-IR", + "und-Ethi": "am-Ethi-ET", + "und-Ethi-ER": "ti-Ethi-ER", + "und-FI": "fi-Latn-FI", + "und-FJ": "en-Latn-FJ", + "und-FK": "en-Latn-FK", + "und-FM": "en-Latn-FM", + "und-FO": "fo-Latn-FO", + "und-FR": "fr-Latn-FR", + "und-GA": "fr-Latn-GA", + "und-GB": "en-Latn-GB", + "und-GD": "en-Latn-GD", + "und-GE": "ka-Geor-GE", + "und-GF": "fr-Latn-GF", + "und-GG": "en-Latn-GG", + "und-GH": "ak-Latn-GH", + "und-GI": "en-Latn-GI", + "und-GL": "kl-Latn-GL", + "und-GM": "en-Latn-GM", + "und-GN": "fr-Latn-GN", + "und-GP": "fr-Latn-GP", + "und-GQ": "es-Latn-GQ", + "und-GR": "el-Grek-GR", + "und-GS": "en-Latn-GS", + "und-GT": "es-Latn-GT", + "und-GU": "en-Latn-GU", + "und-GW": "pt-Latn-GW", + "und-GY": "en-Latn-GY", + "und-Gara": "wo-Gara-SN", + "und-Geor": "ka-Geor-GE", + "und-Glag": "cu-Glag-BG", + "und-Gong": "wsg-Gong-IN", + "und-Gonm": "esg-Gonm-IN", + "und-Goth": "got-Goth-UA", + "und-Gran": "sa-Gran-IN", + "und-Grek": "el-Grek-GR", + "und-Grek-TR": "bgx-Grek-TR", + "und-Gujr": "gu-Gujr-IN", + "und-Gukh": "gvr-Gukh-NP", + "und-Guru": "pa-Guru-IN", + "und-HK": "zh-Hant-HK", + "und-HM": "en-Latn-HM", + "und-HN": "es-Latn-HN", + "und-HR": "hr-Latn-HR", + "und-HT": "ht-Latn-HT", + "und-HU": "hu-Latn-HU", + "und-Hanb": "zh-Hanb-TW", + "und-Hang": "ko-Hang-KR", + "und-Hani": "zh-Hani-CN", + "und-Hano": "hnn-Hano-PH", + "und-Hans": "zh-Hans-CN", + "und-Hant": "zh-Hant-TW", + "und-Hant-CA": "yue-Hant-CA", + "und-Hant-CN": "yue-Hant-CN", + "und-Hatr": "arc-Hatr-IQ", + "und-Hebr": "he-Hebr-IL", + "und-Hebr-SE": "yi-Hebr-SE", + "und-Hebr-UA": "yi-Hebr-UA", + "und-Hebr-US": "yi-Hebr-US", + "und-Hira": "ja-Hira-JP", + "und-Hluw": "hlu-Hluw-TR", + "und-Hmng": "hnj-Hmng-LA", + "und-Hmnp": "hnj-Hmnp-US", + "und-Hung": "hu-Hung-HU", + "und-IC": "es-Latn-IC", + "und-ID": "id-Latn-ID", + "und-IE": "en-Latn-IE", + "und-IL": "he-Hebr-IL", + "und-IM": "en-Latn-IM", + "und-IN": "hi-Deva-IN", + "und-IO": "en-Latn-IO", + "und-IQ": "ar-Arab-IQ", + "und-IR": "fa-Arab-IR", + "und-IS": "is-Latn-IS", + "und-IT": "it-Latn-IT", + "und-Ital": "ett-Ital-IT", + "und-JE": "en-Latn-JE", + "und-JM": "en-Latn-JM", + "und-JO": "ar-Arab-JO", + "und-JP": "ja-Jpan-JP", + "und-Jamo": "ko-Jamo-KR", + "und-Java": "jv-Java-ID", + "und-Jpan": "ja-Jpan-JP", + "und-KE": "sw-Latn-KE", + "und-KG": "ky-Cyrl-KG", + "und-KH": "km-Khmr-KH", + "und-KI": "en-Latn-KI", + "und-KM": "ar-Arab-KM", + "und-KN": "en-Latn-KN", + "und-KP": "ko-Kore-KP", + "und-KR": "ko-Kore-KR", + "und-KW": "ar-Arab-KW", + "und-KY": "en-Latn-KY", + "und-KZ": "ru-Cyrl-KZ", + "und-Kali": "eky-Kali-MM", + "und-Kana": "ja-Kana-JP", + "und-Kawi": "kaw-Kawi-ID", + "und-Khar": "pra-Khar-PK", + "und-Khmr": "km-Khmr-KH", + "und-Khoj": "sd-Khoj-IN", + "und-Kits": "zkt-Kits-CN", + "und-Knda": "kn-Knda-IN", + "und-Kore": "ko-Kore-KR", + "und-Krai": "bap-Krai-IN", + "und-Kthi": "bho-Kthi-IN", + "und-LA": "lo-Laoo-LA", + "und-LB": "ar-Arab-LB", + "und-LC": "en-Latn-LC", + "und-LI": "de-Latn-LI", + "und-LK": "si-Sinh-LK", + "und-LR": "en-Latn-LR", + "und-LS": "st-Latn-LS", + "und-LT": "lt-Latn-LT", + "und-LU": "fr-Latn-LU", + "und-LV": "lv-Latn-LV", + "und-LY": "ar-Arab-LY", + "und-Lana": "nod-Lana-TH", + "und-Laoo": "lo-Laoo-LA", + "und-Laoo-AU": "hnj-Laoo-AU", + "und-Laoo-CN": "hnj-Laoo-CN", + "und-Laoo-FR": "hnj-Laoo-FR", + "und-Laoo-GF": "hnj-Laoo-GF", + "und-Laoo-MM": "hnj-Laoo-MM", + "und-Laoo-SR": "hnj-Laoo-SR", + "und-Laoo-TH": "hnj-Laoo-TH", + "und-Laoo-US": "hnj-Laoo-US", + "und-Laoo-VN": "hnj-Laoo-VN", + "und-Latn": "en-Latn-US", + "und-Latn-419": "es-Latn-419", + "und-Latn-AD": "ca-Latn-AD", + "und-Latn-AE": "en-Latn-AE", + "und-Latn-AF": "tk-Latn-AF", + "und-Latn-AL": "sq-Latn-AL", + "und-Latn-AM": "ku-Latn-AM", + "und-Latn-AO": "pt-Latn-AO", + "und-Latn-AR": "es-Latn-AR", + "und-Latn-AS": "sm-Latn-AS", + "und-Latn-AT": "de-Latn-AT", + "und-Latn-AW": "nl-Latn-AW", + "und-Latn-AX": "sv-Latn-AX", + "und-Latn-AZ": "az-Latn-AZ", + "und-Latn-BA": "bs-Latn-BA", + "und-Latn-BD": "en-Latn-BD", + "und-Latn-BE": "nl-Latn-BE", + "und-Latn-BF": "fr-Latn-BF", + "und-Latn-BG": "en-Latn-BG", + "und-Latn-BI": "rn-Latn-BI", + "und-Latn-BJ": "fr-Latn-BJ", + "und-Latn-BL": "fr-Latn-BL", + "und-Latn-BN": "ms-Latn-BN", + "und-Latn-BO": "es-Latn-BO", + "und-Latn-BQ": "pap-Latn-BQ", + "und-Latn-BR": "pt-Latn-BR", + "und-Latn-BT": "en-Latn-BT", + "und-Latn-CC": "en-Latn-CC", + "und-Latn-CD": "sw-Latn-CD", + "und-Latn-CF": "fr-Latn-CF", + "und-Latn-CG": "fr-Latn-CG", + "und-Latn-CH": "de-Latn-CH", + "und-Latn-CI": "fr-Latn-CI", + "und-Latn-CL": "es-Latn-CL", + "und-Latn-CM": "fr-Latn-CM", + "und-Latn-CN": "za-Latn-CN", + "und-Latn-CO": "es-Latn-CO", + "und-Latn-CR": "es-Latn-CR", + "und-Latn-CU": "es-Latn-CU", + "und-Latn-CV": "pt-Latn-CV", + "und-Latn-CW": "pap-Latn-CW", + "und-Latn-CY": "tr-Latn-CY", + "und-Latn-CZ": "cs-Latn-CZ", + "und-Latn-DE": "de-Latn-DE", + "und-Latn-DJ": "aa-Latn-DJ", + "und-Latn-DK": "da-Latn-DK", + "und-Latn-DO": "es-Latn-DO", + "und-Latn-DZ": "fr-Latn-DZ", + "und-Latn-EA": "es-Latn-EA", + "und-Latn-EC": "es-Latn-EC", + "und-Latn-EE": "et-Latn-EE", + "und-Latn-EG": "en-Latn-EG", + "und-Latn-ER": "en-Latn-ER", + "und-Latn-ES": "es-Latn-ES", + "und-Latn-ET": "en-Latn-ET", + "und-Latn-FI": "fi-Latn-FI", + "und-Latn-FO": "fo-Latn-FO", + "und-Latn-FR": "fr-Latn-FR", + "und-Latn-GA": "fr-Latn-GA", + "und-Latn-GE": "ku-Latn-GE", + "und-Latn-GF": "fr-Latn-GF", + "und-Latn-GH": "ak-Latn-GH", + "und-Latn-GL": "kl-Latn-GL", + "und-Latn-GN": "fr-Latn-GN", + "und-Latn-GP": "fr-Latn-GP", + "und-Latn-GQ": "es-Latn-GQ", + "und-Latn-GR": "en-Latn-GR", + "und-Latn-GT": "es-Latn-GT", + "und-Latn-GW": "pt-Latn-GW", + "und-Latn-HK": "en-Latn-HK", + "und-Latn-HN": "es-Latn-HN", + "und-Latn-HR": "hr-Latn-HR", + "und-Latn-HT": "ht-Latn-HT", + "und-Latn-HU": "hu-Latn-HU", + "und-Latn-IC": "es-Latn-IC", + "und-Latn-ID": "id-Latn-ID", + "und-Latn-IL": "en-Latn-IL", + "und-Latn-IN": "en-Latn-IN", + "und-Latn-IQ": "en-Latn-IQ", + "und-Latn-IR": "tk-Latn-IR", + "und-Latn-IS": "is-Latn-IS", + "und-Latn-IT": "it-Latn-IT", + "und-Latn-JO": "en-Latn-JO", + "und-Latn-KE": "sw-Latn-KE", + "und-Latn-KM": "fr-Latn-KM", + "und-Latn-KZ": "en-Latn-KZ", + "und-Latn-LB": "en-Latn-LB", + "und-Latn-LI": "de-Latn-LI", + "und-Latn-LK": "en-Latn-LK", + "und-Latn-LS": "st-Latn-LS", + "und-Latn-LT": "lt-Latn-LT", + "und-Latn-LU": "fr-Latn-LU", + "und-Latn-LV": "lv-Latn-LV", + "und-Latn-MA": "fr-Latn-MA", + "und-Latn-MC": "fr-Latn-MC", + "und-Latn-MD": "ro-Latn-MD", + "und-Latn-ME": "sr-Latn-ME", + "und-Latn-MF": "fr-Latn-MF", + "und-Latn-MG": "mg-Latn-MG", + "und-Latn-MK": "sq-Latn-MK", + "und-Latn-ML": "bm-Latn-ML", + "und-Latn-MM": "kac-Latn-MM", + "und-Latn-MO": "pt-Latn-MO", + "und-Latn-MQ": "fr-Latn-MQ", + "und-Latn-MR": "fr-Latn-MR", + "und-Latn-MT": "mt-Latn-MT", + "und-Latn-MU": "mfe-Latn-MU", + "und-Latn-MV": "en-Latn-MV", + "und-Latn-MX": "es-Latn-MX", + "und-Latn-MY": "ms-Latn-MY", + "und-Latn-MZ": "pt-Latn-MZ", + "und-Latn-NA": "af-Latn-NA", + "und-Latn-NC": "fr-Latn-NC", + "und-Latn-NE": "ha-Latn-NE", + "und-Latn-NI": "es-Latn-NI", + "und-Latn-NL": "nl-Latn-NL", + "und-Latn-NO": "nb-Latn-NO", + "und-Latn-NP": "en-Latn-NP", + "und-Latn-PA": "es-Latn-PA", + "und-Latn-PE": "es-Latn-PE", + "und-Latn-PF": "fr-Latn-PF", + "und-Latn-PG": "tpi-Latn-PG", + "und-Latn-PH": "fil-Latn-PH", + "und-Latn-PK": "en-Latn-PK", + "und-Latn-PL": "pl-Latn-PL", + "und-Latn-PM": "fr-Latn-PM", + "und-Latn-PR": "es-Latn-PR", + "und-Latn-PT": "pt-Latn-PT", + "und-Latn-PW": "pau-Latn-PW", + "und-Latn-PY": "gn-Latn-PY", + "und-Latn-RE": "fr-Latn-RE", + "und-Latn-RO": "ro-Latn-RO", + "und-Latn-RS": "sr-Latn-RS", + "und-Latn-RU": "krl-Latn-RU", + "und-Latn-RW": "rw-Latn-RW", + "und-Latn-SC": "fr-Latn-SC", + "und-Latn-SD": "en-Latn-SD", + "und-Latn-SE": "sv-Latn-SE", + "und-Latn-SI": "sl-Latn-SI", + "und-Latn-SJ": "nb-Latn-SJ", + "und-Latn-SK": "sk-Latn-SK", + "und-Latn-SL": "kri-Latn-SL", + "und-Latn-SM": "it-Latn-SM", + "und-Latn-SN": "fr-Latn-SN", + "und-Latn-SO": "so-Latn-SO", + "und-Latn-SR": "nl-Latn-SR", + "und-Latn-SS": "en-Latn-SS", + "und-Latn-ST": "pt-Latn-ST", + "und-Latn-SV": "es-Latn-SV", + "und-Latn-SY": "fr-Latn-SY", + "und-Latn-TD": "fr-Latn-TD", + "und-Latn-TF": "fr-Latn-TF", + "und-Latn-TG": "fr-Latn-TG", + "und-Latn-TH": "en-Latn-TH", + "und-Latn-TK": "tkl-Latn-TK", + "und-Latn-TL": "pt-Latn-TL", + "und-Latn-TM": "tk-Latn-TM", + "und-Latn-TN": "fr-Latn-TN", + "und-Latn-TO": "to-Latn-TO", + "und-Latn-TR": "tr-Latn-TR", + "und-Latn-TV": "tvl-Latn-TV", + "und-Latn-TW": "trv-Latn-TW", + "und-Latn-TZ": "sw-Latn-TZ", + "und-Latn-UA": "pl-Latn-UA", + "und-Latn-UG": "sw-Latn-UG", + "und-Latn-UY": "es-Latn-UY", + "und-Latn-UZ": "uz-Latn-UZ", + "und-Latn-VA": "it-Latn-VA", + "und-Latn-VE": "es-Latn-VE", + "und-Latn-VN": "vi-Latn-VN", + "und-Latn-VU": "bi-Latn-VU", + "und-Latn-WF": "fr-Latn-WF", + "und-Latn-WS": "sm-Latn-WS", + "und-Latn-XK": "sq-Latn-XK", + "und-Latn-YE": "en-Latn-YE", + "und-Latn-YT": "fr-Latn-YT", + "und-Latn-ZM": "bem-Latn-ZM", + "und-Latn-ZW": "sn-Latn-ZW", + "und-Lepc": "lep-Lepc-IN", + "und-Limb": "lif-Limb-IN", + "und-Lina": "lab-Lina-GR", + "und-Linb": "grc-Linb-GR", + "und-Lisu": "lis-Lisu-CN", + "und-Lyci": "xlc-Lyci-TR", + "und-Lydi": "xld-Lydi-TR", + "und-MA": "ar-Arab-MA", + "und-MC": "fr-Latn-MC", + "und-MD": "ro-Latn-MD", + "und-ME": "sr-Latn-ME", + "und-MF": "fr-Latn-MF", + "und-MG": "mg-Latn-MG", + "und-MH": "en-Latn-MH", + "und-MK": "mk-Cyrl-MK", + "und-ML": "bm-Latn-ML", + "und-MM": "my-Mymr-MM", + "und-MN": "mn-Cyrl-MN", + "und-MO": "zh-Hant-MO", + "und-MP": "en-Latn-MP", + "und-MQ": "fr-Latn-MQ", + "und-MR": "ar-Arab-MR", + "und-MS": "en-Latn-MS", + "und-MT": "mt-Latn-MT", + "und-MU": "mfe-Latn-MU", + "und-MV": "dv-Thaa-MV", + "und-MW": "en-Latn-MW", + "und-MX": "es-Latn-MX", + "und-MY": "ms-Latn-MY", + "und-MZ": "pt-Latn-MZ", + "und-Mahj": "hi-Mahj-IN", + "und-Maka": "mak-Maka-ID", + "und-Mand": "myz-Mand-IR", + "und-Mani": "xmn-Mani-CN", + "und-Marc": "bo-Marc-CN", + "und-Medf": "dmf-Medf-NG", + "und-Mend": "men-Mend-SL", + "und-Merc": "xmr-Merc-SD", + "und-Mero": "xmr-Mero-SD", + "und-Mlym": "ml-Mlym-IN", + "und-Modi": "mr-Modi-IN", + "und-Mong": "mn-Mong-CN", + "und-Mroo": "mro-Mroo-BD", + "und-Mtei": "mni-Mtei-IN", + "und-Mult": "skr-Mult-PK", + "und-Mymr": "my-Mymr-MM", + "und-Mymr-IN": "kht-Mymr-IN", + "und-Mymr-TH": "mnw-Mymr-TH", + "und-NA": "af-Latn-NA", + "und-NC": "fr-Latn-NC", + "und-NE": "ha-Latn-NE", + "und-NF": "en-Latn-NF", + "und-NG": "en-Latn-NG", + "und-NI": "es-Latn-NI", + "und-NL": "nl-Latn-NL", + "und-NO": "nb-Latn-NO", + "und-NP": "ne-Deva-NP", + "und-NR": "na-Latn-NR", + "und-NU": "en-Latn-NU", + "und-NZ": "en-Latn-NZ", + "und-Nagm": "unr-Nagm-IN", + "und-Nand": "sa-Nand-IN", + "und-Narb": "xna-Narb-SA", + "und-Nbat": "arc-Nbat-JO", + "und-Newa": "new-Newa-NP", + "und-Nkoo": "man-Nkoo-GN", + "und-Nkoo-ML": "bm-Nkoo-ML", + "und-Nshu": "zhx-Nshu-CN", + "und-OM": "ar-Arab-OM", + "und-Ogam": "sga-Ogam-IE", + "und-Olck": "sat-Olck-IN", + "und-Onao": "unr-Onao-IN", + "und-Orkh": "otk-Orkh-MN", + "und-Orya": "or-Orya-IN", + "und-Osge": "osa-Osge-US", + "und-Osma": "so-Osma-SO", + "und-Ougr": "oui-Ougr-CN", + "und-PA": "es-Latn-PA", + "und-PE": "es-Latn-PE", + "und-PF": "fr-Latn-PF", + "und-PG": "tpi-Latn-PG", + "und-PH": "fil-Latn-PH", + "und-PK": "ur-Arab-PK", + "und-PL": "pl-Latn-PL", + "und-PM": "fr-Latn-PM", + "und-PN": "en-Latn-PN", + "und-PR": "es-Latn-PR", + "und-PS": "ar-Arab-PS", + "und-PT": "pt-Latn-PT", + "und-PW": "pau-Latn-PW", + "und-PY": "gn-Latn-PY", + "und-Palm": "arc-Palm-SY", + "und-Pauc": "ctd-Pauc-MM", + "und-Perm": "kv-Perm-RU", + "und-Phag": "lzh-Phag-CN", + "und-Phli": "pal-Phli-IR", + "und-Phlp": "pal-Phlp-CN", + "und-Phnx": "phn-Phnx-LB", + "und-Plrd": "hmd-Plrd-CN", + "und-Prti": "xpr-Prti-IR", + "und-QA": "ar-Arab-QA", + "und-RE": "fr-Latn-RE", + "und-RO": "ro-Latn-RO", + "und-RS": "sr-Cyrl-RS", + "und-RU": "ru-Cyrl-RU", + "und-RW": "rw-Latn-RW", + "und-Rjng": "rej-Rjng-ID", + "und-Rohg": "rhg-Rohg-MM", + "und-Runr": "non-Runr-SE", + "und-SA": "ar-Arab-SA", + "und-SB": "en-Latn-SB", + "und-SC": "fr-Latn-SC", + "und-SD": "ar-Arab-SD", + "und-SE": "sv-Latn-SE", + "und-SG": "en-Latn-SG", + "und-SH": "en-Latn-SH", + "und-SI": "sl-Latn-SI", + "und-SJ": "nb-Latn-SJ", + "und-SK": "sk-Latn-SK", + "und-SL": "kri-Latn-SL", + "und-SM": "it-Latn-SM", + "und-SN": "fr-Latn-SN", + "und-SO": "so-Latn-SO", + "und-SR": "nl-Latn-SR", + "und-SS": "ar-Arab-SS", + "und-ST": "pt-Latn-ST", + "und-SV": "es-Latn-SV", + "und-SX": "en-Latn-SX", + "und-SY": "ar-Arab-SY", + "und-SZ": "ss-Latn-SZ", + "und-Samr": "smp-Samr-IL", + "und-Sarb": "xsa-Sarb-YE", + "und-Saur": "saz-Saur-IN", + "und-Sgnw": "ase-Sgnw-US", + "und-Shaw": "en-Shaw-GB", + "und-Shrd": "sa-Shrd-IN", + "und-Sidd": "sa-Sidd-IN", + "und-Sind": "sd-Sind-IN", + "und-Sinh": "si-Sinh-LK", + "und-Sogd": "sog-Sogd-UZ", + "und-Sogo": "sog-Sogo-UZ", + "und-Sora": "srb-Sora-IN", + "und-Soyo": "cmg-Soyo-MN", + "und-Sund": "su-Sund-ID", + "und-Sunu": "suz-Sunu-NP", + "und-Sylo": "syl-Sylo-BD", + "und-Syrc": "syr-Syrc-IQ", + "und-TA": "en-Latn-TA", + "und-TC": "en-Latn-TC", + "und-TD": "fr-Latn-TD", + "und-TF": "fr-Latn-TF", + "und-TG": "fr-Latn-TG", + "und-TH": "th-Thai-TH", + "und-TJ": "tg-Cyrl-TJ", + "und-TK": "tkl-Latn-TK", + "und-TL": "pt-Latn-TL", + "und-TM": "tk-Latn-TM", + "und-TN": "ar-Arab-TN", + "und-TO": "to-Latn-TO", + "und-TR": "tr-Latn-TR", + "und-TT": "en-Latn-TT", + "und-TV": "tvl-Latn-TV", + "und-TW": "zh-Hant-TW", + "und-TZ": "sw-Latn-TZ", + "und-Tagb": "tbw-Tagb-PH", + "und-Takr": "doi-Takr-IN", + "und-Tale": "tdd-Tale-CN", + "und-Talu": "khb-Talu-CN", + "und-Taml": "ta-Taml-IN", + "und-Tang": "txg-Tang-CN", + "und-Tavt": "blt-Tavt-VN", + "und-Telu": "te-Telu-IN", + "und-Tfng": "zgh-Tfng-MA", + "und-Tglg": "fil-Tglg-PH", + "und-Thaa": "dv-Thaa-MV", + "und-Thai": "th-Thai-TH", + "und-Thai-CN": "lcp-Thai-CN", + "und-Thai-KH": "kdt-Thai-KH", + "und-Thai-LA": "kdt-Thai-LA", + "und-Tibt": "bo-Tibt-CN", + "und-Tibt-BT": "dz-Tibt-BT", + "und-Tirh": "mai-Tirh-IN", + "und-Tnsa": "nst-Tnsa-IN", + "und-Todr": "sq-Todr-AL", + "und-Toto": "txo-Toto-IN", + "und-Tutg": "sa-Tutg-IN", + "und-UA": "uk-Cyrl-UA", + "und-UG": "sw-Latn-UG", + "und-UM": "en-Latn-UM", + "und-US": "en-Latn-US", + "und-UY": "es-Latn-UY", + "und-UZ": "uz-Latn-UZ", + "und-Ugar": "uga-Ugar-SY", + "und-VA": "it-Latn-VA", + "und-VC": "en-Latn-VC", + "und-VE": "es-Latn-VE", + "und-VG": "en-Latn-VG", + "und-VI": "en-Latn-VI", + "und-VN": "vi-Latn-VN", + "und-VU": "bi-Latn-VU", + "und-Vaii": "vai-Vaii-LR", + "und-Vith": "sq-Vith-AL", + "und-WF": "fr-Latn-WF", + "und-WS": "sm-Latn-WS", + "und-Wara": "hoc-Wara-IN", + "und-Wcho": "nnp-Wcho-IN", + "und-XK": "sq-Latn-XK", + "und-XX": "zxx-Latn-XX", + "und-Xpeo": "peo-Xpeo-IR", + "und-Xsux": "akk-Xsux-IQ", + "und-YE": "ar-Arab-YE", + "und-YT": "fr-Latn-YT", + "und-Yezi": "ku-Yezi-GE", + "und-Yiii": "ii-Yiii-CN", + "und-ZA": "en-Latn-ZA", + "und-ZM": "bem-Latn-ZM", + "und-ZW": "sn-Latn-ZW", + "und-Zanb": "cmg-Zanb-MN", + "une": "une-Latn-NG", + "une-Latn": "une-Latn-NG", + "une-NG": "une-Latn-NG", + "ung": "ung-Latn-AU", + "ung-AU": "ung-Latn-AU", + "ung-Latn": "ung-Latn-AU", + "uni": "uni-Latn-PG", + "uni-Latn": "uni-Latn-PG", + "uni-PG": "uni-Latn-PG", + "unk": "unk-Latn-BR", + "unk-BR": "unk-Latn-BR", + "unk-Latn": "unk-Latn-BR", + "unm": "unm-Latn-US", + "unm-Latn": "unm-Latn-US", + "unm-US": "unm-Latn-US", + "unn": "unn-Latn-AU", + "unn-AU": "unn-Latn-AU", + "unn-Latn": "unn-Latn-AU", + "unr": "unr-Beng-IN", + "unr-Beng": "unr-Beng-IN", + "unr-Deva": "unr-Deva-NP", + "unr-IN": "unr-Beng-IN", + "unr-NP": "unr-Deva-NP", + "unr-Nagm": "unr-Nagm-IN", + "unr-Onao": "unr-Onao-IN", + "unu": "unu-Latn-PG", + "unu-Latn": "unu-Latn-PG", + "unu-PG": "unu-Latn-PG", + "unx": "unx-Beng-IN", + "unx-Beng": "unx-Beng-IN", + "unx-IN": "unx-Beng-IN", + "unz": "unz-Latn-ID", + "unz-ID": "unz-Latn-ID", + "unz-Latn": "unz-Latn-ID", + "uon": "uon-Latn-TW", + "uon-Latn": "uon-Latn-TW", + "uon-TW": "uon-Latn-TW", + "upi": "upi-Latn-PG", + "upi-Latn": "upi-Latn-PG", + "upi-PG": "upi-Latn-PG", + "upv": "upv-Latn-VU", + "upv-Latn": "upv-Latn-VU", + "upv-VU": "upv-Latn-VU", + "ur": "ur-Arab-PK", + "ur-Arab": "ur-Arab-PK", + "ur-Arab-GB": "ur-Arab-GB", + "ur-Arab-IN": "ur-Arab-IN", + "ur-Arab-MU": "ur-Arab-MU", + "ur-Arab-PK": "ur-Arab-PK", + "ur-IN": "ur-Arab-IN", + "ur-PK": "ur-Arab-PK", + "ura": "ura-Latn-PE", + "ura-Latn": "ura-Latn-PE", + "ura-PE": "ura-Latn-PE", + "urb": "urb-Latn-BR", + "urb-BR": "urb-Latn-BR", + "urb-Latn": "urb-Latn-BR", + "urc": "urc-Latn-AU", + "urc-AU": "urc-Latn-AU", + "urc-Latn": "urc-Latn-AU", + "ure": "ure-Latn-BO", + "ure-BO": "ure-Latn-BO", + "ure-Latn": "ure-Latn-BO", + "urf": "urf-Latn-AU", + "urf-AU": "urf-Latn-AU", + "urf-Latn": "urf-Latn-AU", + "urg": "urg-Latn-PG", + "urg-Latn": "urg-Latn-PG", + "urg-PG": "urg-Latn-PG", + "urh": "urh-Latn-NG", + "urh-Latn": "urh-Latn-NG", + "urh-NG": "urh-Latn-NG", + "uri": "uri-Latn-PG", + "uri-Latn": "uri-Latn-PG", + "uri-PG": "uri-Latn-PG", + "urk": "urk-Thai-TH", + "urk-TH": "urk-Thai-TH", + "urk-Thai": "urk-Thai-TH", + "urm": "urm-Latn-PG", + "urm-Latn": "urm-Latn-PG", + "urm-PG": "urm-Latn-PG", + "urn": "urn-Latn-ID", + "urn-ID": "urn-Latn-ID", + "urn-Latn": "urn-Latn-ID", + "uro": "uro-Latn-PG", + "uro-Latn": "uro-Latn-PG", + "uro-PG": "uro-Latn-PG", + "urp": "urp-Latn-BR", + "urp-BR": "urp-Latn-BR", + "urp-Latn": "urp-Latn-BR", + "urr": "urr-Latn-VU", + "urr-Latn": "urr-Latn-VU", + "urr-VU": "urr-Latn-VU", + "urt": "urt-Latn-PG", + "urt-Latn": "urt-Latn-PG", + "urt-PG": "urt-Latn-PG", + "uru": "uru-Latn-BR", + "uru-BR": "uru-Latn-BR", + "uru-Latn": "uru-Latn-BR", + "urv": "urv-Latn-PG", + "urv-Latn": "urv-Latn-PG", + "urv-PG": "urv-Latn-PG", + "urw": "urw-Latn-PG", + "urw-Latn": "urw-Latn-PG", + "urw-PG": "urw-Latn-PG", + "urx": "urx-Latn-PG", + "urx-Latn": "urx-Latn-PG", + "urx-PG": "urx-Latn-PG", + "ury": "ury-Latn-ID", + "ury-ID": "ury-Latn-ID", + "ury-Latn": "ury-Latn-ID", + "urz": "urz-Latn-BR", + "urz-BR": "urz-Latn-BR", + "urz-Latn": "urz-Latn-BR", + "usa": "usa-Latn-PG", + "usa-Latn": "usa-Latn-PG", + "usa-PG": "usa-Latn-PG", + "ush": "ush-Arab-PK", + "ush-Arab": "ush-Arab-PK", + "ush-PK": "ush-Arab-PK", + "usi": "usi-Latn-BD", + "usi-BD": "usi-Latn-BD", + "usi-Latn": "usi-Latn-BD", + "usk": "usk-Latn-CM", + "usk-CM": "usk-Latn-CM", + "usk-Latn": "usk-Latn-CM", + "usp": "usp-Latn-GT", + "usp-GT": "usp-Latn-GT", + "usp-Latn": "usp-Latn-GT", + "uss": "uss-Latn-NG", + "uss-Latn": "uss-Latn-NG", + "uss-NG": "uss-Latn-NG", + "usu": "usu-Latn-PG", + "usu-Latn": "usu-Latn-PG", + "usu-PG": "usu-Latn-PG", + "uta": "uta-Latn-NG", + "uta-Latn": "uta-Latn-NG", + "uta-NG": "uta-Latn-NG", + "ute": "ute-Latn-US", + "ute-Latn": "ute-Latn-US", + "ute-US": "ute-Latn-US", + "uth": "uth-Latn-NG", + "uth-Latn": "uth-Latn-NG", + "uth-NG": "uth-Latn-NG", + "utp": "utp-Latn-SB", + "utp-Latn": "utp-Latn-SB", + "utp-SB": "utp-Latn-SB", + "utr": "utr-Latn-NG", + "utr-Latn": "utr-Latn-NG", + "utr-NG": "utr-Latn-NG", + "utu": "utu-Latn-PG", + "utu-Latn": "utu-Latn-PG", + "utu-PG": "utu-Latn-PG", + "uum": "uum-Grek-GE", + "uum-GE": "uum-Grek-GE", + "uum-Grek": "uum-Grek-GE", + "uur": "uur-Latn-VU", + "uur-Latn": "uur-Latn-VU", + "uur-VU": "uur-Latn-VU", + "uve": "uve-Latn-NC", + "uve-Latn": "uve-Latn-NC", + "uve-NC": "uve-Latn-NC", + "uvh": "uvh-Latn-PG", + "uvh-Latn": "uvh-Latn-PG", + "uvh-PG": "uvh-Latn-PG", + "uvl": "uvl-Latn-PG", + "uvl-Latn": "uvl-Latn-PG", + "uvl-PG": "uvl-Latn-PG", + "uwa": "uwa-Latn-AU", + "uwa-AU": "uwa-Latn-AU", + "uwa-Latn": "uwa-Latn-AU", + "uya": "uya-Latn-NG", + "uya-Latn": "uya-Latn-NG", + "uya-NG": "uya-Latn-NG", + "uz": "uz-Latn-UZ", + "uz-AF": "uz-Arab-AF", + "uz-Arab": "uz-Arab-AF", + "uz-CN": "uz-Cyrl-CN", + "uz-Cyrl-UZ": "uz-Cyrl-UZ", + "uz-Latn": "uz-Latn-UZ", + "uz-UZ": "uz-Latn-UZ", + "uzs": "uzs-Arab-AF", + "uzs-AF": "uzs-Arab-AF", + "uzs-Arab": "uzs-Arab-AF", + "vaa": "vaa-Taml-IN", + "vaa-IN": "vaa-Taml-IN", + "vaa-Taml": "vaa-Taml-IN", + "vae": "vae-Latn-CF", + "vae-CF": "vae-Latn-CF", + "vae-Latn": "vae-Latn-CF", + "vaf": "vaf-Arab-IR", + "vaf-Arab": "vaf-Arab-IR", + "vaf-IR": "vaf-Arab-IR", + "vag": "vag-Latn-GH", + "vag-GH": "vag-Latn-GH", + "vag-Latn": "vag-Latn-GH", + "vah": "vah-Deva-IN", + "vah-Deva": "vah-Deva-IN", + "vah-IN": "vah-Deva-IN", + "vai": "vai-Vaii-LR", + "vai-LR": "vai-Vaii-LR", + "vai-Vaii": "vai-Vaii-LR", + "vaj": "vaj-Latn-NA", + "vaj-Latn": "vaj-Latn-NA", + "vaj-NA": "vaj-Latn-NA", + "val": "val-Latn-PG", + "val-Latn": "val-Latn-PG", + "val-PG": "val-Latn-PG", + "vam": "vam-Latn-PG", + "vam-Latn": "vam-Latn-PG", + "vam-PG": "vam-Latn-PG", + "van": "van-Latn-PG", + "van-Latn": "van-Latn-PG", + "van-PG": "van-Latn-PG", + "vao": "vao-Latn-VU", + "vao-Latn": "vao-Latn-VU", + "vao-VU": "vao-Latn-VU", + "vap": "vap-Latn-IN", + "vap-IN": "vap-Latn-IN", + "vap-Latn": "vap-Latn-IN", + "var": "var-Latn-MX", + "var-Latn": "var-Latn-MX", + "var-MX": "var-Latn-MX", + "vas": "vas-Deva-IN", + "vas-Deva": "vas-Deva-IN", + "vas-IN": "vas-Deva-IN", + "vau": "vau-Latn-CD", + "vau-CD": "vau-Latn-CD", + "vau-Latn": "vau-Latn-CD", + "vav": "vav-Deva-IN", + "vav-Deva": "vav-Deva-IN", + "vav-IN": "vav-Deva-IN", + "vay": "vay-Deva-NP", + "vay-Deva": "vay-Deva-NP", + "vay-NP": "vay-Deva-NP", + "vbb": "vbb-Latn-ID", + "vbb-ID": "vbb-Latn-ID", + "vbb-Latn": "vbb-Latn-ID", + "vbk": "vbk-Latn-PH", + "vbk-Latn": "vbk-Latn-PH", + "vbk-PH": "vbk-Latn-PH", + "ve": "ve-Latn-ZA", + "ve-Latn": "ve-Latn-ZA", + "ve-ZA": "ve-Latn-ZA", + "vec": "vec-Latn-IT", + "vec-IT": "vec-Latn-IT", + "vec-Latn": "vec-Latn-IT", + "vem": "vem-Latn-NG", + "vem-Latn": "vem-Latn-NG", + "vem-NG": "vem-Latn-NG", + "veo": "veo-Latn-US", + "veo-Latn": "veo-Latn-US", + "veo-US": "veo-Latn-US", + "vep": "vep-Latn-RU", + "vep-Latn": "vep-Latn-RU", + "vep-RU": "vep-Latn-RU", + "ver": "ver-Latn-NG", + "ver-Latn": "ver-Latn-NG", + "ver-NG": "ver-Latn-NG", + "vgr": "vgr-Arab-PK", + "vgr-Arab": "vgr-Arab-PK", + "vgr-PK": "vgr-Arab-PK", + "vi": "vi-Latn-VN", + "vi-Latn": "vi-Latn-VN", + "vi-VN": "vi-Latn-VN", + "vic": "vic-Latn-SX", + "vic-Latn": "vic-Latn-SX", + "vic-SX": "vic-Latn-SX", + "vid": "vid-Latn-TZ", + "vid-Latn": "vid-Latn-TZ", + "vid-TZ": "vid-Latn-TZ", + "vif": "vif-Latn-CG", + "vif-CG": "vif-Latn-CG", + "vif-Latn": "vif-Latn-CG", + "vig": "vig-Latn-BF", + "vig-BF": "vig-Latn-BF", + "vig-Latn": "vig-Latn-BF", + "vil": "vil-Latn-AR", + "vil-AR": "vil-Latn-AR", + "vil-Latn": "vil-Latn-AR", + "vin": "vin-Latn-TZ", + "vin-Latn": "vin-Latn-TZ", + "vin-TZ": "vin-Latn-TZ", + "vit": "vit-Latn-NG", + "vit-Latn": "vit-Latn-NG", + "vit-NG": "vit-Latn-NG", + "viv": "viv-Latn-PG", + "viv-Latn": "viv-Latn-PG", + "viv-PG": "viv-Latn-PG", + "vjk": "vjk-Deva-IN", + "vjk-Deva": "vjk-Deva-IN", + "vjk-IN": "vjk-Deva-IN", + "vka": "vka-Latn-AU", + "vka-AU": "vka-Latn-AU", + "vka-Latn": "vka-Latn-AU", + "vkj": "vkj-Latn-TD", + "vkj-Latn": "vkj-Latn-TD", + "vkj-TD": "vkj-Latn-TD", + "vkk": "vkk-Latn-ID", + "vkk-ID": "vkk-Latn-ID", + "vkk-Latn": "vkk-Latn-ID", + "vkl": "vkl-Latn-ID", + "vkl-ID": "vkl-Latn-ID", + "vkl-Latn": "vkl-Latn-ID", + "vkm": "vkm-Latn-BR", + "vkm-BR": "vkm-Latn-BR", + "vkm-Latn": "vkm-Latn-BR", + "vkn": "vkn-Latn-NG", + "vkn-Latn": "vkn-Latn-NG", + "vkn-NG": "vkn-Latn-NG", + "vko": "vko-Latn-ID", + "vko-ID": "vko-Latn-ID", + "vko-Latn": "vko-Latn-ID", + "vkp": "vkp-Latn-IN", + "vkp-IN": "vkp-Latn-IN", + "vkp-Latn": "vkp-Latn-IN", + "vkt": "vkt-Latn-ID", + "vkt-ID": "vkt-Latn-ID", + "vkt-Latn": "vkt-Latn-ID", + "vku": "vku-Latn-AU", + "vku-AU": "vku-Latn-AU", + "vku-Latn": "vku-Latn-AU", + "vkz": "vkz-Latn-NG", + "vkz-Latn": "vkz-Latn-NG", + "vkz-NG": "vkz-Latn-NG", + "vlp": "vlp-Latn-VU", + "vlp-Latn": "vlp-Latn-VU", + "vlp-VU": "vlp-Latn-VU", + "vls": "vls-Latn-BE", + "vls-BE": "vls-Latn-BE", + "vls-Latn": "vls-Latn-BE", + "vma": "vma-Latn-AU", + "vma-AU": "vma-Latn-AU", + "vma-Latn": "vma-Latn-AU", + "vmb": "vmb-Latn-AU", + "vmb-AU": "vmb-Latn-AU", + "vmb-Latn": "vmb-Latn-AU", + "vmc": "vmc-Latn-MX", + "vmc-Latn": "vmc-Latn-MX", + "vmc-MX": "vmc-Latn-MX", + "vmd": "vmd-Knda-IN", + "vmd-IN": "vmd-Knda-IN", + "vmd-Knda": "vmd-Knda-IN", + "vme": "vme-Latn-ID", + "vme-ID": "vme-Latn-ID", + "vme-Latn": "vme-Latn-ID", + "vmf": "vmf-Latn-DE", + "vmf-DE": "vmf-Latn-DE", + "vmf-Latn": "vmf-Latn-DE", + "vmg": "vmg-Latn-PG", + "vmg-Latn": "vmg-Latn-PG", + "vmg-PG": "vmg-Latn-PG", + "vmh": "vmh-Arab-IR", + "vmh-Arab": "vmh-Arab-IR", + "vmh-IR": "vmh-Arab-IR", + "vmi": "vmi-Latn-AU", + "vmi-AU": "vmi-Latn-AU", + "vmi-Latn": "vmi-Latn-AU", + "vmj": "vmj-Latn-MX", + "vmj-Latn": "vmj-Latn-MX", + "vmj-MX": "vmj-Latn-MX", + "vmk": "vmk-Latn-MZ", + "vmk-Latn": "vmk-Latn-MZ", + "vmk-MZ": "vmk-Latn-MZ", + "vml": "vml-Latn-AU", + "vml-AU": "vml-Latn-AU", + "vml-Latn": "vml-Latn-AU", + "vmm": "vmm-Latn-MX", + "vmm-Latn": "vmm-Latn-MX", + "vmm-MX": "vmm-Latn-MX", + "vmp": "vmp-Latn-MX", + "vmp-Latn": "vmp-Latn-MX", + "vmp-MX": "vmp-Latn-MX", + "vmq": "vmq-Latn-MX", + "vmq-Latn": "vmq-Latn-MX", + "vmq-MX": "vmq-Latn-MX", + "vmr": "vmr-Latn-MZ", + "vmr-Latn": "vmr-Latn-MZ", + "vmr-MZ": "vmr-Latn-MZ", + "vms": "vms-Latn-ID", + "vms-ID": "vms-Latn-ID", + "vms-Latn": "vms-Latn-ID", + "vmu": "vmu-Latn-AU", + "vmu-AU": "vmu-Latn-AU", + "vmu-Latn": "vmu-Latn-AU", + "vmw": "vmw-Latn-MZ", + "vmw-Latn": "vmw-Latn-MZ", + "vmw-MZ": "vmw-Latn-MZ", + "vmx": "vmx-Latn-MX", + "vmx-Latn": "vmx-Latn-MX", + "vmx-MX": "vmx-Latn-MX", + "vmy": "vmy-Latn-MX", + "vmy-Latn": "vmy-Latn-MX", + "vmy-MX": "vmy-Latn-MX", + "vmz": "vmz-Latn-MX", + "vmz-Latn": "vmz-Latn-MX", + "vmz-MX": "vmz-Latn-MX", + "vnk": "vnk-Latn-SB", + "vnk-Latn": "vnk-Latn-SB", + "vnk-SB": "vnk-Latn-SB", + "vnm": "vnm-Latn-VU", + "vnm-Latn": "vnm-Latn-VU", + "vnm-VU": "vnm-Latn-VU", + "vnp": "vnp-Latn-VU", + "vnp-Latn": "vnp-Latn-VU", + "vnp-VU": "vnp-Latn-VU", + "vo": "vo-Latn-001", + "vo-001": "vo-Latn-001", + "vo-Latn": "vo-Latn-001", + "vor": "vor-Latn-NG", + "vor-Latn": "vor-Latn-NG", + "vor-NG": "vor-Latn-NG", + "vot": "vot-Latn-RU", + "vot-Latn": "vot-Latn-RU", + "vot-RU": "vot-Latn-RU", + "vra": "vra-Latn-VU", + "vra-Latn": "vra-Latn-VU", + "vra-VU": "vra-Latn-VU", + "vro": "vro-Latn-EE", + "vro-EE": "vro-Latn-EE", + "vro-Latn": "vro-Latn-EE", + "vrs": "vrs-Latn-SB", + "vrs-Latn": "vrs-Latn-SB", + "vrs-SB": "vrs-Latn-SB", + "vrt": "vrt-Latn-VU", + "vrt-Latn": "vrt-Latn-VU", + "vrt-VU": "vrt-Latn-VU", + "vto": "vto-Latn-ID", + "vto-ID": "vto-Latn-ID", + "vto-Latn": "vto-Latn-ID", + "vum": "vum-Latn-GA", + "vum-GA": "vum-Latn-GA", + "vum-Latn": "vum-Latn-GA", + "vun": "vun-Latn-TZ", + "vun-Latn": "vun-Latn-TZ", + "vun-TZ": "vun-Latn-TZ", + "vut": "vut-Latn-CM", + "vut-CM": "vut-Latn-CM", + "vut-Latn": "vut-Latn-CM", + "vwa": "vwa-Latn-CN", + "vwa-CN": "vwa-Latn-CN", + "vwa-Latn": "vwa-Latn-CN", + "wa": "wa-Latn-BE", + "wa-BE": "wa-Latn-BE", + "wa-Latn": "wa-Latn-BE", + "waa": "waa-Latn-US", + "waa-Latn": "waa-Latn-US", + "waa-US": "waa-Latn-US", + "wab": "wab-Latn-PG", + "wab-Latn": "wab-Latn-PG", + "wab-PG": "wab-Latn-PG", + "wac": "wac-Latn-US", + "wac-Latn": "wac-Latn-US", + "wac-US": "wac-Latn-US", + "wad": "wad-Latn-ID", + "wad-ID": "wad-Latn-ID", + "wad-Latn": "wad-Latn-ID", + "wae": "wae-Latn-CH", + "wae-CH": "wae-Latn-CH", + "wae-Latn": "wae-Latn-CH", + "waf": "waf-Latn-BR", + "waf-BR": "waf-Latn-BR", + "waf-Latn": "waf-Latn-BR", + "wag": "wag-Latn-PG", + "wag-Latn": "wag-Latn-PG", + "wag-PG": "wag-Latn-PG", + "wah": "wah-Latn-ID", + "wah-ID": "wah-Latn-ID", + "wah-Latn": "wah-Latn-ID", + "wai": "wai-Latn-ID", + "wai-ID": "wai-Latn-ID", + "wai-Latn": "wai-Latn-ID", + "waj": "waj-Latn-PG", + "waj-Latn": "waj-Latn-PG", + "waj-PG": "waj-Latn-PG", + "wal": "wal-Ethi-ET", + "wal-ET": "wal-Ethi-ET", + "wal-Ethi": "wal-Ethi-ET", + "wam": "wam-Latn-US", + "wam-Latn": "wam-Latn-US", + "wam-US": "wam-Latn-US", + "wan": "wan-Latn-CI", + "wan-CI": "wan-Latn-CI", + "wan-Latn": "wan-Latn-CI", + "wap": "wap-Latn-GY", + "wap-GY": "wap-Latn-GY", + "wap-Latn": "wap-Latn-GY", + "waq": "waq-Latn-AU", + "waq-AU": "waq-Latn-AU", + "waq-Latn": "waq-Latn-AU", + "war": "war-Latn-PH", + "war-Latn": "war-Latn-PH", + "war-PH": "war-Latn-PH", + "was": "was-Latn-US", + "was-Latn": "was-Latn-US", + "was-US": "was-Latn-US", + "wat": "wat-Latn-PG", + "wat-Latn": "wat-Latn-PG", + "wat-PG": "wat-Latn-PG", + "wau": "wau-Latn-BR", + "wau-BR": "wau-Latn-BR", + "wau-Latn": "wau-Latn-BR", + "wav": "wav-Latn-NG", + "wav-Latn": "wav-Latn-NG", + "wav-NG": "wav-Latn-NG", + "waw": "waw-Latn-BR", + "waw-BR": "waw-Latn-BR", + "waw-Latn": "waw-Latn-BR", + "wax": "wax-Latn-PG", + "wax-Latn": "wax-Latn-PG", + "wax-PG": "wax-Latn-PG", + "way": "way-Latn-SR", + "way-Latn": "way-Latn-SR", + "way-SR": "way-Latn-SR", + "waz": "waz-Latn-PG", + "waz-Latn": "waz-Latn-PG", + "waz-PG": "waz-Latn-PG", + "wba": "wba-Latn-VE", + "wba-Latn": "wba-Latn-VE", + "wba-VE": "wba-Latn-VE", + "wbb": "wbb-Latn-ID", + "wbb-ID": "wbb-Latn-ID", + "wbb-Latn": "wbb-Latn-ID", + "wbe": "wbe-Latn-ID", + "wbe-ID": "wbe-Latn-ID", + "wbe-Latn": "wbe-Latn-ID", + "wbf": "wbf-Latn-BF", + "wbf-BF": "wbf-Latn-BF", + "wbf-Latn": "wbf-Latn-BF", + "wbh": "wbh-Latn-TZ", + "wbh-Latn": "wbh-Latn-TZ", + "wbh-TZ": "wbh-Latn-TZ", + "wbi": "wbi-Latn-TZ", + "wbi-Latn": "wbi-Latn-TZ", + "wbi-TZ": "wbi-Latn-TZ", + "wbj": "wbj-Latn-TZ", + "wbj-Latn": "wbj-Latn-TZ", + "wbj-TZ": "wbj-Latn-TZ", + "wbk": "wbk-Arab-AF", + "wbk-AF": "wbk-Arab-AF", + "wbk-Arab": "wbk-Arab-AF", + "wbl": "wbl-Latn-PK", + "wbl-Latn": "wbl-Latn-PK", + "wbl-PK": "wbl-Latn-PK", + "wbm": "wbm-Latn-CN", + "wbm-CN": "wbm-Latn-CN", + "wbm-Latn": "wbm-Latn-CN", + "wbp": "wbp-Latn-AU", + "wbp-AU": "wbp-Latn-AU", + "wbp-Latn": "wbp-Latn-AU", + "wbq": "wbq-Telu-IN", + "wbq-IN": "wbq-Telu-IN", + "wbq-Telu": "wbq-Telu-IN", + "wbr": "wbr-Deva-IN", + "wbr-Deva": "wbr-Deva-IN", + "wbr-IN": "wbr-Deva-IN", + "wbt": "wbt-Latn-AU", + "wbt-AU": "wbt-Latn-AU", + "wbt-Latn": "wbt-Latn-AU", + "wbv": "wbv-Latn-AU", + "wbv-AU": "wbv-Latn-AU", + "wbv-Latn": "wbv-Latn-AU", + "wbw": "wbw-Latn-ID", + "wbw-ID": "wbw-Latn-ID", + "wbw-Latn": "wbw-Latn-ID", + "wca": "wca-Latn-BR", + "wca-BR": "wca-Latn-BR", + "wca-Latn": "wca-Latn-BR", + "wci": "wci-Latn-TG", + "wci-Latn": "wci-Latn-TG", + "wci-TG": "wci-Latn-TG", + "wdd": "wdd-Latn-GA", + "wdd-GA": "wdd-Latn-GA", + "wdd-Latn": "wdd-Latn-GA", + "wdg": "wdg-Latn-PG", + "wdg-Latn": "wdg-Latn-PG", + "wdg-PG": "wdg-Latn-PG", + "wdj": "wdj-Latn-AU", + "wdj-AU": "wdj-Latn-AU", + "wdj-Latn": "wdj-Latn-AU", + "wdk": "wdk-Latn-AU", + "wdk-AU": "wdk-Latn-AU", + "wdk-Latn": "wdk-Latn-AU", + "wdt": "wdt-Latn-CA", + "wdt-CA": "wdt-Latn-CA", + "wdt-Latn": "wdt-Latn-CA", + "wdu": "wdu-Latn-AU", + "wdu-AU": "wdu-Latn-AU", + "wdu-Latn": "wdu-Latn-AU", + "wdy": "wdy-Latn-AU", + "wdy-AU": "wdy-Latn-AU", + "wdy-Latn": "wdy-Latn-AU", + "wec": "wec-Latn-CI", + "wec-CI": "wec-Latn-CI", + "wec-Latn": "wec-Latn-CI", + "wed": "wed-Latn-PG", + "wed-Latn": "wed-Latn-PG", + "wed-PG": "wed-Latn-PG", + "weg": "weg-Latn-AU", + "weg-AU": "weg-Latn-AU", + "weg-Latn": "weg-Latn-AU", + "weh": "weh-Latn-CM", + "weh-CM": "weh-Latn-CM", + "weh-Latn": "weh-Latn-CM", + "wei": "wei-Latn-PG", + "wei-Latn": "wei-Latn-PG", + "wei-PG": "wei-Latn-PG", + "wem": "wem-Latn-BJ", + "wem-BJ": "wem-Latn-BJ", + "wem-Latn": "wem-Latn-BJ", + "weo": "weo-Latn-ID", + "weo-ID": "weo-Latn-ID", + "weo-Latn": "weo-Latn-ID", + "wep": "wep-Latn-DE", + "wep-DE": "wep-Latn-DE", + "wep-Latn": "wep-Latn-DE", + "wer": "wer-Latn-PG", + "wer-Latn": "wer-Latn-PG", + "wer-PG": "wer-Latn-PG", + "wes": "wes-Latn-CM", + "wes-CM": "wes-Latn-CM", + "wes-Latn": "wes-Latn-CM", + "wet": "wet-Latn-ID", + "wet-ID": "wet-Latn-ID", + "wet-Latn": "wet-Latn-ID", + "weu": "weu-Latn-MM", + "weu-Latn": "weu-Latn-MM", + "weu-MM": "weu-Latn-MM", + "wew": "wew-Latn-ID", + "wew-ID": "wew-Latn-ID", + "wew-Latn": "wew-Latn-ID", + "wfg": "wfg-Latn-ID", + "wfg-ID": "wfg-Latn-ID", + "wfg-Latn": "wfg-Latn-ID", + "wga": "wga-Latn-AU", + "wga-AU": "wga-Latn-AU", + "wga-Latn": "wga-Latn-AU", + "wgb": "wgb-Latn-PG", + "wgb-Latn": "wgb-Latn-PG", + "wgb-PG": "wgb-Latn-PG", + "wgg": "wgg-Latn-AU", + "wgg-AU": "wgg-Latn-AU", + "wgg-Latn": "wgg-Latn-AU", + "wgi": "wgi-Latn-PG", + "wgi-Latn": "wgi-Latn-PG", + "wgi-PG": "wgi-Latn-PG", + "wgo": "wgo-Latn-ID", + "wgo-ID": "wgo-Latn-ID", + "wgo-Latn": "wgo-Latn-ID", + "wgu": "wgu-Latn-AU", + "wgu-AU": "wgu-Latn-AU", + "wgu-Latn": "wgu-Latn-AU", + "wgy": "wgy-Latn-AU", + "wgy-AU": "wgy-Latn-AU", + "wgy-Latn": "wgy-Latn-AU", + "wha": "wha-Latn-ID", + "wha-ID": "wha-Latn-ID", + "wha-Latn": "wha-Latn-ID", + "whg": "whg-Latn-PG", + "whg-Latn": "whg-Latn-PG", + "whg-PG": "whg-Latn-PG", + "whk": "whk-Latn-ID", + "whk-ID": "whk-Latn-ID", + "whk-Latn": "whk-Latn-ID", + "whu": "whu-Latn-ID", + "whu-ID": "whu-Latn-ID", + "whu-Latn": "whu-Latn-ID", + "wib": "wib-Latn-BF", + "wib-BF": "wib-Latn-BF", + "wib-Latn": "wib-Latn-BF", + "wic": "wic-Latn-US", + "wic-Latn": "wic-Latn-US", + "wic-US": "wic-Latn-US", + "wie": "wie-Latn-AU", + "wie-AU": "wie-Latn-AU", + "wie-Latn": "wie-Latn-AU", + "wif": "wif-Latn-AU", + "wif-AU": "wif-Latn-AU", + "wif-Latn": "wif-Latn-AU", + "wig": "wig-Latn-AU", + "wig-AU": "wig-Latn-AU", + "wig-Latn": "wig-Latn-AU", + "wih": "wih-Latn-AU", + "wih-AU": "wih-Latn-AU", + "wih-Latn": "wih-Latn-AU", + "wii": "wii-Latn-PG", + "wii-Latn": "wii-Latn-PG", + "wii-PG": "wii-Latn-PG", + "wij": "wij-Latn-AU", + "wij-AU": "wij-Latn-AU", + "wij-Latn": "wij-Latn-AU", + "wik": "wik-Latn-AU", + "wik-AU": "wik-Latn-AU", + "wik-Latn": "wik-Latn-AU", + "wil": "wil-Latn-AU", + "wil-AU": "wil-Latn-AU", + "wil-Latn": "wil-Latn-AU", + "wim": "wim-Latn-AU", + "wim-AU": "wim-Latn-AU", + "wim-Latn": "wim-Latn-AU", + "win": "win-Latn-US", + "win-Latn": "win-Latn-US", + "win-US": "win-Latn-US", + "wir": "wir-Latn-BR", + "wir-BR": "wir-Latn-BR", + "wir-Latn": "wir-Latn-BR", + "wiu": "wiu-Latn-PG", + "wiu-Latn": "wiu-Latn-PG", + "wiu-PG": "wiu-Latn-PG", + "wiv": "wiv-Latn-PG", + "wiv-Latn": "wiv-Latn-PG", + "wiv-PG": "wiv-Latn-PG", + "wiy": "wiy-Latn-US", + "wiy-Latn": "wiy-Latn-US", + "wiy-US": "wiy-Latn-US", + "wja": "wja-Latn-NG", + "wja-Latn": "wja-Latn-NG", + "wja-NG": "wja-Latn-NG", + "wji": "wji-Latn-NG", + "wji-Latn": "wji-Latn-NG", + "wji-NG": "wji-Latn-NG", + "wka": "wka-Latn-TZ", + "wka-Latn": "wka-Latn-TZ", + "wka-TZ": "wka-Latn-TZ", + "wkd": "wkd-Latn-ID", + "wkd-ID": "wkd-Latn-ID", + "wkd-Latn": "wkd-Latn-ID", + "wkr": "wkr-Latn-AU", + "wkr-AU": "wkr-Latn-AU", + "wkr-Latn": "wkr-Latn-AU", + "wkw": "wkw-Latn-AU", + "wkw-AU": "wkw-Latn-AU", + "wkw-Latn": "wkw-Latn-AU", + "wky": "wky-Latn-AU", + "wky-AU": "wky-Latn-AU", + "wky-Latn": "wky-Latn-AU", + "wla": "wla-Latn-PG", + "wla-Latn": "wla-Latn-PG", + "wla-PG": "wla-Latn-PG", + "wle": "wle-Ethi-ET", + "wle-ET": "wle-Ethi-ET", + "wle-Ethi": "wle-Ethi-ET", + "wlg": "wlg-Latn-AU", + "wlg-AU": "wlg-Latn-AU", + "wlg-Latn": "wlg-Latn-AU", + "wlh": "wlh-Latn-TL", + "wlh-Latn": "wlh-Latn-TL", + "wlh-TL": "wlh-Latn-TL", + "wli": "wli-Latn-ID", + "wli-ID": "wli-Latn-ID", + "wli-Latn": "wli-Latn-ID", + "wlm": "wlm-Latn-GB", + "wlm-GB": "wlm-Latn-GB", + "wlm-Latn": "wlm-Latn-GB", + "wlo": "wlo-Arab-ID", + "wlo-Arab": "wlo-Arab-ID", + "wlo-ID": "wlo-Arab-ID", + "wlr": "wlr-Latn-VU", + "wlr-Latn": "wlr-Latn-VU", + "wlr-VU": "wlr-Latn-VU", + "wls": "wls-Latn-WF", + "wls-Latn": "wls-Latn-WF", + "wls-WF": "wls-Latn-WF", + "wlu": "wlu-Latn-AU", + "wlu-AU": "wlu-Latn-AU", + "wlu-Latn": "wlu-Latn-AU", + "wlv": "wlv-Latn-AR", + "wlv-AR": "wlv-Latn-AR", + "wlv-Latn": "wlv-Latn-AR", + "wlw": "wlw-Latn-ID", + "wlw-ID": "wlw-Latn-ID", + "wlw-Latn": "wlw-Latn-ID", + "wlx": "wlx-Latn-GH", + "wlx-GH": "wlx-Latn-GH", + "wlx-Latn": "wlx-Latn-GH", + "wma": "wma-Latn-NG", + "wma-Latn": "wma-Latn-NG", + "wma-NG": "wma-Latn-NG", + "wmb": "wmb-Latn-AU", + "wmb-AU": "wmb-Latn-AU", + "wmb-Latn": "wmb-Latn-AU", + "wmc": "wmc-Latn-PG", + "wmc-Latn": "wmc-Latn-PG", + "wmc-PG": "wmc-Latn-PG", + "wmd": "wmd-Latn-BR", + "wmd-BR": "wmd-Latn-BR", + "wmd-Latn": "wmd-Latn-BR", + "wme": "wme-Deva-NP", + "wme-Deva": "wme-Deva-NP", + "wme-NP": "wme-Deva-NP", + "wmh": "wmh-Latn-TL", + "wmh-Latn": "wmh-Latn-TL", + "wmh-TL": "wmh-Latn-TL", + "wmi": "wmi-Latn-AU", + "wmi-AU": "wmi-Latn-AU", + "wmi-Latn": "wmi-Latn-AU", + "wmm": "wmm-Latn-ID", + "wmm-ID": "wmm-Latn-ID", + "wmm-Latn": "wmm-Latn-ID", + "wmn": "wmn-Latn-NC", + "wmn-Latn": "wmn-Latn-NC", + "wmn-NC": "wmn-Latn-NC", + "wmo": "wmo-Latn-PG", + "wmo-Latn": "wmo-Latn-PG", + "wmo-PG": "wmo-Latn-PG", + "wms": "wms-Latn-ID", + "wms-ID": "wms-Latn-ID", + "wms-Latn": "wms-Latn-ID", + "wmt": "wmt-Latn-AU", + "wmt-AU": "wmt-Latn-AU", + "wmt-Latn": "wmt-Latn-AU", + "wmw": "wmw-Latn-MZ", + "wmw-Latn": "wmw-Latn-MZ", + "wmw-MZ": "wmw-Latn-MZ", + "wmx": "wmx-Latn-PG", + "wmx-Latn": "wmx-Latn-PG", + "wmx-PG": "wmx-Latn-PG", + "wnb": "wnb-Latn-PG", + "wnb-Latn": "wnb-Latn-PG", + "wnb-PG": "wnb-Latn-PG", + "wnc": "wnc-Latn-PG", + "wnc-Latn": "wnc-Latn-PG", + "wnc-PG": "wnc-Latn-PG", + "wnd": "wnd-Latn-AU", + "wnd-AU": "wnd-Latn-AU", + "wnd-Latn": "wnd-Latn-AU", + "wne": "wne-Arab-PK", + "wne-Arab": "wne-Arab-PK", + "wne-PK": "wne-Arab-PK", + "wng": "wng-Latn-ID", + "wng-ID": "wng-Latn-ID", + "wng-Latn": "wng-Latn-ID", + "wni": "wni-Arab-KM", + "wni-Arab": "wni-Arab-KM", + "wni-KM": "wni-Arab-KM", + "wnk": "wnk-Latn-ID", + "wnk-ID": "wnk-Latn-ID", + "wnk-Latn": "wnk-Latn-ID", + "wnm": "wnm-Latn-AU", + "wnm-AU": "wnm-Latn-AU", + "wnm-Latn": "wnm-Latn-AU", + "wnn": "wnn-Latn-AU", + "wnn-AU": "wnn-Latn-AU", + "wnn-Latn": "wnn-Latn-AU", + "wno": "wno-Latn-ID", + "wno-ID": "wno-Latn-ID", + "wno-Latn": "wno-Latn-ID", + "wnp": "wnp-Latn-PG", + "wnp-Latn": "wnp-Latn-PG", + "wnp-PG": "wnp-Latn-PG", + "wnu": "wnu-Latn-PG", + "wnu-Latn": "wnu-Latn-PG", + "wnu-PG": "wnu-Latn-PG", + "wnw": "wnw-Latn-US", + "wnw-Latn": "wnw-Latn-US", + "wnw-US": "wnw-Latn-US", + "wny": "wny-Latn-AU", + "wny-AU": "wny-Latn-AU", + "wny-Latn": "wny-Latn-AU", + "wo": "wo-Latn-SN", + "wo-Gara": "wo-Gara-SN", + "wo-Latn": "wo-Latn-SN", + "wo-SN": "wo-Latn-SN", + "woa": "woa-Latn-AU", + "woa-AU": "woa-Latn-AU", + "woa-Latn": "woa-Latn-AU", + "wob": "wob-Latn-CI", + "wob-CI": "wob-Latn-CI", + "wob-Latn": "wob-Latn-CI", + "woc": "woc-Latn-PG", + "woc-Latn": "woc-Latn-PG", + "woc-PG": "woc-Latn-PG", + "wod": "wod-Latn-ID", + "wod-ID": "wod-Latn-ID", + "wod-Latn": "wod-Latn-ID", + "woe": "woe-Latn-FM", + "woe-FM": "woe-Latn-FM", + "woe-Latn": "woe-Latn-FM", + "wof": "wof-Latn-GM", + "wof-GM": "wof-Latn-GM", + "wof-Latn": "wof-Latn-GM", + "wog": "wog-Latn-PG", + "wog-Latn": "wog-Latn-PG", + "wog-PG": "wog-Latn-PG", + "woi": "woi-Latn-ID", + "woi-ID": "woi-Latn-ID", + "woi-Latn": "woi-Latn-ID", + "wok": "wok-Latn-CM", + "wok-CM": "wok-Latn-CM", + "wok-Latn": "wok-Latn-CM", + "wom": "wom-Latn-NG", + "wom-Latn": "wom-Latn-NG", + "wom-NG": "wom-Latn-NG", + "won": "won-Latn-CD", + "won-CD": "won-Latn-CD", + "won-Latn": "won-Latn-CD", + "woo": "woo-Latn-ID", + "woo-ID": "woo-Latn-ID", + "woo-Latn": "woo-Latn-ID", + "wor": "wor-Latn-ID", + "wor-ID": "wor-Latn-ID", + "wor-Latn": "wor-Latn-ID", + "wos": "wos-Latn-PG", + "wos-Latn": "wos-Latn-PG", + "wos-PG": "wos-Latn-PG", + "wow": "wow-Latn-ID", + "wow-ID": "wow-Latn-ID", + "wow-Latn": "wow-Latn-ID", + "wpc": "wpc-Latn-VE", + "wpc-Latn": "wpc-Latn-VE", + "wpc-VE": "wpc-Latn-VE", + "wrb": "wrb-Latn-AU", + "wrb-AU": "wrb-Latn-AU", + "wrb-Latn": "wrb-Latn-AU", + "wrg": "wrg-Latn-AU", + "wrg-AU": "wrg-Latn-AU", + "wrg-Latn": "wrg-Latn-AU", + "wrh": "wrh-Latn-AU", + "wrh-AU": "wrh-Latn-AU", + "wrh-Latn": "wrh-Latn-AU", + "wri": "wri-Latn-AU", + "wri-AU": "wri-Latn-AU", + "wri-Latn": "wri-Latn-AU", + "wrk": "wrk-Latn-AU", + "wrk-AU": "wrk-Latn-AU", + "wrk-Latn": "wrk-Latn-AU", + "wrl": "wrl-Latn-AU", + "wrl-AU": "wrl-Latn-AU", + "wrl-Latn": "wrl-Latn-AU", + "wrm": "wrm-Latn-AU", + "wrm-AU": "wrm-Latn-AU", + "wrm-Latn": "wrm-Latn-AU", + "wro": "wro-Latn-AU", + "wro-AU": "wro-Latn-AU", + "wro-Latn": "wro-Latn-AU", + "wrp": "wrp-Latn-ID", + "wrp-ID": "wrp-Latn-ID", + "wrp-Latn": "wrp-Latn-ID", + "wrr": "wrr-Latn-AU", + "wrr-AU": "wrr-Latn-AU", + "wrr-Latn": "wrr-Latn-AU", + "wrs": "wrs-Latn-PG", + "wrs-Latn": "wrs-Latn-PG", + "wrs-PG": "wrs-Latn-PG", + "wru": "wru-Latn-ID", + "wru-ID": "wru-Latn-ID", + "wru-Latn": "wru-Latn-ID", + "wrv": "wrv-Latn-PG", + "wrv-Latn": "wrv-Latn-PG", + "wrv-PG": "wrv-Latn-PG", + "wrw": "wrw-Latn-AU", + "wrw-AU": "wrw-Latn-AU", + "wrw-Latn": "wrw-Latn-AU", + "wrx": "wrx-Latn-ID", + "wrx-ID": "wrx-Latn-ID", + "wrx-Latn": "wrx-Latn-ID", + "wrz": "wrz-Latn-AU", + "wrz-AU": "wrz-Latn-AU", + "wrz-Latn": "wrz-Latn-AU", + "wsa": "wsa-Latn-ID", + "wsa-ID": "wsa-Latn-ID", + "wsa-Latn": "wsa-Latn-ID", + "wsg": "wsg-Gong-IN", + "wsg-Gong": "wsg-Gong-IN", + "wsg-IN": "wsg-Gong-IN", + "wsi": "wsi-Latn-VU", + "wsi-Latn": "wsi-Latn-VU", + "wsi-VU": "wsi-Latn-VU", + "wsk": "wsk-Latn-PG", + "wsk-Latn": "wsk-Latn-PG", + "wsk-PG": "wsk-Latn-PG", + "wsr": "wsr-Latn-PG", + "wsr-Latn": "wsr-Latn-PG", + "wsr-PG": "wsr-Latn-PG", + "wss": "wss-Latn-GH", + "wss-GH": "wss-Latn-GH", + "wss-Latn": "wss-Latn-GH", + "wsu": "wsu-Latn-BR", + "wsu-BR": "wsu-Latn-BR", + "wsu-Latn": "wsu-Latn-BR", + "wsv": "wsv-Arab-AF", + "wsv-AF": "wsv-Arab-AF", + "wsv-Arab": "wsv-Arab-AF", + "wtb": "wtb-Latn-TZ", + "wtb-Latn": "wtb-Latn-TZ", + "wtb-TZ": "wtb-Latn-TZ", + "wtf": "wtf-Latn-PG", + "wtf-Latn": "wtf-Latn-PG", + "wtf-PG": "wtf-Latn-PG", + "wth": "wth-Latn-AU", + "wth-AU": "wth-Latn-AU", + "wth-Latn": "wth-Latn-AU", + "wti": "wti-Latn-ET", + "wti-ET": "wti-Latn-ET", + "wti-Latn": "wti-Latn-ET", + "wtk": "wtk-Latn-PG", + "wtk-Latn": "wtk-Latn-PG", + "wtk-PG": "wtk-Latn-PG", + "wtm": "wtm-Deva-IN", + "wtm-Deva": "wtm-Deva-IN", + "wtm-IN": "wtm-Deva-IN", + "wtw": "wtw-Latn-ID", + "wtw-ID": "wtw-Latn-ID", + "wtw-Latn": "wtw-Latn-ID", + "wua": "wua-Latn-AU", + "wua-AU": "wua-Latn-AU", + "wua-Latn": "wua-Latn-AU", + "wub": "wub-Latn-AU", + "wub-AU": "wub-Latn-AU", + "wub-Latn": "wub-Latn-AU", + "wud": "wud-Latn-TG", + "wud-Latn": "wud-Latn-TG", + "wud-TG": "wud-Latn-TG", + "wul": "wul-Latn-ID", + "wul-ID": "wul-Latn-ID", + "wul-Latn": "wul-Latn-ID", + "wum": "wum-Latn-GA", + "wum-GA": "wum-Latn-GA", + "wum-Latn": "wum-Latn-GA", + "wun": "wun-Latn-TZ", + "wun-Latn": "wun-Latn-TZ", + "wun-TZ": "wun-Latn-TZ", + "wur": "wur-Latn-AU", + "wur-AU": "wur-Latn-AU", + "wur-Latn": "wur-Latn-AU", + "wut": "wut-Latn-PG", + "wut-Latn": "wut-Latn-PG", + "wut-PG": "wut-Latn-PG", + "wuu": "wuu-Hans-CN", + "wuu-CN": "wuu-Hans-CN", + "wuu-Hans": "wuu-Hans-CN", + "wuv": "wuv-Latn-PG", + "wuv-Latn": "wuv-Latn-PG", + "wuv-PG": "wuv-Latn-PG", + "wux": "wux-Latn-AU", + "wux-AU": "wux-Latn-AU", + "wux-Latn": "wux-Latn-AU", + "wuy": "wuy-Latn-ID", + "wuy-ID": "wuy-Latn-ID", + "wuy-Latn": "wuy-Latn-ID", + "wwa": "wwa-Latn-BJ", + "wwa-BJ": "wwa-Latn-BJ", + "wwa-Latn": "wwa-Latn-BJ", + "wwb": "wwb-Latn-AU", + "wwb-AU": "wwb-Latn-AU", + "wwb-Latn": "wwb-Latn-AU", + "wwo": "wwo-Latn-VU", + "wwo-Latn": "wwo-Latn-VU", + "wwo-VU": "wwo-Latn-VU", + "wwr": "wwr-Latn-AU", + "wwr-AU": "wwr-Latn-AU", + "wwr-Latn": "wwr-Latn-AU", + "www": "www-Latn-CM", + "www-CM": "www-Latn-CM", + "www-Latn": "www-Latn-CM", + "wxw": "wxw-Latn-AU", + "wxw-AU": "wxw-Latn-AU", + "wxw-Latn": "wxw-Latn-AU", + "wyb": "wyb-Latn-AU", + "wyb-AU": "wyb-Latn-AU", + "wyb-Latn": "wyb-Latn-AU", + "wyi": "wyi-Latn-AU", + "wyi-AU": "wyi-Latn-AU", + "wyi-Latn": "wyi-Latn-AU", + "wym": "wym-Latn-PL", + "wym-Latn": "wym-Latn-PL", + "wym-PL": "wym-Latn-PL", + "wyn": "wyn-Latn-US", + "wyn-Latn": "wyn-Latn-US", + "wyn-US": "wyn-Latn-US", + "wyr": "wyr-Latn-BR", + "wyr-BR": "wyr-Latn-BR", + "wyr-Latn": "wyr-Latn-BR", + "wyy": "wyy-Latn-FJ", + "wyy-FJ": "wyy-Latn-FJ", + "wyy-Latn": "wyy-Latn-FJ", + "xaa": "xaa-Latn-ES", + "xaa-ES": "xaa-Latn-ES", + "xaa-Latn": "xaa-Latn-ES", + "xab": "xab-Latn-NG", + "xab-Latn": "xab-Latn-NG", + "xab-NG": "xab-Latn-NG", + "xag": "xag-Aghb-AZ", + "xag-AZ": "xag-Aghb-AZ", + "xag-Aghb": "xag-Aghb-AZ", + "xai": "xai-Latn-BR", + "xai-BR": "xai-Latn-BR", + "xai-Latn": "xai-Latn-BR", + "xaj": "xaj-Latn-BR", + "xaj-BR": "xaj-Latn-BR", + "xaj-Latn": "xaj-Latn-BR", + "xak": "xak-Latn-VE", + "xak-Latn": "xak-Latn-VE", + "xak-VE": "xak-Latn-VE", + "xal": "xal-Cyrl-RU", + "xal-Cyrl": "xal-Cyrl-RU", + "xal-RU": "xal-Cyrl-RU", + "xam": "xam-Latn-ZA", + "xam-Latn": "xam-Latn-ZA", + "xam-ZA": "xam-Latn-ZA", + "xan": "xan-Ethi-ET", + "xan-ET": "xan-Ethi-ET", + "xan-Ethi": "xan-Ethi-ET", + "xao": "xao-Latn-VN", + "xao-Latn": "xao-Latn-VN", + "xao-VN": "xao-Latn-VN", + "xar": "xar-Latn-PG", + "xar-Latn": "xar-Latn-PG", + "xar-PG": "xar-Latn-PG", + "xas": "xas-Cyrl-RU", + "xas-Cyrl": "xas-Cyrl-RU", + "xas-RU": "xas-Cyrl-RU", + "xat": "xat-Latn-BR", + "xat-BR": "xat-Latn-BR", + "xat-Latn": "xat-Latn-BR", + "xau": "xau-Latn-ID", + "xau-ID": "xau-Latn-ID", + "xau-Latn": "xau-Latn-ID", + "xav": "xav-Latn-BR", + "xav-BR": "xav-Latn-BR", + "xav-Latn": "xav-Latn-BR", + "xaw": "xaw-Latn-US", + "xaw-Latn": "xaw-Latn-US", + "xaw-US": "xaw-Latn-US", + "xay": "xay-Latn-ID", + "xay-ID": "xay-Latn-ID", + "xay-Latn": "xay-Latn-ID", + "xbb": "xbb-Latn-AU", + "xbb-AU": "xbb-Latn-AU", + "xbb-Latn": "xbb-Latn-AU", + "xbd": "xbd-Latn-AU", + "xbd-AU": "xbd-Latn-AU", + "xbd-Latn": "xbd-Latn-AU", + "xbe": "xbe-Latn-AU", + "xbe-AU": "xbe-Latn-AU", + "xbe-Latn": "xbe-Latn-AU", + "xbg": "xbg-Latn-AU", + "xbg-AU": "xbg-Latn-AU", + "xbg-Latn": "xbg-Latn-AU", + "xbi": "xbi-Latn-PG", + "xbi-Latn": "xbi-Latn-PG", + "xbi-PG": "xbi-Latn-PG", + "xbj": "xbj-Latn-AU", + "xbj-AU": "xbj-Latn-AU", + "xbj-Latn": "xbj-Latn-AU", + "xbm": "xbm-Latn-FR", + "xbm-FR": "xbm-Latn-FR", + "xbm-Latn": "xbm-Latn-FR", + "xbn": "xbn-Latn-MY", + "xbn-Latn": "xbn-Latn-MY", + "xbn-MY": "xbn-Latn-MY", + "xbp": "xbp-Latn-AU", + "xbp-AU": "xbp-Latn-AU", + "xbp-Latn": "xbp-Latn-AU", + "xbr": "xbr-Latn-ID", + "xbr-ID": "xbr-Latn-ID", + "xbr-Latn": "xbr-Latn-ID", + "xbw": "xbw-Latn-BR", + "xbw-BR": "xbw-Latn-BR", + "xbw-Latn": "xbw-Latn-BR", + "xby": "xby-Latn-AU", + "xby-AU": "xby-Latn-AU", + "xby-Latn": "xby-Latn-AU", + "xch": "xch-Latn-US", + "xch-Latn": "xch-Latn-US", + "xch-US": "xch-Latn-US", + "xco": "xco-Chrs-UZ", + "xco-Chrs": "xco-Chrs-UZ", + "xco-UZ": "xco-Chrs-UZ", + "xcr": "xcr-Cari-TR", + "xcr-Cari": "xcr-Cari-TR", + "xcr-TR": "xcr-Cari-TR", + "xda": "xda-Latn-AU", + "xda-AU": "xda-Latn-AU", + "xda-Latn": "xda-Latn-AU", + "xdk": "xdk-Latn-AU", + "xdk-AU": "xdk-Latn-AU", + "xdk-Latn": "xdk-Latn-AU", + "xdo": "xdo-Latn-AO", + "xdo-AO": "xdo-Latn-AO", + "xdo-Latn": "xdo-Latn-AO", + "xdq": "xdq-Cyrl-RU", + "xdq-Cyrl": "xdq-Cyrl-RU", + "xdq-RU": "xdq-Cyrl-RU", + "xdy": "xdy-Latn-ID", + "xdy-ID": "xdy-Latn-ID", + "xdy-Latn": "xdy-Latn-ID", + "xed": "xed-Latn-CM", + "xed-CM": "xed-Latn-CM", + "xed-Latn": "xed-Latn-CM", + "xeg": "xeg-Latn-ZA", + "xeg-Latn": "xeg-Latn-ZA", + "xeg-ZA": "xeg-Latn-ZA", + "xem": "xem-Latn-ID", + "xem-ID": "xem-Latn-ID", + "xem-Latn": "xem-Latn-ID", + "xer": "xer-Latn-BR", + "xer-BR": "xer-Latn-BR", + "xer-Latn": "xer-Latn-BR", + "xes": "xes-Latn-PG", + "xes-Latn": "xes-Latn-PG", + "xes-PG": "xes-Latn-PG", + "xet": "xet-Latn-BR", + "xet-BR": "xet-Latn-BR", + "xet-Latn": "xet-Latn-BR", + "xeu": "xeu-Latn-PG", + "xeu-Latn": "xeu-Latn-PG", + "xeu-PG": "xeu-Latn-PG", + "xgb": "xgb-Latn-CI", + "xgb-CI": "xgb-Latn-CI", + "xgb-Latn": "xgb-Latn-CI", + "xgd": "xgd-Latn-AU", + "xgd-AU": "xgd-Latn-AU", + "xgd-Latn": "xgd-Latn-AU", + "xgg": "xgg-Latn-AU", + "xgg-AU": "xgg-Latn-AU", + "xgg-Latn": "xgg-Latn-AU", + "xgi": "xgi-Latn-AU", + "xgi-AU": "xgi-Latn-AU", + "xgi-Latn": "xgi-Latn-AU", + "xgm": "xgm-Latn-AU", + "xgm-AU": "xgm-Latn-AU", + "xgm-Latn": "xgm-Latn-AU", + "xgu": "xgu-Latn-AU", + "xgu-AU": "xgu-Latn-AU", + "xgu-Latn": "xgu-Latn-AU", + "xgw": "xgw-Latn-AU", + "xgw-AU": "xgw-Latn-AU", + "xgw-Latn": "xgw-Latn-AU", + "xh": "xh-Latn-ZA", + "xh-Latn": "xh-Latn-ZA", + "xh-ZA": "xh-Latn-ZA", + "xhe": "xhe-Arab-PK", + "xhe-Arab": "xhe-Arab-PK", + "xhe-PK": "xhe-Arab-PK", + "xhm": "xhm-Khmr-KH", + "xhm-KH": "xhm-Khmr-KH", + "xhm-Khmr": "xhm-Khmr-KH", + "xhv": "xhv-Latn-VN", + "xhv-Latn": "xhv-Latn-VN", + "xhv-VN": "xhv-Latn-VN", + "xii": "xii-Latn-ZA", + "xii-Latn": "xii-Latn-ZA", + "xii-ZA": "xii-Latn-ZA", + "xin": "xin-Latn-GT", + "xin-GT": "xin-Latn-GT", + "xin-Latn": "xin-Latn-GT", + "xir": "xir-Latn-BR", + "xir-BR": "xir-Latn-BR", + "xir-Latn": "xir-Latn-BR", + "xis": "xis-Orya-IN", + "xis-IN": "xis-Orya-IN", + "xis-Orya": "xis-Orya-IN", + "xiy": "xiy-Latn-BR", + "xiy-BR": "xiy-Latn-BR", + "xiy-Latn": "xiy-Latn-BR", + "xjb": "xjb-Latn-AU", + "xjb-AU": "xjb-Latn-AU", + "xjb-Latn": "xjb-Latn-AU", + "xjt": "xjt-Latn-AU", + "xjt-AU": "xjt-Latn-AU", + "xjt-Latn": "xjt-Latn-AU", + "xka": "xka-Arab-PK", + "xka-Arab": "xka-Arab-PK", + "xka-PK": "xka-Arab-PK", + "xkb": "xkb-Latn-BJ", + "xkb-BJ": "xkb-Latn-BJ", + "xkb-Latn": "xkb-Latn-BJ", + "xkc": "xkc-Arab-IR", + "xkc-Arab": "xkc-Arab-IR", + "xkc-IR": "xkc-Arab-IR", + "xkd": "xkd-Latn-ID", + "xkd-ID": "xkd-Latn-ID", + "xkd-Latn": "xkd-Latn-ID", + "xke": "xke-Latn-ID", + "xke-ID": "xke-Latn-ID", + "xke-Latn": "xke-Latn-ID", + "xkf": "xkf-Tibt-BT", + "xkf-BT": "xkf-Tibt-BT", + "xkf-Tibt": "xkf-Tibt-BT", + "xkg": "xkg-Latn-ML", + "xkg-Latn": "xkg-Latn-ML", + "xkg-ML": "xkg-Latn-ML", + "xkj": "xkj-Arab-IR", + "xkj-Arab": "xkj-Arab-IR", + "xkj-IR": "xkj-Arab-IR", + "xkl": "xkl-Latn-ID", + "xkl-ID": "xkl-Latn-ID", + "xkl-Latn": "xkl-Latn-ID", + "xkn": "xkn-Latn-ID", + "xkn-ID": "xkn-Latn-ID", + "xkn-Latn": "xkn-Latn-ID", + "xkp": "xkp-Arab-IR", + "xkp-Arab": "xkp-Arab-IR", + "xkp-IR": "xkp-Arab-IR", + "xkq": "xkq-Latn-ID", + "xkq-ID": "xkq-Latn-ID", + "xkq-Latn": "xkq-Latn-ID", + "xkr": "xkr-Latn-BR", + "xkr-BR": "xkr-Latn-BR", + "xkr-Latn": "xkr-Latn-BR", + "xks": "xks-Latn-ID", + "xks-ID": "xks-Latn-ID", + "xks-Latn": "xks-Latn-ID", + "xkt": "xkt-Latn-GH", + "xkt-GH": "xkt-Latn-GH", + "xkt-Latn": "xkt-Latn-GH", + "xku": "xku-Latn-CG", + "xku-CG": "xku-Latn-CG", + "xku-Latn": "xku-Latn-CG", + "xkv": "xkv-Latn-BW", + "xkv-BW": "xkv-Latn-BW", + "xkv-Latn": "xkv-Latn-BW", + "xkw": "xkw-Latn-ID", + "xkw-ID": "xkw-Latn-ID", + "xkw-Latn": "xkw-Latn-ID", + "xkx": "xkx-Latn-PG", + "xkx-Latn": "xkx-Latn-PG", + "xkx-PG": "xkx-Latn-PG", + "xky": "xky-Latn-MY", + "xky-Latn": "xky-Latn-MY", + "xky-MY": "xky-Latn-MY", + "xkz": "xkz-Latn-BT", + "xkz-BT": "xkz-Latn-BT", + "xkz-Latn": "xkz-Latn-BT", + "xla": "xla-Latn-PG", + "xla-Latn": "xla-Latn-PG", + "xla-PG": "xla-Latn-PG", + "xlc": "xlc-Lyci-TR", + "xlc-Lyci": "xlc-Lyci-TR", + "xlc-TR": "xlc-Lyci-TR", + "xld": "xld-Lydi-TR", + "xld-Lydi": "xld-Lydi-TR", + "xld-TR": "xld-Lydi-TR", + "xly": "xly-Elym-IR", + "xly-Elym": "xly-Elym-IR", + "xly-IR": "xly-Elym-IR", + "xma": "xma-Latn-SO", + "xma-Latn": "xma-Latn-SO", + "xma-SO": "xma-Latn-SO", + "xmb": "xmb-Latn-CM", + "xmb-CM": "xmb-Latn-CM", + "xmb-Latn": "xmb-Latn-CM", + "xmc": "xmc-Latn-MZ", + "xmc-Latn": "xmc-Latn-MZ", + "xmc-MZ": "xmc-Latn-MZ", + "xmd": "xmd-Latn-CM", + "xmd-CM": "xmd-Latn-CM", + "xmd-Latn": "xmd-Latn-CM", + "xmf": "xmf-Geor-GE", + "xmf-GE": "xmf-Geor-GE", + "xmf-Geor": "xmf-Geor-GE", + "xmg": "xmg-Latn-CM", + "xmg-CM": "xmg-Latn-CM", + "xmg-Latn": "xmg-Latn-CM", + "xmh": "xmh-Latn-AU", + "xmh-AU": "xmh-Latn-AU", + "xmh-Latn": "xmh-Latn-AU", + "xmj": "xmj-Latn-CM", + "xmj-CM": "xmj-Latn-CM", + "xmj-Latn": "xmj-Latn-CM", + "xmm": "xmm-Latn-ID", + "xmm-ID": "xmm-Latn-ID", + "xmm-Latn": "xmm-Latn-ID", + "xmn": "xmn-Mani-CN", + "xmn-CN": "xmn-Mani-CN", + "xmn-Mani": "xmn-Mani-CN", + "xmo": "xmo-Latn-BR", + "xmo-BR": "xmo-Latn-BR", + "xmo-Latn": "xmo-Latn-BR", + "xmp": "xmp-Latn-AU", + "xmp-AU": "xmp-Latn-AU", + "xmp-Latn": "xmp-Latn-AU", + "xmq": "xmq-Latn-AU", + "xmq-AU": "xmq-Latn-AU", + "xmq-Latn": "xmq-Latn-AU", + "xmr": "xmr-Merc-SD", + "xmr-Merc": "xmr-Merc-SD", + "xmr-Mero": "xmr-Mero-SD", + "xmr-SD": "xmr-Merc-SD", + "xmt": "xmt-Latn-ID", + "xmt-ID": "xmt-Latn-ID", + "xmt-Latn": "xmt-Latn-ID", + "xmu": "xmu-Latn-AU", + "xmu-AU": "xmu-Latn-AU", + "xmu-Latn": "xmu-Latn-AU", + "xmv": "xmv-Latn-MG", + "xmv-Latn": "xmv-Latn-MG", + "xmv-MG": "xmv-Latn-MG", + "xmw": "xmw-Latn-MG", + "xmw-Latn": "xmw-Latn-MG", + "xmw-MG": "xmw-Latn-MG", + "xmx": "xmx-Latn-ID", + "xmx-ID": "xmx-Latn-ID", + "xmx-Latn": "xmx-Latn-ID", + "xmy": "xmy-Latn-AU", + "xmy-AU": "xmy-Latn-AU", + "xmy-Latn": "xmy-Latn-AU", + "xmz": "xmz-Latn-ID", + "xmz-ID": "xmz-Latn-ID", + "xmz-Latn": "xmz-Latn-ID", + "xna": "xna-Narb-SA", + "xna-Narb": "xna-Narb-SA", + "xna-SA": "xna-Narb-SA", + "xnb": "xnb-Latn-TW", + "xnb-Latn": "xnb-Latn-TW", + "xnb-TW": "xnb-Latn-TW", + "xni": "xni-Latn-AU", + "xni-AU": "xni-Latn-AU", + "xni-Latn": "xni-Latn-AU", + "xnj": "xnj-Latn-TZ", + "xnj-Latn": "xnj-Latn-TZ", + "xnj-TZ": "xnj-Latn-TZ", + "xnk": "xnk-Latn-AU", + "xnk-AU": "xnk-Latn-AU", + "xnk-Latn": "xnk-Latn-AU", + "xnm": "xnm-Latn-AU", + "xnm-AU": "xnm-Latn-AU", + "xnm-Latn": "xnm-Latn-AU", + "xnn": "xnn-Latn-PH", + "xnn-Latn": "xnn-Latn-PH", + "xnn-PH": "xnn-Latn-PH", + "xnq": "xnq-Latn-MZ", + "xnq-Latn": "xnq-Latn-MZ", + "xnq-MZ": "xnq-Latn-MZ", + "xnr": "xnr-Deva-IN", + "xnr-Deva": "xnr-Deva-IN", + "xnr-IN": "xnr-Deva-IN", + "xnt": "xnt-Latn-US", + "xnt-Latn": "xnt-Latn-US", + "xnt-US": "xnt-Latn-US", + "xnu": "xnu-Latn-AU", + "xnu-AU": "xnu-Latn-AU", + "xnu-Latn": "xnu-Latn-AU", + "xny": "xny-Latn-AU", + "xny-AU": "xny-Latn-AU", + "xny-Latn": "xny-Latn-AU", + "xnz": "xnz-Latn-EG", + "xnz-EG": "xnz-Latn-EG", + "xnz-Latn": "xnz-Latn-EG", + "xoc": "xoc-Latn-NG", + "xoc-Latn": "xoc-Latn-NG", + "xoc-NG": "xoc-Latn-NG", + "xod": "xod-Latn-ID", + "xod-ID": "xod-Latn-ID", + "xod-Latn": "xod-Latn-ID", + "xog": "xog-Latn-UG", + "xog-Latn": "xog-Latn-UG", + "xog-UG": "xog-Latn-UG", + "xoi": "xoi-Latn-PG", + "xoi-Latn": "xoi-Latn-PG", + "xoi-PG": "xoi-Latn-PG", + "xok": "xok-Latn-BR", + "xok-BR": "xok-Latn-BR", + "xok-Latn": "xok-Latn-BR", + "xom": "xom-Latn-SD", + "xom-Latn": "xom-Latn-SD", + "xom-SD": "xom-Latn-SD", + "xon": "xon-Latn-GH", + "xon-GH": "xon-Latn-GH", + "xon-Latn": "xon-Latn-GH", + "xoo": "xoo-Latn-BR", + "xoo-BR": "xoo-Latn-BR", + "xoo-Latn": "xoo-Latn-BR", + "xop": "xop-Latn-PG", + "xop-Latn": "xop-Latn-PG", + "xop-PG": "xop-Latn-PG", + "xor": "xor-Latn-BR", + "xor-BR": "xor-Latn-BR", + "xor-Latn": "xor-Latn-BR", + "xow": "xow-Latn-PG", + "xow-Latn": "xow-Latn-PG", + "xow-PG": "xow-Latn-PG", + "xpa": "xpa-Latn-AU", + "xpa-AU": "xpa-Latn-AU", + "xpa-Latn": "xpa-Latn-AU", + "xpb": "xpb-Latn-AU", + "xpb-AU": "xpb-Latn-AU", + "xpb-Latn": "xpb-Latn-AU", + "xpd": "xpd-Latn-AU", + "xpd-AU": "xpd-Latn-AU", + "xpd-Latn": "xpd-Latn-AU", + "xpf": "xpf-Latn-AU", + "xpf-AU": "xpf-Latn-AU", + "xpf-Latn": "xpf-Latn-AU", + "xpg": "xpg-Grek-TR", + "xpg-Grek": "xpg-Grek-TR", + "xpg-TR": "xpg-Grek-TR", + "xph": "xph-Latn-AU", + "xph-AU": "xph-Latn-AU", + "xph-Latn": "xph-Latn-AU", + "xpi": "xpi-Ogam-GB", + "xpi-GB": "xpi-Ogam-GB", + "xpi-Ogam": "xpi-Ogam-GB", + "xpj": "xpj-Latn-AU", + "xpj-AU": "xpj-Latn-AU", + "xpj-Latn": "xpj-Latn-AU", + "xpk": "xpk-Latn-BR", + "xpk-BR": "xpk-Latn-BR", + "xpk-Latn": "xpk-Latn-BR", + "xpl": "xpl-Latn-AU", + "xpl-AU": "xpl-Latn-AU", + "xpl-Latn": "xpl-Latn-AU", + "xpm": "xpm-Cyrl-RU", + "xpm-Cyrl": "xpm-Cyrl-RU", + "xpm-RU": "xpm-Cyrl-RU", + "xpn": "xpn-Latn-BR", + "xpn-BR": "xpn-Latn-BR", + "xpn-Latn": "xpn-Latn-BR", + "xpo": "xpo-Latn-MX", + "xpo-Latn": "xpo-Latn-MX", + "xpo-MX": "xpo-Latn-MX", + "xpq": "xpq-Latn-US", + "xpq-Latn": "xpq-Latn-US", + "xpq-US": "xpq-Latn-US", + "xpr": "xpr-Prti-IR", + "xpr-IR": "xpr-Prti-IR", + "xpr-Prti": "xpr-Prti-IR", + "xpt": "xpt-Latn-AU", + "xpt-AU": "xpt-Latn-AU", + "xpt-Latn": "xpt-Latn-AU", + "xpv": "xpv-Latn-AU", + "xpv-AU": "xpv-Latn-AU", + "xpv-Latn": "xpv-Latn-AU", + "xpw": "xpw-Latn-AU", + "xpw-AU": "xpw-Latn-AU", + "xpw-Latn": "xpw-Latn-AU", + "xpx": "xpx-Latn-AU", + "xpx-AU": "xpx-Latn-AU", + "xpx-Latn": "xpx-Latn-AU", + "xpz": "xpz-Latn-AU", + "xpz-AU": "xpz-Latn-AU", + "xpz-Latn": "xpz-Latn-AU", + "xra": "xra-Latn-BR", + "xra-BR": "xra-Latn-BR", + "xra-Latn": "xra-Latn-BR", + "xrb": "xrb-Latn-BF", + "xrb-BF": "xrb-Latn-BF", + "xrb-Latn": "xrb-Latn-BF", + "xrd": "xrd-Latn-AU", + "xrd-AU": "xrd-Latn-AU", + "xrd-Latn": "xrd-Latn-AU", + "xre": "xre-Latn-BR", + "xre-BR": "xre-Latn-BR", + "xre-Latn": "xre-Latn-BR", + "xrg": "xrg-Latn-AU", + "xrg-AU": "xrg-Latn-AU", + "xrg-Latn": "xrg-Latn-AU", + "xri": "xri-Latn-BR", + "xri-BR": "xri-Latn-BR", + "xri-Latn": "xri-Latn-BR", + "xrm": "xrm-Cyrl-RU", + "xrm-Cyrl": "xrm-Cyrl-RU", + "xrm-RU": "xrm-Cyrl-RU", + "xrn": "xrn-Cyrl-RU", + "xrn-Cyrl": "xrn-Cyrl-RU", + "xrn-RU": "xrn-Cyrl-RU", + "xrr": "xrr-Latn-IT", + "xrr-IT": "xrr-Latn-IT", + "xrr-Latn": "xrr-Latn-IT", + "xru": "xru-Latn-AU", + "xru-AU": "xru-Latn-AU", + "xru-Latn": "xru-Latn-AU", + "xrw": "xrw-Latn-PG", + "xrw-Latn": "xrw-Latn-PG", + "xrw-PG": "xrw-Latn-PG", + "xsa": "xsa-Sarb-YE", + "xsa-Sarb": "xsa-Sarb-YE", + "xsa-YE": "xsa-Sarb-YE", + "xsb": "xsb-Latn-PH", + "xsb-Latn": "xsb-Latn-PH", + "xsb-PH": "xsb-Latn-PH", + "xse": "xse-Latn-ID", + "xse-ID": "xse-Latn-ID", + "xse-Latn": "xse-Latn-ID", + "xsh": "xsh-Latn-NG", + "xsh-Latn": "xsh-Latn-NG", + "xsh-NG": "xsh-Latn-NG", + "xsi": "xsi-Latn-PG", + "xsi-Latn": "xsi-Latn-PG", + "xsi-PG": "xsi-Latn-PG", + "xsm": "xsm-Latn-GH", + "xsm-GH": "xsm-Latn-GH", + "xsm-Latn": "xsm-Latn-GH", + "xsn": "xsn-Latn-NG", + "xsn-Latn": "xsn-Latn-NG", + "xsn-NG": "xsn-Latn-NG", + "xsp": "xsp-Latn-PG", + "xsp-Latn": "xsp-Latn-PG", + "xsp-PG": "xsp-Latn-PG", + "xsq": "xsq-Latn-MZ", + "xsq-Latn": "xsq-Latn-MZ", + "xsq-MZ": "xsq-Latn-MZ", + "xsr": "xsr-Deva-NP", + "xsr-Deva": "xsr-Deva-NP", + "xsr-NP": "xsr-Deva-NP", + "xsu": "xsu-Latn-VE", + "xsu-Latn": "xsu-Latn-VE", + "xsu-VE": "xsu-Latn-VE", + "xsy": "xsy-Latn-TW", + "xsy-Latn": "xsy-Latn-TW", + "xsy-TW": "xsy-Latn-TW", + "xta": "xta-Latn-MX", + "xta-Latn": "xta-Latn-MX", + "xta-MX": "xta-Latn-MX", + "xtb": "xtb-Latn-MX", + "xtb-Latn": "xtb-Latn-MX", + "xtb-MX": "xtb-Latn-MX", + "xtc": "xtc-Latn-SD", + "xtc-Latn": "xtc-Latn-SD", + "xtc-SD": "xtc-Latn-SD", + "xtd": "xtd-Latn-MX", + "xtd-Latn": "xtd-Latn-MX", + "xtd-MX": "xtd-Latn-MX", + "xte": "xte-Latn-ID", + "xte-ID": "xte-Latn-ID", + "xte-Latn": "xte-Latn-ID", + "xth": "xth-Latn-AU", + "xth-AU": "xth-Latn-AU", + "xth-Latn": "xth-Latn-AU", + "xti": "xti-Latn-MX", + "xti-Latn": "xti-Latn-MX", + "xti-MX": "xti-Latn-MX", + "xtj": "xtj-Latn-MX", + "xtj-Latn": "xtj-Latn-MX", + "xtj-MX": "xtj-Latn-MX", + "xtl": "xtl-Latn-MX", + "xtl-Latn": "xtl-Latn-MX", + "xtl-MX": "xtl-Latn-MX", + "xtm": "xtm-Latn-MX", + "xtm-Latn": "xtm-Latn-MX", + "xtm-MX": "xtm-Latn-MX", + "xtn": "xtn-Latn-MX", + "xtn-Latn": "xtn-Latn-MX", + "xtn-MX": "xtn-Latn-MX", + "xtp": "xtp-Latn-MX", + "xtp-Latn": "xtp-Latn-MX", + "xtp-MX": "xtp-Latn-MX", + "xtq": "xtq-Brah-IR", + "xtq-Brah": "xtq-Brah-IR", + "xtq-IR": "xtq-Brah-IR", + "xts": "xts-Latn-MX", + "xts-Latn": "xts-Latn-MX", + "xts-MX": "xts-Latn-MX", + "xtt": "xtt-Latn-MX", + "xtt-Latn": "xtt-Latn-MX", + "xtt-MX": "xtt-Latn-MX", + "xtu": "xtu-Latn-MX", + "xtu-Latn": "xtu-Latn-MX", + "xtu-MX": "xtu-Latn-MX", + "xtv": "xtv-Latn-AU", + "xtv-AU": "xtv-Latn-AU", + "xtv-Latn": "xtv-Latn-AU", + "xtw": "xtw-Latn-BR", + "xtw-BR": "xtw-Latn-BR", + "xtw-Latn": "xtw-Latn-BR", + "xty": "xty-Latn-MX", + "xty-Latn": "xty-Latn-MX", + "xty-MX": "xty-Latn-MX", + "xub": "xub-Taml-IN", + "xub-IN": "xub-Taml-IN", + "xub-Taml": "xub-Taml-IN", + "xud": "xud-Latn-AU", + "xud-AU": "xud-Latn-AU", + "xud-Latn": "xud-Latn-AU", + "xuj": "xuj-Taml-IN", + "xuj-IN": "xuj-Taml-IN", + "xuj-Taml": "xuj-Taml-IN", + "xul": "xul-Latn-AU", + "xul-AU": "xul-Latn-AU", + "xul-Latn": "xul-Latn-AU", + "xum": "xum-Latn-IT", + "xum-IT": "xum-Latn-IT", + "xum-Latn": "xum-Latn-IT", + "xun": "xun-Latn-AU", + "xun-AU": "xun-Latn-AU", + "xun-Latn": "xun-Latn-AU", + "xuo": "xuo-Latn-TD", + "xuo-Latn": "xuo-Latn-TD", + "xuo-TD": "xuo-Latn-TD", + "xut": "xut-Latn-AU", + "xut-AU": "xut-Latn-AU", + "xut-Latn": "xut-Latn-AU", + "xuu": "xuu-Latn-NA", + "xuu-Latn": "xuu-Latn-NA", + "xuu-NA": "xuu-Latn-NA", + "xve": "xve-Ital-IT", + "xve-IT": "xve-Ital-IT", + "xve-Ital": "xve-Ital-IT", + "xvi": "xvi-Arab-AF", + "xvi-AF": "xvi-Arab-AF", + "xvi-Arab": "xvi-Arab-AF", + "xvn": "xvn-Latn-ES", + "xvn-ES": "xvn-Latn-ES", + "xvn-Latn": "xvn-Latn-ES", + "xvo": "xvo-Latn-IT", + "xvo-IT": "xvo-Latn-IT", + "xvo-Latn": "xvo-Latn-IT", + "xvs": "xvs-Latn-IT", + "xvs-IT": "xvs-Latn-IT", + "xvs-Latn": "xvs-Latn-IT", + "xwa": "xwa-Latn-BR", + "xwa-BR": "xwa-Latn-BR", + "xwa-Latn": "xwa-Latn-BR", + "xwd": "xwd-Latn-AU", + "xwd-AU": "xwd-Latn-AU", + "xwd-Latn": "xwd-Latn-AU", + "xwe": "xwe-Latn-BJ", + "xwe-BJ": "xwe-Latn-BJ", + "xwe-Latn": "xwe-Latn-BJ", + "xwj": "xwj-Latn-AU", + "xwj-AU": "xwj-Latn-AU", + "xwj-Latn": "xwj-Latn-AU", + "xwk": "xwk-Latn-AU", + "xwk-AU": "xwk-Latn-AU", + "xwk-Latn": "xwk-Latn-AU", + "xwl": "xwl-Latn-BJ", + "xwl-BJ": "xwl-Latn-BJ", + "xwl-Latn": "xwl-Latn-BJ", + "xwo": "xwo-Cyrl-RU", + "xwo-Cyrl": "xwo-Cyrl-RU", + "xwo-RU": "xwo-Cyrl-RU", + "xwr": "xwr-Latn-ID", + "xwr-ID": "xwr-Latn-ID", + "xwr-Latn": "xwr-Latn-ID", + "xwt": "xwt-Latn-AU", + "xwt-AU": "xwt-Latn-AU", + "xwt-Latn": "xwt-Latn-AU", + "xww": "xww-Latn-AU", + "xww-AU": "xww-Latn-AU", + "xww-Latn": "xww-Latn-AU", + "xxb": "xxb-Latn-GH", + "xxb-GH": "xxb-Latn-GH", + "xxb-Latn": "xxb-Latn-GH", + "xxk": "xxk-Latn-ID", + "xxk-ID": "xxk-Latn-ID", + "xxk-Latn": "xxk-Latn-ID", + "xxm": "xxm-Latn-AU", + "xxm-AU": "xxm-Latn-AU", + "xxm-Latn": "xxm-Latn-AU", + "xxr": "xxr-Latn-BR", + "xxr-BR": "xxr-Latn-BR", + "xxr-Latn": "xxr-Latn-BR", + "xxt": "xxt-Latn-ID", + "xxt-ID": "xxt-Latn-ID", + "xxt-Latn": "xxt-Latn-ID", + "xya": "xya-Latn-AU", + "xya-AU": "xya-Latn-AU", + "xya-Latn": "xya-Latn-AU", + "xyb": "xyb-Latn-AU", + "xyb-AU": "xyb-Latn-AU", + "xyb-Latn": "xyb-Latn-AU", + "xyj": "xyj-Latn-AU", + "xyj-AU": "xyj-Latn-AU", + "xyj-Latn": "xyj-Latn-AU", + "xyk": "xyk-Latn-AU", + "xyk-AU": "xyk-Latn-AU", + "xyk-Latn": "xyk-Latn-AU", + "xyl": "xyl-Latn-BR", + "xyl-BR": "xyl-Latn-BR", + "xyl-Latn": "xyl-Latn-BR", + "xyt": "xyt-Latn-AU", + "xyt-AU": "xyt-Latn-AU", + "xyt-Latn": "xyt-Latn-AU", + "xyy": "xyy-Latn-AU", + "xyy-AU": "xyy-Latn-AU", + "xyy-Latn": "xyy-Latn-AU", + "xzh": "xzh-Marc-CN", + "xzh-CN": "xzh-Marc-CN", + "xzh-Marc": "xzh-Marc-CN", + "xzp": "xzp-Latn-MX", + "xzp-Latn": "xzp-Latn-MX", + "xzp-MX": "xzp-Latn-MX", + "yaa": "yaa-Latn-PE", + "yaa-Latn": "yaa-Latn-PE", + "yaa-PE": "yaa-Latn-PE", + "yab": "yab-Latn-BR", + "yab-BR": "yab-Latn-BR", + "yab-Latn": "yab-Latn-BR", + "yac": "yac-Latn-ID", + "yac-ID": "yac-Latn-ID", + "yac-Latn": "yac-Latn-ID", + "yad": "yad-Latn-PE", + "yad-Latn": "yad-Latn-PE", + "yad-PE": "yad-Latn-PE", + "yae": "yae-Latn-VE", + "yae-Latn": "yae-Latn-VE", + "yae-VE": "yae-Latn-VE", + "yaf": "yaf-Latn-CD", + "yaf-CD": "yaf-Latn-CD", + "yaf-Latn": "yaf-Latn-CD", + "yag": "yag-Latn-CL", + "yag-CL": "yag-Latn-CL", + "yag-Latn": "yag-Latn-CL", + "yah": "yah-Latn-TJ", + "yah-Latn": "yah-Latn-TJ", + "yah-TJ": "yah-Latn-TJ", + "yai": "yai-Cyrl-TJ", + "yai-Cyrl": "yai-Cyrl-TJ", + "yai-TJ": "yai-Cyrl-TJ", + "yaj": "yaj-Latn-CF", + "yaj-CF": "yaj-Latn-CF", + "yaj-Latn": "yaj-Latn-CF", + "yak": "yak-Latn-US", + "yak-Latn": "yak-Latn-US", + "yak-US": "yak-Latn-US", + "yal": "yal-Latn-GN", + "yal-GN": "yal-Latn-GN", + "yal-Latn": "yal-Latn-GN", + "yam": "yam-Latn-CM", + "yam-CM": "yam-Latn-CM", + "yam-Latn": "yam-Latn-CM", + "yan": "yan-Latn-NI", + "yan-Latn": "yan-Latn-NI", + "yan-NI": "yan-Latn-NI", + "yao": "yao-Latn-MZ", + "yao-Latn": "yao-Latn-MZ", + "yao-MZ": "yao-Latn-MZ", + "yap": "yap-Latn-FM", + "yap-FM": "yap-Latn-FM", + "yap-Latn": "yap-Latn-FM", + "yaq": "yaq-Latn-MX", + "yaq-Latn": "yaq-Latn-MX", + "yaq-MX": "yaq-Latn-MX", + "yar": "yar-Latn-VE", + "yar-Latn": "yar-Latn-VE", + "yar-VE": "yar-Latn-VE", + "yas": "yas-Latn-CM", + "yas-CM": "yas-Latn-CM", + "yas-Latn": "yas-Latn-CM", + "yat": "yat-Latn-CM", + "yat-CM": "yat-Latn-CM", + "yat-Latn": "yat-Latn-CM", + "yau": "yau-Latn-VE", + "yau-Latn": "yau-Latn-VE", + "yau-VE": "yau-Latn-VE", + "yav": "yav-Latn-CM", + "yav-CM": "yav-Latn-CM", + "yav-Latn": "yav-Latn-CM", + "yaw": "yaw-Latn-BR", + "yaw-BR": "yaw-Latn-BR", + "yaw-Latn": "yaw-Latn-BR", + "yax": "yax-Latn-AO", + "yax-AO": "yax-Latn-AO", + "yax-Latn": "yax-Latn-AO", + "yay": "yay-Latn-NG", + "yay-Latn": "yay-Latn-NG", + "yay-NG": "yay-Latn-NG", + "yaz": "yaz-Latn-NG", + "yaz-Latn": "yaz-Latn-NG", + "yaz-NG": "yaz-Latn-NG", + "yba": "yba-Latn-NG", + "yba-Latn": "yba-Latn-NG", + "yba-NG": "yba-Latn-NG", + "ybb": "ybb-Latn-CM", + "ybb-CM": "ybb-Latn-CM", + "ybb-Latn": "ybb-Latn-CM", + "ybe": "ybe-Latn-CN", + "ybe-CN": "ybe-Latn-CN", + "ybe-Latn": "ybe-Latn-CN", + "ybh": "ybh-Deva-NP", + "ybh-Deva": "ybh-Deva-NP", + "ybh-NP": "ybh-Deva-NP", + "ybi": "ybi-Deva-NP", + "ybi-Deva": "ybi-Deva-NP", + "ybi-NP": "ybi-Deva-NP", + "ybj": "ybj-Latn-NG", + "ybj-Latn": "ybj-Latn-NG", + "ybj-NG": "ybj-Latn-NG", + "ybl": "ybl-Latn-NG", + "ybl-Latn": "ybl-Latn-NG", + "ybl-NG": "ybl-Latn-NG", + "ybm": "ybm-Latn-PG", + "ybm-Latn": "ybm-Latn-PG", + "ybm-PG": "ybm-Latn-PG", + "ybn": "ybn-Latn-BR", + "ybn-BR": "ybn-Latn-BR", + "ybn-Latn": "ybn-Latn-BR", + "ybo": "ybo-Latn-PG", + "ybo-Latn": "ybo-Latn-PG", + "ybo-PG": "ybo-Latn-PG", + "ybx": "ybx-Latn-PG", + "ybx-Latn": "ybx-Latn-PG", + "ybx-PG": "ybx-Latn-PG", + "yby": "yby-Latn-PG", + "yby-Latn": "yby-Latn-PG", + "yby-PG": "yby-Latn-PG", + "ycl": "ycl-Latn-CN", + "ycl-CN": "ycl-Latn-CN", + "ycl-Latn": "ycl-Latn-CN", + "ycn": "ycn-Latn-CO", + "ycn-CO": "ycn-Latn-CO", + "ycn-Latn": "ycn-Latn-CO", + "ycr": "ycr-Latn-TW", + "ycr-Latn": "ycr-Latn-TW", + "ycr-TW": "ycr-Latn-TW", + "yda": "yda-Latn-AU", + "yda-AU": "yda-Latn-AU", + "yda-Latn": "yda-Latn-AU", + "yde": "yde-Latn-PG", + "yde-Latn": "yde-Latn-PG", + "yde-PG": "yde-Latn-PG", + "ydg": "ydg-Arab-PK", + "ydg-Arab": "ydg-Arab-PK", + "ydg-PK": "ydg-Arab-PK", + "ydk": "ydk-Latn-PG", + "ydk-Latn": "ydk-Latn-PG", + "ydk-PG": "ydk-Latn-PG", + "yea": "yea-Mlym-IN", + "yea-IN": "yea-Mlym-IN", + "yea-Mlym": "yea-Mlym-IN", + "yec": "yec-Latn-DE", + "yec-DE": "yec-Latn-DE", + "yec-Latn": "yec-Latn-DE", + "yee": "yee-Latn-PG", + "yee-Latn": "yee-Latn-PG", + "yee-PG": "yee-Latn-PG", + "yei": "yei-Latn-CM", + "yei-CM": "yei-Latn-CM", + "yei-Latn": "yei-Latn-CM", + "yej": "yej-Grek-GR", + "yej-GR": "yej-Grek-GR", + "yej-Grek": "yej-Grek-GR", + "yel": "yel-Latn-CD", + "yel-CD": "yel-Latn-CD", + "yel-Latn": "yel-Latn-CD", + "yer": "yer-Latn-NG", + "yer-Latn": "yer-Latn-NG", + "yer-NG": "yer-Latn-NG", + "yes": "yes-Latn-NG", + "yes-Latn": "yes-Latn-NG", + "yes-NG": "yes-Latn-NG", + "yet": "yet-Latn-ID", + "yet-ID": "yet-Latn-ID", + "yet-Latn": "yet-Latn-ID", + "yeu": "yeu-Telu-IN", + "yeu-IN": "yeu-Telu-IN", + "yeu-Telu": "yeu-Telu-IN", + "yev": "yev-Latn-PG", + "yev-Latn": "yev-Latn-PG", + "yev-PG": "yev-Latn-PG", + "yey": "yey-Latn-BW", + "yey-BW": "yey-Latn-BW", + "yey-Latn": "yey-Latn-BW", + "yga": "yga-Latn-AU", + "yga-AU": "yga-Latn-AU", + "yga-Latn": "yga-Latn-AU", + "ygi": "ygi-Latn-AU", + "ygi-AU": "ygi-Latn-AU", + "ygi-Latn": "ygi-Latn-AU", + "ygl": "ygl-Latn-PG", + "ygl-Latn": "ygl-Latn-PG", + "ygl-PG": "ygl-Latn-PG", + "ygm": "ygm-Latn-PG", + "ygm-Latn": "ygm-Latn-PG", + "ygm-PG": "ygm-Latn-PG", + "ygp": "ygp-Plrd-CN", + "ygp-CN": "ygp-Plrd-CN", + "ygp-Plrd": "ygp-Plrd-CN", + "ygr": "ygr-Latn-PG", + "ygr-Latn": "ygr-Latn-PG", + "ygr-PG": "ygr-Latn-PG", + "ygu": "ygu-Latn-AU", + "ygu-AU": "ygu-Latn-AU", + "ygu-Latn": "ygu-Latn-AU", + "ygw": "ygw-Latn-PG", + "ygw-Latn": "ygw-Latn-PG", + "ygw-PG": "ygw-Latn-PG", + "yhd": "yhd-Hebr-IL", + "yhd-Hebr": "yhd-Hebr-IL", + "yhd-IL": "yhd-Hebr-IL", + "yi": "yi-Hebr-UA", + "yi-Hebr": "yi-Hebr-UA", + "yi-Hebr-SE": "yi-Hebr-SE", + "yi-Hebr-UA": "yi-Hebr-UA", + "yi-Hebr-US": "yi-Hebr-US", + "yi-UA": "yi-Hebr-UA", + "yia": "yia-Latn-AU", + "yia-AU": "yia-Latn-AU", + "yia-Latn": "yia-Latn-AU", + "yig": "yig-Yiii-CN", + "yig-CN": "yig-Yiii-CN", + "yig-Yiii": "yig-Yiii-CN", + "yih": "yih-Hebr-DE", + "yih-DE": "yih-Hebr-DE", + "yih-Hebr": "yih-Hebr-DE", + "yii": "yii-Latn-AU", + "yii-AU": "yii-Latn-AU", + "yii-Latn": "yii-Latn-AU", + "yij": "yij-Latn-AU", + "yij-AU": "yij-Latn-AU", + "yij-Latn": "yij-Latn-AU", + "yil": "yil-Latn-AU", + "yil-AU": "yil-Latn-AU", + "yil-Latn": "yil-Latn-AU", + "yim": "yim-Latn-IN", + "yim-IN": "yim-Latn-IN", + "yim-Latn": "yim-Latn-IN", + "yir": "yir-Latn-ID", + "yir-ID": "yir-Latn-ID", + "yir-Latn": "yir-Latn-ID", + "yis": "yis-Latn-PG", + "yis-Latn": "yis-Latn-PG", + "yis-PG": "yis-Latn-PG", + "yiv": "yiv-Yiii-CN", + "yiv-CN": "yiv-Yiii-CN", + "yiv-Yiii": "yiv-Yiii-CN", + "yka": "yka-Latn-PH", + "yka-Latn": "yka-Latn-PH", + "yka-PH": "yka-Latn-PH", + "ykg": "ykg-Cyrl-RU", + "ykg-Cyrl": "ykg-Cyrl-RU", + "ykg-RU": "ykg-Cyrl-RU", + "ykh": "ykh-Cyrl-MN", + "ykh-Cyrl": "ykh-Cyrl-MN", + "ykh-MN": "ykh-Cyrl-MN", + "yki": "yki-Latn-ID", + "yki-ID": "yki-Latn-ID", + "yki-Latn": "yki-Latn-ID", + "ykk": "ykk-Latn-PG", + "ykk-Latn": "ykk-Latn-PG", + "ykk-PG": "ykk-Latn-PG", + "ykm": "ykm-Latn-PG", + "ykm-Latn": "ykm-Latn-PG", + "ykm-PG": "ykm-Latn-PG", + "yko": "yko-Latn-CM", + "yko-CM": "yko-Latn-CM", + "yko-Latn": "yko-Latn-CM", + "ykr": "ykr-Latn-PG", + "ykr-Latn": "ykr-Latn-PG", + "ykr-PG": "ykr-Latn-PG", + "yky": "yky-Latn-CF", + "yky-CF": "yky-Latn-CF", + "yky-Latn": "yky-Latn-CF", + "yla": "yla-Latn-PG", + "yla-Latn": "yla-Latn-PG", + "yla-PG": "yla-Latn-PG", + "ylb": "ylb-Latn-PG", + "ylb-Latn": "ylb-Latn-PG", + "ylb-PG": "ylb-Latn-PG", + "yle": "yle-Latn-PG", + "yle-Latn": "yle-Latn-PG", + "yle-PG": "yle-Latn-PG", + "ylg": "ylg-Latn-PG", + "ylg-Latn": "ylg-Latn-PG", + "ylg-PG": "ylg-Latn-PG", + "yli": "yli-Latn-ID", + "yli-ID": "yli-Latn-ID", + "yli-Latn": "yli-Latn-ID", + "yll": "yll-Latn-PG", + "yll-Latn": "yll-Latn-PG", + "yll-PG": "yll-Latn-PG", + "ylr": "ylr-Latn-AU", + "ylr-AU": "ylr-Latn-AU", + "ylr-Latn": "ylr-Latn-AU", + "ylu": "ylu-Latn-PG", + "ylu-Latn": "ylu-Latn-PG", + "ylu-PG": "ylu-Latn-PG", + "yly": "yly-Latn-NC", + "yly-Latn": "yly-Latn-NC", + "yly-NC": "yly-Latn-NC", + "ymb": "ymb-Latn-PG", + "ymb-Latn": "ymb-Latn-PG", + "ymb-PG": "ymb-Latn-PG", + "yme": "yme-Latn-PE", + "yme-Latn": "yme-Latn-PE", + "yme-PE": "yme-Latn-PE", + "ymg": "ymg-Latn-CD", + "ymg-CD": "ymg-Latn-CD", + "ymg-Latn": "ymg-Latn-CD", + "ymk": "ymk-Latn-MZ", + "ymk-Latn": "ymk-Latn-MZ", + "ymk-MZ": "ymk-Latn-MZ", + "yml": "yml-Latn-PG", + "yml-Latn": "yml-Latn-PG", + "yml-PG": "yml-Latn-PG", + "ymm": "ymm-Latn-SO", + "ymm-Latn": "ymm-Latn-SO", + "ymm-SO": "ymm-Latn-SO", + "ymn": "ymn-Latn-ID", + "ymn-ID": "ymn-Latn-ID", + "ymn-Latn": "ymn-Latn-ID", + "ymo": "ymo-Latn-PG", + "ymo-Latn": "ymo-Latn-PG", + "ymo-PG": "ymo-Latn-PG", + "ymp": "ymp-Latn-PG", + "ymp-Latn": "ymp-Latn-PG", + "ymp-PG": "ymp-Latn-PG", + "yna": "yna-Plrd-CN", + "yna-CN": "yna-Plrd-CN", + "yna-Plrd": "yna-Plrd-CN", + "ynd": "ynd-Latn-AU", + "ynd-AU": "ynd-Latn-AU", + "ynd-Latn": "ynd-Latn-AU", + "yng": "yng-Latn-CD", + "yng-CD": "yng-Latn-CD", + "yng-Latn": "yng-Latn-CD", + "ynk": "ynk-Cyrl-RU", + "ynk-Cyrl": "ynk-Cyrl-RU", + "ynk-RU": "ynk-Cyrl-RU", + "ynl": "ynl-Latn-PG", + "ynl-Latn": "ynl-Latn-PG", + "ynl-PG": "ynl-Latn-PG", + "ynq": "ynq-Latn-NG", + "ynq-Latn": "ynq-Latn-NG", + "ynq-NG": "ynq-Latn-NG", + "yns": "yns-Latn-CD", + "yns-CD": "yns-Latn-CD", + "yns-Latn": "yns-Latn-CD", + "ynu": "ynu-Latn-CO", + "ynu-CO": "ynu-Latn-CO", + "ynu-Latn": "ynu-Latn-CO", + "yo": "yo-Latn-NG", + "yo-BJ": "yo-Latn-BJ", + "yo-Latn": "yo-Latn-NG", + "yo-NG": "yo-Latn-NG", + "yob": "yob-Latn-PG", + "yob-Latn": "yob-Latn-PG", + "yob-PG": "yob-Latn-PG", + "yog": "yog-Latn-PH", + "yog-Latn": "yog-Latn-PH", + "yog-PH": "yog-Latn-PH", + "yoi": "yoi-Jpan-JP", + "yoi-JP": "yoi-Jpan-JP", + "yoi-Jpan": "yoi-Jpan-JP", + "yok": "yok-Latn-US", + "yok-Latn": "yok-Latn-US", + "yok-US": "yok-Latn-US", + "yol": "yol-Latn-IE", + "yol-IE": "yol-Latn-IE", + "yol-Latn": "yol-Latn-IE", + "yom": "yom-Latn-CD", + "yom-CD": "yom-Latn-CD", + "yom-Latn": "yom-Latn-CD", + "yon": "yon-Latn-PG", + "yon-Latn": "yon-Latn-PG", + "yon-PG": "yon-Latn-PG", + "yot": "yot-Latn-NG", + "yot-Latn": "yot-Latn-NG", + "yot-NG": "yot-Latn-NG", + "yoy": "yoy-Thai-TH", + "yoy-TH": "yoy-Thai-TH", + "yoy-Thai": "yoy-Thai-TH", + "yra": "yra-Latn-PG", + "yra-Latn": "yra-Latn-PG", + "yra-PG": "yra-Latn-PG", + "yrb": "yrb-Latn-PG", + "yrb-Latn": "yrb-Latn-PG", + "yrb-PG": "yrb-Latn-PG", + "yre": "yre-Latn-CI", + "yre-CI": "yre-Latn-CI", + "yre-Latn": "yre-Latn-CI", + "yrk": "yrk-Cyrl-RU", + "yrk-Cyrl": "yrk-Cyrl-RU", + "yrk-RU": "yrk-Cyrl-RU", + "yrl": "yrl-Latn-BR", + "yrl-BR": "yrl-Latn-BR", + "yrl-Latn": "yrl-Latn-BR", + "yrm": "yrm-Latn-AU", + "yrm-AU": "yrm-Latn-AU", + "yrm-Latn": "yrm-Latn-AU", + "yro": "yro-Latn-BR", + "yro-BR": "yro-Latn-BR", + "yro-Latn": "yro-Latn-BR", + "yrs": "yrs-Latn-ID", + "yrs-ID": "yrs-Latn-ID", + "yrs-Latn": "yrs-Latn-ID", + "yrw": "yrw-Latn-PG", + "yrw-Latn": "yrw-Latn-PG", + "yrw-PG": "yrw-Latn-PG", + "yry": "yry-Latn-AU", + "yry-AU": "yry-Latn-AU", + "yry-Latn": "yry-Latn-AU", + "ysd": "ysd-Yiii-CN", + "ysd-CN": "ysd-Yiii-CN", + "ysd-Yiii": "ysd-Yiii-CN", + "ysn": "ysn-Yiii-CN", + "ysn-CN": "ysn-Yiii-CN", + "ysn-Yiii": "ysn-Yiii-CN", + "ysp": "ysp-Yiii-CN", + "ysp-CN": "ysp-Yiii-CN", + "ysp-Yiii": "ysp-Yiii-CN", + "ysr": "ysr-Cyrl-RU", + "ysr-Cyrl": "ysr-Cyrl-RU", + "ysr-RU": "ysr-Cyrl-RU", + "yss": "yss-Latn-PG", + "yss-Latn": "yss-Latn-PG", + "yss-PG": "yss-Latn-PG", + "ysy": "ysy-Plrd-CN", + "ysy-CN": "ysy-Plrd-CN", + "ysy-Plrd": "ysy-Plrd-CN", + "ytw": "ytw-Latn-PG", + "ytw-Latn": "ytw-Latn-PG", + "ytw-PG": "ytw-Latn-PG", + "yty": "yty-Latn-AU", + "yty-AU": "yty-Latn-AU", + "yty-Latn": "yty-Latn-AU", + "yua": "yua-Latn-MX", + "yua-Latn": "yua-Latn-MX", + "yua-MX": "yua-Latn-MX", + "yub": "yub-Latn-AU", + "yub-AU": "yub-Latn-AU", + "yub-Latn": "yub-Latn-AU", + "yuc": "yuc-Latn-US", + "yuc-Latn": "yuc-Latn-US", + "yuc-US": "yuc-Latn-US", + "yud": "yud-Hebr-IL", + "yud-Hebr": "yud-Hebr-IL", + "yud-IL": "yud-Hebr-IL", + "yue": "yue-Hant-HK", + "yue-CN": "yue-Hans-CN", + "yue-HK": "yue-Hant-HK", + "yue-Hans": "yue-Hans-CN", + "yue-Hant": "yue-Hant-HK", + "yue-Hant-CA": "yue-Hant-CA", + "yue-Hant-CN": "yue-Hant-CN", + "yuf": "yuf-Latn-US", + "yuf-Latn": "yuf-Latn-US", + "yuf-US": "yuf-Latn-US", + "yug": "yug-Cyrl-RU", + "yug-Cyrl": "yug-Cyrl-RU", + "yug-RU": "yug-Cyrl-RU", + "yui": "yui-Latn-CO", + "yui-CO": "yui-Latn-CO", + "yui-Latn": "yui-Latn-CO", + "yuj": "yuj-Latn-PG", + "yuj-Latn": "yuj-Latn-PG", + "yuj-PG": "yuj-Latn-PG", + "yul": "yul-Latn-CF", + "yul-CF": "yul-Latn-CF", + "yul-Latn": "yul-Latn-CF", + "yum": "yum-Latn-US", + "yum-Latn": "yum-Latn-US", + "yum-US": "yum-Latn-US", + "yun": "yun-Latn-NG", + "yun-Latn": "yun-Latn-NG", + "yun-NG": "yun-Latn-NG", + "yup": "yup-Latn-CO", + "yup-CO": "yup-Latn-CO", + "yup-Latn": "yup-Latn-CO", + "yuq": "yuq-Latn-BO", + "yuq-BO": "yuq-Latn-BO", + "yuq-Latn": "yuq-Latn-BO", + "yur": "yur-Latn-US", + "yur-Latn": "yur-Latn-US", + "yur-US": "yur-Latn-US", + "yut": "yut-Latn-PG", + "yut-Latn": "yut-Latn-PG", + "yut-PG": "yut-Latn-PG", + "yuw": "yuw-Latn-PG", + "yuw-Latn": "yuw-Latn-PG", + "yuw-PG": "yuw-Latn-PG", + "yux": "yux-Cyrl-RU", + "yux-Cyrl": "yux-Cyrl-RU", + "yux-RU": "yux-Cyrl-RU", + "yuz": "yuz-Latn-BO", + "yuz-BO": "yuz-Latn-BO", + "yuz-Latn": "yuz-Latn-BO", + "yva": "yva-Latn-ID", + "yva-ID": "yva-Latn-ID", + "yva-Latn": "yva-Latn-ID", + "yvt": "yvt-Latn-VE", + "yvt-Latn": "yvt-Latn-VE", + "yvt-VE": "yvt-Latn-VE", + "ywa": "ywa-Latn-PG", + "ywa-Latn": "ywa-Latn-PG", + "ywa-PG": "ywa-Latn-PG", + "ywg": "ywg-Latn-AU", + "ywg-AU": "ywg-Latn-AU", + "ywg-Latn": "ywg-Latn-AU", + "ywn": "ywn-Latn-BR", + "ywn-BR": "ywn-Latn-BR", + "ywn-Latn": "ywn-Latn-BR", + "ywq": "ywq-Plrd-CN", + "ywq-CN": "ywq-Plrd-CN", + "ywq-Plrd": "ywq-Plrd-CN", + "ywr": "ywr-Latn-AU", + "ywr-AU": "ywr-Latn-AU", + "ywr-Latn": "ywr-Latn-AU", + "ywu": "ywu-Plrd-CN", + "ywu-CN": "ywu-Plrd-CN", + "ywu-Plrd": "ywu-Plrd-CN", + "yww": "yww-Latn-AU", + "yww-AU": "yww-Latn-AU", + "yww-Latn": "yww-Latn-AU", + "yxa": "yxa-Latn-AU", + "yxa-AU": "yxa-Latn-AU", + "yxa-Latn": "yxa-Latn-AU", + "yxg": "yxg-Latn-AU", + "yxg-AU": "yxg-Latn-AU", + "yxg-Latn": "yxg-Latn-AU", + "yxl": "yxl-Latn-AU", + "yxl-AU": "yxl-Latn-AU", + "yxl-Latn": "yxl-Latn-AU", + "yxm": "yxm-Latn-AU", + "yxm-AU": "yxm-Latn-AU", + "yxm-Latn": "yxm-Latn-AU", + "yxu": "yxu-Latn-AU", + "yxu-AU": "yxu-Latn-AU", + "yxu-Latn": "yxu-Latn-AU", + "yxy": "yxy-Latn-AU", + "yxy-AU": "yxy-Latn-AU", + "yxy-Latn": "yxy-Latn-AU", + "yyr": "yyr-Latn-AU", + "yyr-AU": "yyr-Latn-AU", + "yyr-Latn": "yyr-Latn-AU", + "yyu": "yyu-Latn-PG", + "yyu-Latn": "yyu-Latn-PG", + "yyu-PG": "yyu-Latn-PG", + "za": "za-Latn-CN", + "za-CN": "za-Latn-CN", + "za-Latn": "za-Latn-CN", + "za-Latn-CN": "za-Latn-CN", + "zaa": "zaa-Latn-MX", + "zaa-Latn": "zaa-Latn-MX", + "zaa-MX": "zaa-Latn-MX", + "zab": "zab-Latn-MX", + "zab-Latn": "zab-Latn-MX", + "zab-MX": "zab-Latn-MX", + "zac": "zac-Latn-MX", + "zac-Latn": "zac-Latn-MX", + "zac-MX": "zac-Latn-MX", + "zad": "zad-Latn-MX", + "zad-Latn": "zad-Latn-MX", + "zad-MX": "zad-Latn-MX", + "zae": "zae-Latn-MX", + "zae-Latn": "zae-Latn-MX", + "zae-MX": "zae-Latn-MX", + "zaf": "zaf-Latn-MX", + "zaf-Latn": "zaf-Latn-MX", + "zaf-MX": "zaf-Latn-MX", + "zag": "zag-Latn-SD", + "zag-Latn": "zag-Latn-SD", + "zag-SD": "zag-Latn-SD", + "zah": "zah-Latn-NG", + "zah-Latn": "zah-Latn-NG", + "zah-NG": "zah-Latn-NG", + "zaj": "zaj-Latn-TZ", + "zaj-Latn": "zaj-Latn-TZ", + "zaj-TZ": "zaj-Latn-TZ", + "zak": "zak-Latn-TZ", + "zak-Latn": "zak-Latn-TZ", + "zak-TZ": "zak-Latn-TZ", + "zam": "zam-Latn-MX", + "zam-Latn": "zam-Latn-MX", + "zam-MX": "zam-Latn-MX", + "zao": "zao-Latn-MX", + "zao-Latn": "zao-Latn-MX", + "zao-MX": "zao-Latn-MX", + "zap": "zap-Latn-MX", + "zap-Latn": "zap-Latn-MX", + "zap-MX": "zap-Latn-MX", + "zaq": "zaq-Latn-MX", + "zaq-Latn": "zaq-Latn-MX", + "zaq-MX": "zaq-Latn-MX", + "zar": "zar-Latn-MX", + "zar-Latn": "zar-Latn-MX", + "zar-MX": "zar-Latn-MX", + "zas": "zas-Latn-MX", + "zas-Latn": "zas-Latn-MX", + "zas-MX": "zas-Latn-MX", + "zat": "zat-Latn-MX", + "zat-Latn": "zat-Latn-MX", + "zat-MX": "zat-Latn-MX", + "zau": "zau-Tibt-IN", + "zau-IN": "zau-Tibt-IN", + "zau-Tibt": "zau-Tibt-IN", + "zav": "zav-Latn-MX", + "zav-Latn": "zav-Latn-MX", + "zav-MX": "zav-Latn-MX", + "zaw": "zaw-Latn-MX", + "zaw-Latn": "zaw-Latn-MX", + "zaw-MX": "zaw-Latn-MX", + "zax": "zax-Latn-MX", + "zax-Latn": "zax-Latn-MX", + "zax-MX": "zax-Latn-MX", + "zay": "zay-Latn-ET", + "zay-ET": "zay-Latn-ET", + "zay-Latn": "zay-Latn-ET", + "zaz": "zaz-Latn-NG", + "zaz-Latn": "zaz-Latn-NG", + "zaz-NG": "zaz-Latn-NG", + "zba": "zba-Arab-001", + "zba-001": "zba-Arab-001", + "zba-Arab": "zba-Arab-001", + "zbc": "zbc-Latn-MY", + "zbc-Latn": "zbc-Latn-MY", + "zbc-MY": "zbc-Latn-MY", + "zbe": "zbe-Latn-MY", + "zbe-Latn": "zbe-Latn-MY", + "zbe-MY": "zbe-Latn-MY", + "zbt": "zbt-Latn-ID", + "zbt-ID": "zbt-Latn-ID", + "zbt-Latn": "zbt-Latn-ID", + "zbu": "zbu-Latn-NG", + "zbu-Latn": "zbu-Latn-NG", + "zbu-NG": "zbu-Latn-NG", + "zbw": "zbw-Latn-MY", + "zbw-Latn": "zbw-Latn-MY", + "zbw-MY": "zbw-Latn-MY", + "zca": "zca-Latn-MX", + "zca-Latn": "zca-Latn-MX", + "zca-MX": "zca-Latn-MX", + "zch": "zch-Hani-CN", + "zch-CN": "zch-Hani-CN", + "zch-Hani": "zch-Hani-CN", + "zdj": "zdj-Arab-KM", + "zdj-Arab": "zdj-Arab-KM", + "zdj-KM": "zdj-Arab-KM", + "zea": "zea-Latn-NL", + "zea-Latn": "zea-Latn-NL", + "zea-NL": "zea-Latn-NL", + "zeg": "zeg-Latn-PG", + "zeg-Latn": "zeg-Latn-PG", + "zeg-PG": "zeg-Latn-PG", + "zeh": "zeh-Hani-CN", + "zeh-CN": "zeh-Hani-CN", + "zeh-Hani": "zeh-Hani-CN", + "zem": "zem-Latn-NG", + "zem-Latn": "zem-Latn-NG", + "zem-NG": "zem-Latn-NG", + "zen": "zen-Tfng-MR", + "zen-MR": "zen-Tfng-MR", + "zen-Tfng": "zen-Tfng-MR", + "zga": "zga-Latn-TZ", + "zga-Latn": "zga-Latn-TZ", + "zga-TZ": "zga-Latn-TZ", + "zgb": "zgb-Hani-CN", + "zgb-CN": "zgb-Hani-CN", + "zgb-Hani": "zgb-Hani-CN", + "zgh": "zgh-Tfng-MA", + "zgh-MA": "zgh-Tfng-MA", + "zgh-Tfng": "zgh-Tfng-MA", + "zgm": "zgm-Hani-CN", + "zgm-CN": "zgm-Hani-CN", + "zgm-Hani": "zgm-Hani-CN", + "zgn": "zgn-Hani-CN", + "zgn-CN": "zgn-Hani-CN", + "zgn-Hani": "zgn-Hani-CN", + "zgr": "zgr-Latn-PG", + "zgr-Latn": "zgr-Latn-PG", + "zgr-PG": "zgr-Latn-PG", + "zh": "zh-Hans-CN", + "zh-AU": "zh-Hant-AU", + "zh-BN": "zh-Hant-BN", + "zh-Bopo": "zh-Bopo-TW", + "zh-CN": "zh-Hans-CN", + "zh-GB": "zh-Hant-GB", + "zh-GF": "zh-Hant-GF", + "zh-HK": "zh-Hant-HK", + "zh-Hanb": "zh-Hanb-TW", + "zh-Hani": "zh-Hani-CN", + "zh-Hans": "zh-Hans-CN", + "zh-Hant": "zh-Hant-TW", + "zh-ID": "zh-Hant-ID", + "zh-MO": "zh-Hant-MO", + "zh-PA": "zh-Hant-PA", + "zh-PF": "zh-Hant-PF", + "zh-PH": "zh-Hant-PH", + "zh-SR": "zh-Hant-SR", + "zh-TH": "zh-Hant-TH", + "zh-TW": "zh-Hant-TW", + "zh-US": "zh-Hant-US", + "zh-VN": "zh-Hant-VN", + "zhd": "zhd-Hani-CN", + "zhd-CN": "zhd-Hani-CN", + "zhd-Hani": "zhd-Hani-CN", + "zhi": "zhi-Latn-NG", + "zhi-Latn": "zhi-Latn-NG", + "zhi-NG": "zhi-Latn-NG", + "zhn": "zhn-Latn-CN", + "zhn-CN": "zhn-Latn-CN", + "zhn-Latn": "zhn-Latn-CN", + "zhw": "zhw-Latn-CM", + "zhw-CM": "zhw-Latn-CM", + "zhw-Latn": "zhw-Latn-CM", + "zhx": "zhx-Nshu-CN", + "zhx-CN": "zhx-Nshu-CN", + "zhx-Nshu": "zhx-Nshu-CN", + "zia": "zia-Latn-PG", + "zia-Latn": "zia-Latn-PG", + "zia-PG": "zia-Latn-PG", + "zik": "zik-Latn-PG", + "zik-Latn": "zik-Latn-PG", + "zik-PG": "zik-Latn-PG", + "zil": "zil-Latn-GN", + "zil-GN": "zil-Latn-GN", + "zil-Latn": "zil-Latn-GN", + "zim": "zim-Latn-TD", + "zim-Latn": "zim-Latn-TD", + "zim-TD": "zim-Latn-TD", + "zin": "zin-Latn-TZ", + "zin-Latn": "zin-Latn-TZ", + "zin-TZ": "zin-Latn-TZ", + "ziw": "ziw-Latn-TZ", + "ziw-Latn": "ziw-Latn-TZ", + "ziw-TZ": "ziw-Latn-TZ", + "ziz": "ziz-Latn-NG", + "ziz-Latn": "ziz-Latn-NG", + "ziz-NG": "ziz-Latn-NG", + "zka": "zka-Latn-ID", + "zka-ID": "zka-Latn-ID", + "zka-Latn": "zka-Latn-ID", + "zkd": "zkd-Latn-MM", + "zkd-Latn": "zkd-Latn-MM", + "zkd-MM": "zkd-Latn-MM", + "zko": "zko-Cyrl-RU", + "zko-Cyrl": "zko-Cyrl-RU", + "zko-RU": "zko-Cyrl-RU", + "zkp": "zkp-Latn-BR", + "zkp-BR": "zkp-Latn-BR", + "zkp-Latn": "zkp-Latn-BR", + "zkt": "zkt-Kits-CN", + "zkt-CN": "zkt-Kits-CN", + "zkt-Kits": "zkt-Kits-CN", + "zku": "zku-Latn-AU", + "zku-AU": "zku-Latn-AU", + "zku-Latn": "zku-Latn-AU", + "zkz": "zkz-Cyrl-RU", + "zkz-Cyrl": "zkz-Cyrl-RU", + "zkz-RU": "zkz-Cyrl-RU", + "zla": "zla-Latn-CD", + "zla-CD": "zla-Latn-CD", + "zla-Latn": "zla-Latn-CD", + "zlj": "zlj-Hani-CN", + "zlj-CN": "zlj-Hani-CN", + "zlj-Hani": "zlj-Hani-CN", + "zlm": "zlm-Latn-TG", + "zlm-Latn": "zlm-Latn-TG", + "zlm-TG": "zlm-Latn-TG", + "zln": "zln-Hani-CN", + "zln-CN": "zln-Hani-CN", + "zln-Hani": "zln-Hani-CN", + "zlq": "zlq-Hani-CN", + "zlq-CN": "zlq-Hani-CN", + "zlq-Hani": "zlq-Hani-CN", + "zlu": "zlu-Latn-NG", + "zlu-Latn": "zlu-Latn-NG", + "zlu-NG": "zlu-Latn-NG", + "zma": "zma-Latn-AU", + "zma-AU": "zma-Latn-AU", + "zma-Latn": "zma-Latn-AU", + "zmb": "zmb-Latn-CD", + "zmb-CD": "zmb-Latn-CD", + "zmb-Latn": "zmb-Latn-CD", + "zmc": "zmc-Latn-AU", + "zmc-AU": "zmc-Latn-AU", + "zmc-Latn": "zmc-Latn-AU", + "zmd": "zmd-Latn-AU", + "zmd-AU": "zmd-Latn-AU", + "zmd-Latn": "zmd-Latn-AU", + "zme": "zme-Latn-AU", + "zme-AU": "zme-Latn-AU", + "zme-Latn": "zme-Latn-AU", + "zmf": "zmf-Latn-CD", + "zmf-CD": "zmf-Latn-CD", + "zmf-Latn": "zmf-Latn-CD", + "zmg": "zmg-Latn-AU", + "zmg-AU": "zmg-Latn-AU", + "zmg-Latn": "zmg-Latn-AU", + "zmh": "zmh-Latn-PG", + "zmh-Latn": "zmh-Latn-PG", + "zmh-PG": "zmh-Latn-PG", + "zmi": "zmi-Latn-MY", + "zmi-Latn": "zmi-Latn-MY", + "zmi-MY": "zmi-Latn-MY", + "zmj": "zmj-Latn-AU", + "zmj-AU": "zmj-Latn-AU", + "zmj-Latn": "zmj-Latn-AU", + "zmk": "zmk-Latn-AU", + "zmk-AU": "zmk-Latn-AU", + "zmk-Latn": "zmk-Latn-AU", + "zml": "zml-Latn-AU", + "zml-AU": "zml-Latn-AU", + "zml-Latn": "zml-Latn-AU", + "zmm": "zmm-Latn-AU", + "zmm-AU": "zmm-Latn-AU", + "zmm-Latn": "zmm-Latn-AU", + "zmn": "zmn-Latn-GA", + "zmn-GA": "zmn-Latn-GA", + "zmn-Latn": "zmn-Latn-GA", + "zmo": "zmo-Latn-SD", + "zmo-Latn": "zmo-Latn-SD", + "zmo-SD": "zmo-Latn-SD", + "zmp": "zmp-Latn-CD", + "zmp-CD": "zmp-Latn-CD", + "zmp-Latn": "zmp-Latn-CD", + "zmq": "zmq-Latn-CD", + "zmq-CD": "zmq-Latn-CD", + "zmq-Latn": "zmq-Latn-CD", + "zmr": "zmr-Latn-AU", + "zmr-AU": "zmr-Latn-AU", + "zmr-Latn": "zmr-Latn-AU", + "zms": "zms-Latn-CD", + "zms-CD": "zms-Latn-CD", + "zms-Latn": "zms-Latn-CD", + "zmt": "zmt-Latn-AU", + "zmt-AU": "zmt-Latn-AU", + "zmt-Latn": "zmt-Latn-AU", + "zmu": "zmu-Latn-AU", + "zmu-AU": "zmu-Latn-AU", + "zmu-Latn": "zmu-Latn-AU", + "zmv": "zmv-Latn-AU", + "zmv-AU": "zmv-Latn-AU", + "zmv-Latn": "zmv-Latn-AU", + "zmw": "zmw-Latn-CD", + "zmw-CD": "zmw-Latn-CD", + "zmw-Latn": "zmw-Latn-CD", + "zmx": "zmx-Latn-CG", + "zmx-CG": "zmx-Latn-CG", + "zmx-Latn": "zmx-Latn-CG", + "zmy": "zmy-Latn-AU", + "zmy-AU": "zmy-Latn-AU", + "zmy-Latn": "zmy-Latn-AU", + "zmz": "zmz-Latn-CD", + "zmz-CD": "zmz-Latn-CD", + "zmz-Latn": "zmz-Latn-CD", + "zna": "zna-Latn-TD", + "zna-Latn": "zna-Latn-TD", + "zna-TD": "zna-Latn-TD", + "zne": "zne-Latn-CD", + "zne-CD": "zne-Latn-CD", + "zne-Latn": "zne-Latn-CD", + "zng": "zng-Latn-VN", + "zng-Latn": "zng-Latn-VN", + "zng-VN": "zng-Latn-VN", + "znk": "znk-Latn-AU", + "znk-AU": "znk-Latn-AU", + "znk-Latn": "znk-Latn-AU", + "zns": "zns-Latn-NG", + "zns-Latn": "zns-Latn-NG", + "zns-NG": "zns-Latn-NG", + "zoc": "zoc-Latn-MX", + "zoc-Latn": "zoc-Latn-MX", + "zoc-MX": "zoc-Latn-MX", + "zoh": "zoh-Latn-MX", + "zoh-Latn": "zoh-Latn-MX", + "zoh-MX": "zoh-Latn-MX", + "zom": "zom-Latn-IN", + "zom-IN": "zom-Latn-IN", + "zom-Latn": "zom-Latn-IN", + "zoo": "zoo-Latn-MX", + "zoo-Latn": "zoo-Latn-MX", + "zoo-MX": "zoo-Latn-MX", + "zoq": "zoq-Latn-MX", + "zoq-Latn": "zoq-Latn-MX", + "zoq-MX": "zoq-Latn-MX", + "zor": "zor-Latn-MX", + "zor-Latn": "zor-Latn-MX", + "zor-MX": "zor-Latn-MX", + "zos": "zos-Latn-MX", + "zos-Latn": "zos-Latn-MX", + "zos-MX": "zos-Latn-MX", + "zpa": "zpa-Latn-MX", + "zpa-Latn": "zpa-Latn-MX", + "zpa-MX": "zpa-Latn-MX", + "zpb": "zpb-Latn-MX", + "zpb-Latn": "zpb-Latn-MX", + "zpb-MX": "zpb-Latn-MX", + "zpc": "zpc-Latn-MX", + "zpc-Latn": "zpc-Latn-MX", + "zpc-MX": "zpc-Latn-MX", + "zpd": "zpd-Latn-MX", + "zpd-Latn": "zpd-Latn-MX", + "zpd-MX": "zpd-Latn-MX", + "zpe": "zpe-Latn-MX", + "zpe-Latn": "zpe-Latn-MX", + "zpe-MX": "zpe-Latn-MX", + "zpf": "zpf-Latn-MX", + "zpf-Latn": "zpf-Latn-MX", + "zpf-MX": "zpf-Latn-MX", + "zpg": "zpg-Latn-MX", + "zpg-Latn": "zpg-Latn-MX", + "zpg-MX": "zpg-Latn-MX", + "zph": "zph-Latn-MX", + "zph-Latn": "zph-Latn-MX", + "zph-MX": "zph-Latn-MX", + "zpi": "zpi-Latn-MX", + "zpi-Latn": "zpi-Latn-MX", + "zpi-MX": "zpi-Latn-MX", + "zpj": "zpj-Latn-MX", + "zpj-Latn": "zpj-Latn-MX", + "zpj-MX": "zpj-Latn-MX", + "zpk": "zpk-Latn-MX", + "zpk-Latn": "zpk-Latn-MX", + "zpk-MX": "zpk-Latn-MX", + "zpl": "zpl-Latn-MX", + "zpl-Latn": "zpl-Latn-MX", + "zpl-MX": "zpl-Latn-MX", + "zpm": "zpm-Latn-MX", + "zpm-Latn": "zpm-Latn-MX", + "zpm-MX": "zpm-Latn-MX", + "zpn": "zpn-Latn-MX", + "zpn-Latn": "zpn-Latn-MX", + "zpn-MX": "zpn-Latn-MX", + "zpo": "zpo-Latn-MX", + "zpo-Latn": "zpo-Latn-MX", + "zpo-MX": "zpo-Latn-MX", + "zpp": "zpp-Latn-MX", + "zpp-Latn": "zpp-Latn-MX", + "zpp-MX": "zpp-Latn-MX", + "zpq": "zpq-Latn-MX", + "zpq-Latn": "zpq-Latn-MX", + "zpq-MX": "zpq-Latn-MX", + "zpr": "zpr-Latn-MX", + "zpr-Latn": "zpr-Latn-MX", + "zpr-MX": "zpr-Latn-MX", + "zps": "zps-Latn-MX", + "zps-Latn": "zps-Latn-MX", + "zps-MX": "zps-Latn-MX", + "zpt": "zpt-Latn-MX", + "zpt-Latn": "zpt-Latn-MX", + "zpt-MX": "zpt-Latn-MX", + "zpu": "zpu-Latn-MX", + "zpu-Latn": "zpu-Latn-MX", + "zpu-MX": "zpu-Latn-MX", + "zpv": "zpv-Latn-MX", + "zpv-Latn": "zpv-Latn-MX", + "zpv-MX": "zpv-Latn-MX", + "zpw": "zpw-Latn-MX", + "zpw-Latn": "zpw-Latn-MX", + "zpw-MX": "zpw-Latn-MX", + "zpx": "zpx-Latn-MX", + "zpx-Latn": "zpx-Latn-MX", + "zpx-MX": "zpx-Latn-MX", + "zpy": "zpy-Latn-MX", + "zpy-Latn": "zpy-Latn-MX", + "zpy-MX": "zpy-Latn-MX", + "zpz": "zpz-Latn-MX", + "zpz-Latn": "zpz-Latn-MX", + "zpz-MX": "zpz-Latn-MX", + "zqe": "zqe-Hani-CN", + "zqe-CN": "zqe-Hani-CN", + "zqe-Hani": "zqe-Hani-CN", + "zrg": "zrg-Orya-IN", + "zrg-IN": "zrg-Orya-IN", + "zrg-Orya": "zrg-Orya-IN", + "zrn": "zrn-Latn-TD", + "zrn-Latn": "zrn-Latn-TD", + "zrn-TD": "zrn-Latn-TD", + "zro": "zro-Latn-EC", + "zro-EC": "zro-Latn-EC", + "zro-Latn": "zro-Latn-EC", + "zrp": "zrp-Hebr-FR", + "zrp-FR": "zrp-Hebr-FR", + "zrp-Hebr": "zrp-Hebr-FR", + "zrs": "zrs-Latn-ID", + "zrs-ID": "zrs-Latn-ID", + "zrs-Latn": "zrs-Latn-ID", + "zsa": "zsa-Latn-PG", + "zsa-Latn": "zsa-Latn-PG", + "zsa-PG": "zsa-Latn-PG", + "zsr": "zsr-Latn-MX", + "zsr-Latn": "zsr-Latn-MX", + "zsr-MX": "zsr-Latn-MX", + "zsu": "zsu-Latn-PG", + "zsu-Latn": "zsu-Latn-PG", + "zsu-PG": "zsu-Latn-PG", + "zte": "zte-Latn-MX", + "zte-Latn": "zte-Latn-MX", + "zte-MX": "zte-Latn-MX", + "ztg": "ztg-Latn-MX", + "ztg-Latn": "ztg-Latn-MX", + "ztg-MX": "ztg-Latn-MX", + "ztl": "ztl-Latn-MX", + "ztl-Latn": "ztl-Latn-MX", + "ztl-MX": "ztl-Latn-MX", + "ztm": "ztm-Latn-MX", + "ztm-Latn": "ztm-Latn-MX", + "ztm-MX": "ztm-Latn-MX", + "ztn": "ztn-Latn-MX", + "ztn-Latn": "ztn-Latn-MX", + "ztn-MX": "ztn-Latn-MX", + "ztp": "ztp-Latn-MX", + "ztp-Latn": "ztp-Latn-MX", + "ztp-MX": "ztp-Latn-MX", + "ztq": "ztq-Latn-MX", + "ztq-Latn": "ztq-Latn-MX", + "ztq-MX": "ztq-Latn-MX", + "zts": "zts-Latn-MX", + "zts-Latn": "zts-Latn-MX", + "zts-MX": "zts-Latn-MX", + "ztt": "ztt-Latn-MX", + "ztt-Latn": "ztt-Latn-MX", + "ztt-MX": "ztt-Latn-MX", + "ztu": "ztu-Latn-MX", + "ztu-Latn": "ztu-Latn-MX", + "ztu-MX": "ztu-Latn-MX", + "ztx": "ztx-Latn-MX", + "ztx-Latn": "ztx-Latn-MX", + "ztx-MX": "ztx-Latn-MX", + "zty": "zty-Latn-MX", + "zty-Latn": "zty-Latn-MX", + "zty-MX": "zty-Latn-MX", + "zu": "zu-Latn-ZA", + "zu-Latn": "zu-Latn-ZA", + "zu-ZA": "zu-Latn-ZA", + "zuh": "zuh-Latn-PG", + "zuh-Latn": "zuh-Latn-PG", + "zuh-PG": "zuh-Latn-PG", + "zum": "zum-Arab-OM", + "zum-Arab": "zum-Arab-OM", + "zum-OM": "zum-Arab-OM", + "zun": "zun-Latn-US", + "zun-Latn": "zun-Latn-US", + "zun-US": "zun-Latn-US", + "zuy": "zuy-Latn-CM", + "zuy-CM": "zuy-Latn-CM", + "zuy-Latn": "zuy-Latn-CM", + "zwa": "zwa-Ethi-ET", + "zwa-ET": "zwa-Ethi-ET", + "zwa-Ethi": "zwa-Ethi-ET", + "zxx": "zxx-Latn-XX", + "zxx-Latn": "zxx-Latn-XX", + "zxx-XX": "zxx-Latn-XX", + "zyg": "zyg-Hani-CN", + "zyg-CN": "zyg-Hani-CN", + "zyg-Hani": "zyg-Hani-CN", + "zyj": "zyj-Latn-CN", + "zyj-CN": "zyj-Latn-CN", + "zyj-Latn": "zyj-Latn-CN", + "zyn": "zyn-Hani-CN", + "zyn-CN": "zyn-Hani-CN", + "zyn-Hani": "zyn-Hani-CN", + "zyp": "zyp-Latn-MM", + "zyp-Latn": "zyp-Latn-MM", + "zyp-MM": "zyp-Latn-MM", + "zza": "zza-Latn-TR", + "zza-Latn": "zza-Latn-TR", + "zza-TR": "zza-Latn-TR", + "zzj": "zzj-Hani-CN", + "zzj-CN": "zzj-Hani-CN", + "zzj-Hani": "zzj-Hani-CN" + }, + "macroLanguages": { + "ak": [ + "aka", + "fat", + "tw" + ], + "ar": [ + "aao", + "abh", + "abv", + "acm", + "acq", + "acw", + "acx", + "acy", + "adf", + "aeb", + "aec", + "afb", + "ajp", + "apc", + "apd", + "ara", + "arb", + "arq", + "ars", + "ary", + "arz", + "auz", + "avl", + "ayh", + "ayl", + "ayn", + "ayp", + "bbz", + "pga", + "shu", + "ssh" + ], + "ay": [ + "ayc", + "aym", + "ayr" + ], + "az": [ + "azb", + "aze", + "azj" + ], + "cr": [ + "cre", + "crj", + "crk", + "crl", + "crm", + "csw", + "cwd" + ], + "et": [ + "ekk", + "est", + "vro" + ], + "fa": [ + "fas", + "pes", + "prs" + ], + "ff": [ + "ffm", + "fub", + "fuc", + "fue", + "fuf", + "fuh", + "fui", + "ful", + "fuq", + "fuv" + ], + "gn": [ + "ggo", + "gno", + "gon" + ], + "ik": [ + "esi", + "esk", + "ipk" + ], + "iu": [ + "ike", + "ikt", + "iku" + ], + "kg": [ + "kng", + "kon", + "kwy", + "ldi" + ], + "kr": [ + "kau", + "kby", + "knc", + "krt" + ], + "ku": [ + "ckb", + "kmr", + "kur", + "sdh" + ], + "kv": [ + "koi", + "kom", + "kpv" + ], + "lv": [ + "lav", + "ltg", + "lvs" + ], + "mg": [ + "bhr", + "bjq", + "bmm", + "bzc", + "mlg", + "msh", + "plt", + "skg", + "tdx", + "tkg", + "txy", + "xmv", + "xmw" + ], + "mn": [ + "khk", + "mon", + "mvf" + ], + "ms": [ + "btj", + "bve", + "bvu", + "coa", + "id", + "jax", + "max", + "meo", + "mfa", + "mly", + "mqg", + "msi", + "vkt", + "xmm" + ], + "no": [ + "nb", + "nn", + "nno", + "nob" + ], + "oj": [ + "ciw", + "ojb", + "ojc", + "ojg", + "oji", + "ojs", + "ojw", + "otw" + ], + "om": [ + "gax", + "gaz", + "hae", + "orc", + "orm" + ], + "qu": [ + "cqu", + "qub", + "qud", + "que", + "quf", + "qug", + "quh", + "quk", + "qul", + "qup", + "qur", + "qus", + "quw", + "qux", + "quy", + "quz", + "qva", + "qvc", + "qve", + "qvh", + "qvi", + "qvj", + "qvl", + "qvm", + "qvn", + "qvo", + "qvp", + "qvs", + "qvw", + "qvz", + "qwa", + "qwc", + "qwh", + "qws", + "qxa", + "qxc", + "qxh", + "qxl", + "qxn", + "qxo", + "qxp", + "qxr", + "qxt", + "qxu", + "qxw" + ], + "sc": [ + "sdc", + "sdn", + "src", + "srd", + "sro" + ], + "sq": [ + "aae", + "aat", + "aln", + "als", + "sqi" + ], + "sw": [ + "swa", + "swc", + "swh" + ], + "uz": [ + "uzb", + "uzn", + "uzn" + ], + "yi": [ + "ydd", + "yid", + "yih" + ], + "za": [ + "zch", + "zeh", + "zgb", + "zgm", + "zgn", + "zha", + "zhd", + "zhn", + "zlj", + "zln", + "zlq", + "zqe", + "zyb", + "zyg", + "zyj", + "zyn", + "zzj" + ], + "zh": [ + "cdo", + "cjy", + "cmn", + "cpx", + "czh", + "czo", + "gan", + "hak", + "hsn", + "mnp", + "nan", + "wuu", + "yue", + "zho" + ] + }, + "macroLanguagesReverse": { + "aae": "sq", + "aao": "ar", + "aat": "sq", + "abh": "ar", + "abv": "ar", + "acm": "ar", + "acq": "ar", + "acw": "ar", + "acx": "ar", + "acy": "ar", + "adf": "ar", + "aeb": "ar", + "aec": "ar", + "afb": "ar", + "ajp": "ar", + "aka": "ak", + "aln": "sq", + "als": "sq", + "apc": "ar", + "apd": "ar", + "ara": "ar", + "arb": "ar", + "arq": "ar", + "ars": "ar", + "ary": "ar", + "arz": "ar", + "auz": "ar", + "avl": "ar", + "ayc": "ay", + "ayh": "ar", + "ayl": "ar", + "aym": "ay", + "ayn": "ar", + "ayp": "ar", + "ayr": "ay", + "azb": "az", + "aze": "az", + "azj": "az", + "bbz": "ar", + "bhr": "mg", + "bjq": "mg", + "bmm": "mg", + "btj": "ms", + "bve": "ms", + "bvu": "ms", + "bzc": "mg", + "cdo": "zh", + "ciw": "oj", + "cjy": "zh", + "ckb": "ku", + "cmn": "zh", + "coa": "ms", + "cpx": "zh", + "cqu": "qu", + "cre": "cr", + "crj": "cr", + "crk": "cr", + "crl": "cr", + "crm": "cr", + "csw": "cr", + "cwd": "cr", + "czh": "zh", + "czo": "zh", + "ekk": "et", + "esi": "ik", + "esk": "ik", + "est": "et", + "fas": "fa", + "fat": "ak", + "ffm": "ff", + "fub": "ff", + "fuc": "ff", + "fue": "ff", + "fuf": "ff", + "fuh": "ff", + "fui": "ff", + "ful": "ff", + "fuq": "ff", + "fuv": "ff", + "gan": "zh", + "gax": "om", + "gaz": "om", + "ggo": "gn", + "gno": "gn", + "gon": "gn", + "hae": "om", + "hak": "zh", + "hsn": "zh", + "id": "ms", + "ike": "iu", + "ikt": "iu", + "iku": "iu", + "ipk": "ik", + "jax": "ms", + "kau": "kr", + "kby": "kr", + "khk": "mn", + "kmr": "ku", + "knc": "kr", + "kng": "kg", + "koi": "kv", + "kom": "kv", + "kon": "kg", + "kpv": "kv", + "krt": "kr", + "kur": "ku", + "kwy": "kg", + "lav": "lv", + "ldi": "kg", + "ltg": "lv", + "lvs": "lv", + "max": "ms", + "meo": "ms", + "mfa": "ms", + "mlg": "mg", + "mly": "ms", + "mnp": "zh", + "mon": "mn", + "mqg": "ms", + "msh": "mg", + "msi": "ms", + "mvf": "mn", + "nan": "zh", + "nb": "no", + "nn": "no", + "nno": "no", + "nob": "no", + "ojb": "oj", + "ojc": "oj", + "ojg": "oj", + "oji": "oj", + "ojs": "oj", + "ojw": "oj", + "orc": "om", + "orm": "om", + "otw": "oj", + "pes": "fa", + "pga": "ar", + "plt": "mg", + "prs": "fa", + "qub": "qu", + "qud": "qu", + "que": "qu", + "quf": "qu", + "qug": "qu", + "quh": "qu", + "quk": "qu", + "qul": "qu", + "qup": "qu", + "qur": "qu", + "qus": "qu", + "quw": "qu", + "qux": "qu", + "quy": "qu", + "quz": "qu", + "qva": "qu", + "qvc": "qu", + "qve": "qu", + "qvh": "qu", + "qvi": "qu", + "qvj": "qu", + "qvl": "qu", + "qvm": "qu", + "qvn": "qu", + "qvo": "qu", + "qvp": "qu", + "qvs": "qu", + "qvw": "qu", + "qvz": "qu", + "qwa": "qu", + "qwc": "qu", + "qwh": "qu", + "qws": "qu", + "qxa": "qu", + "qxc": "qu", + "qxh": "qu", + "qxl": "qu", + "qxn": "qu", + "qxo": "qu", + "qxp": "qu", + "qxr": "qu", + "qxt": "qu", + "qxu": "qu", + "qxw": "qu", + "sdc": "sc", + "sdh": "ku", + "sdn": "sc", + "shu": "ar", + "skg": "mg", + "sqi": "sq", + "src": "sc", + "srd": "sc", + "sro": "sc", + "ssh": "ar", + "swa": "sw", + "swc": "sw", + "swh": "sw", + "tdx": "mg", + "tkg": "mg", + "tw": "ak", + "txy": "mg", + "uzb": "uz", + "uzn": "uz", + "vkt": "ms", + "vro": "et", + "wuu": "zh", + "xmm": "ms", + "xmv": "mg", + "xmw": "mg", + "ydd": "yi", + "yid": "yi", + "yih": "yi", + "yue": "zh", + "zch": "za", + "zeh": "za", + "zgb": "za", + "zgm": "za", + "zgn": "za", + "zha": "za", + "zhd": "za", + "zhn": "za", + "zho": "zh", + "zlj": "za", + "zln": "za", + "zlq": "za", + "zqe": "za", + "zyb": "za", + "zyg": "za", + "zyj": "za", + "zyn": "za", + "zzj": "za" + }, + "mutualIntelligibility": { + "af-fy": 20, + "af-nl": 33, + "aii-cld": 30, + "aii-tru": 30, + "az-crh": 30, + "az-gag": 30, + "az-tr": 50, + "az-uum": 30, + "be-pl": 30, + "be-ru": 50, + "be-uk": 75, + "bg-mk": 75, + "ca-es": 75, + "ca-fr": 50, + "ca-it": 50, + "ca-pt": 35, + "cld-aii": 40, + "cld-tru": 30, + "crh-az": 30, + "crh-gag": 30, + "crh-tr": 50, + "crh-uum": 30, + "cs-sk": 85, + "da-fo": 30, + "da-is": 30, + "da-no": 45, + "da-sv": 37, + "en-sco": 75, + "et-fi": 50, + "et-fit": 45, + "et-fkv": 45, + "et-krl": 40, + "fi-et": 50, + "fi-fit": 90, + "fi-fkv": 90, + "fi-krl": 80, + "fit-et": 45, + "fit-fi": 95, + "fit-fkv": 90, + "fit-krl": 80, + "fkv-et": 45, + "fkv-fi": 95, + "fkv-fit": 90, + "fkv-krl": 80, + "fo-da": 83, + "fo-is": 60, + "fo-no": 70, + "fo-sv": 58, + "fr-ca": 50, + "fr-es": 50, + "fr-it": 50, + "fr-pt": 35, + "fy-af": 40, + "fy-nl": 50, + "gag-az": 30, + "gag-crh": 30, + "gag-tr": 50, + "gag-uum": 30, + "is-da": 54, + "is-fo": 60, + "is-no": 34, + "is-sv": 33, + "it-ca": 50, + "it-es": 40, + "it-fr": 50, + "it-pt": 25, + "krl-et": 45, + "krl-fi": 95, + "krl-fit": 90, + "krl-fkv": 80, + "mk-bg": 75, + "nl-af": 50, + "nl-fy": 50, + "no-da": 65, + "no-fo": 40, + "no-is": 40, + "no-sv": 66, + "ovd-sv": 33, + "ru-be": 30, + "ru-pl": 25, + "ru-uk": 50, + "sco-en": 85, + "sk-cs": 85, + "sv-da": 44, + "sv-fo": 33, + "sv-is": 33, + "sv-no": 53, + "sv-ovd": 33, + "tr-az": 30, + "tr-crh": 30, + "tr-gag": 30, + "tr-uum": 30, + "tru-aii": 40, + "tru-cld": 30, + "uk-be": 75, + "uk-pl": 30, + "uk-ru": 75, + "uum-az": 30, + "uum-crh": 30, + "uum-gag": 30, + "uum-tr": 50 + }, + "territoryContainment": { + "001": [ + "EU", + "EZ", + "UN", + "019", + "002", + "150", + "142", + "009" + ], + "002": [ + "202", + "015", + "011", + "017", + "014", + "018" + ], + "003": [ + "021", + "013", + "029" + ], + "005": [ + "AR", + "BO", + "BR", + "BV", + "CL", + "CO", + "EC", + "FK", + "GF", + "GS", + "GY", + "PE", + "PY", + "SR", + "UY", + "VE" + ], + "009": [ + "053", + "054", + "057", + "061", + "QO" + ], + "011": [ + "BF", + "BJ", + "CI", + "CV", + "GH", + "GM", + "GN", + "GW", + "LR", + "ML", + "MR", + "NE", + "NG", + "SH", + "SL", + "SN", + "TG" + ], + "013": [ + "BZ", + "CR", + "GT", + "HN", + "MX", + "NI", + "PA", + "SV" + ], + "014": [ + "BI", + "DJ", + "ER", + "ET", + "IO", + "KE", + "KM", + "MG", + "MU", + "MW", + "MZ", + "RE", + "RW", + "SC", + "SO", + "SS", + "TF", + "TZ", + "UG", + "YT", + "ZM", + "ZW" + ], + "015": [ + "DZ", + "EG", + "EH", + "LY", + "MA", + "SD", + "TN", + "EA", + "IC" + ], + "017": [ + "AO", + "CD", + "CF", + "CG", + "CM", + "GA", + "GQ", + "ST", + "TD" + ], + "018": [ + "BW", + "LS", + "NA", + "SZ", + "ZA" + ], + "019": [ + "003", + "419", + "021", + "013", + "029", + "005" + ], + "021": [ + "BM", + "CA", + "GL", + "PM", + "US" + ], + "029": [ + "AG", + "AI", + "AW", + "BB", + "BL", + "BQ", + "BS", + "CU", + "CW", + "DM", + "DO", + "GD", + "GP", + "HT", + "JM", + "KN", + "KY", + "LC", + "MF", + "MQ", + "MS", + "PR", + "SX", + "TC", + "TT", + "VC", + "VG", + "VI" + ], + "030": [ + "CN", + "HK", + "JP", + "KP", + "KR", + "MN", + "MO", + "TW" + ], + "034": [ + "AF", + "BD", + "BT", + "IN", + "IR", + "LK", + "MV", + "NP", + "PK" + ], + "035": [ + "BN", + "ID", + "KH", + "LA", + "MM", + "MY", + "PH", + "SG", + "TH", + "TL", + "VN" + ], + "039": [ + "AD", + "AL", + "BA", + "ES", + "GI", + "GR", + "HR", + "IT", + "ME", + "MK", + "MT", + "RS", + "PT", + "SI", + "SM", + "VA", + "XK" + ], + "053": [ + "AU", + "CC", + "CX", + "HM", + "NF", + "NZ" + ], + "054": [ + "FJ", + "NC", + "PG", + "SB", + "VU" + ], + "057": [ + "FM", + "GU", + "KI", + "MH", + "MP", + "NR", + "PW", + "UM" + ], + "061": [ + "AS", + "CK", + "NU", + "PF", + "PN", + "TK", + "TO", + "TV", + "WF", + "WS" + ], + "142": [ + "145", + "143", + "030", + "034", + "035" + ], + "143": [ + "TM", + "TJ", + "KG", + "KZ", + "UZ" + ], + "145": [ + "AE", + "AM", + "AZ", + "BH", + "CY", + "GE", + "IL", + "IQ", + "JO", + "KW", + "LB", + "OM", + "PS", + "QA", + "SA", + "SY", + "TR", + "YE" + ], + "150": [ + "154", + "155", + "151", + "039" + ], + "151": [ + "BG", + "BY", + "CZ", + "HU", + "MD", + "PL", + "RO", + "RU", + "SK", + "UA" + ], + "154": [ + "GG", + "IM", + "JE", + "AX", + "DK", + "EE", + "FI", + "FO", + "GB", + "IE", + "IS", + "LT", + "LV", + "NO", + "SE", + "SJ", + "CQ" + ], + "155": [ + "AT", + "BE", + "CH", + "DE", + "FR", + "LI", + "LU", + "MC", + "NL" + ], + "202": [ + "011", + "017", + "014", + "018" + ], + "419": [ + "013", + "029", + "005" + ], + "EU": [ + "AT", + "BE", + "CY", + "CZ", + "DE", + "DK", + "EE", + "ES", + "FI", + "FR", + "GR", + "HR", + "HU", + "IE", + "IT", + "LT", + "LU", + "LV", + "MT", + "NL", + "PL", + "PT", + "SE", + "SI", + "SK", + "BG", + "RO" + ], + "EZ": [ + "AT", + "BE", + "CY", + "DE", + "EE", + "ES", + "FI", + "FR", + "GR", + "IE", + "IT", + "LT", + "LU", + "LV", + "MT", + "NL", + "PT", + "SI", + "SK" + ], + "QO": [ + "AQ", + "AC", + "CP", + "DG", + "TA" + ], + "UN": [ + "AD", + "AE", + "AF", + "AG", + "AL", + "AM", + "AO", + "AR", + "AT", + "AU", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BN", + "BO", + "BR", + "BS", + "BT", + "BW", + "BY", + "BZ", + "CA", + "CD", + "CF", + "CG", + "CH", + "CI", + "CL", + "CM", + "CN", + "CO", + "CR", + "CU", + "CV", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FM", + "FR", + "GA", + "GB", + "GD", + "GE", + "GH", + "GM", + "GN", + "GQ", + "GR", + "GT", + "GW", + "GY", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IN", + "IQ", + "IR", + "IS", + "IT", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KP", + "KR", + "KW", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MG", + "MH", + "MK", + "ML", + "MM", + "MN", + "MR", + "MT", + "MU", + "MV", + "MX", + "MW", + "MY", + "MZ", + "NA", + "NE", + "NG", + "NI", + "NL", + "NO", + "NR", + "NP", + "NZ", + "OM", + "PA", + "PE", + "PG", + "PH", + "PK", + "PL", + "PT", + "PW", + "PY", + "QA", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SI", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SY", + "SZ", + "TD", + "TG", + "TH", + "TJ", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TZ", + "UA", + "UG", + "US", + "UY", + "UZ", + "VC", + "VE", + "VN", + "VU", + "WS", + "YE", + "ZA", + "ZM", + "ZW" + ] + }, + "territoryContainmentReverse": { + "002": [ + "001" + ], + "003": [ + "001", + "019" + ], + "005": [ + "001", + "019", + "419" + ], + "009": [ + "001" + ], + "011": [ + "001", + "002", + "202" + ], + "013": [ + "001", + "019", + "419", + "003" + ], + "014": [ + "001", + "002", + "202" + ], + "015": [ + "001", + "002" + ], + "017": [ + "001", + "002", + "202" + ], + "018": [ + "001", + "002", + "202" + ], + "019": [ + "001" + ], + "021": [ + "001", + "019", + "003" + ], + "029": [ + "001", + "019", + "419", + "003" + ], + "030": [ + "001", + "142" + ], + "034": [ + "001", + "142" + ], + "035": [ + "001", + "142" + ], + "039": [ + "001", + "150" + ], + "053": [ + "001", + "009" + ], + "054": [ + "001", + "009" + ], + "057": [ + "001", + "009" + ], + "061": [ + "001", + "009" + ], + "142": [ + "001" + ], + "143": [ + "001", + "142" + ], + "145": [ + "001", + "142" + ], + "150": [ + "001" + ], + "151": [ + "001", + "150" + ], + "154": [ + "001", + "150" + ], + "155": [ + "001", + "150" + ], + "202": [ + "001", + "002" + ], + "419": [ + "001", + "019" + ], + "AC": [ + "001", + "009", + "QO" + ], + "AD": [ + "001", + "UN", + "150", + "039" + ], + "AE": [ + "001", + "UN", + "142", + "145" + ], + "AF": [ + "001", + "UN", + "142", + "034" + ], + "AG": [ + "001", + "UN", + "019", + "419", + "003", + "029" + ], + "AI": [ + "001", + "019", + "419", + "003", + "029" + ], + "AL": [ + "001", + "UN", + "150", + "039" + ], + "AM": [ + "001", + "UN", + "142", + "145" + ], + "AO": [ + "001", + "UN", + "002", + "202", + "017" + ], + "AQ": [ + "001", + "009", + "QO" + ], + "AR": [ + "001", + "UN", + "019", + "419", + "005" + ], + "AS": [ + "001", + "009", + "061" + ], + "AT": [ + "001", + "EU", + "EZ", + "UN", + "150", + "155" + ], + "AU": [ + "001", + "UN", + "009", + "053" + ], + "AW": [ + "001", + "019", + "419", + "003", + "029" + ], + "AX": [ + "001", + "150", + "154" + ], + "AZ": [ + "001", + "UN", + "142", + "145" + ], + "BA": [ + "001", + "UN", + "150", + "039" + ], + "BB": [ + "001", + "UN", + "019", + "419", + "003", + "029" + ], + "BD": [ + "001", + "UN", + "142", + "034" + ], + "BE": [ + "001", + "EU", + "EZ", + "UN", + "150", + "155" + ], + "BF": [ + "001", + "UN", + "002", + "202", + "011" + ], + "BG": [ + "001", + "EU", + "UN", + "150", + "151" + ], + "BH": [ + "001", + "UN", + "142", + "145" + ], + "BI": [ + "001", + "UN", + "002", + "202", + "014" + ], + "BJ": [ + "001", + "UN", + "002", + "202", + "011" + ], + "BL": [ + "001", + "019", + "419", + "003", + "029" + ], + "BM": [ + "001", + "019", + "003", + "021" + ], + "BN": [ + "001", + "UN", + "142", + "035" + ], + "BO": [ + "001", + "UN", + "019", + "419", + "005" + ], + "BQ": [ + "001", + "019", + "419", + "003", + "029" + ], + "BR": [ + "001", + "UN", + "019", + "419", + "005" + ], + "BS": [ + "001", + "UN", + "019", + "419", + "003", + "029" + ], + "BT": [ + "001", + "UN", + "142", + "034" + ], + "BV": [ + "001", + "019", + "419", + "005" + ], + "BW": [ + "001", + "UN", + "002", + "202", + "018" + ], + "BY": [ + "001", + "UN", + "150", + "151" + ], + "BZ": [ + "001", + "UN", + "019", + "419", + "003", + "013" + ], + "CA": [ + "001", + "UN", + "019", + "003", + "021" + ], + "CC": [ + "001", + "009", + "053" + ], + "CD": [ + "001", + "UN", + "002", + "202", + "017" + ], + "CF": [ + "001", + "UN", + "002", + "202", + "017" + ], + "CG": [ + "001", + "UN", + "002", + "202", + "017" + ], + "CH": [ + "001", + "UN", + "150", + "155" + ], + "CI": [ + "001", + "UN", + "002", + "202", + "011" + ], + "CK": [ + "001", + "009", + "061" + ], + "CL": [ + "001", + "UN", + "019", + "419", + "005" + ], + "CM": [ + "001", + "UN", + "002", + "202", + "017" + ], + "CN": [ + "001", + "UN", + "142", + "030" + ], + "CO": [ + "001", + "UN", + "019", + "419", + "005" + ], + "CP": [ + "001", + "009", + "QO" + ], + "CQ": [ + "001", + "150", + "154" + ], + "CR": [ + "001", + "UN", + "019", + "419", + "003", + "013" + ], + "CU": [ + "001", + "UN", + "019", + "419", + "003", + "029" + ], + "CV": [ + "001", + "UN", + "002", + "202", + "011" + ], + "CW": [ + "001", + "019", + "419", + "003", + "029" + ], + "CX": [ + "001", + "009", + "053" + ], + "CY": [ + "001", + "EU", + "EZ", + "UN", + "142", + "145" + ], + "CZ": [ + "001", + "EU", + "UN", + "150", + "151" + ], + "DE": [ + "001", + "EU", + "EZ", + "UN", + "150", + "155" + ], + "DG": [ + "001", + "009", + "QO" + ], + "DJ": [ + "001", + "UN", + "002", + "202", + "014" + ], + "DK": [ + "001", + "EU", + "UN", + "150", + "154" + ], + "DM": [ + "001", + "UN", + "019", + "419", + "003", + "029" + ], + "DO": [ + "001", + "UN", + "019", + "419", + "003", + "029" + ], + "DZ": [ + "001", + "UN", + "002", + "015" + ], + "EA": [ + "001", + "002", + "015" + ], + "EC": [ + "001", + "UN", + "019", + "419", + "005" + ], + "EE": [ + "001", + "EU", + "EZ", + "UN", + "150", + "154" + ], + "EG": [ + "001", + "UN", + "002", + "015" + ], + "EH": [ + "001", + "002", + "015" + ], + "ER": [ + "001", + "UN", + "002", + "202", + "014" + ], + "ES": [ + "001", + "EU", + "EZ", + "UN", + "150", + "039" + ], + "ET": [ + "001", + "UN", + "002", + "202", + "014" + ], + "EU": [ + "001" + ], + "EZ": [ + "001" + ], + "FI": [ + "001", + "EU", + "EZ", + "UN", + "150", + "154" + ], + "FJ": [ + "001", + "UN", + "009", + "054" + ], + "FK": [ + "001", + "019", + "419", + "005" + ], + "FM": [ + "001", + "UN", + "009", + "057" + ], + "FO": [ + "001", + "150", + "154" + ], + "FR": [ + "001", + "EU", + "EZ", + "UN", + "150", + "155" + ], + "GA": [ + "001", + "UN", + "002", + "202", + "017" + ], + "GB": [ + "001", + "UN", + "150", + "154" + ], + "GD": [ + "001", + "UN", + "019", + "419", + "003", + "029" + ], + "GE": [ + "001", + "UN", + "142", + "145" + ], + "GF": [ + "001", + "019", + "419", + "005" + ], + "GG": [ + "001", + "150", + "154" + ], + "GH": [ + "001", + "UN", + "002", + "202", + "011" + ], + "GI": [ + "001", + "150", + "039" + ], + "GL": [ + "001", + "019", + "003", + "021" + ], + "GM": [ + "001", + "UN", + "002", + "202", + "011" + ], + "GN": [ + "001", + "UN", + "002", + "202", + "011" + ], + "GP": [ + "001", + "019", + "419", + "003", + "029" + ], + "GQ": [ + "001", + "UN", + "002", + "202", + "017" + ], + "GR": [ + "001", + "EU", + "EZ", + "UN", + "150", + "039" + ], + "GS": [ + "001", + "019", + "419", + "005" + ], + "GT": [ + "001", + "UN", + "019", + "419", + "003", + "013" + ], + "GU": [ + "001", + "009", + "057" + ], + "GW": [ + "001", + "UN", + "002", + "202", + "011" + ], + "GY": [ + "001", + "UN", + "019", + "419", + "005" + ], + "HK": [ + "001", + "142", + "030" + ], + "HM": [ + "001", + "009", + "053" + ], + "HN": [ + "001", + "UN", + "019", + "419", + "003", + "013" + ], + "HR": [ + "001", + "EU", + "UN", + "150", + "039" + ], + "HT": [ + "001", + "UN", + "019", + "419", + "003", + "029" + ], + "HU": [ + "001", + "EU", + "UN", + "150", + "151" + ], + "IC": [ + "001", + "002", + "015" + ], + "ID": [ + "001", + "UN", + "142", + "035" + ], + "IE": [ + "001", + "EU", + "EZ", + "UN", + "150", + "154" + ], + "IL": [ + "001", + "UN", + "142", + "145" + ], + "IM": [ + "001", + "150", + "154" + ], + "IN": [ + "001", + "UN", + "142", + "034" + ], + "IO": [ + "001", + "002", + "202", + "014" + ], + "IQ": [ + "001", + "UN", + "142", + "145" + ], + "IR": [ + "001", + "UN", + "142", + "034" + ], + "IS": [ + "001", + "UN", + "150", + "154" + ], + "IT": [ + "001", + "EU", + "EZ", + "UN", + "150", + "039" + ], + "JE": [ + "001", + "150", + "154" + ], + "JM": [ + "001", + "UN", + "019", + "419", + "003", + "029" + ], + "JO": [ + "001", + "UN", + "142", + "145" + ], + "JP": [ + "001", + "UN", + "142", + "030" + ], + "KE": [ + "001", + "UN", + "002", + "202", + "014" + ], + "KG": [ + "001", + "UN", + "142", + "143" + ], + "KH": [ + "001", + "UN", + "142", + "035" + ], + "KI": [ + "001", + "UN", + "009", + "057" + ], + "KM": [ + "001", + "UN", + "002", + "202", + "014" + ], + "KN": [ + "001", + "UN", + "019", + "419", + "003", + "029" + ], + "KP": [ + "001", + "UN", + "142", + "030" + ], + "KR": [ + "001", + "UN", + "142", + "030" + ], + "KW": [ + "001", + "UN", + "142", + "145" + ], + "KY": [ + "001", + "019", + "419", + "003", + "029" + ], + "KZ": [ + "001", + "UN", + "142", + "143" + ], + "LA": [ + "001", + "UN", + "142", + "035" + ], + "LB": [ + "001", + "UN", + "142", + "145" + ], + "LC": [ + "001", + "UN", + "019", + "419", + "003", + "029" + ], + "LI": [ + "001", + "UN", + "150", + "155" + ], + "LK": [ + "001", + "UN", + "142", + "034" + ], + "LR": [ + "001", + "UN", + "002", + "202", + "011" + ], + "LS": [ + "001", + "UN", + "002", + "202", + "018" + ], + "LT": [ + "001", + "EU", + "EZ", + "UN", + "150", + "154" + ], + "LU": [ + "001", + "EU", + "EZ", + "UN", + "150", + "155" + ], + "LV": [ + "001", + "EU", + "EZ", + "UN", + "150", + "154" + ], + "LY": [ + "001", + "UN", + "002", + "015" + ], + "MA": [ + "001", + "UN", + "002", + "015" + ], + "MC": [ + "001", + "UN", + "150", + "155" + ], + "MD": [ + "001", + "UN", + "150", + "151" + ], + "ME": [ + "001", + "UN", + "150", + "039" + ], + "MF": [ + "001", + "019", + "419", + "003", + "029" + ], + "MG": [ + "001", + "UN", + "002", + "202", + "014" + ], + "MH": [ + "001", + "UN", + "009", + "057" + ], + "MK": [ + "001", + "UN", + "150", + "039" + ], + "ML": [ + "001", + "UN", + "002", + "202", + "011" + ], + "MM": [ + "001", + "UN", + "142", + "035" + ], + "MN": [ + "001", + "UN", + "142", + "030" + ], + "MO": [ + "001", + "142", + "030" + ], + "MP": [ + "001", + "009", + "057" + ], + "MQ": [ + "001", + "019", + "419", + "003", + "029" + ], + "MR": [ + "001", + "UN", + "002", + "202", + "011" + ], + "MS": [ + "001", + "019", + "419", + "003", + "029" + ], + "MT": [ + "001", + "EU", + "EZ", + "UN", + "150", + "039" + ], + "MU": [ + "001", + "UN", + "002", + "202", + "014" + ], + "MV": [ + "001", + "UN", + "142", + "034" + ], + "MW": [ + "001", + "UN", + "002", + "202", + "014" + ], + "MX": [ + "001", + "UN", + "019", + "419", + "003", + "013" + ], + "MY": [ + "001", + "UN", + "142", + "035" + ], + "MZ": [ + "001", + "UN", + "002", + "202", + "014" + ], + "NA": [ + "001", + "UN", + "002", + "202", + "018" + ], + "NC": [ + "001", + "009", + "054" + ], + "NE": [ + "001", + "UN", + "002", + "202", + "011" + ], + "NF": [ + "001", + "009", + "053" + ], + "NG": [ + "001", + "UN", + "002", + "202", + "011" + ], + "NI": [ + "001", + "UN", + "019", + "419", + "003", + "013" + ], + "NL": [ + "001", + "EU", + "EZ", + "UN", + "150", + "155" + ], + "NO": [ + "001", + "UN", + "150", + "154" + ], + "NP": [ + "001", + "UN", + "142", + "034" + ], + "NR": [ + "001", + "UN", + "009", + "057" + ], + "NU": [ + "001", + "009", + "061" + ], + "NZ": [ + "001", + "UN", + "009", + "053" + ], + "OM": [ + "001", + "UN", + "142", + "145" + ], + "PA": [ + "001", + "UN", + "019", + "419", + "003", + "013" + ], + "PE": [ + "001", + "UN", + "019", + "419", + "005" + ], + "PF": [ + "001", + "009", + "061" + ], + "PG": [ + "001", + "UN", + "009", + "054" + ], + "PH": [ + "001", + "UN", + "142", + "035" + ], + "PK": [ + "001", + "UN", + "142", + "034" + ], + "PL": [ + "001", + "EU", + "UN", + "150", + "151" + ], + "PM": [ + "001", + "019", + "003", + "021" + ], + "PN": [ + "001", + "009", + "061" + ], + "PR": [ + "001", + "019", + "419", + "003", + "029" + ], + "PS": [ + "001", + "142", + "145" + ], + "PT": [ + "001", + "EU", + "EZ", + "UN", + "150", + "039" + ], + "PW": [ + "001", + "UN", + "009", + "057" + ], + "PY": [ + "001", + "UN", + "019", + "419", + "005" + ], + "QA": [ + "001", + "UN", + "142", + "145" + ], + "QO": [ + "001", + "009" + ], + "RE": [ + "001", + "002", + "202", + "014" + ], + "RO": [ + "001", + "EU", + "UN", + "150", + "151" + ], + "RS": [ + "001", + "UN", + "150", + "039" + ], + "RU": [ + "001", + "UN", + "150", + "151" + ], + "RW": [ + "001", + "UN", + "002", + "202", + "014" + ], + "SA": [ + "001", + "UN", + "142", + "145" + ], + "SB": [ + "001", + "UN", + "009", + "054" + ], + "SC": [ + "001", + "UN", + "002", + "202", + "014" + ], + "SD": [ + "001", + "UN", + "002", + "015" + ], + "SE": [ + "001", + "EU", + "UN", + "150", + "154" + ], + "SG": [ + "001", + "UN", + "142", + "035" + ], + "SH": [ + "001", + "002", + "202", + "011" + ], + "SI": [ + "001", + "EU", + "EZ", + "UN", + "150", + "039" + ], + "SJ": [ + "001", + "150", + "154" + ], + "SK": [ + "001", + "EU", + "EZ", + "UN", + "150", + "151" + ], + "SL": [ + "001", + "UN", + "002", + "202", + "011" + ], + "SM": [ + "001", + "UN", + "150", + "039" + ], + "SN": [ + "001", + "UN", + "002", + "202", + "011" + ], + "SO": [ + "001", + "UN", + "002", + "202", + "014" + ], + "SR": [ + "001", + "UN", + "019", + "419", + "005" + ], + "SS": [ + "001", + "UN", + "002", + "202", + "014" + ], + "ST": [ + "001", + "UN", + "002", + "202", + "017" + ], + "SV": [ + "001", + "UN", + "019", + "419", + "003", + "013" + ], + "SX": [ + "001", + "019", + "419", + "003", + "029" + ], + "SY": [ + "001", + "UN", + "142", + "145" + ], + "SZ": [ + "001", + "UN", + "002", + "202", + "018" + ], + "TA": [ + "001", + "009", + "QO" + ], + "TC": [ + "001", + "019", + "419", + "003", + "029" + ], + "TD": [ + "001", + "UN", + "002", + "202", + "017" + ], + "TF": [ + "001", + "002", + "202", + "014" + ], + "TG": [ + "001", + "UN", + "002", + "202", + "011" + ], + "TH": [ + "001", + "UN", + "142", + "035" + ], + "TJ": [ + "001", + "UN", + "142", + "143" + ], + "TK": [ + "001", + "009", + "061" + ], + "TL": [ + "001", + "UN", + "142", + "035" + ], + "TM": [ + "001", + "UN", + "142", + "143" + ], + "TN": [ + "001", + "UN", + "002", + "015" + ], + "TO": [ + "001", + "UN", + "009", + "061" + ], + "TR": [ + "001", + "UN", + "142", + "145" + ], + "TT": [ + "001", + "UN", + "019", + "419", + "003", + "029" + ], + "TV": [ + "001", + "UN", + "009", + "061" + ], + "TW": [ + "001", + "142", + "030" + ], + "TZ": [ + "001", + "UN", + "002", + "202", + "014" + ], + "UA": [ + "001", + "UN", + "150", + "151" + ], + "UG": [ + "001", + "UN", + "002", + "202", + "014" + ], + "UM": [ + "001", + "009", + "057" + ], + "UN": [ + "001" + ], + "US": [ + "001", + "UN", + "019", + "003", + "021" + ], + "UY": [ + "001", + "UN", + "019", + "419", + "005" + ], + "UZ": [ + "001", + "UN", + "142", + "143" + ], + "VA": [ + "001", + "150", + "039" + ], + "VC": [ + "001", + "UN", + "019", + "419", + "003", + "029" + ], + "VE": [ + "001", + "UN", + "019", + "419", + "005" + ], + "VG": [ + "001", + "019", + "419", + "003", + "029" + ], + "VI": [ + "001", + "019", + "419", + "003", + "029" + ], + "VN": [ + "001", + "UN", + "142", + "035" + ], + "VU": [ + "001", + "UN", + "009", + "054" + ], + "WF": [ + "001", + "009", + "061" + ], + "WS": [ + "001", + "UN", + "009", + "061" + ], + "XK": [ + "001", + "150", + "039" + ], + "YE": [ + "001", + "UN", + "142", + "145" + ], + "YT": [ + "001", + "002", + "202", + "014" + ], + "ZA": [ + "001", + "UN", + "002", + "202", + "018" + ], + "ZM": [ + "001", + "UN", + "002", + "202", + "014" + ], + "ZW": [ + "001", + "UN", + "002", + "202", + "014" + ] + } +}; +ilib.data.ctype_l = { + "Ll": [ + [ + 97, + 122 + ], + [ + 181 + ], + [ + 223, + 246 + ], + [ + 248, + 255 + ], + [ + 257 + ], + [ + 259 + ], + [ + 261 + ], + [ + 263 + ], + [ + 265 + ], + [ + 267 + ], + [ + 269 + ], + [ + 271 + ], + [ + 273 + ], + [ + 275 + ], + [ + 277 + ], + [ + 279 + ], + [ + 281 + ], + [ + 283 + ], + [ + 285 + ], + [ + 287 + ], + [ + 289 + ], + [ + 291 + ], + [ + 293 + ], + [ + 295 + ], + [ + 297 + ], + [ + 299 + ], + [ + 301 + ], + [ + 303 + ], + [ + 305 + ], + [ + 307 + ], + [ + 309 + ], + [ + 311, + 312 + ], + [ + 314 + ], + [ + 316 + ], + [ + 318 + ], + [ + 320 + ], + [ + 322 + ], + [ + 324 + ], + [ + 326 + ], + [ + 328, + 329 + ], + [ + 331 + ], + [ + 333 + ], + [ + 335 + ], + [ + 337 + ], + [ + 339 + ], + [ + 341 + ], + [ + 343 + ], + [ + 345 + ], + [ + 347 + ], + [ + 349 + ], + [ + 351 + ], + [ + 353 + ], + [ + 355 + ], + [ + 357 + ], + [ + 359 + ], + [ + 361 + ], + [ + 363 + ], + [ + 365 + ], + [ + 367 + ], + [ + 369 + ], + [ + 371 + ], + [ + 373 + ], + [ + 375 + ], + [ + 378 + ], + [ + 380 + ], + [ + 382, + 384 + ], + [ + 387 + ], + [ + 389 + ], + [ + 392 + ], + [ + 396, + 397 + ], + [ + 402 + ], + [ + 405 + ], + [ + 409, + 411 + ], + [ + 414 + ], + [ + 417 + ], + [ + 419 + ], + [ + 421 + ], + [ + 424 + ], + [ + 426, + 427 + ], + [ + 429 + ], + [ + 432 + ], + [ + 436 + ], + [ + 438 + ], + [ + 441, + 442 + ], + [ + 445, + 447 + ], + [ + 454 + ], + [ + 457 + ], + [ + 460 + ], + [ + 462 + ], + [ + 464 + ], + [ + 466 + ], + [ + 468 + ], + [ + 470 + ], + [ + 472 + ], + [ + 474 + ], + [ + 476, + 477 + ], + [ + 479 + ], + [ + 481 + ], + [ + 483 + ], + [ + 485 + ], + [ + 487 + ], + [ + 489 + ], + [ + 491 + ], + [ + 493 + ], + [ + 495, + 496 + ], + [ + 499 + ], + [ + 501 + ], + [ + 505 + ], + [ + 507 + ], + [ + 509 + ], + [ + 511 + ], + [ + 513 + ], + [ + 515 + ], + [ + 517 + ], + [ + 519 + ], + [ + 521 + ], + [ + 523 + ], + [ + 525 + ], + [ + 527 + ], + [ + 529 + ], + [ + 531 + ], + [ + 533 + ], + [ + 535 + ], + [ + 537 + ], + [ + 539 + ], + [ + 541 + ], + [ + 543 + ], + [ + 545 + ], + [ + 547 + ], + [ + 549 + ], + [ + 551 + ], + [ + 553 + ], + [ + 555 + ], + [ + 557 + ], + [ + 559 + ], + [ + 561 + ], + [ + 563, + 569 + ], + [ + 572 + ], + [ + 575, + 576 + ], + [ + 578 + ], + [ + 583 + ], + [ + 585 + ], + [ + 587 + ], + [ + 589 + ], + [ + 591, + 659 + ], + [ + 661, + 687 + ], + [ + 881 + ], + [ + 883 + ], + [ + 887 + ], + [ + 891, + 893 + ], + [ + 912 + ], + [ + 940, + 974 + ], + [ + 976, + 977 + ], + [ + 981, + 983 + ], + [ + 985 + ], + [ + 987 + ], + [ + 989 + ], + [ + 991 + ], + [ + 993 + ], + [ + 995 + ], + [ + 997 + ], + [ + 999 + ], + [ + 1001 + ], + [ + 1003 + ], + [ + 1005 + ], + [ + 1007, + 1011 + ], + [ + 1013 + ], + [ + 1016 + ], + [ + 1019, + 1020 + ], + [ + 1072, + 1119 + ], + [ + 1121 + ], + [ + 1123 + ], + [ + 1125 + ], + [ + 1127 + ], + [ + 1129 + ], + [ + 1131 + ], + [ + 1133 + ], + [ + 1135 + ], + [ + 1137 + ], + [ + 1139 + ], + [ + 1141 + ], + [ + 1143 + ], + [ + 1145 + ], + [ + 1147 + ], + [ + 1149 + ], + [ + 1151 + ], + [ + 1153 + ], + [ + 1163 + ], + [ + 1165 + ], + [ + 1167 + ], + [ + 1169 + ], + [ + 1171 + ], + [ + 1173 + ], + [ + 1175 + ], + [ + 1177 + ], + [ + 1179 + ], + [ + 1181 + ], + [ + 1183 + ], + [ + 1185 + ], + [ + 1187 + ], + [ + 1189 + ], + [ + 1191 + ], + [ + 1193 + ], + [ + 1195 + ], + [ + 1197 + ], + [ + 1199 + ], + [ + 1201 + ], + [ + 1203 + ], + [ + 1205 + ], + [ + 1207 + ], + [ + 1209 + ], + [ + 1211 + ], + [ + 1213 + ], + [ + 1215 + ], + [ + 1218 + ], + [ + 1220 + ], + [ + 1222 + ], + [ + 1224 + ], + [ + 1226 + ], + [ + 1228 + ], + [ + 1230, + 1231 + ], + [ + 1233 + ], + [ + 1235 + ], + [ + 1237 + ], + [ + 1239 + ], + [ + 1241 + ], + [ + 1243 + ], + [ + 1245 + ], + [ + 1247 + ], + [ + 1249 + ], + [ + 1251 + ], + [ + 1253 + ], + [ + 1255 + ], + [ + 1257 + ], + [ + 1259 + ], + [ + 1261 + ], + [ + 1263 + ], + [ + 1265 + ], + [ + 1267 + ], + [ + 1269 + ], + [ + 1271 + ], + [ + 1273 + ], + [ + 1275 + ], + [ + 1277 + ], + [ + 1279 + ], + [ + 1281 + ], + [ + 1283 + ], + [ + 1285 + ], + [ + 1287 + ], + [ + 1289 + ], + [ + 1291 + ], + [ + 1293 + ], + [ + 1295 + ], + [ + 1297 + ], + [ + 1299 + ], + [ + 1301 + ], + [ + 1303 + ], + [ + 1305 + ], + [ + 1307 + ], + [ + 1309 + ], + [ + 1311 + ], + [ + 1313 + ], + [ + 1315 + ], + [ + 1317 + ], + [ + 1319 + ], + [ + 1321 + ], + [ + 1323 + ], + [ + 1325 + ], + [ + 1327 + ], + [ + 1376, + 1416 + ], + [ + 4304, + 4346 + ], + [ + 4349, + 4351 + ], + [ + 5112, + 5117 + ], + [ + 7296, + 7304 + ], + [ + 7306 + ], + [ + 7424, + 7467 + ], + [ + 7531, + 7543 + ], + [ + 7545, + 7578 + ], + [ + 7681 + ], + [ + 7683 + ], + [ + 7685 + ], + [ + 7687 + ], + [ + 7689 + ], + [ + 7691 + ], + [ + 7693 + ], + [ + 7695 + ], + [ + 7697 + ], + [ + 7699 + ], + [ + 7701 + ], + [ + 7703 + ], + [ + 7705 + ], + [ + 7707 + ], + [ + 7709 + ], + [ + 7711 + ], + [ + 7713 + ], + [ + 7715 + ], + [ + 7717 + ], + [ + 7719 + ], + [ + 7721 + ], + [ + 7723 + ], + [ + 7725 + ], + [ + 7727 + ], + [ + 7729 + ], + [ + 7731 + ], + [ + 7733 + ], + [ + 7735 + ], + [ + 7737 + ], + [ + 7739 + ], + [ + 7741 + ], + [ + 7743 + ], + [ + 7745 + ], + [ + 7747 + ], + [ + 7749 + ], + [ + 7751 + ], + [ + 7753 + ], + [ + 7755 + ], + [ + 7757 + ], + [ + 7759 + ], + [ + 7761 + ], + [ + 7763 + ], + [ + 7765 + ], + [ + 7767 + ], + [ + 7769 + ], + [ + 7771 + ], + [ + 7773 + ], + [ + 7775 + ], + [ + 7777 + ], + [ + 7779 + ], + [ + 7781 + ], + [ + 7783 + ], + [ + 7785 + ], + [ + 7787 + ], + [ + 7789 + ], + [ + 7791 + ], + [ + 7793 + ], + [ + 7795 + ], + [ + 7797 + ], + [ + 7799 + ], + [ + 7801 + ], + [ + 7803 + ], + [ + 7805 + ], + [ + 7807 + ], + [ + 7809 + ], + [ + 7811 + ], + [ + 7813 + ], + [ + 7815 + ], + [ + 7817 + ], + [ + 7819 + ], + [ + 7821 + ], + [ + 7823 + ], + [ + 7825 + ], + [ + 7827 + ], + [ + 7829, + 7837 + ], + [ + 7839 + ], + [ + 7841 + ], + [ + 7843 + ], + [ + 7845 + ], + [ + 7847 + ], + [ + 7849 + ], + [ + 7851 + ], + [ + 7853 + ], + [ + 7855 + ], + [ + 7857 + ], + [ + 7859 + ], + [ + 7861 + ], + [ + 7863 + ], + [ + 7865 + ], + [ + 7867 + ], + [ + 7869 + ], + [ + 7871 + ], + [ + 7873 + ], + [ + 7875 + ], + [ + 7877 + ], + [ + 7879 + ], + [ + 7881 + ], + [ + 7883 + ], + [ + 7885 + ], + [ + 7887 + ], + [ + 7889 + ], + [ + 7891 + ], + [ + 7893 + ], + [ + 7895 + ], + [ + 7897 + ], + [ + 7899 + ], + [ + 7901 + ], + [ + 7903 + ], + [ + 7905 + ], + [ + 7907 + ], + [ + 7909 + ], + [ + 7911 + ], + [ + 7913 + ], + [ + 7915 + ], + [ + 7917 + ], + [ + 7919 + ], + [ + 7921 + ], + [ + 7923 + ], + [ + 7925 + ], + [ + 7927 + ], + [ + 7929 + ], + [ + 7931 + ], + [ + 7933 + ], + [ + 7935, + 7943 + ], + [ + 7952, + 7957 + ], + [ + 7968, + 7975 + ], + [ + 7984, + 7991 + ], + [ + 8000, + 8005 + ], + [ + 8016, + 8023 + ], + [ + 8032, + 8039 + ], + [ + 8048, + 8061 + ], + [ + 8064, + 8071 + ], + [ + 8080, + 8087 + ], + [ + 8096, + 8103 + ], + [ + 8112, + 8116 + ], + [ + 8118, + 8119 + ], + [ + 8126 + ], + [ + 8130, + 8132 + ], + [ + 8134, + 8135 + ], + [ + 8144, + 8147 + ], + [ + 8150, + 8151 + ], + [ + 8160, + 8167 + ], + [ + 8178, + 8180 + ], + [ + 8182, + 8183 + ], + [ + 8458 + ], + [ + 8462, + 8463 + ], + [ + 8467 + ], + [ + 8495 + ], + [ + 8500 + ], + [ + 8505 + ], + [ + 8508, + 8509 + ], + [ + 8518, + 8521 + ], + [ + 8526 + ], + [ + 8580 + ], + [ + 11312, + 11359 + ], + [ + 11361 + ], + [ + 11365, + 11366 + ], + [ + 11368 + ], + [ + 11370 + ], + [ + 11372 + ], + [ + 11377 + ], + [ + 11379, + 11380 + ], + [ + 11382, + 11387 + ], + [ + 11393 + ], + [ + 11395 + ], + [ + 11397 + ], + [ + 11399 + ], + [ + 11401 + ], + [ + 11403 + ], + [ + 11405 + ], + [ + 11407 + ], + [ + 11409 + ], + [ + 11411 + ], + [ + 11413 + ], + [ + 11415 + ], + [ + 11417 + ], + [ + 11419 + ], + [ + 11421 + ], + [ + 11423 + ], + [ + 11425 + ], + [ + 11427 + ], + [ + 11429 + ], + [ + 11431 + ], + [ + 11433 + ], + [ + 11435 + ], + [ + 11437 + ], + [ + 11439 + ], + [ + 11441 + ], + [ + 11443 + ], + [ + 11445 + ], + [ + 11447 + ], + [ + 11449 + ], + [ + 11451 + ], + [ + 11453 + ], + [ + 11455 + ], + [ + 11457 + ], + [ + 11459 + ], + [ + 11461 + ], + [ + 11463 + ], + [ + 11465 + ], + [ + 11467 + ], + [ + 11469 + ], + [ + 11471 + ], + [ + 11473 + ], + [ + 11475 + ], + [ + 11477 + ], + [ + 11479 + ], + [ + 11481 + ], + [ + 11483 + ], + [ + 11485 + ], + [ + 11487 + ], + [ + 11489 + ], + [ + 11491, + 11492 + ], + [ + 11500 + ], + [ + 11502 + ], + [ + 11507 + ], + [ + 11520, + 11557 + ], + [ + 11559 + ], + [ + 11565 + ], + [ + 42561 + ], + [ + 42563 + ], + [ + 42565 + ], + [ + 42567 + ], + [ + 42569 + ], + [ + 42571 + ], + [ + 42573 + ], + [ + 42575 + ], + [ + 42577 + ], + [ + 42579 + ], + [ + 42581 + ], + [ + 42583 + ], + [ + 42585 + ], + [ + 42587 + ], + [ + 42589 + ], + [ + 42591 + ], + [ + 42593 + ], + [ + 42595 + ], + [ + 42597 + ], + [ + 42599 + ], + [ + 42601 + ], + [ + 42603 + ], + [ + 42605 + ], + [ + 42625 + ], + [ + 42627 + ], + [ + 42629 + ], + [ + 42631 + ], + [ + 42633 + ], + [ + 42635 + ], + [ + 42637 + ], + [ + 42639 + ], + [ + 42641 + ], + [ + 42643 + ], + [ + 42645 + ], + [ + 42647 + ], + [ + 42649 + ], + [ + 42651 + ], + [ + 42787 + ], + [ + 42789 + ], + [ + 42791 + ], + [ + 42793 + ], + [ + 42795 + ], + [ + 42797 + ], + [ + 42799, + 42801 + ], + [ + 42803 + ], + [ + 42805 + ], + [ + 42807 + ], + [ + 42809 + ], + [ + 42811 + ], + [ + 42813 + ], + [ + 42815 + ], + [ + 42817 + ], + [ + 42819 + ], + [ + 42821 + ], + [ + 42823 + ], + [ + 42825 + ], + [ + 42827 + ], + [ + 42829 + ], + [ + 42831 + ], + [ + 42833 + ], + [ + 42835 + ], + [ + 42837 + ], + [ + 42839 + ], + [ + 42841 + ], + [ + 42843 + ], + [ + 42845 + ], + [ + 42847 + ], + [ + 42849 + ], + [ + 42851 + ], + [ + 42853 + ], + [ + 42855 + ], + [ + 42857 + ], + [ + 42859 + ], + [ + 42861 + ], + [ + 42863 + ], + [ + 42865, + 42872 + ], + [ + 42874 + ], + [ + 42876 + ], + [ + 42879 + ], + [ + 42881 + ], + [ + 42883 + ], + [ + 42885 + ], + [ + 42887 + ], + [ + 42892 + ], + [ + 42894 + ], + [ + 42897 + ], + [ + 42899, + 42901 + ], + [ + 42903 + ], + [ + 42905 + ], + [ + 42907 + ], + [ + 42909 + ], + [ + 42911 + ], + [ + 42913 + ], + [ + 42915 + ], + [ + 42917 + ], + [ + 42919 + ], + [ + 42921 + ], + [ + 42927 + ], + [ + 42933 + ], + [ + 42935 + ], + [ + 42937 + ], + [ + 42939 + ], + [ + 42941 + ], + [ + 42943 + ], + [ + 42945 + ], + [ + 42947 + ], + [ + 42952 + ], + [ + 42954 + ], + [ + 42957 + ], + [ + 42961 + ], + [ + 42963 + ], + [ + 42965 + ], + [ + 42967 + ], + [ + 42969 + ], + [ + 42971 + ], + [ + 42998 + ], + [ + 43002 + ], + [ + 43824, + 43866 + ], + [ + 43872, + 43880 + ], + [ + 43888, + 43967 + ], + [ + 64256, + 64262 + ], + [ + 64275, + 64279 + ], + [ + 65345, + 65370 + ], + [ + 66600, + 66639 + ], + [ + 66776, + 66811 + ], + [ + 66967, + 66977 + ], + [ + 66979, + 66993 + ], + [ + 66995, + 67001 + ], + [ + 67003, + 67004 + ], + [ + 68800, + 68850 + ], + [ + 68976, + 68997 + ], + [ + 71872, + 71903 + ], + [ + 93792, + 93823 + ], + [ + 119834, + 119859 + ], + [ + 119886, + 119892 + ], + [ + 119894, + 119911 + ], + [ + 119938, + 119963 + ], + [ + 119990, + 119993 + ], + [ + 119995 + ], + [ + 119997, + 120003 + ], + [ + 120005, + 120015 + ], + [ + 120042, + 120067 + ], + [ + 120094, + 120119 + ], + [ + 120146, + 120171 + ], + [ + 120198, + 120223 + ], + [ + 120250, + 120275 + ], + [ + 120302, + 120327 + ], + [ + 120354, + 120379 + ], + [ + 120406, + 120431 + ], + [ + 120458, + 120485 + ], + [ + 120514, + 120538 + ], + [ + 120540, + 120545 + ], + [ + 120572, + 120596 + ], + [ + 120598, + 120603 + ], + [ + 120630, + 120654 + ], + [ + 120656, + 120661 + ], + [ + 120688, + 120712 + ], + [ + 120714, + 120719 + ], + [ + 120746, + 120770 + ], + [ + 120772, + 120777 + ], + [ + 120779 + ], + [ + 122624, + 122633 + ], + [ + 122635, + 122654 + ], + [ + 122661, + 122666 + ], + [ + 125218, + 125251 + ] + ], + "Lm": [ + [ + 688, + 705 + ], + [ + 710, + 721 + ], + [ + 736, + 740 + ], + [ + 748 + ], + [ + 750 + ], + [ + 884 + ], + [ + 890 + ], + [ + 1369 + ], + [ + 1600 + ], + [ + 1765, + 1766 + ], + [ + 2036, + 2037 + ], + [ + 2042 + ], + [ + 2074 + ], + [ + 2084 + ], + [ + 2088 + ], + [ + 2249 + ], + [ + 2417 + ], + [ + 3654 + ], + [ + 3782 + ], + [ + 4348 + ], + [ + 6103 + ], + [ + 6211 + ], + [ + 6823 + ], + [ + 7288, + 7293 + ], + [ + 7468, + 7530 + ], + [ + 7544 + ], + [ + 7579, + 7615 + ], + [ + 8305 + ], + [ + 8319 + ], + [ + 8336, + 8348 + ], + [ + 11388, + 11389 + ], + [ + 11631 + ], + [ + 11823 + ], + [ + 12293 + ], + [ + 12337, + 12341 + ], + [ + 12347 + ], + [ + 12445, + 12446 + ], + [ + 12540, + 12542 + ], + [ + 40981 + ], + [ + 42232, + 42237 + ], + [ + 42508 + ], + [ + 42623 + ], + [ + 42652, + 42653 + ], + [ + 42775, + 42783 + ], + [ + 42864 + ], + [ + 42888 + ], + [ + 42994, + 42996 + ], + [ + 43000, + 43001 + ], + [ + 43471 + ], + [ + 43494 + ], + [ + 43632 + ], + [ + 43741 + ], + [ + 43763, + 43764 + ], + [ + 43868, + 43871 + ], + [ + 43881 + ], + [ + 65392 + ], + [ + 65438, + 65439 + ], + [ + 67456, + 67461 + ], + [ + 67463, + 67504 + ], + [ + 67506, + 67514 + ], + [ + 68942 + ], + [ + 68975 + ], + [ + 92992, + 92995 + ], + [ + 93504, + 93506 + ], + [ + 93547, + 93548 + ], + [ + 94099, + 94111 + ], + [ + 94176, + 94177 + ], + [ + 94179 + ], + [ + 110576, + 110579 + ], + [ + 110581, + 110587 + ], + [ + 110589, + 110590 + ], + [ + 122928, + 122989 + ], + [ + 123191, + 123197 + ], + [ + 124139 + ], + [ + 125259 + ] + ], + "Lo": [ + [ + 170 + ], + [ + 186 + ], + [ + 443 + ], + [ + 448, + 451 + ], + [ + 660 + ], + [ + 1488, + 1514 + ], + [ + 1519, + 1522 + ], + [ + 1568, + 1599 + ], + [ + 1601, + 1610 + ], + [ + 1646, + 1647 + ], + [ + 1649, + 1747 + ], + [ + 1749 + ], + [ + 1774, + 1775 + ], + [ + 1786, + 1788 + ], + [ + 1791 + ], + [ + 1808 + ], + [ + 1810, + 1839 + ], + [ + 1869, + 1957 + ], + [ + 1969 + ], + [ + 1994, + 2026 + ], + [ + 2048, + 2069 + ], + [ + 2112, + 2136 + ], + [ + 2144, + 2154 + ], + [ + 2160, + 2183 + ], + [ + 2185, + 2190 + ], + [ + 2208, + 2248 + ], + [ + 2308, + 2361 + ], + [ + 2365 + ], + [ + 2384 + ], + [ + 2392, + 2401 + ], + [ + 2418, + 2432 + ], + [ + 2437, + 2444 + ], + [ + 2447, + 2448 + ], + [ + 2451, + 2472 + ], + [ + 2474, + 2480 + ], + [ + 2482 + ], + [ + 2486, + 2489 + ], + [ + 2493 + ], + [ + 2510 + ], + [ + 2524, + 2525 + ], + [ + 2527, + 2529 + ], + [ + 2544, + 2545 + ], + [ + 2556 + ], + [ + 2565, + 2570 + ], + [ + 2575, + 2576 + ], + [ + 2579, + 2600 + ], + [ + 2602, + 2608 + ], + [ + 2610, + 2611 + ], + [ + 2613, + 2614 + ], + [ + 2616, + 2617 + ], + [ + 2649, + 2652 + ], + [ + 2654 + ], + [ + 2674, + 2676 + ], + [ + 2693, + 2701 + ], + [ + 2703, + 2705 + ], + [ + 2707, + 2728 + ], + [ + 2730, + 2736 + ], + [ + 2738, + 2739 + ], + [ + 2741, + 2745 + ], + [ + 2749 + ], + [ + 2768 + ], + [ + 2784, + 2785 + ], + [ + 2809 + ], + [ + 2821, + 2828 + ], + [ + 2831, + 2832 + ], + [ + 2835, + 2856 + ], + [ + 2858, + 2864 + ], + [ + 2866, + 2867 + ], + [ + 2869, + 2873 + ], + [ + 2877 + ], + [ + 2908, + 2909 + ], + [ + 2911, + 2913 + ], + [ + 2929 + ], + [ + 2947 + ], + [ + 2949, + 2954 + ], + [ + 2958, + 2960 + ], + [ + 2962, + 2965 + ], + [ + 2969, + 2970 + ], + [ + 2972 + ], + [ + 2974, + 2975 + ], + [ + 2979, + 2980 + ], + [ + 2984, + 2986 + ], + [ + 2990, + 3001 + ], + [ + 3024 + ], + [ + 3077, + 3084 + ], + [ + 3086, + 3088 + ], + [ + 3090, + 3112 + ], + [ + 3114, + 3129 + ], + [ + 3133 + ], + [ + 3160, + 3162 + ], + [ + 3165 + ], + [ + 3168, + 3169 + ], + [ + 3200 + ], + [ + 3205, + 3212 + ], + [ + 3214, + 3216 + ], + [ + 3218, + 3240 + ], + [ + 3242, + 3251 + ], + [ + 3253, + 3257 + ], + [ + 3261 + ], + [ + 3293, + 3294 + ], + [ + 3296, + 3297 + ], + [ + 3313, + 3314 + ], + [ + 3332, + 3340 + ], + [ + 3342, + 3344 + ], + [ + 3346, + 3386 + ], + [ + 3389 + ], + [ + 3406 + ], + [ + 3412, + 3414 + ], + [ + 3423, + 3425 + ], + [ + 3450, + 3455 + ], + [ + 3461, + 3478 + ], + [ + 3482, + 3505 + ], + [ + 3507, + 3515 + ], + [ + 3517 + ], + [ + 3520, + 3526 + ], + [ + 3585, + 3632 + ], + [ + 3634, + 3635 + ], + [ + 3648, + 3653 + ], + [ + 3713, + 3714 + ], + [ + 3716 + ], + [ + 3718, + 3722 + ], + [ + 3724, + 3747 + ], + [ + 3749 + ], + [ + 3751, + 3760 + ], + [ + 3762, + 3763 + ], + [ + 3773 + ], + [ + 3776, + 3780 + ], + [ + 3804, + 3807 + ], + [ + 3840 + ], + [ + 3904, + 3911 + ], + [ + 3913, + 3948 + ], + [ + 3976, + 3980 + ], + [ + 4096, + 4138 + ], + [ + 4159 + ], + [ + 4176, + 4181 + ], + [ + 4186, + 4189 + ], + [ + 4193 + ], + [ + 4197, + 4198 + ], + [ + 4206, + 4208 + ], + [ + 4213, + 4225 + ], + [ + 4238 + ], + [ + 4352, + 4680 + ], + [ + 4682, + 4685 + ], + [ + 4688, + 4694 + ], + [ + 4696 + ], + [ + 4698, + 4701 + ], + [ + 4704, + 4744 + ], + [ + 4746, + 4749 + ], + [ + 4752, + 4784 + ], + [ + 4786, + 4789 + ], + [ + 4792, + 4798 + ], + [ + 4800 + ], + [ + 4802, + 4805 + ], + [ + 4808, + 4822 + ], + [ + 4824, + 4880 + ], + [ + 4882, + 4885 + ], + [ + 4888, + 4954 + ], + [ + 4992, + 5007 + ], + [ + 5121, + 5740 + ], + [ + 5743, + 5759 + ], + [ + 5761, + 5786 + ], + [ + 5792, + 5866 + ], + [ + 5873, + 5880 + ], + [ + 5888, + 5905 + ], + [ + 5919, + 5937 + ], + [ + 5952, + 5969 + ], + [ + 5984, + 5996 + ], + [ + 5998, + 6000 + ], + [ + 6016, + 6067 + ], + [ + 6108 + ], + [ + 6176, + 6210 + ], + [ + 6212, + 6264 + ], + [ + 6272, + 6276 + ], + [ + 6279, + 6312 + ], + [ + 6314 + ], + [ + 6320, + 6389 + ], + [ + 6400, + 6430 + ], + [ + 6480, + 6509 + ], + [ + 6512, + 6516 + ], + [ + 6528, + 6571 + ], + [ + 6576, + 6601 + ], + [ + 6656, + 6678 + ], + [ + 6688, + 6740 + ], + [ + 6917, + 6963 + ], + [ + 6981, + 6988 + ], + [ + 7043, + 7072 + ], + [ + 7086, + 7087 + ], + [ + 7098, + 7141 + ], + [ + 7168, + 7203 + ], + [ + 7245, + 7247 + ], + [ + 7258, + 7287 + ], + [ + 7401, + 7404 + ], + [ + 7406, + 7411 + ], + [ + 7413, + 7414 + ], + [ + 7418 + ], + [ + 8501, + 8504 + ], + [ + 11568, + 11623 + ], + [ + 11648, + 11670 + ], + [ + 11680, + 11686 + ], + [ + 11688, + 11694 + ], + [ + 11696, + 11702 + ], + [ + 11704, + 11710 + ], + [ + 11712, + 11718 + ], + [ + 11720, + 11726 + ], + [ + 11728, + 11734 + ], + [ + 11736, + 11742 + ], + [ + 12294 + ], + [ + 12348 + ], + [ + 12353, + 12438 + ], + [ + 12447 + ], + [ + 12449, + 12538 + ], + [ + 12543 + ], + [ + 12549, + 12591 + ], + [ + 12593, + 12686 + ], + [ + 12704, + 12735 + ], + [ + 12784, + 12799 + ], + [ + 13312, + 19903 + ], + [ + 19968, + 40980 + ], + [ + 40982, + 42124 + ], + [ + 42192, + 42231 + ], + [ + 42240, + 42507 + ], + [ + 42512, + 42527 + ], + [ + 42538, + 42539 + ], + [ + 42606 + ], + [ + 42656, + 42725 + ], + [ + 42895 + ], + [ + 42999 + ], + [ + 43003, + 43009 + ], + [ + 43011, + 43013 + ], + [ + 43015, + 43018 + ], + [ + 43020, + 43042 + ], + [ + 43072, + 43123 + ], + [ + 43138, + 43187 + ], + [ + 43250, + 43255 + ], + [ + 43259 + ], + [ + 43261, + 43262 + ], + [ + 43274, + 43301 + ], + [ + 43312, + 43334 + ], + [ + 43360, + 43388 + ], + [ + 43396, + 43442 + ], + [ + 43488, + 43492 + ], + [ + 43495, + 43503 + ], + [ + 43514, + 43518 + ], + [ + 43520, + 43560 + ], + [ + 43584, + 43586 + ], + [ + 43588, + 43595 + ], + [ + 43616, + 43631 + ], + [ + 43633, + 43638 + ], + [ + 43642 + ], + [ + 43646, + 43695 + ], + [ + 43697 + ], + [ + 43701, + 43702 + ], + [ + 43705, + 43709 + ], + [ + 43712 + ], + [ + 43714 + ], + [ + 43739, + 43740 + ], + [ + 43744, + 43754 + ], + [ + 43762 + ], + [ + 43777, + 43782 + ], + [ + 43785, + 43790 + ], + [ + 43793, + 43798 + ], + [ + 43808, + 43814 + ], + [ + 43816, + 43822 + ], + [ + 43968, + 44002 + ], + [ + 44032, + 55203 + ], + [ + 55216, + 55238 + ], + [ + 55243, + 55291 + ], + [ + 63744, + 64109 + ], + [ + 64112, + 64217 + ], + [ + 64285 + ], + [ + 64287, + 64296 + ], + [ + 64298, + 64310 + ], + [ + 64312, + 64316 + ], + [ + 64318 + ], + [ + 64320, + 64321 + ], + [ + 64323, + 64324 + ], + [ + 64326, + 64433 + ], + [ + 64467, + 64829 + ], + [ + 64848, + 64911 + ], + [ + 64914, + 64967 + ], + [ + 65008, + 65019 + ], + [ + 65136, + 65140 + ], + [ + 65142, + 65276 + ], + [ + 65382, + 65391 + ], + [ + 65393, + 65437 + ], + [ + 65440, + 65470 + ], + [ + 65474, + 65479 + ], + [ + 65482, + 65487 + ], + [ + 65490, + 65495 + ], + [ + 65498, + 65500 + ], + [ + 65536, + 65547 + ], + [ + 65549, + 65574 + ], + [ + 65576, + 65594 + ], + [ + 65596, + 65597 + ], + [ + 65599, + 65613 + ], + [ + 65616, + 65629 + ], + [ + 65664, + 65786 + ], + [ + 66176, + 66204 + ], + [ + 66208, + 66256 + ], + [ + 66304, + 66335 + ], + [ + 66349, + 66368 + ], + [ + 66370, + 66377 + ], + [ + 66384, + 66421 + ], + [ + 66432, + 66461 + ], + [ + 66464, + 66499 + ], + [ + 66504, + 66511 + ], + [ + 66640, + 66717 + ], + [ + 66816, + 66855 + ], + [ + 66864, + 66915 + ], + [ + 67008, + 67059 + ], + [ + 67072, + 67382 + ], + [ + 67392, + 67413 + ], + [ + 67424, + 67431 + ], + [ + 67584, + 67589 + ], + [ + 67592 + ], + [ + 67594, + 67637 + ], + [ + 67639, + 67640 + ], + [ + 67644 + ], + [ + 67647, + 67669 + ], + [ + 67680, + 67702 + ], + [ + 67712, + 67742 + ], + [ + 67808, + 67826 + ], + [ + 67828, + 67829 + ], + [ + 67840, + 67861 + ], + [ + 67872, + 67897 + ], + [ + 67968, + 68023 + ], + [ + 68030, + 68031 + ], + [ + 68096 + ], + [ + 68112, + 68115 + ], + [ + 68117, + 68119 + ], + [ + 68121, + 68149 + ], + [ + 68192, + 68220 + ], + [ + 68224, + 68252 + ], + [ + 68288, + 68295 + ], + [ + 68297, + 68324 + ], + [ + 68352, + 68405 + ], + [ + 68416, + 68437 + ], + [ + 68448, + 68466 + ], + [ + 68480, + 68497 + ], + [ + 68608, + 68680 + ], + [ + 68864, + 68899 + ], + [ + 68938, + 68941 + ], + [ + 68943 + ], + [ + 69248, + 69289 + ], + [ + 69296, + 69297 + ], + [ + 69314, + 69316 + ], + [ + 69376, + 69404 + ], + [ + 69415 + ], + [ + 69424, + 69445 + ], + [ + 69488, + 69505 + ], + [ + 69552, + 69572 + ], + [ + 69600, + 69622 + ], + [ + 69635, + 69687 + ], + [ + 69745, + 69746 + ], + [ + 69749 + ], + [ + 69763, + 69807 + ], + [ + 69840, + 69864 + ], + [ + 69891, + 69926 + ], + [ + 69956 + ], + [ + 69959 + ], + [ + 69968, + 70002 + ], + [ + 70006 + ], + [ + 70019, + 70066 + ], + [ + 70081, + 70084 + ], + [ + 70106 + ], + [ + 70108 + ], + [ + 70144, + 70161 + ], + [ + 70163, + 70187 + ], + [ + 70207, + 70208 + ], + [ + 70272, + 70278 + ], + [ + 70280 + ], + [ + 70282, + 70285 + ], + [ + 70287, + 70301 + ], + [ + 70303, + 70312 + ], + [ + 70320, + 70366 + ], + [ + 70405, + 70412 + ], + [ + 70415, + 70416 + ], + [ + 70419, + 70440 + ], + [ + 70442, + 70448 + ], + [ + 70450, + 70451 + ], + [ + 70453, + 70457 + ], + [ + 70461 + ], + [ + 70480 + ], + [ + 70493, + 70497 + ], + [ + 70528, + 70537 + ], + [ + 70539 + ], + [ + 70542 + ], + [ + 70544, + 70581 + ], + [ + 70583 + ], + [ + 70609 + ], + [ + 70611 + ], + [ + 70656, + 70708 + ], + [ + 70727, + 70730 + ], + [ + 70751, + 70753 + ], + [ + 70784, + 70831 + ], + [ + 70852, + 70853 + ], + [ + 70855 + ], + [ + 71040, + 71086 + ], + [ + 71128, + 71131 + ], + [ + 71168, + 71215 + ], + [ + 71236 + ], + [ + 71296, + 71338 + ], + [ + 71352 + ], + [ + 71424, + 71450 + ], + [ + 71488, + 71494 + ], + [ + 71680, + 71723 + ], + [ + 71935, + 71942 + ], + [ + 71945 + ], + [ + 71948, + 71955 + ], + [ + 71957, + 71958 + ], + [ + 71960, + 71983 + ], + [ + 71999 + ], + [ + 72001 + ], + [ + 72096, + 72103 + ], + [ + 72106, + 72144 + ], + [ + 72161 + ], + [ + 72163 + ], + [ + 72192 + ], + [ + 72203, + 72242 + ], + [ + 72250 + ], + [ + 72272 + ], + [ + 72284, + 72329 + ], + [ + 72349 + ], + [ + 72368, + 72440 + ], + [ + 72640, + 72672 + ], + [ + 72704, + 72712 + ], + [ + 72714, + 72750 + ], + [ + 72768 + ], + [ + 72818, + 72847 + ], + [ + 72960, + 72966 + ], + [ + 72968, + 72969 + ], + [ + 72971, + 73008 + ], + [ + 73030 + ], + [ + 73056, + 73061 + ], + [ + 73063, + 73064 + ], + [ + 73066, + 73097 + ], + [ + 73112 + ], + [ + 73440, + 73458 + ], + [ + 73474 + ], + [ + 73476, + 73488 + ], + [ + 73490, + 73523 + ], + [ + 73648 + ], + [ + 73728, + 74649 + ], + [ + 74880, + 75075 + ], + [ + 77712, + 77808 + ], + [ + 77824, + 78895 + ], + [ + 78913, + 78918 + ], + [ + 78944, + 82938 + ], + [ + 82944, + 83526 + ], + [ + 90368, + 90397 + ], + [ + 92160, + 92728 + ], + [ + 92736, + 92766 + ], + [ + 92784, + 92862 + ], + [ + 92880, + 92909 + ], + [ + 92928, + 92975 + ], + [ + 93027, + 93047 + ], + [ + 93053, + 93071 + ], + [ + 93507, + 93546 + ], + [ + 93952, + 94026 + ], + [ + 94032 + ], + [ + 94208, + 100343 + ], + [ + 100352, + 101589 + ], + [ + 101631, + 101640 + ], + [ + 110592, + 110882 + ], + [ + 110898 + ], + [ + 110928, + 110930 + ], + [ + 110933 + ], + [ + 110948, + 110951 + ], + [ + 110960, + 111355 + ], + [ + 113664, + 113770 + ], + [ + 113776, + 113788 + ], + [ + 113792, + 113800 + ], + [ + 113808, + 113817 + ], + [ + 122634 + ], + [ + 123136, + 123180 + ], + [ + 123214 + ], + [ + 123536, + 123565 + ], + [ + 123584, + 123627 + ], + [ + 124112, + 124138 + ], + [ + 124368, + 124397 + ], + [ + 124400 + ], + [ + 124896, + 124902 + ], + [ + 124904, + 124907 + ], + [ + 124909, + 124910 + ], + [ + 124912, + 124926 + ], + [ + 124928, + 125124 + ], + [ + 126464, + 126467 + ], + [ + 126469, + 126495 + ], + [ + 126497, + 126498 + ], + [ + 126500 + ], + [ + 126503 + ], + [ + 126505, + 126514 + ], + [ + 126516, + 126519 + ], + [ + 126521 + ], + [ + 126523 + ], + [ + 126530 + ], + [ + 126535 + ], + [ + 126537 + ], + [ + 126539 + ], + [ + 126541, + 126543 + ], + [ + 126545, + 126546 + ], + [ + 126548 + ], + [ + 126551 + ], + [ + 126553 + ], + [ + 126555 + ], + [ + 126557 + ], + [ + 126559 + ], + [ + 126561, + 126562 + ], + [ + 126564 + ], + [ + 126567, + 126570 + ], + [ + 126572, + 126578 + ], + [ + 126580, + 126583 + ], + [ + 126585, + 126588 + ], + [ + 126590 + ], + [ + 126592, + 126601 + ], + [ + 126603, + 126619 + ], + [ + 126625, + 126627 + ], + [ + 126629, + 126633 + ], + [ + 126635, + 126651 + ], + [ + 131072, + 173791 + ], + [ + 173824, + 177977 + ], + [ + 177984, + 178205 + ], + [ + 178208, + 183969 + ], + [ + 183984, + 191456 + ], + [ + 191472, + 192093 + ], + [ + 194560, + 195101 + ], + [ + 196608, + 201546 + ], + [ + 201552, + 205743 + ] + ], + "Lt": [ + [ + 453 + ], + [ + 456 + ], + [ + 459 + ], + [ + 498 + ], + [ + 8072, + 8079 + ], + [ + 8088, + 8095 + ], + [ + 8104, + 8111 + ], + [ + 8124 + ], + [ + 8140 + ], + [ + 8188 + ] + ], + "Lu": [ + [ + 65, + 90 + ], + [ + 192, + 214 + ], + [ + 216, + 222 + ], + [ + 256 + ], + [ + 258 + ], + [ + 260 + ], + [ + 262 + ], + [ + 264 + ], + [ + 266 + ], + [ + 268 + ], + [ + 270 + ], + [ + 272 + ], + [ + 274 + ], + [ + 276 + ], + [ + 278 + ], + [ + 280 + ], + [ + 282 + ], + [ + 284 + ], + [ + 286 + ], + [ + 288 + ], + [ + 290 + ], + [ + 292 + ], + [ + 294 + ], + [ + 296 + ], + [ + 298 + ], + [ + 300 + ], + [ + 302 + ], + [ + 304 + ], + [ + 306 + ], + [ + 308 + ], + [ + 310 + ], + [ + 313 + ], + [ + 315 + ], + [ + 317 + ], + [ + 319 + ], + [ + 321 + ], + [ + 323 + ], + [ + 325 + ], + [ + 327 + ], + [ + 330 + ], + [ + 332 + ], + [ + 334 + ], + [ + 336 + ], + [ + 338 + ], + [ + 340 + ], + [ + 342 + ], + [ + 344 + ], + [ + 346 + ], + [ + 348 + ], + [ + 350 + ], + [ + 352 + ], + [ + 354 + ], + [ + 356 + ], + [ + 358 + ], + [ + 360 + ], + [ + 362 + ], + [ + 364 + ], + [ + 366 + ], + [ + 368 + ], + [ + 370 + ], + [ + 372 + ], + [ + 374 + ], + [ + 376, + 377 + ], + [ + 379 + ], + [ + 381 + ], + [ + 385, + 386 + ], + [ + 388 + ], + [ + 390, + 391 + ], + [ + 393, + 395 + ], + [ + 398, + 401 + ], + [ + 403, + 404 + ], + [ + 406, + 408 + ], + [ + 412, + 413 + ], + [ + 415, + 416 + ], + [ + 418 + ], + [ + 420 + ], + [ + 422, + 423 + ], + [ + 425 + ], + [ + 428 + ], + [ + 430, + 431 + ], + [ + 433, + 435 + ], + [ + 437 + ], + [ + 439, + 440 + ], + [ + 444 + ], + [ + 452 + ], + [ + 455 + ], + [ + 458 + ], + [ + 461 + ], + [ + 463 + ], + [ + 465 + ], + [ + 467 + ], + [ + 469 + ], + [ + 471 + ], + [ + 473 + ], + [ + 475 + ], + [ + 478 + ], + [ + 480 + ], + [ + 482 + ], + [ + 484 + ], + [ + 486 + ], + [ + 488 + ], + [ + 490 + ], + [ + 492 + ], + [ + 494 + ], + [ + 497 + ], + [ + 500 + ], + [ + 502, + 504 + ], + [ + 506 + ], + [ + 508 + ], + [ + 510 + ], + [ + 512 + ], + [ + 514 + ], + [ + 516 + ], + [ + 518 + ], + [ + 520 + ], + [ + 522 + ], + [ + 524 + ], + [ + 526 + ], + [ + 528 + ], + [ + 530 + ], + [ + 532 + ], + [ + 534 + ], + [ + 536 + ], + [ + 538 + ], + [ + 540 + ], + [ + 542 + ], + [ + 544 + ], + [ + 546 + ], + [ + 548 + ], + [ + 550 + ], + [ + 552 + ], + [ + 554 + ], + [ + 556 + ], + [ + 558 + ], + [ + 560 + ], + [ + 562 + ], + [ + 570, + 571 + ], + [ + 573, + 574 + ], + [ + 577 + ], + [ + 579, + 582 + ], + [ + 584 + ], + [ + 586 + ], + [ + 588 + ], + [ + 590 + ], + [ + 880 + ], + [ + 882 + ], + [ + 886 + ], + [ + 895 + ], + [ + 902 + ], + [ + 904, + 906 + ], + [ + 908 + ], + [ + 910, + 911 + ], + [ + 913, + 929 + ], + [ + 931, + 939 + ], + [ + 975 + ], + [ + 978, + 980 + ], + [ + 984 + ], + [ + 986 + ], + [ + 988 + ], + [ + 990 + ], + [ + 992 + ], + [ + 994 + ], + [ + 996 + ], + [ + 998 + ], + [ + 1000 + ], + [ + 1002 + ], + [ + 1004 + ], + [ + 1006 + ], + [ + 1012 + ], + [ + 1015 + ], + [ + 1017, + 1018 + ], + [ + 1021, + 1071 + ], + [ + 1120 + ], + [ + 1122 + ], + [ + 1124 + ], + [ + 1126 + ], + [ + 1128 + ], + [ + 1130 + ], + [ + 1132 + ], + [ + 1134 + ], + [ + 1136 + ], + [ + 1138 + ], + [ + 1140 + ], + [ + 1142 + ], + [ + 1144 + ], + [ + 1146 + ], + [ + 1148 + ], + [ + 1150 + ], + [ + 1152 + ], + [ + 1162 + ], + [ + 1164 + ], + [ + 1166 + ], + [ + 1168 + ], + [ + 1170 + ], + [ + 1172 + ], + [ + 1174 + ], + [ + 1176 + ], + [ + 1178 + ], + [ + 1180 + ], + [ + 1182 + ], + [ + 1184 + ], + [ + 1186 + ], + [ + 1188 + ], + [ + 1190 + ], + [ + 1192 + ], + [ + 1194 + ], + [ + 1196 + ], + [ + 1198 + ], + [ + 1200 + ], + [ + 1202 + ], + [ + 1204 + ], + [ + 1206 + ], + [ + 1208 + ], + [ + 1210 + ], + [ + 1212 + ], + [ + 1214 + ], + [ + 1216, + 1217 + ], + [ + 1219 + ], + [ + 1221 + ], + [ + 1223 + ], + [ + 1225 + ], + [ + 1227 + ], + [ + 1229 + ], + [ + 1232 + ], + [ + 1234 + ], + [ + 1236 + ], + [ + 1238 + ], + [ + 1240 + ], + [ + 1242 + ], + [ + 1244 + ], + [ + 1246 + ], + [ + 1248 + ], + [ + 1250 + ], + [ + 1252 + ], + [ + 1254 + ], + [ + 1256 + ], + [ + 1258 + ], + [ + 1260 + ], + [ + 1262 + ], + [ + 1264 + ], + [ + 1266 + ], + [ + 1268 + ], + [ + 1270 + ], + [ + 1272 + ], + [ + 1274 + ], + [ + 1276 + ], + [ + 1278 + ], + [ + 1280 + ], + [ + 1282 + ], + [ + 1284 + ], + [ + 1286 + ], + [ + 1288 + ], + [ + 1290 + ], + [ + 1292 + ], + [ + 1294 + ], + [ + 1296 + ], + [ + 1298 + ], + [ + 1300 + ], + [ + 1302 + ], + [ + 1304 + ], + [ + 1306 + ], + [ + 1308 + ], + [ + 1310 + ], + [ + 1312 + ], + [ + 1314 + ], + [ + 1316 + ], + [ + 1318 + ], + [ + 1320 + ], + [ + 1322 + ], + [ + 1324 + ], + [ + 1326 + ], + [ + 1329, + 1366 + ], + [ + 4256, + 4293 + ], + [ + 4295 + ], + [ + 4301 + ], + [ + 5024, + 5109 + ], + [ + 7305 + ], + [ + 7312, + 7354 + ], + [ + 7357, + 7359 + ], + [ + 7680 + ], + [ + 7682 + ], + [ + 7684 + ], + [ + 7686 + ], + [ + 7688 + ], + [ + 7690 + ], + [ + 7692 + ], + [ + 7694 + ], + [ + 7696 + ], + [ + 7698 + ], + [ + 7700 + ], + [ + 7702 + ], + [ + 7704 + ], + [ + 7706 + ], + [ + 7708 + ], + [ + 7710 + ], + [ + 7712 + ], + [ + 7714 + ], + [ + 7716 + ], + [ + 7718 + ], + [ + 7720 + ], + [ + 7722 + ], + [ + 7724 + ], + [ + 7726 + ], + [ + 7728 + ], + [ + 7730 + ], + [ + 7732 + ], + [ + 7734 + ], + [ + 7736 + ], + [ + 7738 + ], + [ + 7740 + ], + [ + 7742 + ], + [ + 7744 + ], + [ + 7746 + ], + [ + 7748 + ], + [ + 7750 + ], + [ + 7752 + ], + [ + 7754 + ], + [ + 7756 + ], + [ + 7758 + ], + [ + 7760 + ], + [ + 7762 + ], + [ + 7764 + ], + [ + 7766 + ], + [ + 7768 + ], + [ + 7770 + ], + [ + 7772 + ], + [ + 7774 + ], + [ + 7776 + ], + [ + 7778 + ], + [ + 7780 + ], + [ + 7782 + ], + [ + 7784 + ], + [ + 7786 + ], + [ + 7788 + ], + [ + 7790 + ], + [ + 7792 + ], + [ + 7794 + ], + [ + 7796 + ], + [ + 7798 + ], + [ + 7800 + ], + [ + 7802 + ], + [ + 7804 + ], + [ + 7806 + ], + [ + 7808 + ], + [ + 7810 + ], + [ + 7812 + ], + [ + 7814 + ], + [ + 7816 + ], + [ + 7818 + ], + [ + 7820 + ], + [ + 7822 + ], + [ + 7824 + ], + [ + 7826 + ], + [ + 7828 + ], + [ + 7838 + ], + [ + 7840 + ], + [ + 7842 + ], + [ + 7844 + ], + [ + 7846 + ], + [ + 7848 + ], + [ + 7850 + ], + [ + 7852 + ], + [ + 7854 + ], + [ + 7856 + ], + [ + 7858 + ], + [ + 7860 + ], + [ + 7862 + ], + [ + 7864 + ], + [ + 7866 + ], + [ + 7868 + ], + [ + 7870 + ], + [ + 7872 + ], + [ + 7874 + ], + [ + 7876 + ], + [ + 7878 + ], + [ + 7880 + ], + [ + 7882 + ], + [ + 7884 + ], + [ + 7886 + ], + [ + 7888 + ], + [ + 7890 + ], + [ + 7892 + ], + [ + 7894 + ], + [ + 7896 + ], + [ + 7898 + ], + [ + 7900 + ], + [ + 7902 + ], + [ + 7904 + ], + [ + 7906 + ], + [ + 7908 + ], + [ + 7910 + ], + [ + 7912 + ], + [ + 7914 + ], + [ + 7916 + ], + [ + 7918 + ], + [ + 7920 + ], + [ + 7922 + ], + [ + 7924 + ], + [ + 7926 + ], + [ + 7928 + ], + [ + 7930 + ], + [ + 7932 + ], + [ + 7934 + ], + [ + 7944, + 7951 + ], + [ + 7960, + 7965 + ], + [ + 7976, + 7983 + ], + [ + 7992, + 7999 + ], + [ + 8008, + 8013 + ], + [ + 8025 + ], + [ + 8027 + ], + [ + 8029 + ], + [ + 8031 + ], + [ + 8040, + 8047 + ], + [ + 8120, + 8123 + ], + [ + 8136, + 8139 + ], + [ + 8152, + 8155 + ], + [ + 8168, + 8172 + ], + [ + 8184, + 8187 + ], + [ + 8450 + ], + [ + 8455 + ], + [ + 8459, + 8461 + ], + [ + 8464, + 8466 + ], + [ + 8469 + ], + [ + 8473, + 8477 + ], + [ + 8484 + ], + [ + 8486 + ], + [ + 8488 + ], + [ + 8490, + 8493 + ], + [ + 8496, + 8499 + ], + [ + 8510, + 8511 + ], + [ + 8517 + ], + [ + 8579 + ], + [ + 11264, + 11311 + ], + [ + 11360 + ], + [ + 11362, + 11364 + ], + [ + 11367 + ], + [ + 11369 + ], + [ + 11371 + ], + [ + 11373, + 11376 + ], + [ + 11378 + ], + [ + 11381 + ], + [ + 11390, + 11392 + ], + [ + 11394 + ], + [ + 11396 + ], + [ + 11398 + ], + [ + 11400 + ], + [ + 11402 + ], + [ + 11404 + ], + [ + 11406 + ], + [ + 11408 + ], + [ + 11410 + ], + [ + 11412 + ], + [ + 11414 + ], + [ + 11416 + ], + [ + 11418 + ], + [ + 11420 + ], + [ + 11422 + ], + [ + 11424 + ], + [ + 11426 + ], + [ + 11428 + ], + [ + 11430 + ], + [ + 11432 + ], + [ + 11434 + ], + [ + 11436 + ], + [ + 11438 + ], + [ + 11440 + ], + [ + 11442 + ], + [ + 11444 + ], + [ + 11446 + ], + [ + 11448 + ], + [ + 11450 + ], + [ + 11452 + ], + [ + 11454 + ], + [ + 11456 + ], + [ + 11458 + ], + [ + 11460 + ], + [ + 11462 + ], + [ + 11464 + ], + [ + 11466 + ], + [ + 11468 + ], + [ + 11470 + ], + [ + 11472 + ], + [ + 11474 + ], + [ + 11476 + ], + [ + 11478 + ], + [ + 11480 + ], + [ + 11482 + ], + [ + 11484 + ], + [ + 11486 + ], + [ + 11488 + ], + [ + 11490 + ], + [ + 11499 + ], + [ + 11501 + ], + [ + 11506 + ], + [ + 42560 + ], + [ + 42562 + ], + [ + 42564 + ], + [ + 42566 + ], + [ + 42568 + ], + [ + 42570 + ], + [ + 42572 + ], + [ + 42574 + ], + [ + 42576 + ], + [ + 42578 + ], + [ + 42580 + ], + [ + 42582 + ], + [ + 42584 + ], + [ + 42586 + ], + [ + 42588 + ], + [ + 42590 + ], + [ + 42592 + ], + [ + 42594 + ], + [ + 42596 + ], + [ + 42598 + ], + [ + 42600 + ], + [ + 42602 + ], + [ + 42604 + ], + [ + 42624 + ], + [ + 42626 + ], + [ + 42628 + ], + [ + 42630 + ], + [ + 42632 + ], + [ + 42634 + ], + [ + 42636 + ], + [ + 42638 + ], + [ + 42640 + ], + [ + 42642 + ], + [ + 42644 + ], + [ + 42646 + ], + [ + 42648 + ], + [ + 42650 + ], + [ + 42786 + ], + [ + 42788 + ], + [ + 42790 + ], + [ + 42792 + ], + [ + 42794 + ], + [ + 42796 + ], + [ + 42798 + ], + [ + 42802 + ], + [ + 42804 + ], + [ + 42806 + ], + [ + 42808 + ], + [ + 42810 + ], + [ + 42812 + ], + [ + 42814 + ], + [ + 42816 + ], + [ + 42818 + ], + [ + 42820 + ], + [ + 42822 + ], + [ + 42824 + ], + [ + 42826 + ], + [ + 42828 + ], + [ + 42830 + ], + [ + 42832 + ], + [ + 42834 + ], + [ + 42836 + ], + [ + 42838 + ], + [ + 42840 + ], + [ + 42842 + ], + [ + 42844 + ], + [ + 42846 + ], + [ + 42848 + ], + [ + 42850 + ], + [ + 42852 + ], + [ + 42854 + ], + [ + 42856 + ], + [ + 42858 + ], + [ + 42860 + ], + [ + 42862 + ], + [ + 42873 + ], + [ + 42875 + ], + [ + 42877, + 42878 + ], + [ + 42880 + ], + [ + 42882 + ], + [ + 42884 + ], + [ + 42886 + ], + [ + 42891 + ], + [ + 42893 + ], + [ + 42896 + ], + [ + 42898 + ], + [ + 42902 + ], + [ + 42904 + ], + [ + 42906 + ], + [ + 42908 + ], + [ + 42910 + ], + [ + 42912 + ], + [ + 42914 + ], + [ + 42916 + ], + [ + 42918 + ], + [ + 42920 + ], + [ + 42922, + 42926 + ], + [ + 42928, + 42932 + ], + [ + 42934 + ], + [ + 42936 + ], + [ + 42938 + ], + [ + 42940 + ], + [ + 42942 + ], + [ + 42944 + ], + [ + 42946 + ], + [ + 42948, + 42951 + ], + [ + 42953 + ], + [ + 42955, + 42956 + ], + [ + 42960 + ], + [ + 42966 + ], + [ + 42968 + ], + [ + 42970 + ], + [ + 42972 + ], + [ + 42997 + ], + [ + 65313, + 65338 + ], + [ + 66560, + 66599 + ], + [ + 66736, + 66771 + ], + [ + 66928, + 66938 + ], + [ + 66940, + 66954 + ], + [ + 66956, + 66962 + ], + [ + 66964, + 66965 + ], + [ + 68736, + 68786 + ], + [ + 68944, + 68965 + ], + [ + 71840, + 71871 + ], + [ + 93760, + 93791 + ], + [ + 119808, + 119833 + ], + [ + 119860, + 119885 + ], + [ + 119912, + 119937 + ], + [ + 119964 + ], + [ + 119966, + 119967 + ], + [ + 119970 + ], + [ + 119973, + 119974 + ], + [ + 119977, + 119980 + ], + [ + 119982, + 119989 + ], + [ + 120016, + 120041 + ], + [ + 120068, + 120069 + ], + [ + 120071, + 120074 + ], + [ + 120077, + 120084 + ], + [ + 120086, + 120092 + ], + [ + 120120, + 120121 + ], + [ + 120123, + 120126 + ], + [ + 120128, + 120132 + ], + [ + 120134 + ], + [ + 120138, + 120144 + ], + [ + 120172, + 120197 + ], + [ + 120224, + 120249 + ], + [ + 120276, + 120301 + ], + [ + 120328, + 120353 + ], + [ + 120380, + 120405 + ], + [ + 120432, + 120457 + ], + [ + 120488, + 120512 + ], + [ + 120546, + 120570 + ], + [ + 120604, + 120628 + ], + [ + 120662, + 120686 + ], + [ + 120720, + 120744 + ], + [ + 120778 + ], + [ + 125184, + 125217 + ] + ] +}; +ilib.data.ctype = { + "adlam": [ + [ + 125184, + 125279 + ] + ], + "aegean": [ + [ + 65792, + 65855 + ] + ], + "ahom": [ + [ + 71424, + 71503 + ] + ], + "albanian": [ + [ + 66864, + 66927 + ] + ], + "alchemic": [ + [ + 128768, + 128895 + ] + ], + "ancient": [ + [ + 65936, + 65999 + ] + ], + "arabic": [ + [ + 1536, + 1791 + ], + [ + 1872, + 1919 + ], + [ + 2208, + 2303 + ], + [ + 64336, + 65023 + ], + [ + 65136, + 65279 + ], + [ + 126464, + 126719 + ] + ], + "arabic extended-b": [ + [ + 2160, + 2207 + ] + ], + "arabic extended-c": [ + [ + 69312, + 69375 + ] + ], + "aramaic": [ + [ + 67648, + 67679 + ] + ], + "armenian": [ + [ + 1328, + 1423 + ] + ], + "arrows": [ + [ + 8592, + 8703 + ], + [ + 10224, + 10239 + ], + [ + 10496, + 10623 + ], + [ + 11008, + 11263 + ], + [ + 129024, + 129279 + ] + ], + "ascii": [ + [ + 32, + 127 + ] + ], + "avestan": [ + [ + 68352, + 68415 + ] + ], + "balinese": [ + [ + 6912, + 7039 + ] + ], + "bamum": [ + [ + 42656, + 42751 + ], + [ + 92160, + 92735 + ] + ], + "bassavah": [ + [ + 92880, + 92927 + ] + ], + "batak": [ + [ + 7104, + 7167 + ] + ], + "bengali": [ + [ + 2432, + 2559 + ] + ], + "bhaiksuki": [ + [ + 72704, + 72815 + ] + ], + "blank": [ + [ + 9, + 9 + ], + [ + 32, + 32 + ] + ], + "block": [ + [ + 9600, + 9631 + ] + ], + "bopomofo": [ + [ + 12544, + 12591 + ], + [ + 12704, + 12735 + ] + ], + "box": [ + [ + 9472, + 9599 + ] + ], + "brahmi": [ + [ + 69632, + 69759 + ] + ], + "braille": [ + [ + 10240, + 10495 + ] + ], + "buginese": [ + [ + 6656, + 6687 + ] + ], + "buhid": [ + [ + 5952, + 5983 + ] + ], + "byzantinemusic": [ + [ + 118784, + 119039 + ] + ], + "canadian": [ + [ + 5120, + 5759 + ], + [ + 6320, + 6399 + ] + ], + "carian": [ + [ + 66208, + 66271 + ] + ], + "chakma": [ + [ + 69888, + 69967 + ] + ], + "cham": [ + [ + 43520, + 43615 + ] + ], + "cherokee": [ + [ + 5024, + 5119 + ], + [ + 43888, + 43967 + ] + ], + "chess symbols": [ + [ + 129536, + 129647 + ] + ], + "chorasmian": [ + [ + 69552, + 69599 + ] + ], + "cjk": [ + [ + 12272, + 12287 + ], + [ + 13312, + 19903 + ], + [ + 19968, + 40959 + ], + [ + 131072, + 173791 + ], + [ + 173824, + 183983 + ] + ], + "cjk unified ideographs extension f": [ + [ + 183984, + 191471 + ] + ], + "cjk unified ideographs extension g": [ + [ + 196608, + 201551 + ] + ], + "cjk unified ideographs extension h": [ + [ + 201552, + 205743 + ] + ], + "cjk unified ideographs extension i": [ + [ + 191472, + 192095 + ] + ], + "cjkcompatibility": [ + [ + 13056, + 13311 + ], + [ + 63744, + 64255 + ], + [ + 65072, + 65103 + ], + [ + 194560, + 195103 + ] + ], + "cjkpunct": [ + [ + 12288, + 12351 + ] + ], + "cjkradicals": [ + [ + 11904, + 12255 + ] + ], + "cjkstrokes": [ + [ + 12736, + 12783 + ] + ], + "combining": [ + [ + 768, + 879 + ], + [ + 6832, + 6911 + ], + [ + 7616, + 7679 + ], + [ + 8400, + 8447 + ] + ], + "controlpictures": [ + [ + 9216, + 9279 + ] + ], + "coptic": [ + [ + 11392, + 11519 + ] + ], + "copticnumber": [ + [ + 66272, + 66303 + ] + ], + "cuneiform": [ + [ + 73728, + 74751 + ], + [ + 74880, + 75087 + ] + ], + "cuneiformnumbers": [ + [ + 74752, + 74879 + ] + ], + "currency": [ + [ + 8352, + 8399 + ] + ], + "cypriot": [ + [ + 67584, + 67647 + ] + ], + "cypro-minoan": [ + [ + 77712, + 77823 + ] + ], + "cyrillic": [ + [ + 1024, + 1327 + ], + [ + 7296, + 7311 + ], + [ + 11744, + 11775 + ], + [ + 42560, + 42655 + ] + ], + "cyrillic extended-d": [ + [ + 122928, + 123023 + ] + ], + "deseret": [ + [ + 66560, + 66639 + ] + ], + "devanagari": [ + [ + 2304, + 2431 + ], + [ + 43232, + 43263 + ] + ], + "devanagari extended-a": [ + [ + 72448, + 72543 + ] + ], + "digit": [ + [ + 48, + 57 + ] + ], + "dingbats": [ + [ + 9984, + 10175 + ] + ], + "dives akuru": [ + [ + 71936, + 72031 + ] + ], + "dogra": [ + [ + 71680, + 71759 + ] + ], + "domino": [ + [ + 127024, + 127135 + ] + ], + "duployan": [ + [ + 113664, + 113823 + ] + ], + "egyptian hieroglyph format controls": [ + [ + 78896, + 78943 + ] + ], + "egyptian hieroglyphs extended-a": [ + [ + 78944, + 82943 + ] + ], + "elbasan": [ + [ + 66816, + 66863 + ] + ], + "elymaic": [ + [ + 69600, + 69631 + ] + ], + "emoticons": [ + [ + 128512, + 128591 + ] + ], + "enclosedalpha": [ + [ + 9312, + 9471 + ], + [ + 127232, + 127487 + ] + ], + "enclosedcjk": [ + [ + 12800, + 13055 + ], + [ + 127488, + 127743 + ] + ], + "ethiopic": [ + [ + 4608, + 5023 + ], + [ + 11648, + 11743 + ], + [ + 43776, + 43823 + ] + ], + "ethiopic extended-b": [ + [ + 124896, + 124927 + ] + ], + "garay": [ + [ + 68928, + 69007 + ] + ], + "geometric": [ + [ + 9632, + 9727 + ], + [ + 128896, + 129023 + ] + ], + "georgian": [ + [ + 4256, + 4351 + ], + [ + 11520, + 11567 + ] + ], + "georgian extended": [ + [ + 7312, + 7359 + ] + ], + "glagolitic": [ + [ + 11264, + 11359 + ], + [ + 122880, + 122927 + ] + ], + "gothic": [ + [ + 66352, + 66383 + ] + ], + "grantha": [ + [ + 70400, + 70527 + ] + ], + "greek": [ + [ + 880, + 1023 + ], + [ + 7936, + 8191 + ] + ], + "greekmusic": [ + [ + 119296, + 119375 + ] + ], + "greeknumbers": [ + [ + 65856, + 65935 + ] + ], + "gujarati": [ + [ + 2688, + 2815 + ] + ], + "gunjala gondi": [ + [ + 73056, + 73135 + ] + ], + "gurmukhi": [ + [ + 2560, + 2687 + ] + ], + "gurung khema": [ + [ + 90368, + 90431 + ] + ], + "halfmarks": [ + [ + 65056, + 65071 + ] + ], + "hangul": [ + [ + 4352, + 4607 + ], + [ + 12592, + 12687 + ], + [ + 43360, + 43391 + ], + [ + 44032, + 55295 + ] + ], + "hanifi rohingya": [ + [ + 68864, + 68927 + ] + ], + "hanunoo": [ + [ + 5920, + 5951 + ] + ], + "hatran": [ + [ + 67808, + 67839 + ] + ], + "hebrew": [ + [ + 1424, + 1535 + ] + ], + "hieroglyphs": [ + [ + 67968, + 67999 + ], + [ + 77824, + 78895 + ], + [ + 82944, + 83583 + ] + ], + "highsurrogates": [ + [ + 55296, + 56319 + ] + ], + "hiragana": [ + [ + 12352, + 12447 + ] + ], + "ideograph": [ + [ + 4352, + 4607 + ], + [ + 12272, + 12287 + ], + [ + 12448, + 12543 + ], + [ + 12544, + 12591 + ], + [ + 12592, + 12687 + ], + [ + 12704, + 12735 + ], + [ + 12784, + 12799 + ], + [ + 13056, + 13311 + ], + [ + 13312, + 19903 + ], + [ + 19968, + 40959 + ], + [ + 40960, + 42191 + ], + [ + 43360, + 43391 + ], + [ + 44032, + 55295 + ], + [ + 63744, + 64255 + ], + [ + 65072, + 65103 + ], + [ + 110592, + 110847 + ], + [ + 131072, + 173791 + ], + [ + 173824, + 183983 + ], + [ + 194560, + 195103 + ] + ], + "ideoother": [ + [ + 4352, + 4607 + ], + [ + 11904, + 12255 + ], + [ + 12288, + 12351 + ], + [ + 12352, + 12447 + ], + [ + 12448, + 12543 + ], + [ + 12544, + 12591 + ], + [ + 12592, + 12687 + ], + [ + 12704, + 12735 + ], + [ + 12736, + 12783 + ], + [ + 12784, + 12799 + ], + [ + 13056, + 13311 + ], + [ + 43360, + 43391 + ], + [ + 44032, + 55295 + ], + [ + 63744, + 64255 + ], + [ + 65072, + 65103 + ], + [ + 110592, + 110847 + ], + [ + 194560, + 195103 + ] + ], + "indic siyaq numbers": [ + [ + 126064, + 126143 + ] + ], + "indicnumber": [ + [ + 43056, + 43071 + ] + ], + "ipa": [ + [ + 592, + 687 + ], + [ + 7424, + 7615 + ] + ], + "javanese": [ + [ + 43392, + 43487 + ] + ], + "kaithi": [ + [ + 69760, + 69839 + ] + ], + "kaktovik numerals": [ + [ + 119488, + 119519 + ] + ], + "kana extended-a": [ + [ + 110848, + 110895 + ] + ], + "kana extended-b": [ + [ + 110576, + 110591 + ] + ], + "kanbun": [ + [ + 12688, + 12703 + ] + ], + "kannada": [ + [ + 3200, + 3327 + ] + ], + "katakana": [ + [ + 12448, + 12543 + ], + [ + 12784, + 12799 + ], + [ + 110592, + 110847 + ] + ], + "kawi": [ + [ + 73472, + 73567 + ] + ], + "kayahli": [ + [ + 43264, + 43311 + ] + ], + "kharoshthi": [ + [ + 68096, + 68191 + ] + ], + "khitan small script": [ + [ + 101120, + 101631 + ] + ], + "khmer": [ + [ + 6016, + 6143 + ] + ], + "khmersymbols": [ + [ + 6624, + 6655 + ] + ], + "khojki": [ + [ + 70144, + 70223 + ] + ], + "khudawadi": [ + [ + 70320, + 70399 + ] + ], + "kirat rai": [ + [ + 93504, + 93567 + ] + ], + "lao": [ + [ + 3712, + 3839 + ] + ], + "latin": [ + [ + 0, + 591 + ], + [ + 7680, + 7935 + ], + [ + 11360, + 11391 + ], + [ + 42784, + 43007 + ], + [ + 43824, + 43887 + ] + ], + "latin extended-f": [ + [ + 67456, + 67519 + ] + ], + "latin extended-g": [ + [ + 122624, + 122879 + ] + ], + "lepcha": [ + [ + 7168, + 7247 + ] + ], + "letterlike": [ + [ + 8448, + 8527 + ] + ], + "limbu": [ + [ + 6400, + 6479 + ] + ], + "lineara": [ + [ + 67072, + 67455 + ] + ], + "linearb": [ + [ + 65536, + 65791 + ] + ], + "lisu": [ + [ + 42192, + 42239 + ] + ], + "lisu supplement": [ + [ + 73648, + 73663 + ] + ], + "lowsurrogates": [ + [ + 56320, + 57343 + ] + ], + "lycian": [ + [ + 66176, + 66207 + ] + ], + "lydian": [ + [ + 67872, + 67903 + ] + ], + "mahajani": [ + [ + 69968, + 70015 + ] + ], + "mahjong": [ + [ + 126976, + 127023 + ] + ], + "makasar": [ + [ + 73440, + 73471 + ] + ], + "malayalam": [ + [ + 3328, + 3455 + ] + ], + "mandaic": [ + [ + 2112, + 2143 + ] + ], + "manichaean": [ + [ + 68288, + 68351 + ] + ], + "mapsymbols": [ + [ + 128640, + 128767 + ] + ], + "marchen": [ + [ + 72816, + 72895 + ] + ], + "masaram gondi": [ + [ + 72960, + 73055 + ] + ], + "mathematical": [ + [ + 10176, + 10223 + ], + [ + 10624, + 10751 + ], + [ + 119808, + 120831 + ] + ], + "mayan numerals": [ + [ + 119520, + 119551 + ] + ], + "medefaidrin": [ + [ + 93760, + 93855 + ] + ], + "meeteimayek": [ + [ + 43744, + 43775 + ], + [ + 43968, + 44031 + ] + ], + "mende kikakui": [ + [ + 124928, + 125151 + ] + ], + "meroitic": [ + [ + 68000, + 68095 + ] + ], + "miao": [ + [ + 93952, + 94111 + ] + ], + "misc": [ + [ + 8960, + 9215 + ] + ], + "miscsymbols": [ + [ + 9728, + 9983 + ] + ], + "modi": [ + [ + 71168, + 71263 + ] + ], + "modifiertone": [ + [ + 42752, + 42783 + ] + ], + "mongolian": [ + [ + 6144, + 6319 + ], + [ + 71264, + 71295 + ] + ], + "mro": [ + [ + 92736, + 92783 + ] + ], + "multani": [ + [ + 70272, + 70319 + ] + ], + "musical symbols": [ + [ + 119040, + 119295 + ] + ], + "myanmar": [ + [ + 4096, + 4255 + ], + [ + 43488, + 43519 + ], + [ + 43616, + 43647 + ] + ], + "myanmar extended-c": [ + [ + 71376, + 71423 + ] + ], + "nabataean": [ + [ + 67712, + 67759 + ] + ], + "nag mundari": [ + [ + 124112, + 124159 + ] + ], + "nandinagari": [ + [ + 72096, + 72191 + ] + ], + "newa": [ + [ + 70656, + 70783 + ] + ], + "newtailue": [ + [ + 6528, + 6623 + ] + ], + "nko": [ + [ + 1984, + 2047 + ] + ], + "numbers": [ + [ + 8528, + 8591 + ] + ], + "nushu": [ + [ + 110960, + 111359 + ] + ], + "nyiakeng puachue hmong": [ + [ + 123136, + 123215 + ] + ], + "ocr": [ + [ + 9280, + 9311 + ] + ], + "ogham": [ + [ + 5760, + 5791 + ] + ], + "ol onal": [ + [ + 124368, + 124415 + ] + ], + "olchiki": [ + [ + 7248, + 7295 + ] + ], + "old sogdian": [ + [ + 69376, + 69423 + ] + ], + "old uyghur": [ + [ + 69488, + 69551 + ] + ], + "oldhungarian": [ + [ + 68736, + 68863 + ] + ], + "olditalic": [ + [ + 66304, + 66351 + ] + ], + "oldnortharabian": [ + [ + 68224, + 68255 + ] + ], + "oldpermic": [ + [ + 66384, + 66431 + ] + ], + "oldpersian": [ + [ + 66464, + 66527 + ] + ], + "oldsoutharabian": [ + [ + 68192, + 68223 + ] + ], + "oldturkic": [ + [ + 68608, + 68687 + ] + ], + "operators": [ + [ + 8704, + 8959 + ], + [ + 10752, + 11007 + ] + ], + "oriya": [ + [ + 2816, + 2943 + ] + ], + "ornamentaldingbats": [ + [ + 128592, + 128639 + ] + ], + "osage": [ + [ + 66736, + 66815 + ] + ], + "osmanya": [ + [ + 66688, + 66735 + ] + ], + "ottoman siyaq numbers": [ + [ + 126208, + 126287 + ] + ], + "pahawhhmong": [ + [ + 92928, + 93071 + ] + ], + "pahlavi": [ + [ + 68448, + 68527 + ] + ], + "palmyrene": [ + [ + 67680, + 67711 + ] + ], + "parthian": [ + [ + 68416, + 68447 + ] + ], + "paucinhau": [ + [ + 72384, + 72447 + ] + ], + "phagspa": [ + [ + 43072, + 43135 + ] + ], + "phaistosdisc": [ + [ + 66000, + 66047 + ] + ], + "phoenician": [ + [ + 67840, + 67871 + ] + ], + "pictographs": [ + [ + 127744, + 128511 + ], + [ + 129280, + 129535 + ] + ], + "playingcards": [ + [ + 127136, + 127231 + ] + ], + "presentation": [ + [ + 64256, + 64335 + ] + ], + "privateuse": [ + [ + 57344, + 63743 + ], + [ + 983040, + 1114111 + ] + ], + "punctuation": [ + [ + 8192, + 8303 + ], + [ + 11776, + 11903 + ] + ], + "rejang": [ + [ + 43312, + 43359 + ] + ], + "rodnumerals": [ + [ + 119648, + 119679 + ] + ], + "ruminumerals": [ + [ + 69216, + 69247 + ] + ], + "runic": [ + [ + 5792, + 5887 + ] + ], + "samaritan": [ + [ + 2048, + 2111 + ] + ], + "saurashtra": [ + [ + 43136, + 43231 + ] + ], + "sharada": [ + [ + 70016, + 70111 + ] + ], + "shavian": [ + [ + 66640, + 66687 + ] + ], + "shorthandformat": [ + [ + 113824, + 113839 + ] + ], + "siddham": [ + [ + 71040, + 71167 + ] + ], + "sinhala": [ + [ + 3456, + 3583 + ], + [ + 70112, + 70143 + ] + ], + "small": [ + [ + 65104, + 65135 + ] + ], + "small kana extension": [ + [ + 110896, + 110959 + ] + ], + "sogdian": [ + [ + 69424, + 69487 + ] + ], + "sorasompeng": [ + [ + 69840, + 69887 + ] + ], + "soyombo": [ + [ + 72272, + 72367 + ] + ], + "space": [ + [ + 9, + 13 + ], + [ + 32, + 32 + ], + [ + 133 + ], + [ + 8232, + 8233 + ] + ], + "spacing": [ + [ + 688, + 767 + ] + ], + "specials": [ + [ + 65520, + 65535 + ] + ], + "sundanese": [ + [ + 7040, + 7103 + ], + [ + 7360, + 7375 + ] + ], + "sunuwar": [ + [ + 72640, + 72703 + ] + ], + "supersub": [ + [ + 8304, + 8351 + ] + ], + "suttonsignwriting": [ + [ + 120832, + 121519 + ] + ], + "sylotinagri": [ + [ + 43008, + 43055 + ] + ], + "symbols and pictographs extended-a": [ + [ + 129648, + 129791 + ] + ], + "symbols for legacy computing": [ + [ + 129792, + 130047 + ] + ], + "symbols for legacy computing supplement": [ + [ + 117760, + 118463 + ] + ], + "syriac": [ + [ + 1792, + 1871 + ] + ], + "syriac supplement": [ + [ + 2144, + 2159 + ] + ], + "tagalog": [ + [ + 5888, + 5919 + ] + ], + "tagbanwa": [ + [ + 5984, + 6015 + ] + ], + "tags": [ + [ + 917504, + 917631 + ] + ], + "taile": [ + [ + 6480, + 6527 + ] + ], + "taitham": [ + [ + 6688, + 6831 + ] + ], + "taiviet": [ + [ + 43648, + 43743 + ] + ], + "taixuanjing": [ + [ + 119552, + 119647 + ] + ], + "takri": [ + [ + 71296, + 71375 + ] + ], + "tamil": [ + [ + 2944, + 3071 + ] + ], + "tamil supplement": [ + [ + 73664, + 73727 + ] + ], + "tangsa": [ + [ + 92784, + 92879 + ] + ], + "tangut": [ + [ + 94176, + 101119 + ] + ], + "tangut supplement": [ + [ + 101632, + 101759 + ] + ], + "telugu": [ + [ + 3072, + 3199 + ] + ], + "thaana": [ + [ + 1920, + 1983 + ] + ], + "thai": [ + [ + 3584, + 3711 + ] + ], + "tibetan": [ + [ + 3840, + 4095 + ] + ], + "tifinagh": [ + [ + 11568, + 11647 + ] + ], + "tirhuta": [ + [ + 70784, + 70879 + ] + ], + "todhri": [ + [ + 67008, + 67071 + ] + ], + "toto": [ + [ + 123536, + 123583 + ] + ], + "tulu-tigalari": [ + [ + 70528, + 70655 + ] + ], + "ugaritic": [ + [ + 66432, + 66463 + ] + ], + "unified canadian aboriginal syllabics extended-a": [ + [ + 72368, + 72383 + ] + ], + "vai": [ + [ + 42240, + 42559 + ] + ], + "variations": [ + [ + 65024, + 65039 + ], + [ + 917760, + 917999 + ] + ], + "vedic": [ + [ + 7376, + 7423 + ] + ], + "vertical": [ + [ + 65040, + 65055 + ] + ], + "vithkuqi": [ + [ + 66928, + 67007 + ] + ], + "wancho": [ + [ + 123584, + 123647 + ] + ], + "warangciti": [ + [ + 71840, + 71935 + ] + ], + "width": [ + [ + 65280, + 65519 + ] + ], + "xdigit": [ + [ + 48, + 57 + ], + [ + 65, + 70 + ], + [ + 97, + 102 + ] + ], + "yezidi": [ + [ + 69248, + 69311 + ] + ], + "yi": [ + [ + 40960, + 42191 + ] + ], + "yijing": [ + [ + 19904, + 19967 + ] + ], + "zanabazar square": [ + [ + 72192, + 72271 + ] + ], + "znamenny musical notation": [ + [ + 118528, + 118735 + ] + ] +}; +ilib.data.ctype_n = { + "Nd": [ + [ + 48, + 57 + ], + [ + 1632, + 1641 + ], + [ + 1776, + 1785 + ], + [ + 1984, + 1993 + ], + [ + 2406, + 2415 + ], + [ + 2534, + 2543 + ], + [ + 2662, + 2671 + ], + [ + 2790, + 2799 + ], + [ + 2918, + 2927 + ], + [ + 3046, + 3055 + ], + [ + 3174, + 3183 + ], + [ + 3302, + 3311 + ], + [ + 3430, + 3439 + ], + [ + 3558, + 3567 + ], + [ + 3664, + 3673 + ], + [ + 3792, + 3801 + ], + [ + 3872, + 3881 + ], + [ + 4160, + 4169 + ], + [ + 4240, + 4249 + ], + [ + 6112, + 6121 + ], + [ + 6160, + 6169 + ], + [ + 6470, + 6479 + ], + [ + 6608, + 6617 + ], + [ + 6784, + 6793 + ], + [ + 6800, + 6809 + ], + [ + 6992, + 7001 + ], + [ + 7088, + 7097 + ], + [ + 7232, + 7241 + ], + [ + 7248, + 7257 + ], + [ + 42528, + 42537 + ], + [ + 43216, + 43225 + ], + [ + 43264, + 43273 + ], + [ + 43472, + 43481 + ], + [ + 43504, + 43513 + ], + [ + 43600, + 43609 + ], + [ + 44016, + 44025 + ], + [ + 65296, + 65305 + ], + [ + 66720, + 66729 + ], + [ + 68912, + 68921 + ], + [ + 68928, + 68937 + ], + [ + 69734, + 69743 + ], + [ + 69872, + 69881 + ], + [ + 69942, + 69951 + ], + [ + 70096, + 70105 + ], + [ + 70384, + 70393 + ], + [ + 70736, + 70745 + ], + [ + 70864, + 70873 + ], + [ + 71248, + 71257 + ], + [ + 71360, + 71369 + ], + [ + 71376, + 71395 + ], + [ + 71472, + 71481 + ], + [ + 71904, + 71913 + ], + [ + 72016, + 72025 + ], + [ + 72688, + 72697 + ], + [ + 72784, + 72793 + ], + [ + 73040, + 73049 + ], + [ + 73120, + 73129 + ], + [ + 73552, + 73561 + ], + [ + 90416, + 90425 + ], + [ + 92768, + 92777 + ], + [ + 92864, + 92873 + ], + [ + 93008, + 93017 + ], + [ + 93552, + 93561 + ], + [ + 118000, + 118009 + ], + [ + 120782, + 120831 + ], + [ + 123200, + 123209 + ], + [ + 123632, + 123641 + ], + [ + 124144, + 124153 + ], + [ + 124401, + 124410 + ], + [ + 125264, + 125273 + ], + [ + 130032, + 130041 + ] + ], + "Nl": [ + [ + 5870, + 5872 + ], + [ + 8544, + 8578 + ], + [ + 8581, + 8584 + ], + [ + 12295 + ], + [ + 12321, + 12329 + ], + [ + 12344, + 12346 + ], + [ + 42726, + 42735 + ], + [ + 65856, + 65908 + ], + [ + 66369 + ], + [ + 66378 + ], + [ + 66513, + 66517 + ], + [ + 74752, + 74862 + ] + ], + "No": [ + [ + 178, + 179 + ], + [ + 185 + ], + [ + 188, + 190 + ], + [ + 2548, + 2553 + ], + [ + 2930, + 2935 + ], + [ + 3056, + 3058 + ], + [ + 3192, + 3198 + ], + [ + 3416, + 3422 + ], + [ + 3440, + 3448 + ], + [ + 3882, + 3891 + ], + [ + 4969, + 4988 + ], + [ + 6128, + 6137 + ], + [ + 6618 + ], + [ + 8304 + ], + [ + 8308, + 8313 + ], + [ + 8320, + 8329 + ], + [ + 8528, + 8543 + ], + [ + 8585 + ], + [ + 9312, + 9371 + ], + [ + 9450, + 9471 + ], + [ + 10102, + 10131 + ], + [ + 11517 + ], + [ + 12690, + 12693 + ], + [ + 12832, + 12841 + ], + [ + 12872, + 12879 + ], + [ + 12881, + 12895 + ], + [ + 12928, + 12937 + ], + [ + 12977, + 12991 + ], + [ + 43056, + 43061 + ], + [ + 65799, + 65843 + ], + [ + 65909, + 65912 + ], + [ + 65930, + 65931 + ], + [ + 66273, + 66299 + ], + [ + 66336, + 66339 + ], + [ + 67672, + 67679 + ], + [ + 67705, + 67711 + ], + [ + 67751, + 67759 + ], + [ + 67835, + 67839 + ], + [ + 67862, + 67867 + ], + [ + 68028, + 68029 + ], + [ + 68032, + 68047 + ], + [ + 68050, + 68095 + ], + [ + 68160, + 68168 + ], + [ + 68221, + 68222 + ], + [ + 68253, + 68255 + ], + [ + 68331, + 68335 + ], + [ + 68440, + 68447 + ], + [ + 68472, + 68479 + ], + [ + 68521, + 68527 + ], + [ + 68858, + 68863 + ], + [ + 69216, + 69246 + ], + [ + 69405, + 69414 + ], + [ + 69457, + 69460 + ], + [ + 69573, + 69579 + ], + [ + 69714, + 69733 + ], + [ + 70113, + 70132 + ], + [ + 71482, + 71483 + ], + [ + 71914, + 71922 + ], + [ + 72794, + 72812 + ], + [ + 73664, + 73684 + ], + [ + 93019, + 93025 + ], + [ + 93824, + 93846 + ], + [ + 119488, + 119507 + ], + [ + 119520, + 119539 + ], + [ + 119648, + 119672 + ], + [ + 125127, + 125135 + ], + [ + 126065, + 126123 + ], + [ + 126125, + 126127 + ], + [ + 126129, + 126132 + ], + [ + 126209, + 126253 + ], + [ + 126255, + 126269 + ], + [ + 127232, + 127244 + ] + ] +}; +ilib.data.ctype_p = { + "Pc": [ + [ + 95 + ], + [ + 8255, + 8256 + ], + [ + 8276 + ], + [ + 65075, + 65076 + ], + [ + 65101, + 65103 + ], + [ + 65343 + ] + ], + "Pd": [ + [ + 45 + ], + [ + 1418 + ], + [ + 1470 + ], + [ + 5120 + ], + [ + 6150 + ], + [ + 8208, + 8213 + ], + [ + 11799 + ], + [ + 11802 + ], + [ + 11834, + 11835 + ], + [ + 11840 + ], + [ + 11869 + ], + [ + 12316 + ], + [ + 12336 + ], + [ + 12448 + ], + [ + 65073, + 65074 + ], + [ + 65112 + ], + [ + 65123 + ], + [ + 65293 + ], + [ + 68974 + ], + [ + 69293 + ] + ], + "Pe": [ + [ + 41 + ], + [ + 93 + ], + [ + 125 + ], + [ + 3899 + ], + [ + 3901 + ], + [ + 5788 + ], + [ + 8262 + ], + [ + 8318 + ], + [ + 8334 + ], + [ + 8969 + ], + [ + 8971 + ], + [ + 9002 + ], + [ + 10089 + ], + [ + 10091 + ], + [ + 10093 + ], + [ + 10095 + ], + [ + 10097 + ], + [ + 10099 + ], + [ + 10101 + ], + [ + 10182 + ], + [ + 10215 + ], + [ + 10217 + ], + [ + 10219 + ], + [ + 10221 + ], + [ + 10223 + ], + [ + 10628 + ], + [ + 10630 + ], + [ + 10632 + ], + [ + 10634 + ], + [ + 10636 + ], + [ + 10638 + ], + [ + 10640 + ], + [ + 10642 + ], + [ + 10644 + ], + [ + 10646 + ], + [ + 10648 + ], + [ + 10713 + ], + [ + 10715 + ], + [ + 10749 + ], + [ + 11811 + ], + [ + 11813 + ], + [ + 11815 + ], + [ + 11817 + ], + [ + 11862 + ], + [ + 11864 + ], + [ + 11866 + ], + [ + 11868 + ], + [ + 12297 + ], + [ + 12299 + ], + [ + 12301 + ], + [ + 12303 + ], + [ + 12305 + ], + [ + 12309 + ], + [ + 12311 + ], + [ + 12313 + ], + [ + 12315 + ], + [ + 12318, + 12319 + ], + [ + 64830 + ], + [ + 65048 + ], + [ + 65078 + ], + [ + 65080 + ], + [ + 65082 + ], + [ + 65084 + ], + [ + 65086 + ], + [ + 65088 + ], + [ + 65090 + ], + [ + 65092 + ], + [ + 65096 + ], + [ + 65114 + ], + [ + 65116 + ], + [ + 65118 + ], + [ + 65289 + ], + [ + 65341 + ], + [ + 65373 + ], + [ + 65376 + ], + [ + 65379 + ] + ], + "Pf": [ + [ + 187 + ], + [ + 8217 + ], + [ + 8221 + ], + [ + 8250 + ], + [ + 11779 + ], + [ + 11781 + ], + [ + 11786 + ], + [ + 11789 + ], + [ + 11805 + ], + [ + 11809 + ] + ], + "Pi": [ + [ + 171 + ], + [ + 8216 + ], + [ + 8219, + 8220 + ], + [ + 8223 + ], + [ + 8249 + ], + [ + 11778 + ], + [ + 11780 + ], + [ + 11785 + ], + [ + 11788 + ], + [ + 11804 + ], + [ + 11808 + ] + ], + "Po": [ + [ + 33, + 35 + ], + [ + 37, + 39 + ], + [ + 42 + ], + [ + 44 + ], + [ + 46, + 47 + ], + [ + 58, + 59 + ], + [ + 63, + 64 + ], + [ + 92 + ], + [ + 161 + ], + [ + 167 + ], + [ + 182, + 183 + ], + [ + 191 + ], + [ + 894 + ], + [ + 903 + ], + [ + 1370, + 1375 + ], + [ + 1417 + ], + [ + 1472 + ], + [ + 1475 + ], + [ + 1478 + ], + [ + 1523, + 1524 + ], + [ + 1545, + 1546 + ], + [ + 1548, + 1549 + ], + [ + 1563 + ], + [ + 1565, + 1567 + ], + [ + 1642, + 1645 + ], + [ + 1748 + ], + [ + 1792, + 1805 + ], + [ + 2039, + 2041 + ], + [ + 2096, + 2110 + ], + [ + 2142 + ], + [ + 2404, + 2405 + ], + [ + 2416 + ], + [ + 2557 + ], + [ + 2678 + ], + [ + 2800 + ], + [ + 3191 + ], + [ + 3204 + ], + [ + 3572 + ], + [ + 3663 + ], + [ + 3674, + 3675 + ], + [ + 3844, + 3858 + ], + [ + 3860 + ], + [ + 3973 + ], + [ + 4048, + 4052 + ], + [ + 4057, + 4058 + ], + [ + 4170, + 4175 + ], + [ + 4347 + ], + [ + 4960, + 4968 + ], + [ + 5742 + ], + [ + 5867, + 5869 + ], + [ + 5941, + 5942 + ], + [ + 6100, + 6102 + ], + [ + 6104, + 6106 + ], + [ + 6144, + 6149 + ], + [ + 6151, + 6154 + ], + [ + 6468, + 6469 + ], + [ + 6686, + 6687 + ], + [ + 6816, + 6822 + ], + [ + 6824, + 6829 + ], + [ + 6990, + 6991 + ], + [ + 7002, + 7008 + ], + [ + 7037, + 7039 + ], + [ + 7164, + 7167 + ], + [ + 7227, + 7231 + ], + [ + 7294, + 7295 + ], + [ + 7360, + 7367 + ], + [ + 7379 + ], + [ + 8214, + 8215 + ], + [ + 8224, + 8231 + ], + [ + 8240, + 8248 + ], + [ + 8251, + 8254 + ], + [ + 8257, + 8259 + ], + [ + 8263, + 8273 + ], + [ + 8275 + ], + [ + 8277, + 8286 + ], + [ + 11513, + 11516 + ], + [ + 11518, + 11519 + ], + [ + 11632 + ], + [ + 11776, + 11777 + ], + [ + 11782, + 11784 + ], + [ + 11787 + ], + [ + 11790, + 11798 + ], + [ + 11800, + 11801 + ], + [ + 11803 + ], + [ + 11806, + 11807 + ], + [ + 11818, + 11822 + ], + [ + 11824, + 11833 + ], + [ + 11836, + 11839 + ], + [ + 11841 + ], + [ + 11843, + 11855 + ], + [ + 11858, + 11860 + ], + [ + 12289, + 12291 + ], + [ + 12349 + ], + [ + 12539 + ], + [ + 42238, + 42239 + ], + [ + 42509, + 42511 + ], + [ + 42611 + ], + [ + 42622 + ], + [ + 42738, + 42743 + ], + [ + 43124, + 43127 + ], + [ + 43214, + 43215 + ], + [ + 43256, + 43258 + ], + [ + 43260 + ], + [ + 43310, + 43311 + ], + [ + 43359 + ], + [ + 43457, + 43469 + ], + [ + 43486, + 43487 + ], + [ + 43612, + 43615 + ], + [ + 43742, + 43743 + ], + [ + 43760, + 43761 + ], + [ + 44011 + ], + [ + 65040, + 65046 + ], + [ + 65049 + ], + [ + 65072 + ], + [ + 65093, + 65094 + ], + [ + 65097, + 65100 + ], + [ + 65104, + 65106 + ], + [ + 65108, + 65111 + ], + [ + 65119, + 65121 + ], + [ + 65128 + ], + [ + 65130, + 65131 + ], + [ + 65281, + 65283 + ], + [ + 65285, + 65287 + ], + [ + 65290 + ], + [ + 65292 + ], + [ + 65294, + 65295 + ], + [ + 65306, + 65307 + ], + [ + 65311, + 65312 + ], + [ + 65340 + ], + [ + 65377 + ], + [ + 65380, + 65381 + ], + [ + 65792, + 65794 + ], + [ + 66463 + ], + [ + 66512 + ], + [ + 66927 + ], + [ + 67671 + ], + [ + 67871 + ], + [ + 67903 + ], + [ + 68176, + 68184 + ], + [ + 68223 + ], + [ + 68336, + 68342 + ], + [ + 68409, + 68415 + ], + [ + 68505, + 68508 + ], + [ + 69461, + 69465 + ], + [ + 69510, + 69513 + ], + [ + 69703, + 69709 + ], + [ + 69819, + 69820 + ], + [ + 69822, + 69825 + ], + [ + 69952, + 69955 + ], + [ + 70004, + 70005 + ], + [ + 70085, + 70088 + ], + [ + 70093 + ], + [ + 70107 + ], + [ + 70109, + 70111 + ], + [ + 70200, + 70205 + ], + [ + 70313 + ], + [ + 70612, + 70613 + ], + [ + 70615, + 70616 + ], + [ + 70731, + 70735 + ], + [ + 70746, + 70747 + ], + [ + 70749 + ], + [ + 70854 + ], + [ + 71105, + 71127 + ], + [ + 71233, + 71235 + ], + [ + 71264, + 71276 + ], + [ + 71353 + ], + [ + 71484, + 71486 + ], + [ + 71739 + ], + [ + 72004, + 72006 + ], + [ + 72162 + ], + [ + 72255, + 72262 + ], + [ + 72346, + 72348 + ], + [ + 72350, + 72354 + ], + [ + 72448, + 72457 + ], + [ + 72673 + ], + [ + 72769, + 72773 + ], + [ + 72816, + 72817 + ], + [ + 73463, + 73464 + ], + [ + 73539, + 73551 + ], + [ + 73727 + ], + [ + 74864, + 74868 + ], + [ + 77809, + 77810 + ], + [ + 92782, + 92783 + ], + [ + 92917 + ], + [ + 92983, + 92987 + ], + [ + 92996 + ], + [ + 93549, + 93551 + ], + [ + 93847, + 93850 + ], + [ + 94178 + ], + [ + 113823 + ], + [ + 121479, + 121483 + ], + [ + 124415 + ], + [ + 125278, + 125279 + ] + ], + "Ps": [ + [ + 40 + ], + [ + 91 + ], + [ + 123 + ], + [ + 3898 + ], + [ + 3900 + ], + [ + 5787 + ], + [ + 8218 + ], + [ + 8222 + ], + [ + 8261 + ], + [ + 8317 + ], + [ + 8333 + ], + [ + 8968 + ], + [ + 8970 + ], + [ + 9001 + ], + [ + 10088 + ], + [ + 10090 + ], + [ + 10092 + ], + [ + 10094 + ], + [ + 10096 + ], + [ + 10098 + ], + [ + 10100 + ], + [ + 10181 + ], + [ + 10214 + ], + [ + 10216 + ], + [ + 10218 + ], + [ + 10220 + ], + [ + 10222 + ], + [ + 10627 + ], + [ + 10629 + ], + [ + 10631 + ], + [ + 10633 + ], + [ + 10635 + ], + [ + 10637 + ], + [ + 10639 + ], + [ + 10641 + ], + [ + 10643 + ], + [ + 10645 + ], + [ + 10647 + ], + [ + 10712 + ], + [ + 10714 + ], + [ + 10748 + ], + [ + 11810 + ], + [ + 11812 + ], + [ + 11814 + ], + [ + 11816 + ], + [ + 11842 + ], + [ + 11861 + ], + [ + 11863 + ], + [ + 11865 + ], + [ + 11867 + ], + [ + 12296 + ], + [ + 12298 + ], + [ + 12300 + ], + [ + 12302 + ], + [ + 12304 + ], + [ + 12308 + ], + [ + 12310 + ], + [ + 12312 + ], + [ + 12314 + ], + [ + 12317 + ], + [ + 64831 + ], + [ + 65047 + ], + [ + 65077 + ], + [ + 65079 + ], + [ + 65081 + ], + [ + 65083 + ], + [ + 65085 + ], + [ + 65087 + ], + [ + 65089 + ], + [ + 65091 + ], + [ + 65095 + ], + [ + 65113 + ], + [ + 65115 + ], + [ + 65117 + ], + [ + 65288 + ], + [ + 65339 + ], + [ + 65371 + ], + [ + 65375 + ], + [ + 65378 + ] + ] +}; +ilib.data.scriptToRange = { + "Adlm": [ + [ + 125184, + 125259 + ], + [ + 125264, + 125273 + ], + [ + 125278, + 125279 + ] + ], + "Aghb": [ + [ + 66864, + 66915 + ], + [ + 66927 + ] + ], + "Ahom": [ + [ + 71424, + 71450 + ], + [ + 71453, + 71467 + ], + [ + 71472, + 71494 + ] + ], + "Arab": [ + [ + 1536, + 1540 + ], + [ + 1542, + 1547 + ], + [ + 1549, + 1562 + ], + [ + 1564, + 1566 + ], + [ + 1568, + 1599 + ], + [ + 1601, + 1610 + ], + [ + 1622, + 1647 + ], + [ + 1649, + 1756 + ], + [ + 1758, + 1791 + ], + [ + 1872, + 1919 + ], + [ + 2160, + 2190 + ], + [ + 2192, + 2193 + ], + [ + 2199, + 2273 + ], + [ + 2275, + 2303 + ], + [ + 64336, + 64450 + ], + [ + 64467, + 64829 + ], + [ + 64832, + 64911 + ], + [ + 64914, + 64967 + ], + [ + 64975 + ], + [ + 65008, + 65023 + ], + [ + 65136, + 65140 + ], + [ + 65142, + 65276 + ], + [ + 69216, + 69246 + ], + [ + 69314, + 69316 + ], + [ + 69372, + 69375 + ], + [ + 126464, + 126467 + ], + [ + 126469, + 126495 + ], + [ + 126497, + 126498 + ], + [ + 126500 + ], + [ + 126503 + ], + [ + 126505, + 126514 + ], + [ + 126516, + 126519 + ], + [ + 126521 + ], + [ + 126523 + ], + [ + 126530 + ], + [ + 126535 + ], + [ + 126537 + ], + [ + 126539 + ], + [ + 126541, + 126543 + ], + [ + 126545, + 126546 + ], + [ + 126548 + ], + [ + 126551 + ], + [ + 126553 + ], + [ + 126555 + ], + [ + 126557 + ], + [ + 126559 + ], + [ + 126561, + 126562 + ], + [ + 126564 + ], + [ + 126567, + 126570 + ], + [ + 126572, + 126578 + ], + [ + 126580, + 126583 + ], + [ + 126585, + 126588 + ], + [ + 126590 + ], + [ + 126592, + 126601 + ], + [ + 126603, + 126619 + ], + [ + 126625, + 126627 + ], + [ + 126629, + 126633 + ], + [ + 126635, + 126651 + ], + [ + 126704, + 126705 + ] + ], + "Armi": [ + [ + 67648, + 67669 + ], + [ + 67671, + 67679 + ] + ], + "Armn": [ + [ + 1329, + 1366 + ], + [ + 1369, + 1418 + ], + [ + 1421, + 1423 + ], + [ + 64275, + 64279 + ] + ], + "Avst": [ + [ + 68352, + 68405 + ], + [ + 68409, + 68415 + ] + ], + "Bali": [ + [ + 6912, + 6988 + ], + [ + 6990, + 7039 + ] + ], + "Bamu": [ + [ + 42656, + 42743 + ], + [ + 92160, + 92728 + ] + ], + "Bass": [ + [ + 92880, + 92909 + ], + [ + 92912, + 92917 + ] + ], + "Batk": [ + [ + 7104, + 7155 + ], + [ + 7164, + 7167 + ] + ], + "Beng": [ + [ + 2432, + 2435 + ], + [ + 2437, + 2444 + ], + [ + 2447, + 2448 + ], + [ + 2451, + 2472 + ], + [ + 2474, + 2480 + ], + [ + 2482 + ], + [ + 2486, + 2489 + ], + [ + 2492, + 2500 + ], + [ + 2503, + 2504 + ], + [ + 2507, + 2510 + ], + [ + 2519 + ], + [ + 2524, + 2525 + ], + [ + 2527, + 2531 + ], + [ + 2534, + 2558 + ] + ], + "Bhks": [ + [ + 72704, + 72712 + ], + [ + 72714, + 72758 + ], + [ + 72760, + 72773 + ], + [ + 72784, + 72812 + ] + ], + "Bopo": [ + [ + 746, + 747 + ], + [ + 12549, + 12591 + ], + [ + 12704, + 12735 + ] + ], + "Brah": [ + [ + 69632, + 69709 + ], + [ + 69714, + 69749 + ], + [ + 69759 + ] + ], + "Brai": [ + [ + 10240, + 10495 + ] + ], + "Bugi": [ + [ + 6656, + 6683 + ], + [ + 6686, + 6687 + ] + ], + "Buhd": [ + [ + 5952, + 5971 + ] + ], + "Cakm": [ + [ + 69888, + 69940 + ], + [ + 69942, + 69959 + ] + ], + "Cans": [ + [ + 5120, + 5759 + ], + [ + 6320, + 6389 + ], + [ + 72368, + 72383 + ] + ], + "Cari": [ + [ + 66208, + 66256 + ] + ], + "Cham": [ + [ + 43520, + 43574 + ], + [ + 43584, + 43597 + ], + [ + 43600, + 43609 + ], + [ + 43612, + 43615 + ] + ], + "Cher": [ + [ + 5024, + 5109 + ], + [ + 5112, + 5117 + ], + [ + 43888, + 43967 + ] + ], + "Chrs": [ + [ + 69552, + 69579 + ] + ], + "Copt": [ + [ + 994, + 1007 + ], + [ + 11392, + 11507 + ], + [ + 11513, + 11519 + ] + ], + "Cpmn": [ + [ + 77712, + 77810 + ] + ], + "Cprt": [ + [ + 67584, + 67589 + ], + [ + 67592 + ], + [ + 67594, + 67637 + ], + [ + 67639, + 67640 + ], + [ + 67644 + ], + [ + 67647 + ] + ], + "Cyrl": [ + [ + 1024, + 1156 + ], + [ + 1159, + 1327 + ], + [ + 7296, + 7306 + ], + [ + 7467 + ], + [ + 7544 + ], + [ + 11744, + 11775 + ], + [ + 42560, + 42655 + ], + [ + 65070, + 65071 + ], + [ + 122928, + 122989 + ], + [ + 123023 + ] + ], + "Deva": [ + [ + 2304, + 2384 + ], + [ + 2389, + 2403 + ], + [ + 2406, + 2431 + ], + [ + 43232, + 43263 + ], + [ + 72448, + 72457 + ] + ], + "Diak": [ + [ + 71936, + 71942 + ], + [ + 71945 + ], + [ + 71948, + 71955 + ], + [ + 71957, + 71958 + ], + [ + 71960, + 71989 + ], + [ + 71991, + 71992 + ], + [ + 71995, + 72006 + ], + [ + 72016, + 72025 + ] + ], + "Dogr": [ + [ + 71680, + 71739 + ] + ], + "Dsrt": [ + [ + 66560, + 66639 + ] + ], + "Dupl": [ + [ + 113664, + 113770 + ], + [ + 113776, + 113788 + ], + [ + 113792, + 113800 + ], + [ + 113808, + 113817 + ], + [ + 113820, + 113823 + ] + ], + "Egyp": [ + [ + 77824, + 78933 + ], + [ + 78944, + 82938 + ] + ], + "Elba": [ + [ + 66816, + 66855 + ] + ], + "Elym": [ + [ + 69600, + 69622 + ] + ], + "Ethi": [ + [ + 4608, + 4680 + ], + [ + 4682, + 4685 + ], + [ + 4688, + 4694 + ], + [ + 4696 + ], + [ + 4698, + 4701 + ], + [ + 4704, + 4744 + ], + [ + 4746, + 4749 + ], + [ + 4752, + 4784 + ], + [ + 4786, + 4789 + ], + [ + 4792, + 4798 + ], + [ + 4800 + ], + [ + 4802, + 4805 + ], + [ + 4808, + 4822 + ], + [ + 4824, + 4880 + ], + [ + 4882, + 4885 + ], + [ + 4888, + 4954 + ], + [ + 4957, + 4988 + ], + [ + 4992, + 5017 + ], + [ + 11648, + 11670 + ], + [ + 11680, + 11686 + ], + [ + 11688, + 11694 + ], + [ + 11696, + 11702 + ], + [ + 11704, + 11710 + ], + [ + 11712, + 11718 + ], + [ + 11720, + 11726 + ], + [ + 11728, + 11734 + ], + [ + 11736, + 11742 + ], + [ + 43777, + 43782 + ], + [ + 43785, + 43790 + ], + [ + 43793, + 43798 + ], + [ + 43808, + 43814 + ], + [ + 43816, + 43822 + ], + [ + 124896, + 124902 + ], + [ + 124904, + 124907 + ], + [ + 124909, + 124910 + ], + [ + 124912, + 124926 + ] + ], + "Gara": [ + [ + 68928, + 68965 + ], + [ + 68969, + 68997 + ], + [ + 69006, + 69007 + ] + ], + "Geor": [ + [ + 4256, + 4293 + ], + [ + 4295 + ], + [ + 4301 + ], + [ + 4304, + 4346 + ], + [ + 4348, + 4351 + ], + [ + 7312, + 7354 + ], + [ + 7357, + 7359 + ], + [ + 11520, + 11557 + ], + [ + 11559 + ], + [ + 11565 + ] + ], + "Glag": [ + [ + 11264, + 11359 + ], + [ + 122880, + 122886 + ], + [ + 122888, + 122904 + ], + [ + 122907, + 122913 + ], + [ + 122915, + 122916 + ], + [ + 122918, + 122922 + ] + ], + "Gong": [ + [ + 73056, + 73061 + ], + [ + 73063, + 73064 + ], + [ + 73066, + 73102 + ], + [ + 73104, + 73105 + ], + [ + 73107, + 73112 + ], + [ + 73120, + 73129 + ] + ], + "Gonm": [ + [ + 72960, + 72966 + ], + [ + 72968, + 72969 + ], + [ + 72971, + 73014 + ], + [ + 73018 + ], + [ + 73020, + 73021 + ], + [ + 73023, + 73031 + ], + [ + 73040, + 73049 + ] + ], + "Goth": [ + [ + 66352, + 66378 + ] + ], + "Gran": [ + [ + 70400, + 70403 + ], + [ + 70405, + 70412 + ], + [ + 70415, + 70416 + ], + [ + 70419, + 70440 + ], + [ + 70442, + 70448 + ], + [ + 70450, + 70451 + ], + [ + 70453, + 70457 + ], + [ + 70460, + 70468 + ], + [ + 70471, + 70472 + ], + [ + 70475, + 70477 + ], + [ + 70480 + ], + [ + 70487 + ], + [ + 70493, + 70499 + ], + [ + 70502, + 70508 + ], + [ + 70512, + 70516 + ] + ], + "Grek": [ + [ + 880, + 883 + ], + [ + 885, + 887 + ], + [ + 890, + 893 + ], + [ + 895 + ], + [ + 900 + ], + [ + 902 + ], + [ + 904, + 906 + ], + [ + 908 + ], + [ + 910, + 929 + ], + [ + 931, + 993 + ], + [ + 1008, + 1023 + ], + [ + 7462, + 7466 + ], + [ + 7517, + 7521 + ], + [ + 7526, + 7530 + ], + [ + 7615 + ], + [ + 7936, + 7957 + ], + [ + 7960, + 7965 + ], + [ + 7968, + 8005 + ], + [ + 8008, + 8013 + ], + [ + 8016, + 8023 + ], + [ + 8025 + ], + [ + 8027 + ], + [ + 8029 + ], + [ + 8031, + 8061 + ], + [ + 8064, + 8116 + ], + [ + 8118, + 8132 + ], + [ + 8134, + 8147 + ], + [ + 8150, + 8155 + ], + [ + 8157, + 8175 + ], + [ + 8178, + 8180 + ], + [ + 8182, + 8190 + ], + [ + 8486 + ], + [ + 43877 + ], + [ + 65856, + 65934 + ], + [ + 65952 + ], + [ + 119296, + 119365 + ] + ], + "Gujr": [ + [ + 2689, + 2691 + ], + [ + 2693, + 2701 + ], + [ + 2703, + 2705 + ], + [ + 2707, + 2728 + ], + [ + 2730, + 2736 + ], + [ + 2738, + 2739 + ], + [ + 2741, + 2745 + ], + [ + 2748, + 2757 + ], + [ + 2759, + 2761 + ], + [ + 2763, + 2765 + ], + [ + 2768 + ], + [ + 2784, + 2787 + ], + [ + 2790, + 2801 + ], + [ + 2809, + 2815 + ] + ], + "Gukh": [ + [ + 90368, + 90425 + ] + ], + "Guru": [ + [ + 2561, + 2563 + ], + [ + 2565, + 2570 + ], + [ + 2575, + 2576 + ], + [ + 2579, + 2600 + ], + [ + 2602, + 2608 + ], + [ + 2610, + 2611 + ], + [ + 2613, + 2614 + ], + [ + 2616, + 2617 + ], + [ + 2620 + ], + [ + 2622, + 2626 + ], + [ + 2631, + 2632 + ], + [ + 2635, + 2637 + ], + [ + 2641 + ], + [ + 2649, + 2652 + ], + [ + 2654 + ], + [ + 2662, + 2678 + ] + ], + "Hang": [ + [ + 4352, + 4607 + ], + [ + 12334, + 12335 + ], + [ + 12593, + 12686 + ], + [ + 12800, + 12830 + ], + [ + 12896, + 12926 + ], + [ + 43360, + 43388 + ], + [ + 44032, + 55203 + ], + [ + 55216, + 55238 + ], + [ + 55243, + 55291 + ], + [ + 65440, + 65470 + ], + [ + 65474, + 65479 + ], + [ + 65482, + 65487 + ], + [ + 65490, + 65495 + ], + [ + 65498, + 65500 + ] + ], + "Hani": [ + [ + 11904, + 11929 + ], + [ + 11931, + 12019 + ], + [ + 12032, + 12245 + ], + [ + 12293 + ], + [ + 12295 + ], + [ + 12321, + 12329 + ], + [ + 12344, + 12347 + ], + [ + 13312, + 19903 + ], + [ + 19968, + 40959 + ], + [ + 63744, + 64109 + ], + [ + 64112, + 64217 + ], + [ + 94178, + 94179 + ], + [ + 94192, + 94193 + ], + [ + 131072, + 173791 + ], + [ + 173824, + 177977 + ], + [ + 177984, + 178205 + ], + [ + 178208, + 183969 + ], + [ + 183984, + 191456 + ], + [ + 191472, + 192093 + ], + [ + 194560, + 195101 + ], + [ + 196608, + 201546 + ], + [ + 201552, + 205743 + ] + ], + "Hano": [ + [ + 5920, + 5940 + ] + ], + "Hatr": [ + [ + 67808, + 67826 + ], + [ + 67828, + 67829 + ], + [ + 67835, + 67839 + ] + ], + "Hebr": [ + [ + 1425, + 1479 + ], + [ + 1488, + 1514 + ], + [ + 1519, + 1524 + ], + [ + 64285, + 64310 + ], + [ + 64312, + 64316 + ], + [ + 64318 + ], + [ + 64320, + 64321 + ], + [ + 64323, + 64324 + ], + [ + 64326, + 64335 + ] + ], + "Hira": [ + [ + 12353, + 12438 + ], + [ + 12445, + 12447 + ], + [ + 110593, + 110879 + ], + [ + 110898 + ], + [ + 110928, + 110930 + ], + [ + 127488 + ] + ], + "Hluw": [ + [ + 82944, + 83526 + ] + ], + "Hmng": [ + [ + 92928, + 92997 + ], + [ + 93008, + 93017 + ], + [ + 93019, + 93025 + ], + [ + 93027, + 93047 + ], + [ + 93053, + 93071 + ] + ], + "Hmnp": [ + [ + 123136, + 123180 + ], + [ + 123184, + 123197 + ], + [ + 123200, + 123209 + ], + [ + 123214, + 123215 + ] + ], + "Hung": [ + [ + 68736, + 68786 + ], + [ + 68800, + 68850 + ], + [ + 68858, + 68863 + ] + ], + "Ital": [ + [ + 66304, + 66339 + ], + [ + 66349, + 66351 + ] + ], + "Java": [ + [ + 43392, + 43469 + ], + [ + 43472, + 43481 + ], + [ + 43486, + 43487 + ] + ], + "Kali": [ + [ + 43264, + 43309 + ], + [ + 43311 + ] + ], + "Kana": [ + [ + 12449, + 12538 + ], + [ + 12541, + 12543 + ], + [ + 12784, + 12799 + ], + [ + 13008, + 13054 + ], + [ + 13056, + 13143 + ], + [ + 65382, + 65391 + ], + [ + 65393, + 65437 + ], + [ + 110576, + 110579 + ], + [ + 110581, + 110587 + ], + [ + 110589, + 110590 + ], + [ + 110592 + ], + [ + 110880, + 110882 + ], + [ + 110933 + ], + [ + 110948, + 110951 + ] + ], + "Kawi": [ + [ + 73472, + 73488 + ], + [ + 73490, + 73530 + ], + [ + 73534, + 73562 + ] + ], + "Khar": [ + [ + 68096, + 68099 + ], + [ + 68101, + 68102 + ], + [ + 68108, + 68115 + ], + [ + 68117, + 68119 + ], + [ + 68121, + 68149 + ], + [ + 68152, + 68154 + ], + [ + 68159, + 68168 + ], + [ + 68176, + 68184 + ] + ], + "Khmr": [ + [ + 6016, + 6109 + ], + [ + 6112, + 6121 + ], + [ + 6128, + 6137 + ], + [ + 6624, + 6655 + ] + ], + "Khoj": [ + [ + 70144, + 70161 + ], + [ + 70163, + 70209 + ] + ], + "Kits": [ + [ + 94180 + ], + [ + 101120, + 101589 + ], + [ + 101631 + ] + ], + "Knda": [ + [ + 3200, + 3212 + ], + [ + 3214, + 3216 + ], + [ + 3218, + 3240 + ], + [ + 3242, + 3251 + ], + [ + 3253, + 3257 + ], + [ + 3260, + 3268 + ], + [ + 3270, + 3272 + ], + [ + 3274, + 3277 + ], + [ + 3285, + 3286 + ], + [ + 3293, + 3294 + ], + [ + 3296, + 3299 + ], + [ + 3302, + 3311 + ], + [ + 3313, + 3315 + ] + ], + "Krai": [ + [ + 93504, + 93561 + ] + ], + "Kthi": [ + [ + 69760, + 69826 + ], + [ + 69837 + ] + ], + "Lana": [ + [ + 6688, + 6750 + ], + [ + 6752, + 6780 + ], + [ + 6783, + 6793 + ], + [ + 6800, + 6809 + ], + [ + 6816, + 6829 + ] + ], + "Laoo": [ + [ + 3713, + 3714 + ], + [ + 3716 + ], + [ + 3718, + 3722 + ], + [ + 3724, + 3747 + ], + [ + 3749 + ], + [ + 3751, + 3773 + ], + [ + 3776, + 3780 + ], + [ + 3782 + ], + [ + 3784, + 3790 + ], + [ + 3792, + 3801 + ], + [ + 3804, + 3807 + ] + ], + "Latn": [ + [ + 65, + 90 + ], + [ + 97, + 122 + ], + [ + 170 + ], + [ + 186 + ], + [ + 192, + 214 + ], + [ + 216, + 246 + ], + [ + 248, + 696 + ], + [ + 736, + 740 + ], + [ + 7424, + 7461 + ], + [ + 7468, + 7516 + ], + [ + 7522, + 7525 + ], + [ + 7531, + 7543 + ], + [ + 7545, + 7614 + ], + [ + 7680, + 7935 + ], + [ + 8305 + ], + [ + 8319 + ], + [ + 8336, + 8348 + ], + [ + 8490, + 8491 + ], + [ + 8498 + ], + [ + 8526 + ], + [ + 8544, + 8584 + ], + [ + 11360, + 11391 + ], + [ + 42786, + 42887 + ], + [ + 42891, + 42957 + ], + [ + 42960, + 42961 + ], + [ + 42963 + ], + [ + 42965, + 42972 + ], + [ + 42994, + 43007 + ], + [ + 43824, + 43866 + ], + [ + 43868, + 43876 + ], + [ + 43878, + 43881 + ], + [ + 64256, + 64262 + ], + [ + 65313, + 65338 + ], + [ + 65345, + 65370 + ], + [ + 67456, + 67461 + ], + [ + 67463, + 67504 + ], + [ + 67506, + 67514 + ], + [ + 122624, + 122654 + ], + [ + 122661, + 122666 + ] + ], + "Lepc": [ + [ + 7168, + 7223 + ], + [ + 7227, + 7241 + ], + [ + 7245, + 7247 + ] + ], + "Limb": [ + [ + 6400, + 6430 + ], + [ + 6432, + 6443 + ], + [ + 6448, + 6459 + ], + [ + 6464 + ], + [ + 6468, + 6479 + ] + ], + "Lina": [ + [ + 67072, + 67382 + ], + [ + 67392, + 67413 + ], + [ + 67424, + 67431 + ] + ], + "Linb": [ + [ + 65536, + 65547 + ], + [ + 65549, + 65574 + ], + [ + 65576, + 65594 + ], + [ + 65596, + 65597 + ], + [ + 65599, + 65613 + ], + [ + 65616, + 65629 + ], + [ + 65664, + 65786 + ] + ], + "Lisu": [ + [ + 42192, + 42239 + ], + [ + 73648 + ] + ], + "Lyci": [ + [ + 66176, + 66204 + ] + ], + "Lydi": [ + [ + 67872, + 67897 + ], + [ + 67903 + ] + ], + "Mahj": [ + [ + 69968, + 70006 + ] + ], + "Maka": [ + [ + 73440, + 73464 + ] + ], + "Mand": [ + [ + 2112, + 2139 + ], + [ + 2142 + ] + ], + "Mani": [ + [ + 68288, + 68326 + ], + [ + 68331, + 68342 + ] + ], + "Marc": [ + [ + 72816, + 72847 + ], + [ + 72850, + 72871 + ], + [ + 72873, + 72886 + ] + ], + "Medf": [ + [ + 93760, + 93850 + ] + ], + "Mend": [ + [ + 124928, + 125124 + ], + [ + 125127, + 125142 + ] + ], + "Merc": [ + [ + 68000, + 68023 + ], + [ + 68028, + 68047 + ], + [ + 68050, + 68095 + ] + ], + "Mero": [ + [ + 67968, + 67999 + ] + ], + "Mlym": [ + [ + 3328, + 3340 + ], + [ + 3342, + 3344 + ], + [ + 3346, + 3396 + ], + [ + 3398, + 3400 + ], + [ + 3402, + 3407 + ], + [ + 3412, + 3427 + ], + [ + 3430, + 3455 + ] + ], + "Modi": [ + [ + 71168, + 71236 + ], + [ + 71248, + 71257 + ] + ], + "Mong": [ + [ + 6144, + 6145 + ], + [ + 6148 + ], + [ + 6150, + 6169 + ], + [ + 6176, + 6264 + ], + [ + 6272, + 6314 + ], + [ + 71264, + 71276 + ] + ], + "Mroo": [ + [ + 92736, + 92766 + ], + [ + 92768, + 92777 + ], + [ + 92782, + 92783 + ] + ], + "Mtei": [ + [ + 43744, + 43766 + ], + [ + 43968, + 44013 + ], + [ + 44016, + 44025 + ] + ], + "Mult": [ + [ + 70272, + 70278 + ], + [ + 70280 + ], + [ + 70282, + 70285 + ], + [ + 70287, + 70301 + ], + [ + 70303, + 70313 + ] + ], + "Mymr": [ + [ + 4096, + 4255 + ], + [ + 43488, + 43518 + ], + [ + 43616, + 43647 + ], + [ + 71376, + 71395 + ] + ], + "Nagm": [ + [ + 124112, + 124153 + ] + ], + "Nand": [ + [ + 72096, + 72103 + ], + [ + 72106, + 72151 + ], + [ + 72154, + 72164 + ] + ], + "Narb": [ + [ + 68224, + 68255 + ] + ], + "Nbat": [ + [ + 67712, + 67742 + ], + [ + 67751, + 67759 + ] + ], + "Newa": [ + [ + 70656, + 70747 + ], + [ + 70749, + 70753 + ] + ], + "Nkoo": [ + [ + 1984, + 2042 + ], + [ + 2045, + 2047 + ] + ], + "Nshu": [ + [ + 94177 + ], + [ + 110960, + 111355 + ] + ], + "Ogam": [ + [ + 5760, + 5788 + ] + ], + "Olck": [ + [ + 7248, + 7295 + ] + ], + "Onao": [ + [ + 124368, + 124410 + ], + [ + 124415 + ] + ], + "Orkh": [ + [ + 68608, + 68680 + ] + ], + "Orya": [ + [ + 2817, + 2819 + ], + [ + 2821, + 2828 + ], + [ + 2831, + 2832 + ], + [ + 2835, + 2856 + ], + [ + 2858, + 2864 + ], + [ + 2866, + 2867 + ], + [ + 2869, + 2873 + ], + [ + 2876, + 2884 + ], + [ + 2887, + 2888 + ], + [ + 2891, + 2893 + ], + [ + 2901, + 2903 + ], + [ + 2908, + 2909 + ], + [ + 2911, + 2915 + ], + [ + 2918, + 2935 + ] + ], + "Osge": [ + [ + 66736, + 66771 + ], + [ + 66776, + 66811 + ] + ], + "Osma": [ + [ + 66688, + 66717 + ], + [ + 66720, + 66729 + ] + ], + "Ougr": [ + [ + 69488, + 69513 + ] + ], + "Palm": [ + [ + 67680, + 67711 + ] + ], + "Pauc": [ + [ + 72384, + 72440 + ] + ], + "Perm": [ + [ + 66384, + 66426 + ] + ], + "Phag": [ + [ + 43072, + 43127 + ] + ], + "Phli": [ + [ + 68448, + 68466 + ], + [ + 68472, + 68479 + ] + ], + "Phlp": [ + [ + 68480, + 68497 + ], + [ + 68505, + 68508 + ], + [ + 68521, + 68527 + ] + ], + "Phnx": [ + [ + 67840, + 67867 + ], + [ + 67871 + ] + ], + "Plrd": [ + [ + 93952, + 94026 + ], + [ + 94031, + 94087 + ], + [ + 94095, + 94111 + ] + ], + "Prti": [ + [ + 68416, + 68437 + ], + [ + 68440, + 68447 + ] + ], + "Rjng": [ + [ + 43312, + 43347 + ], + [ + 43359 + ] + ], + "Rohg": [ + [ + 68864, + 68903 + ], + [ + 68912, + 68921 + ] + ], + "Runr": [ + [ + 5792, + 5866 + ], + [ + 5870, + 5880 + ] + ], + "Samr": [ + [ + 2048, + 2093 + ], + [ + 2096, + 2110 + ] + ], + "Sarb": [ + [ + 68192, + 68223 + ] + ], + "Saur": [ + [ + 43136, + 43205 + ], + [ + 43214, + 43225 + ] + ], + "Sgnw": [ + [ + 120832, + 121483 + ], + [ + 121499, + 121503 + ], + [ + 121505, + 121519 + ] + ], + "Shaw": [ + [ + 66640, + 66687 + ] + ], + "Shrd": [ + [ + 70016, + 70111 + ] + ], + "Sidd": [ + [ + 71040, + 71093 + ], + [ + 71096, + 71133 + ] + ], + "Sind": [ + [ + 70320, + 70378 + ], + [ + 70384, + 70393 + ] + ], + "Sinh": [ + [ + 3457, + 3459 + ], + [ + 3461, + 3478 + ], + [ + 3482, + 3505 + ], + [ + 3507, + 3515 + ], + [ + 3517 + ], + [ + 3520, + 3526 + ], + [ + 3530 + ], + [ + 3535, + 3540 + ], + [ + 3542 + ], + [ + 3544, + 3551 + ], + [ + 3558, + 3567 + ], + [ + 3570, + 3572 + ], + [ + 70113, + 70132 + ] + ], + "Sogd": [ + [ + 69424, + 69465 + ] + ], + "Sogo": [ + [ + 69376, + 69415 + ] + ], + "Sora": [ + [ + 69840, + 69864 + ], + [ + 69872, + 69881 + ] + ], + "Soyo": [ + [ + 72272, + 72354 + ] + ], + "Sund": [ + [ + 7040, + 7103 + ], + [ + 7360, + 7367 + ] + ], + "Sunu": [ + [ + 72640, + 72673 + ], + [ + 72688, + 72697 + ] + ], + "Sylo": [ + [ + 43008, + 43052 + ] + ], + "Syrc": [ + [ + 1792, + 1805 + ], + [ + 1807, + 1866 + ], + [ + 1869, + 1871 + ], + [ + 2144, + 2154 + ] + ], + "Tagb": [ + [ + 5984, + 5996 + ], + [ + 5998, + 6000 + ], + [ + 6002, + 6003 + ] + ], + "Takr": [ + [ + 71296, + 71353 + ], + [ + 71360, + 71369 + ] + ], + "Tale": [ + [ + 6480, + 6509 + ], + [ + 6512, + 6516 + ] + ], + "Talu": [ + [ + 6528, + 6571 + ], + [ + 6576, + 6601 + ], + [ + 6608, + 6618 + ], + [ + 6622, + 6623 + ] + ], + "Taml": [ + [ + 2946, + 2947 + ], + [ + 2949, + 2954 + ], + [ + 2958, + 2960 + ], + [ + 2962, + 2965 + ], + [ + 2969, + 2970 + ], + [ + 2972 + ], + [ + 2974, + 2975 + ], + [ + 2979, + 2980 + ], + [ + 2984, + 2986 + ], + [ + 2990, + 3001 + ], + [ + 3006, + 3010 + ], + [ + 3014, + 3016 + ], + [ + 3018, + 3021 + ], + [ + 3024 + ], + [ + 3031 + ], + [ + 3046, + 3066 + ], + [ + 73664, + 73713 + ], + [ + 73727 + ] + ], + "Tang": [ + [ + 94176 + ], + [ + 94208, + 100343 + ], + [ + 100352, + 101119 + ], + [ + 101632, + 101640 + ] + ], + "Tavt": [ + [ + 43648, + 43714 + ], + [ + 43739, + 43743 + ] + ], + "Telu": [ + [ + 3072, + 3084 + ], + [ + 3086, + 3088 + ], + [ + 3090, + 3112 + ], + [ + 3114, + 3129 + ], + [ + 3132, + 3140 + ], + [ + 3142, + 3144 + ], + [ + 3146, + 3149 + ], + [ + 3157, + 3158 + ], + [ + 3160, + 3162 + ], + [ + 3165 + ], + [ + 3168, + 3171 + ], + [ + 3174, + 3183 + ], + [ + 3191, + 3199 + ] + ], + "Tfng": [ + [ + 11568, + 11623 + ], + [ + 11631, + 11632 + ], + [ + 11647 + ] + ], + "Tglg": [ + [ + 5888, + 5909 + ], + [ + 5919 + ] + ], + "Thaa": [ + [ + 1920, + 1969 + ] + ], + "Thai": [ + [ + 3585, + 3642 + ], + [ + 3648, + 3675 + ] + ], + "Tibt": [ + [ + 3840, + 3911 + ], + [ + 3913, + 3948 + ], + [ + 3953, + 3991 + ], + [ + 3993, + 4028 + ], + [ + 4030, + 4044 + ], + [ + 4046, + 4052 + ], + [ + 4057, + 4058 + ] + ], + "Tirh": [ + [ + 70784, + 70855 + ], + [ + 70864, + 70873 + ] + ], + "Tnsa": [ + [ + 92784, + 92862 + ], + [ + 92864, + 92873 + ] + ], + "Todr": [ + [ + 67008, + 67059 + ] + ], + "Toto": [ + [ + 123536, + 123566 + ] + ], + "Tulu_Tigalari": [ + [ + 70528, + 70537 + ], + [ + 70539 + ], + [ + 70542 + ], + [ + 70544, + 70581 + ], + [ + 70583, + 70592 + ], + [ + 70594 + ], + [ + 70597 + ], + [ + 70599, + 70602 + ], + [ + 70604, + 70613 + ], + [ + 70615, + 70616 + ], + [ + 70625, + 70626 + ] + ], + "Ugar": [ + [ + 66432, + 66461 + ], + [ + 66463 + ] + ], + "Vaii": [ + [ + 42240, + 42539 + ] + ], + "Vith": [ + [ + 66928, + 66938 + ], + [ + 66940, + 66954 + ], + [ + 66956, + 66962 + ], + [ + 66964, + 66965 + ], + [ + 66967, + 66977 + ], + [ + 66979, + 66993 + ], + [ + 66995, + 67001 + ], + [ + 67003, + 67004 + ] + ], + "Wara": [ + [ + 71840, + 71922 + ], + [ + 71935 + ] + ], + "Wcho": [ + [ + 123584, + 123641 + ], + [ + 123647 + ] + ], + "Xpeo": [ + [ + 66464, + 66499 + ], + [ + 66504, + 66517 + ] + ], + "Xsux": [ + [ + 73728, + 74649 + ], + [ + 74752, + 74862 + ], + [ + 74864, + 74868 + ], + [ + 74880, + 75075 + ] + ], + "Yezi": [ + [ + 69248, + 69289 + ], + [ + 69291, + 69293 + ], + [ + 69296, + 69297 + ] + ], + "Yiii": [ + [ + 40960, + 42124 + ], + [ + 42128, + 42182 + ] + ], + "Zanb": [ + [ + 72192, + 72263 + ] + ], + "Zinh": [ + [ + 768, + 879 + ], + [ + 1157, + 1158 + ], + [ + 1611, + 1621 + ], + [ + 1648 + ], + [ + 2385, + 2388 + ], + [ + 6832, + 6862 + ], + [ + 7376, + 7378 + ], + [ + 7380, + 7392 + ], + [ + 7394, + 7400 + ], + [ + 7405 + ], + [ + 7412 + ], + [ + 7416, + 7417 + ], + [ + 7616, + 7679 + ], + [ + 8204, + 8205 + ], + [ + 8400, + 8432 + ], + [ + 12330, + 12333 + ], + [ + 12441, + 12442 + ], + [ + 65024, + 65039 + ], + [ + 65056, + 65069 + ], + [ + 66045 + ], + [ + 66272 + ], + [ + 70459 + ], + [ + 118528, + 118573 + ], + [ + 118576, + 118598 + ], + [ + 119143, + 119145 + ], + [ + 119163, + 119170 + ], + [ + 119173, + 119179 + ], + [ + 119210, + 119213 + ], + [ + 917760, + 917999 + ] + ], + "Zyyy": [ + [ + 0, + 64 + ], + [ + 91, + 96 + ], + [ + 123, + 169 + ], + [ + 171, + 185 + ], + [ + 187, + 191 + ], + [ + 215 + ], + [ + 247 + ], + [ + 697, + 735 + ], + [ + 741, + 745 + ], + [ + 748, + 767 + ], + [ + 884 + ], + [ + 894 + ], + [ + 901 + ], + [ + 903 + ], + [ + 1541 + ], + [ + 1548 + ], + [ + 1563 + ], + [ + 1567 + ], + [ + 1600 + ], + [ + 1757 + ], + [ + 2274 + ], + [ + 2404, + 2405 + ], + [ + 3647 + ], + [ + 4053, + 4056 + ], + [ + 4347 + ], + [ + 5867, + 5869 + ], + [ + 5941, + 5942 + ], + [ + 6146, + 6147 + ], + [ + 6149 + ], + [ + 7379 + ], + [ + 7393 + ], + [ + 7401, + 7404 + ], + [ + 7406, + 7411 + ], + [ + 7413, + 7415 + ], + [ + 7418 + ], + [ + 8192, + 8203 + ], + [ + 8206, + 8292 + ], + [ + 8294, + 8304 + ], + [ + 8308, + 8318 + ], + [ + 8320, + 8334 + ], + [ + 8352, + 8384 + ], + [ + 8448, + 8485 + ], + [ + 8487, + 8489 + ], + [ + 8492, + 8497 + ], + [ + 8499, + 8525 + ], + [ + 8527, + 8543 + ], + [ + 8585, + 8587 + ], + [ + 8592, + 9257 + ], + [ + 9280, + 9290 + ], + [ + 9312, + 10239 + ], + [ + 10496, + 11123 + ], + [ + 11126, + 11157 + ], + [ + 11159, + 11263 + ], + [ + 11776, + 11869 + ], + [ + 12272, + 12292 + ], + [ + 12294 + ], + [ + 12296, + 12320 + ], + [ + 12336, + 12343 + ], + [ + 12348, + 12351 + ], + [ + 12443, + 12444 + ], + [ + 12448 + ], + [ + 12539, + 12540 + ], + [ + 12688, + 12703 + ], + [ + 12736, + 12773 + ], + [ + 12783 + ], + [ + 12832, + 12895 + ], + [ + 12927, + 13007 + ], + [ + 13055 + ], + [ + 13144, + 13311 + ], + [ + 19904, + 19967 + ], + [ + 42752, + 42785 + ], + [ + 42888, + 42890 + ], + [ + 43056, + 43065 + ], + [ + 43310 + ], + [ + 43471 + ], + [ + 43867 + ], + [ + 43882, + 43883 + ], + [ + 64830, + 64831 + ], + [ + 65040, + 65049 + ], + [ + 65072, + 65106 + ], + [ + 65108, + 65126 + ], + [ + 65128, + 65131 + ], + [ + 65279 + ], + [ + 65281, + 65312 + ], + [ + 65339, + 65344 + ], + [ + 65371, + 65381 + ], + [ + 65392 + ], + [ + 65438, + 65439 + ], + [ + 65504, + 65510 + ], + [ + 65512, + 65518 + ], + [ + 65529, + 65533 + ], + [ + 65792, + 65794 + ], + [ + 65799, + 65843 + ], + [ + 65847, + 65855 + ], + [ + 65936, + 65948 + ], + [ + 66000, + 66044 + ], + [ + 66273, + 66299 + ], + [ + 113824, + 113827 + ], + [ + 117760, + 118009 + ], + [ + 118016, + 118451 + ], + [ + 118608, + 118723 + ], + [ + 118784, + 119029 + ], + [ + 119040, + 119078 + ], + [ + 119081, + 119142 + ], + [ + 119146, + 119162 + ], + [ + 119171, + 119172 + ], + [ + 119180, + 119209 + ], + [ + 119214, + 119274 + ], + [ + 119488, + 119507 + ], + [ + 119520, + 119539 + ], + [ + 119552, + 119638 + ], + [ + 119648, + 119672 + ], + [ + 119808, + 119892 + ], + [ + 119894, + 119964 + ], + [ + 119966, + 119967 + ], + [ + 119970 + ], + [ + 119973, + 119974 + ], + [ + 119977, + 119980 + ], + [ + 119982, + 119993 + ], + [ + 119995 + ], + [ + 119997, + 120003 + ], + [ + 120005, + 120069 + ], + [ + 120071, + 120074 + ], + [ + 120077, + 120084 + ], + [ + 120086, + 120092 + ], + [ + 120094, + 120121 + ], + [ + 120123, + 120126 + ], + [ + 120128, + 120132 + ], + [ + 120134 + ], + [ + 120138, + 120144 + ], + [ + 120146, + 120485 + ], + [ + 120488, + 120779 + ], + [ + 120782, + 120831 + ], + [ + 126065, + 126132 + ], + [ + 126209, + 126269 + ], + [ + 126976, + 127019 + ], + [ + 127024, + 127123 + ], + [ + 127136, + 127150 + ], + [ + 127153, + 127167 + ], + [ + 127169, + 127183 + ], + [ + 127185, + 127221 + ], + [ + 127232, + 127405 + ], + [ + 127462, + 127487 + ], + [ + 127489, + 127490 + ], + [ + 127504, + 127547 + ], + [ + 127552, + 127560 + ], + [ + 127568, + 127569 + ], + [ + 127584, + 127589 + ], + [ + 127744, + 128727 + ], + [ + 128732, + 128748 + ], + [ + 128752, + 128764 + ], + [ + 128768, + 128886 + ], + [ + 128891, + 128985 + ], + [ + 128992, + 129003 + ], + [ + 129008 + ], + [ + 129024, + 129035 + ], + [ + 129040, + 129095 + ], + [ + 129104, + 129113 + ], + [ + 129120, + 129159 + ], + [ + 129168, + 129197 + ], + [ + 129200, + 129211 + ], + [ + 129216, + 129217 + ], + [ + 129280, + 129619 + ], + [ + 129632, + 129645 + ], + [ + 129648, + 129660 + ], + [ + 129664, + 129673 + ], + [ + 129679, + 129734 + ], + [ + 129742, + 129756 + ], + [ + 129759, + 129769 + ], + [ + 129776, + 129784 + ], + [ + 129792, + 129938 + ], + [ + 129940, + 130041 + ], + [ + 917505 + ], + [ + 917536, + 917631 + ] + ] +}; +ilib.data.astro = { + "_EquinoxpTerms": [ + 485, 324.96, 1934.136, 203, 337.23, 32964.467, + 199, 342.08, 20.186, 182, 27.85, 445267.112, 156, 73.14, 45036.886, + 136, 171.52, 22518.443, 77, 222.54, 65928.934, 74, 296.72, 3034.906, + 70, 243.58, 9037.513, 58, 119.81, 33718.147, 52, 297.17, 150.678, 50, + 21.02, 2281.226, 45, 247.54, 29929.562, 44, 325.15, 31555.956, 29, + 60.93, 4443.417, 18, 155.12, 67555.328, 17, 288.79, 4562.452, 16, + 198.04, 62894.029, 14, 199.76, 31436.921, 12, 95.39, 14577.848, 12, + 287.11, 31931.756, 12, 320.81, 34777.259, 9, 227.73, 1222.114, 8, + 15.45, 16859.074 + ], + + "_JDE0tab1000": [ + [ 1721139.29189, 365242.13740, 0.06134, 0.00111, -0.00071 ], + [ 1721233.25401, 365241.72562, -0.05323, 0.00907, 0.00025 ], + [ 1721325.70455, 365242.49558, -0.11677, -0.00297, 0.00074 ], + [ 1721414.39987, 365242.88257, -0.00769, -0.00933, -0.00006 ] + ], + + "_JDE0tab2000": [ + [ 2451623.80984, 365242.37404, 0.05169, -0.00411, -0.00057 ], + [ 2451716.56767, 365241.62603, 0.00325, 0.00888, -0.00030 ], + [ 2451810.21715, 365242.01767, -0.11575, 0.00337, 0.00078 ], + [ 2451900.05952, 365242.74049, -0.06223, -0.00823, 0.00032 ] + ], + + "_deltaTtab": [ + 124, + 119, + 115, + 110, + 106, + 102, + 98, + 95, + 91, + 88, + 85, + 82, + 79, + 77, + 74, + 72, + 70, + 67, + 65, + 63, + 62, + 60, + 58, + 57, + 55, + 54, + 53, + 51, + 50, + 49, + 48, + 47, + 46, + 45, + 44, + 43, + 42, + 41, + 40, + 38, + 37, + 36, + 35, + 34, + 33, + 32, + 31, + 30, + 28, + 27, + 26, + 25, + 24, + 23, + 22, + 21, + 20, + 19, + 18, + 17, + 16, + 15, + 14, + 14, + 13, + 12, + 12, + 11, + 11, + 10, + 10, + 10, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 16, + 16, + 16, + 16, + 15, + 15, + 14, + 14, + 13.7, + 13.4, + 13.1, + 12.9, + 12.7, + 12.6, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.4, + 12.3, + 12.2, + 12.0, + 11.7, + 11.4, + 11.1, + 10.6, + 10.2, + 9.6, + 9.1, + 8.6, + 8.0, + 7.5, + 7.0, + 6.6, + 6.3, + 6.0, + 5.8, + 5.7, + 5.6, + 5.6, + 5.6, + 5.7, + 5.8, + 5.9, + 6.1, + 6.2, + 6.3, + 6.5, + 6.6, + 6.8, + 6.9, + 7.1, + 7.2, + 7.3, + 7.4, + 7.5, + 7.6, + 7.7, + 7.7, + 7.8, + 7.8, + 7.88, + 7.82, + 7.54, + 6.97, + 6.40, + 6.02, + 5.41, + 4.10, + 2.92, + 1.82, + 1.61, + 0.10, + -1.02, + -1.28, + -2.69, + -3.24, + -3.64, + -4.54, + -4.71, + -5.11, + -5.40, + -5.42, + -5.20, + -5.46, + -5.46, + -5.79, + -5.63, + -5.64, + -5.80, + -5.66, + -5.87, + -6.01, + -6.19, + -6.64, + -6.44, + -6.47, + -6.09, + -5.76, + -4.66, + -3.74, + -2.72, + -1.54, + -0.02, + 1.24, + 2.64, + 3.86, + 5.37, + 6.14, + 7.75, + 9.13, + 10.46, + 11.53, + 13.36, + 14.65, + 16.01, + 17.20, + 18.24, + 19.06, + 20.25, + 20.95, + 21.16, + 22.25, + 22.41, + 23.03, + 23.49, + 23.62, + 23.86, + 24.49, + 24.34, + 24.08, + 24.02, + 24.00, + 23.87, + 23.95, + 23.86, + 23.93, + 23.73, + 23.92, + 23.96, + 24.02, + 24.33, + 24.83, + 25.30, + 25.70, + 26.24, + 26.77, + 27.28, + 27.78, + 28.25, + 28.71, + 29.15, + 29.57, + 29.97, + 30.36, + 30.72, + 31.07, + 31.35, + 31.68, + 32.18, + 32.68, + 33.15, + 33.59, + 34.00, + 34.47, + 35.03, + 35.73, + 36.54, + 37.43, + 38.29, + 39.20, + 40.18, + 41.17, + 42.23, + 43.37, + 44.49, + 45.48, + 46.46, + 47.52, + 48.53, + 49.59, + 50.54, + 51.38, + 52.17, + 52.96, + 53.79, + 54.34, + 54.87, + 55.32, + 55.82, + 56.30, + 56.86, + 57.57, + 58.31, + 59.12, + 59.99, + 60.78, + 61.63, + 62.30, + 62.97, + 63.47, + 63.83, + 64.09, + 64.30, + 64.47, + 64.57, + 64.69, + 64.85, + 65.15, + 65.46, + 65.78, + 66.07, + 66.3246, + 66.6030, + 66.9069, + 67.2810, + 67.61 + ], + + "_oterms": [ + -4680.93, -1.55, 1999.25, -51.38, -249.67, + -39.05, 7.12, 27.87, 5.79, 2.45 + ], + + + "_nutArgMult": [ + 0, 0, 0, 0, 1, + -2, 0, 0, 2, 2, + 0, 0, 0, 2, 2, + 0, 0, 0, 0, 2, + 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, + -2, 1, 0, 2, 2, + 0, 0, 0, 2, 1, + 0, 0, 1, 2, 2, + -2, -1, 0, 2, 2, + -2, 0, 1, 0, 0, + -2, 0, 0, 2, 1, + 0, 0, -1, 2, 2, + 2, 0, 0, 0, 0, + 0, 0, 1, 0, 1, + 2, 0, -1, 2, 2, + 0, 0, -1, 0, 1, + 0, 0, 1, 2, 1, + -2, 0, 2, 0, 0, + 0, 0, -2, 2, 1, + 2, 0, 0, 2, 2, + 0, 0, 2, 2, 2, + 0, 0, 2, 0, 0, + -2, 0, 1, 2, 2, + 0, 0, 0, 2, 0, + -2, 0, 0, 2, 0, + 0, 0, -1, 2, 1, + 0, 2, 0, 0, 0, + 2, 0, -1, 0, 1, + -2, 2, 0, 2, 2, + 0, 1, 0, 0, 1, + -2, 0, 1, 0, 1, + 0, -1, 0, 0, 1, + 0, 0, 2, -2, 0, + 2, 0, -1, 2, 1, + 2, 0, 1, 2, 2, + 0, 1, 0, 2, 2, + -2, 1, 1, 0, 0, + 0, -1, 0, 2, 2, + 2, 0, 0, 2, 1, + 2, 0, 1, 0, 0, + -2, 0, 2, 2, 2, + -2, 0, 1, 2, 1, + 2, 0, -2, 0, 1, + 2, 0, 0, 0, 1, + 0, -1, 1, 0, 0, + -2, -1, 0, 2, 1, + -2, 0, 0, 0, 1, + 0, 0, 2, 2, 1, + -2, 0, 2, 0, 1, + -2, 1, 0, 2, 1, + 0, 0, 1, -2, 0, + -1, 0, 1, 0, 0, + -2, 1, 0, 0, 0, + 1, 0, 0, 0, 0, + 0, 0, 1, 2, 0, + -1, -1, 1, 0, 0, + 0, 1, 1, 0, 0, + 0, -1, 1, 2, 2, + 2, -1, -1, 2, 2, + 0, 0, -2, 2, 2, + 0, 0, 3, 2, 2, + 2, -1, 0, 2, 2 + ], + + "_nutArgCoeff": [ + -171996, -1742, 92095, 89, + -13187, -16, 5736, -31, + -2274, -2, 977, -5, + 2062, 2, -895, 5, + 1426, -34, 54, -1, + 712, 1, -7, 0, + -517, 12, 224, -6, + -386, -4, 200, 0, + -301, 0, 129, -1, + 217, -5, -95, 3, + -158, 0, 0, 0, + 129, 1, -70, 0, + 123, 0, -53, 0, + 63, 0, 0, 0, + 63, 1, -33, 0, + -59, 0, 26, 0, + -58, -1, 32, 0, + -51, 0, 27, 0, + 48, 0, 0, 0, + 46, 0, -24, 0, + -38, 0, 16, 0, + -31, 0, 13, 0, + 29, 0, 0, 0, + 29, 0, -12, 0, + 26, 0, 0, 0, + -22, 0, 0, 0, + 21, 0, -10, 0, + 17, -1, 0, 0, + 16, 0, -8, 0, + -16, 1, 7, 0, + -15, 0, 9, 0, + -13, 0, 7, 0, + -12, 0, 6, 0, + 11, 0, 0, 0, + -10, 0, 5, 0, + -8, 0, 3, 0, + 7, 0, -3, 0, + -7, 0, 0, 0, + -7, 0, 3, 0, + -7, 0, 3, 0, + 6, 0, 0, 0, + 6, 0, -3, 0, + 6, 0, -3, 0, + -6, 0, 3, 0, + -6, 0, 3, 0, + 5, 0, 0, 0, + -5, 0, 3, 0, + -5, 0, 3, 0, + -5, 0, 3, 0, + 4, 0, 0, 0, + 4, 0, 0, 0, + 4, 0, 0, 0, + -4, 0, 0, 0, + -4, 0, 0, 0, + -4, 0, 0, 0, + 3, 0, 0, 0, + -3, 0, 0, 0, + -3, 0, 0, 0, + -3, 0, 0, 0, + -3, 0, 0, 0, + -3, 0, 0, 0, + -3, 0, 0, 0, + -3, 0, 0, 0 + ], + + "_nutCoeffA": [124.90, -1934.134, 0.002063], + "_nutCoeffB": [201.11, 72001.5377, 0.00057], + + "_coeff19th": [ + -0.00002, + 0.000297, + 0.025184, + -0.181133, + 0.553040, + -0.861938, + 0.677066, + -0.212591 + ], + + "_coeff18th": [ + -0.000009, + 0.003844, + 0.083563, + 0.865736, + 4.867575, + 15.845535, + 31.332267000000002, + 38.291998999999997, + 28.316289000000001, + 11.636203999999999, + 2.043794 + ], + + "_solarLongCoeff": [ + 403406, 195207, 119433, 112392, 3891, 2819, 1721, + 660, 350, 334, 314, 268, 242, 234, 158, 132, 129, 114, + 99, 93, 86, 78, 72, 68, 64, 46, 38, 37, 32, 29, 28, 27, 27, + 25, 24, 21, 21, 20, 18, 17, 14, 13, 13, 13, 12, 10, 10, 10, + 10 + ], + + "_solarLongMultipliers": [ + 0.9287892, 35999.137695799996, 35999.4089666, + 35998.728738500002, 71998.202609999993, 71998.440300000002, + 36000.357259999997, 71997.481199999995, 32964.467799999999, + -19.440999999999999, 445267.11170000001, 45036.883999999998, 3.1008, + 22518.4434, -19.9739, 65928.934500000003, + 9038.0293000000001, 3034.7683999999999, 33718.148000000001, 3034.4479999999999, + -2280.7730000000001, 29929.991999999998, 31556.492999999999, 149.58799999999999, + 9037.75, 107997.405, -4444.1760000000004, 151.77099999999999, + 67555.316000000006, 31556.080000000002, -4561.54, + 107996.70600000001, 1221.655, 62894.167000000001, + 31437.368999999999, 14578.298000000001, -31931.757000000001, + 34777.243000000002, 1221.999, 62894.510999999999, + -4442.0389999999998, 107997.909, 119.066, 16859.071, + -4.578, 26895.292000000001, -39.127000000000002, 12297.536, + 90073.778000000006 + ], + + "_solarLongAddends": [ + 270.54861, 340.19128000000001, 63.91854, 331.26220000000001, + 317.84300000000002, 86.631, 240.05199999999999, 310.25999999999999, 247.22999999999999, + 260.87, 297.81999999999999, 343.13999999999999, 166.78999999999999, 81.530000000000001, + 3.5, 132.75, 182.94999999999999, 162.03, 29.800000000000001, + 266.39999999999998, 249.19999999999999, 157.59999999999999, 257.80000000000001, 185.09999999999999, + 69.900000000000006, 8.0, 197.09999999999999, 250.40000000000001, 65.299999999999997, 162.69999999999999, + 341.5, 291.60000000000002, 98.5, 146.69999999999999, 110.0, 5.2, 342.60000000000002, + 230.90000000000001, 256.10000000000002, 45.299999999999997, 242.90000000000001, 115.2, 151.80000000000001, + 285.30000000000001, 53.299999999999997, 126.59999999999999, 205.69999999999999, 85.900000000000006, + 146.09999999999999 + ], + + "_meanMoonCoeff": [ + 218.3164591, + 481267.88134235999, + -0.0013268, + 1.855835023689734e-06, + -1.533883486210388e-08 + ], + "_elongationCoeff": [ + 297.85020420000001, + 445267.11151680001, + -0.00163, + 1.831944719236152e-06, + -8.844469995135542e-09 + ], + "_solarAnomalyCoeff": [ + 357.52910919999999, + 35999.050290899999, + -0.0001536, + 4.083299305839118e-08 + ], + "_lunarAnomalyCoeff": [ + 134.96341140000001, + 477198.8676313, + 0.008997, + 1.434740814071938e-05, + -6.797172376291463e-08 + ], + "_moonFromNodeCoeff": [ + 93.272099299999994, + 483202.01752729999, + -0.0034029, + -2.836074872376631e-07, + 1.158332464583985e-09 + ], + "_eCoeff": [ + 1.0, + -0.002516, + -7.4e-06 + ], + "_lunarElongationLongCoeff": [ + 0, + 2, + 2, + 0, + 0, + 0, + 2, + 2, + 2, + 2, + 0, + 1, + 0, + 2, + 0, + 0, + 4, + 0, + 4, + 2, + 2, + 1, + 1, + 2, + 2, + 4, + 2, + 0, + 2, + 2, + 1, + 2, + 0, + 0, + 2, + 2, + 2, + 4, + 0, + 3, + 2, + 4, + 0, + 2, + 2, + 2, + 4, + 0, + 4, + 1, + 2, + 0, + 1, + 3, + 4, + 2, + 0, + 1, + 2, + 2 + ], + + "_solarAnomalyLongCoeff": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + -1, + 0, + -1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + -1, + 0, + 0, + 0, + 1, + 0, + -1, + 0, + -2, + 1, + 2, + -2, + 0, + 0, + -1, + 0, + 0, + 1, + -1, + 2, + 2, + 1, + -1, + 0, + 0, + -1, + 0, + 1, + 0, + 1, + 0, + 0, + -1, + 2, + 1, + 0, + 0 + ], + + "_lunarAnomalyLongCoeff": [ + 1, + -1, + 0, + 2, + 0, + 0, + -2, + -1, + 1, + 0, + -1, + 0, + 1, + 0, + 1, + 1, + -1, + 3, + -2, + -1, + 0, + -1, + 0, + 1, + 2, + 0, + -3, + -2, + -1, + -2, + 1, + 0, + 2, + 0, + -1, + 1, + 0, + -1, + 2, + -1, + 1, + -2, + -1, + -1, + -2, + 0, + 1, + 4, + 0, + -2, + 0, + 2, + 1, + -2, + -3, + 2, + 1, + -1, + 3, + -1 + ], + + "_moonFromNodeLongCoeff": [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -2, + 2, + -2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + -2, + 2, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + -2, + 0, + 0, + 0, + 0, + -2, + -2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -2 + ], + + "_sineCoeff": [ + 6288774, + 1274027, + 658314, + 213618, + -185116, + -114332, + 58793, + 57066, + 53322, + 45758, + -40923, + -34720, + -30383, + 15327, + -12528, + 10980, + 10675, + 10034, + 8548, + -7888, + -6766, + -5163, + 4987, + 4036, + 3994, + 3861, + 3665, + -2689, + -2602, + 2390, + -2348, + 2236, + -2120, + -2069, + 2048, + -1773, + -1595, + 1215, + -1110, + -892, + -810, + 759, + -713, + -700, + 691, + 596, + 549, + 537, + 520, + -487, + -399, + -381, + 351, + -340, + 330, + 327, + -323, + 299, + 294, + 0 + ], + + "_nmApproxCoeff": [ + 730125.59765000001, + 36524.908822833051, + 0.0001337, + -1.5e-07, + 7.3e-10 + ], + "_nmCapECoeff": [ + 1.0, + -0.002516, + -7.4e-06 + ], + "_nmSolarAnomalyCoeff": [ + 2.5534, + 35998.960422026496, + -2.18e-05, + -1.1e-07 + ], + "_nmLunarAnomalyCoeff": [ + 201.5643, + 477197.67640106793, + 0.0107438, + 1.239e-05, + -5.8e-08 + ], + "_nmMoonArgumentCoeff": [ + 160.71080000000001, + 483200.81131396897, + -0.0016341, + -2.27e-06, + 1.1e-08 + ], + "_nmCapOmegaCoeff": [ + 124.77460000000001, + -1934.1313612299998, + 0.0020691, + 2.15e-06 + ], + "_nmEFactor": [ + 0, + 1, + 0, + 0, + 1, + 1, + 2, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "_nmSolarCoeff": [ + 0, + 1, + 0, + 0, + -1, + 1, + 2, + 0, + 0, + 1, + 0, + 1, + 1, + -1, + 2, + 0, + 3, + 1, + 0, + 1, + -1, + -1, + 1, + 0 + ], + "_nmLunarCoeff": [ + 1, + 0, + 2, + 0, + 1, + 1, + 0, + 1, + 1, + 2, + 3, + 0, + 0, + 2, + 1, + 2, + 0, + 1, + 2, + 1, + 1, + 1, + 3, + 4 + ], + "_nmMoonCoeff": [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + -2, + 2, + 0, + 0, + 2, + -2, + 0, + 0, + -2, + 0, + -2, + 2, + 2, + 2, + -2, + 0, + 0 + ], + "_nmSineCoeff": [ + -0.4072, + 0.17241, + 0.01608, + 0.01039, + 0.00739, + -0.00514, + 0.00208, + -0.00111, + -0.00057, + 0.00056, + -0.00042, + 0.00042, + 0.00038, + -0.00024, + -6.999999999999999e-05, + 4e-05, + 4e-05, + 3e-05, + 3e-05, + -3e-05, + 3e-05, + -2e-05, + -2e-05, + 2e-05 + ], + "_nmAddConst": [ + 251.88, + 251.83000000000001, + 349.42000000000002, + 84.659999999999997, + 141.74000000000001, + 207.13999999999999, + 154.84, + 34.520000000000003, + 207.19, + 291.33999999999997, + 161.72, + 239.56, + 331.55000000000001 + ], + "_nmAddCoeff": [ + 0.016321, + 26.641886, + 36.412478, + 18.206239, + 53.303770999999998, + 2.453732, + 7.30686, + 27.261239, + 0.121824, + 1.844379, + 24.198153999999999, + 25.513099, + 3.592518 + ], + "_nmAddFactor": [ + 0.000165, + 0.000164, + 0.000126, + 0.00011, + 6.2e-05, + 6e-05, + 5.6e-05, + 4.7e-05, + 4.2e-05, + 4e-05, + 3.7e-05, + 3.5e-05, + 2.3e-05 + ], + "_nmExtra": [ + 299.76999999999998, + 132.84758479999999, + -0.009173000000000001 + ] +} +; +ilib.data.dateformats = { + "coptic": "gregorian", + "ethiopic": { + "date": { + "d": "d", + "dm": { + "f": "MMMM d", + "l": "MMMM d", + "m": "MMM d", + "s": "M/d" + }, + "dmw": { + "f": "EEEE, MMMM d", + "l": "EEE, MMMM d", + "m": "EE, MMM d", + "s": "E, M/d" + }, + "dmwy": { + "f": "EEEE, MMMM d, yyyy", + "l": "EEE, MMMM d, yyyy", + "m": "EE, MMM d, yyyy", + "s": "E, M/d/yyyy" + }, + "dmy": { + "f": "MMMM d, yyyy", + "l": "MMMM d, yyyy", + "m": "MMM d, yyyy", + "s": "M/d/yyyy" + }, + "dw": { + "f": "EEEE d", + "l": "EEE d", + "m": "EE d", + "s": "E d" + }, + "m": { + "f": "MMMM", + "l": "MMM", + "m": "MMM", + "s": "MM" + }, + "my": { + "f": "MMMM yyyy", + "l": "MMMM yyyy", + "m": "MMM yyyy", + "s": "M/yyyy" + }, + "n": { + "f": "MMMM", + "l": "MMM", + "m": "NN", + "s": "N" + }, + "w": { + "f": "EEEE", + "l": "EEE", + "m": "EE", + "s": "E" + }, + "y": { + "f": "yyyy", + "l": "yyyy", + "m": "yyyy", + "s": "yyyy" + } + }, + "order": { + "f": "{date} 'at' {time}", + "l": "{date} 'at' {time}", + "m": "{date}, {time}", + "s": "{date}, {time}" + }, + "range": { + "c00": { + "f": "{sm} {sd}, {sy} at {st} – {et}", + "l": "{sm} {sd}, {sy} at {st} – {et}", + "m": "{sm} {sd}, {sy}, {st} – {et}", + "s": "{sm}/{sd}/{sy}, {st} – {et}" + }, + "c01": { + "f": "{sm} {sd}, {sy} at {st} – {em} {ed}, {ey} at {et}", + "l": "{sm} {sd}, {sy} at {st} – {em} {ed}, {ey} at {et}", + "m": "{sm} {sd}, {sy}, {st} – {em} {ed}, {ey}, {et}", + "s": "{sm}/{sd}/{sy}, {st} – {em}/{ed}/{ey}, {et}" + }, + "c02": { + "f": "{sm} {sd}, {sy} at {st} – {em} {ed}, {ey} at {et}", + "l": "{sm} {sd}, {sy} at {st} – {em} {ed}, {ey} at {et}", + "m": "{sm} {sd}, {sy}, {st} – {em} {ed}, {ey}, {et}", + "s": "{sm}/{sd}/{sy}, {st} – {em}/{ed}/{ey}, {et}" + }, + "c03": { + "f": "{sm} {sd}, {sy} at {st} – {em} {ed}, {ey} at {et}", + "l": "{sm} {sd}, {sy} at {st} – {em} {ed}, {ey} at {et}", + "m": "{sm} {sd}, {sy}, {st} – {em} {ed}, {ey}, {et}", + "s": "{sm}/{sd}/{sy}, {st} – {em}/{ed}/{ey}, {et}" + }, + "c10": { + "f": "{sm} {sd} – {ed}, {ey}", + "l": "{sm} {sd} – {ed}, {ey}", + "m": "{sm} {sd} – {ed}, {ey}", + "s": "{sm}/{sd}/{sy} – {em}/{ed}/{ey}" + }, + "c11": { + "f": "{sm} {sd} – {em} {ed}, {ey}", + "l": "{sm} {sd} – {em} {ed}, {ey}", + "m": "{sm} {sd} – {em} {ed}, {ey}", + "s": "{sm}/{sd}/{sy} – {em}/{ed}/{ey}" + }, + "c12": { + "f": "{sm} {sd}, {sy} – {em} {ed}, {ey}", + "l": "{sm} {sd}, {sy} – {em} {ed}, {ey}", + "m": "{sm} {sd}, {sy} – {em} {ed}, {ey}", + "s": "{sm}/{sd}/{sy} – {em}/{ed}/{ey}" + }, + "c20": { + "f": "{sm}, {sy} – {em}, {ey}", + "l": "{sm}, {sy} – {em}, {ey}", + "m": "{sm}, {sy} – {em}, {ey}", + "s": "{sm}/{sy} – {em}/{ey}" + }, + "c30": { + "f": "{sy} – {ey}", + "l": "{sy} – {ey}", + "m": "{sy} – {ey}", + "s": "{sy} – {ey}" + } + }, + "time": { + "12": { + "ah": "h a", + "ahm": "h:mm a", + "ahms": "h:mm:ss a", + "ahmsz": "h:mm:ss a z", + "ahmz": "h:mm a z", + "h": "h", + "hm": "h:mm", + "hms": "h:mm:ss", + "hmsz": "h:mm:ss z", + "hmz": "h:mm z", + "m": "mm", + "ms": "mm:ss", + "s": "ss" + }, + "24": { + "ah": "H", + "ahm": "H:mm", + "ahms": "H:mm:ss", + "ahmsz": "H:mm:ss z", + "ahmz": "H:mm z", + "h": "H", + "hm": "H:mm", + "hms": "H:mm:ss", + "hmsz": "H:mm:ss z", + "hmz": "H:mm z", + "m": "mm", + "ms": "mm:ss", + "s": "ss" + } + } + }, + "gregorian": { + "date": { + "d": "dd", + "dm": { + "f": "d MMMM", + "l": "d MMM", + "m": "d/MM", + "s": "d/M" + }, + "dmw": { + "f": "EEEE d MMMM", + "l": "EEE d MMM", + "m": "EE d/MM", + "s": "EE d/M" + }, + "dmwy": { + "f": "EEEE d MMMM yyyy", + "l": "EEE d MMM yyyy", + "m": "EEE d/MM/yyyy", + "s": "EE d/M/yy" + }, + "dmy": { + "f": "d MMMM yyyy", + "l": "d MMM yyyy", + "m": "d/MM/yyyy", + "s": "d/M/yy" + }, + "dw": { + "f": "EEEE d", + "l": "EEE d", + "m": "EE d", + "s": "EE d" + }, + "m": { + "f": "MMMM", + "l": "MMM", + "m": "MM", + "s": "M" + }, + "my": { + "f": "MMMM yyyy", + "l": "MMM yyyy", + "m": "MM/yyyy", + "s": "M/yy" + }, + "n": { + "f": "MMMM", + "l": "MMM", + "m": "NN", + "s": "N" + }, + "w": { + "f": "EEEE", + "l": "EEE", + "m": "EE", + "s": "E" + }, + "y": { + "f": "yyyy", + "l": "yyyy", + "m": "yyyy", + "s": "yy" + } + }, + "order": "{date} {time}", + "range": { + "c00": { + "f": "{sd} {sm} {sy} {st} – {et}", + "l": "{sd} {sm} {sy} {st} – {et}", + "m": "{sd}/{sm}/{sy} {st} – {et}", + "s": "{sd}/{sm}/{sy} {st} – {et}" + }, + "c01": { + "f": "{sd} {sm} {st} – {ed} {em} {ey} {et}", + "l": "{sd} {sm} {st} – {ed} {em} {ey} {et}", + "m": "{sd}/{sm}/{sy} {st} – {ed}/{em}/{ey} {et}", + "s": "{sd}/{sm}/{sy} {st} – {ed}/{em}/{ey} {et}" + }, + "c02": { + "f": "{sd} {sm} {st} – {ed} {em} {ey} {et}", + "l": "{sd} {sm} {st} – {ed} {em} {ey} {et}", + "m": "{sd}/{sm}/{sy} {st} – {ed}/{em}/{ey} {et}", + "s": "{sd}/{sm}/{sy} {st} – {ed}/{em}/{ey} {et}" + }, + "c03": { + "f": "{sd} {sm} {sy} {st} – {ed} {em} {ey} {et}", + "l": "{sd} {sm} {sy} {st} – {ed} {em} {ey} {et}", + "m": "{sd}/{sm}/{sy} {st} – {ed}/{em}/{ey} {et}", + "s": "{sd}/{sm}/{sy} {st} – {ed}/{em}/{ey} {et}" + }, + "c10": { + "f": "{sd} – {ed} {sm} {sy}", + "l": "{sd} – {ed} {sm} {sy}", + "m": "{sd} – {ed}/{sm}/{sy}", + "s": "{sd} – {ed}/{sm}/{sy}" + }, + "c11": { + "f": "{sd} {sm} – {ed} {em} {sy}", + "l": "{sd} {sm} – {ed} {em} {sy}", + "m": "{sd}/{sm} – {ed}/{em}/{sy}", + "s": "{sd}/{sm} – {ed}/{em}/{sy}" + }, + "c12": { + "f": "{sd} {sm} {sy} – {ed} {em} {ey}", + "l": "{sd} {sm} {sy} – {ed} {em} {ey}", + "m": "{sd}/{sm}/{sy} – {ed}/{em}/{ey}", + "s": "{sd}/{sm}/{sy} – {ed}/{em}/{ey}" + }, + "c20": { + "f": "{sm} {sy} – {em} {ey}", + "l": "{sm} {sy} – {em} {ey}", + "m": "{sm}/{sy} – {em}/{ey}", + "s": "{sm}/{sy} – {em}/{ey}" + }, + "c30": "{sy} – {ey}" + }, + "time": { + "12": { + "ah": "ha", + "ahm": "h:mma", + "ahms": "h:mm:ssa", + "ahmsz": "h:mm:ssa z", + "ahmz": "h:mma z", + "h": "h", + "hm": "h:mm", + "hms": "h:mm:ss", + "hmsz": "h:mm:ss z", + "hmz": "h:mm z", + "m": "mm", + "ms": "mm:ss", + "s": "ss" + }, + "24": { + "ah": "H", + "ahm": "H:mm", + "ahms": "H:mm:ss", + "ahmsz": "H:mm:ss z", + "ahmz": "H:mm z", + "h": "H", + "hm": "H:mm", + "hms": "H:mm:ss", + "hmsz": "H:mm:ss z", + "hmz": "H:mm z", + "m": "mm", + "ms": "mm:ss", + "s": "ss" + } + } + }, + "han": "gregorian", + "hebrew": "gregorian", + "islamic": "gregorian", + "julian": "gregorian", + "persian": "gregorian", + "persian-algo": "gregorian", + "thaisolar": "gregorian" +}; +ilib.data.sysres = { + "E0": "S", + "E0-coptic": "T", + "E0-ethiopic": "I", + "E0-hebrew": "R", + "E0-islamic": "A", + "E0-persian": "Y", + "E0-persian-algo": "Y", + "E0-thaisolar": "A", + "E1": "M", + "E1-coptic": "P", + "E1-ethiopic": "S", + "E1-hebrew": "S", + "E1-islamic": "I", + "E1-persian": "D", + "E1-persian-algo": "D", + "E1-thaisolar": "C", + "E2": "T", + "E2-coptic": "P", + "E2-ethiopic": "M", + "E2-hebrew": "S", + "E2-islamic": "T", + "E2-persian": "S", + "E2-persian-algo": "S", + "E2-thaisolar": "A", + "E3": "W", + "E3-coptic": "P", + "E3-ethiopic": "R", + "E3-hebrew": "R", + "E3-islamic": "A", + "E3-persian": "C", + "E3-persian-algo": "C", + "E3-thaisolar": "P", + "E4": "T", + "E4-coptic": "P", + "E4-ethiopic": "H", + "E4-hebrew": "Ḥ", + "E4-islamic": "K", + "E4-persian": "P", + "E4-persian-algo": "P", + "E4-thaisolar": "P", + "E5": "F", + "E5-coptic": "P", + "E5-ethiopic": "A", + "E5-hebrew": "S", + "E5-islamic": "J", + "E5-persian": "J", + "E5-persian-algo": "J", + "E5-thaisolar": "S", + "E6": "S", + "E6-coptic": "P", + "E6-ethiopic": "K", + "E6-hebrew": "S", + "E6-islamic": "S", + "E6-persian": "S", + "E6-persian-algo": "S", + "E6-thaisolar": "S", + "EE0": "Su", + "EE0-coptic": "Tk", + "EE0-ethiopic": "Ih", + "EE0-hebrew": "ri", + "EE0-islamic": "ah", + "EE0-persian": "Ye", + "EE0-persian-algo": "Ye", + "EE0-thaisolar": "at", + "EE1": "Mo", + "EE1-coptic": "Pe", + "EE1-ethiopic": "Sa", + "EE1-hebrew": "se", + "EE1-islamic": "it", + "EE1-persian": "Do", + "EE1-persian-algo": "Do", + "EE1-thaisolar": "ch", + "EE2": "Tu", + "EE2-coptic": "Ps", + "EE2-ethiopic": "Ma", + "EE2-hebrew": "sl", + "EE2-islamic": "th", + "EE2-persian": "Se", + "EE2-persian-algo": "Se", + "EE2-thaisolar": "an", + "EE3": "We", + "EE3-coptic": "Pe", + "EE3-ethiopic": "Ro", + "EE3-hebrew": "rv", + "EE3-islamic": "ar", + "EE3-persian": "Ch", + "EE3-persian-algo": "Ch", + "EE3-thaisolar": "pu", + "EE4": "Th", + "EE4-coptic": "Pt", + "EE4-ethiopic": "Ha", + "EE4-hebrew": "ḥa", + "EE4-islamic": "kh", + "EE4-persian": "Pa", + "EE4-persian-algo": "Pa", + "EE4-thaisolar": "pr", + "EE5": "Fr", + "EE5-coptic": "Ps", + "EE5-ethiopic": "Ar", + "EE5-hebrew": "si", + "EE5-islamic": "ju", + "EE5-persian": "Jo", + "EE5-persian-algo": "Jo", + "EE5-thaisolar": "su", + "EE6": "Sa", + "EE6-coptic": "Ps", + "EE6-ethiopic": "Ki", + "EE6-hebrew": "sa", + "EE6-islamic": "sa", + "EE6-persian": "Sh", + "EE6-persian-algo": "Sh", + "EE6-thaisolar": "sa", + "EEE0": "Sun", + "EEE0-coptic": "Tky", + "EEE0-ethiopic": "Ihu", + "EEE0-hebrew": "ris", + "EEE0-islamic": "aha", + "EEE0-persian": "Yek", + "EEE0-persian-algo": "Yek", + "EEE0-thaisolar": "ath", + "EEE1": "Mon", + "EEE1-coptic": "Pes", + "EEE1-ethiopic": "San", + "EEE1-hebrew": "she", + "EEE1-islamic": "ith", + "EEE1-persian": "Dos", + "EEE1-persian-algo": "Dos", + "EEE1-thaisolar": "cha", + "EEE2": "Tue", + "EEE2-coptic": "Psh", + "EEE2-ethiopic": "Mak", + "EEE2-hebrew": "shl", + "EEE2-islamic": "tha", + "EEE2-persian": "Ses", + "EEE2-persian-algo": "Ses", + "EEE2-thaisolar": "ang", + "EEE3": "Wed", + "EEE3-coptic": "Pef", + "EEE3-ethiopic": "Rob", + "EEE3-hebrew": "rvi", + "EEE3-islamic": "arb", + "EEE3-persian": "Cha", + "EEE3-persian-algo": "Cha", + "EEE3-thaisolar": "phu", + "EEE4": "Thu", + "EEE4-coptic": "Pti", + "EEE4-ethiopic": "Ham", + "EEE4-hebrew": "ḥam", + "EEE4-islamic": "kha", + "EEE4-persian": "Pan", + "EEE4-persian-algo": "Pan", + "EEE4-thaisolar": "phr", + "EEE5": "Fri", + "EEE5-coptic": "Pso", + "EEE5-ethiopic": "Arb", + "EEE5-hebrew": "shi", + "EEE5-islamic": "jum", + "EEE5-persian": "Jom", + "EEE5-persian-algo": "Jom", + "EEE5-thaisolar": "suk", + "EEE6": "Sat", + "EEE6-coptic": "Psa", + "EEE6-ethiopic": "Kid", + "EEE6-hebrew": "sha", + "EEE6-islamic": "sab", + "EEE6-persian": "Sha", + "EEE6-persian-algo": "Sha", + "EEE6-thaisolar": "sao", + "EEEE0": "Sunday", + "EEEE0-coptic": "Tkyriake", + "EEEE0-ethiopic": "Ihud", + "EEEE0-hebrew": "yom rishon", + "EEEE0-islamic": "yawn al-ahad", + "EEEE0-persian": "Yekshanbeh", + "EEEE0-persian-algo": "Yekshanbeh", + "EEEE0-thaisolar": "wan athit", + "EEEE1": "Monday", + "EEEE1-coptic": "Pesnau", + "EEEE1-ethiopic": "Sanyo", + "EEEE1-hebrew": "yom sheni", + "EEEE1-islamic": "yawn al-ithnaya", + "EEEE1-persian": "Doshanbeh", + "EEEE1-persian-algo": "Doshanbeh", + "EEEE1-thaisolar": "wan chan", + "EEEE2": "Tuesday", + "EEEE2-coptic": "Pshoment", + "EEEE2-ethiopic": "Maksanyo", + "EEEE2-hebrew": "yom shlishi", + "EEEE2-islamic": "yawn uth-thalathaa", + "EEEE2-persian": "Seshhanbeh", + "EEEE2-persian-algo": "Seshhanbeh", + "EEEE2-thaisolar": "wan angkhan", + "EEEE3": "Wednesday", + "EEEE3-coptic": "Peftoou", + "EEEE3-ethiopic": "Rob/Rabu'e", + "EEEE3-hebrew": "yom r'vi‘i", + "EEEE3-islamic": "yawn al-arba‘a", + "EEEE3-persian": "Chaharshanbeh", + "EEEE3-persian-algo": "Chaharshanbeh", + "EEEE3-thaisolar": "wan phut", + "EEEE4": "Thursday", + "EEEE4-coptic": "Ptiou", + "EEEE4-ethiopic": "Hamus", + "EEEE4-hebrew": "yom ḥamishi", + "EEEE4-islamic": "yawn al-khamis", + "EEEE4-persian": "Panjshanbeh", + "EEEE4-persian-algo": "Panjshanbeh", + "EEEE4-thaisolar": "wan phruehatsabodi", + "EEEE5": "Friday", + "EEEE5-coptic": "Psoou", + "EEEE5-ethiopic": "Arb", + "EEEE5-hebrew": "yom shishi", + "EEEE5-islamic": "yawn al-jum‘a", + "EEEE5-persian": "Jomeh", + "EEEE5-persian-algo": "Jomeh", + "EEEE5-thaisolar": "wan suk", + "EEEE6": "Saturday", + "EEEE6-coptic": "Psabbaton", + "EEEE6-ethiopic": "Kidamme", + "EEEE6-hebrew": "yom shabbat", + "EEEE6-islamic": "yawn as-sabt", + "EEEE6-persian": "Shanbeh", + "EEEE6-persian-algo": "Shanbeh", + "EEEE6-thaisolar": "wan sao", + "G-1": "BCE", + "G1": "CE", + "M1-thaisolar": "M", + "M10-thaisolar": "T", + "M11-thaisolar": "P", + "M12-thaisolar": "T", + "M2-thaisolar": "K", + "M3-thaisolar": "M", + "M4-thaisolar": "M", + "M5-thaisolar": "P", + "M6-thaisolar": "M", + "M7-thaisolar": "K", + "M8-thaisolar": "S", + "M9-thaisolar": "K", + "MM1-thaisolar": "MaK", + "MM10-thaisolar": "TuK", + "MM11-thaisolar": "PY", + "MM12-thaisolar": "ThK", + "MM2-thaisolar": "KP", + "MM3-thaisolar": "MiK", + "MM4-thaisolar": "MY", + "MM5-thaisolar": "PK", + "MM6-thaisolar": "MY", + "MM7-thaisolar": "KK", + "MM8-thaisolar": "SK", + "MM9-thaisolar": "KY", + "MMM1": "Jan", + "MMM1-coptic": "Tho", + "MMM1-ethiopic": "Meskerem", + "MMM1-hebrew": "Nis", + "MMM1-islamic": "Muḥ", + "MMM1-persian": "Far", + "MMM1-persian-algo": "Far", + "MMM1-thaisolar": "Ma.K.", + "MMM10": "Oct", + "MMM10-coptic": "Pao", + "MMM10-ethiopic": "Sene", + "MMM10-hebrew": "Tev", + "MMM10-islamic": "Šaw", + "MMM10-persian": "Dey", + "MMM10-persian-algo": "Dey", + "MMM10-thaisolar": "Tu.K.", + "MMM11": "Nov", + "MMM11-coptic": "Epe", + "MMM11-ethiopic": "Hamle", + "MMM11-hebrew": "She", + "MMM11-islamic": "Qad", + "MMM11-persian": "Bah", + "MMM11-persian-algo": "Bah", + "MMM11-thaisolar": "Ph.Y.", + "MMM12": "Dec", + "MMM12-coptic": "Mes", + "MMM12-ethiopic": "Nehasse", + "MMM12-hebrew": "Ada", + "MMM12-islamic": "Ḥij", + "MMM12-persian": "Esf", + "MMM12-persian-algo": "Esf", + "MMM12-thaisolar": "Th.K.", + "MMM13-coptic": "Epa", + "MMM13-ethiopic": "Pagumen", + "MMM13-hebrew": "Ad2", + "MMM2": "Feb", + "MMM2-coptic": "Pao", + "MMM2-ethiopic": "Tekemt", + "MMM2-hebrew": "Iyy", + "MMM2-islamic": "Ṣaf", + "MMM2-persian": "Ord", + "MMM2-persian-algo": "Ord", + "MMM2-thaisolar": "Ku.P.", + "MMM3": "Mar", + "MMM3-coptic": "Ath", + "MMM3-ethiopic": "Hedar", + "MMM3-hebrew": "Siv", + "MMM3-islamic": "Rab", + "MMM3-persian": "Kho", + "MMM3-persian-algo": "Kho", + "MMM3-thaisolar": "Mi.K.", + "MMM4": "Apr", + "MMM4-coptic": "Koi", + "MMM4-ethiopic": "Tahsas", + "MMM4-hebrew": "Tam", + "MMM4-islamic": "Ra2", + "MMM4-persian": "Tir", + "MMM4-persian-algo": "Tir", + "MMM4-thaisolar": "Me.Y.", + "MMM5": "May", + "MMM5-coptic": "Tob", + "MMM5-ethiopic": "Ter", + "MMM5-hebrew": "Av", + "MMM5-islamic": "Jum", + "MMM5-persian": "Mor", + "MMM5-persian-algo": "Mor", + "MMM5-thaisolar": "Ph.K.", + "MMM6": "Jun", + "MMM6-coptic": "Mes", + "MMM6-ethiopic": "Yekatit", + "MMM6-hebrew": "Elu", + "MMM6-islamic": "Ju2", + "MMM6-persian": "Sha", + "MMM6-persian-algo": "Sha", + "MMM6-thaisolar": "Mi.Y.", + "MMM7": "Jul", + "MMM7-coptic": "Par", + "MMM7-ethiopic": "Megabit", + "MMM7-hebrew": "Tis", + "MMM7-islamic": "Raj", + "MMM7-persian": "Meh", + "MMM7-persian-algo": "Meh", + "MMM7-thaisolar": "Ka.K.", + "MMM8": "Aug", + "MMM8-coptic": "Par", + "MMM8-ethiopic": "Miazia", + "MMM8-hebrew": "Ḥes", + "MMM8-islamic": "Šha", + "MMM8-persian": "Aba", + "MMM8-persian-algo": "Aba", + "MMM8-thaisolar": "Si.K.", + "MMM9": "Sep", + "MMM9-coptic": "Pas", + "MMM9-ethiopic": "Genbot", + "MMM9-hebrew": "Kis", + "MMM9-islamic": "Ram", + "MMM9-persian": "Aza", + "MMM9-persian-algo": "Aza", + "MMM9-thaisolar": "Ka.Y.", + "MMMM1": "January", + "MMMM1-coptic": "Thoout", + "MMMM1-ethiopic": "Meskerem", + "MMMM1-hebrew": "Nisan", + "MMMM1-islamic": "Muḥarram", + "MMMM1-persian": "Farvardin", + "MMMM1-persian-algo": "Farvardin", + "MMMM1-thaisolar": "Makarakhom", + "MMMM10": "October", + "MMMM10-coptic": "Paoone", + "MMMM10-ethiopic": "Sene", + "MMMM10-hebrew": "Teveth", + "MMMM10-islamic": "Šawwāl", + "MMMM10-persian": "Dey", + "MMMM10-persian-algo": "Dey", + "MMMM10-thaisolar": "Tulakhom", + "MMMM11": "November", + "MMMM11-coptic": "Epeep", + "MMMM11-ethiopic": "Hamle", + "MMMM11-hebrew": "Shevat", + "MMMM11-islamic": "Ḏu al-Qa‘da", + "MMMM11-persian": "Bahman", + "MMMM11-persian-algo": "Bahman", + "MMMM11-thaisolar": "Phruetsachikayon", + "MMMM12": "December", + "MMMM12-coptic": "Mesore", + "MMMM12-ethiopic": "Nehasse", + "MMMM12-hebrew": "Adar", + "MMMM12-islamic": "Ḏu al-Ḥijja", + "MMMM12-persian": "Esfand", + "MMMM12-persian-algo": "Esfand", + "MMMM12-thaisolar": "Thanwakhom", + "MMMM13-coptic": "Epagomene", + "MMMM13-ethiopic": "Pagumen", + "MMMM13-hebrew": "Adar II", + "MMMM2": "February", + "MMMM2-coptic": "Paope", + "MMMM2-ethiopic": "Tekemt", + "MMMM2-hebrew": "Iyyar", + "MMMM2-islamic": "Ṣafar", + "MMMM2-persian": "Ordibehesht", + "MMMM2-persian-algo": "Ordibehesht", + "MMMM2-thaisolar": "Kumphaphan", + "MMMM3": "March", + "MMMM3-coptic": "Athor", + "MMMM3-ethiopic": "Hedar", + "MMMM3-hebrew": "Sivan", + "MMMM3-islamic": "Rabī‘ I", + "MMMM3-persian": "Khordad", + "MMMM3-persian-algo": "Khordad", + "MMMM3-thaisolar": "Minakhom", + "MMMM4": "April", + "MMMM4-coptic": "Koiak", + "MMMM4-ethiopic": "Tahsas", + "MMMM4-hebrew": "Tammuz", + "MMMM4-islamic": "Rabī‘ II", + "MMMM4-persian": "Tir", + "MMMM4-persian-algo": "Tir", + "MMMM4-thaisolar": "Mesayon", + "MMMM5": "May", + "MMMM5-coptic": "Tobe", + "MMMM5-ethiopic": "Ter", + "MMMM5-hebrew": "Av", + "MMMM5-islamic": "Jumādā I", + "MMMM5-persian": "Mordad", + "MMMM5-persian-algo": "Mordad", + "MMMM5-thaisolar": "Phruetsaphakhom", + "MMMM6": "June", + "MMMM6-coptic": "Meshir", + "MMMM6-ethiopic": "Yekatit", + "MMMM6-hebrew": "Elul", + "MMMM6-islamic": "Jumādā II", + "MMMM6-persian": "Shahrivar", + "MMMM6-persian-algo": "Shahrivar", + "MMMM6-thaisolar": "Mithunayon", + "MMMM7": "July", + "MMMM7-coptic": "Paremotep", + "MMMM7-ethiopic": "Megabit", + "MMMM7-hebrew": "Tishri", + "MMMM7-islamic": "Rajab", + "MMMM7-persian": "Mehr", + "MMMM7-persian-algo": "Mehr", + "MMMM7-thaisolar": "Karakadakhom", + "MMMM8": "August", + "MMMM8-coptic": "Parmoute", + "MMMM8-ethiopic": "Miazia", + "MMMM8-hebrew": "Ḥeshvan", + "MMMM8-islamic": "Šha'bān", + "MMMM8-persian": "Aban", + "MMMM8-persian-algo": "Aban", + "MMMM8-thaisolar": "Singhakhom", + "MMMM9": "September", + "MMMM9-coptic": "Pashons", + "MMMM9-ethiopic": "Genbot", + "MMMM9-hebrew": "Kislev", + "MMMM9-islamic": "Ramaḍān", + "MMMM9-persian": "Azar", + "MMMM9-persian-algo": "Azar", + "MMMM9-thaisolar": "Kanyayon", + "N1": "J", + "N1-coptic": "T", + "N1-ethiopic": "M", + "N1-hebrew": "N", + "N1-islamic": "M", + "N1-persian": "F", + "N1-persian-algo": "F", + "N10": "O", + "N10-coptic": "P", + "N10-ethiopic": "S", + "N10-hebrew": "T", + "N10-islamic": "Š", + "N10-persian": "D", + "N10-persian-algo": "D", + "N11": "N", + "N11-coptic": "E", + "N11-ethiopic": "H", + "N11-hebrew": "S", + "N11-islamic": "Q", + "N11-persian": "B", + "N11-persian-algo": "B", + "N12": "D", + "N12-coptic": "M", + "N12-ethiopic": "N", + "N12-hebrew": "A", + "N12-islamic": "Ḥ", + "N12-persian": "E", + "N12-persian-algo": "E", + "N13-coptic": "E", + "N13-ethiopic": "P", + "N13-hebrew": "A", + "N2": "F", + "N2-coptic": "P", + "N2-ethiopic": "T", + "N2-hebrew": "I", + "N2-islamic": "Ṣ", + "N2-persian": "O", + "N2-persian-algo": "O", + "N3": "M", + "N3-coptic": "A", + "N3-ethiopic": "H", + "N3-hebrew": "S", + "N3-islamic": "R", + "N3-persian": "K", + "N3-persian-algo": "K", + "N4": "A", + "N4-coptic": "K", + "N4-ethiopic": "T", + "N4-hebrew": "T", + "N4-islamic": "R", + "N4-persian": "T", + "N4-persian-algo": "T", + "N5": "M", + "N5-coptic": "T", + "N5-ethiopic": "T", + "N5-hebrew": "A", + "N5-islamic": "J", + "N5-persian": "M", + "N5-persian-algo": "M", + "N6": "J", + "N6-coptic": "M", + "N6-ethiopic": "Y", + "N6-hebrew": "E", + "N6-islamic": "J", + "N6-persian": "S", + "N6-persian-algo": "S", + "N7": "J", + "N7-coptic": "P", + "N7-ethiopic": "M", + "N7-hebrew": "T", + "N7-islamic": "R", + "N7-persian": "M", + "N7-persian-algo": "M", + "N8": "A", + "N8-coptic": "P", + "N8-ethiopic": "M", + "N8-hebrew": "Ḥ", + "N8-islamic": "Š", + "N8-persian": "A", + "N8-persian-algo": "A", + "N9": "S", + "N9-coptic": "P", + "N9-ethiopic": "G", + "N9-hebrew": "K", + "N9-islamic": "R", + "N9-persian": "A", + "N9-persian-algo": "A", + "NN1": "Ja", + "NN1-coptic": "Th", + "NN1-ethiopic": "Ma", + "NN1-hebrew": "Ni", + "NN1-islamic": "Mu", + "NN1-persian": "Fa", + "NN1-persian-algo": "Fa", + "NN10": "Oc", + "NN10-coptic": "Pa", + "NN10-ethiopic": "Sa", + "NN10-hebrew": "Te", + "NN10-islamic": "Ša", + "NN10-persian": "De", + "NN10-persian-algo": "De", + "NN11": "No", + "NN11-coptic": "Ep", + "NN11-ethiopic": "Ha", + "NN11-hebrew": "Sh", + "NN11-islamic": "Qa", + "NN11-persian": "Ba", + "NN11-persian-algo": "Ba", + "NN12": "De", + "NN12-coptic": "Me", + "NN12-ethiopic": "Na", + "NN12-hebrew": "Ad", + "NN12-islamic": "Ḥi", + "NN12-persian": "Es", + "NN12-persian-algo": "Es", + "NN13-coptic": "Ep", + "NN13-ethiopic": "Pa", + "NN13-hebrew": "A2", + "NN2": "Fe", + "NN2-coptic": "Pa", + "NN2-ethiopic": "Te", + "NN2-hebrew": "Iy", + "NN2-islamic": "Ṣa", + "NN2-persian": "Or", + "NN2-persian-algo": "Or", + "NN3": "Ma", + "NN3-coptic": "At", + "NN3-ethiopic": "He", + "NN3-hebrew": "Si", + "NN3-islamic": "Rb", + "NN3-persian": "Kh", + "NN3-persian-algo": "Kh", + "NN4": "Ap", + "NN4-coptic": "Ko", + "NN4-ethiopic": "Ta", + "NN4-hebrew": "Ta", + "NN4-islamic": "R2", + "NN4-persian": "Ti", + "NN4-persian-algo": "Ti", + "NN5": "Ma", + "NN5-coptic": "To", + "NN5-ethiopic": "Te", + "NN5-hebrew": "Av", + "NN5-islamic": "Ju", + "NN5-persian": "Mo", + "NN5-persian-algo": "Mo", + "NN6": "Ju", + "NN6-coptic": "Me", + "NN6-ethiopic": "Ya", + "NN6-hebrew": "El", + "NN6-islamic": "J2", + "NN6-persian": "Sh", + "NN6-persian-algo": "Sh", + "NN7": "Ju", + "NN7-coptic": "Pa", + "NN7-ethiopic": "Ma", + "NN7-hebrew": "Ti", + "NN7-islamic": "Ra", + "NN7-persian": "Me", + "NN7-persian-algo": "Me", + "NN8": "Au", + "NN8-coptic": "Pa", + "NN8-ethiopic": "Mi", + "NN8-hebrew": "Ḥe", + "NN8-islamic": "Šh", + "NN8-persian": "Ab", + "NN8-persian-algo": "Ab", + "NN9": "Se", + "NN9-coptic": "Pa", + "NN9-ethiopic": "Ge", + "NN9-hebrew": "Ki", + "NN9-islamic": "Ra", + "NN9-persian": "Az", + "NN9-persian-algo": "Az", + "a0": "AM", + "a0-ethiopic": "AM", + "a1": "PM", + "a1-ethiopic": "PM", + "a2-ethiopic": "PM", + "a3-ethiopic": "PM", + "a4-ethiopic": "PM", + "azh0": "AM", + "azh1": "AM", + "azh2": "AM", + "azh3": "PM", + "azh4": "PM", + "azh5": "PM", + "azh6": "PM", + "finalSeparatorFull": ", and ", + "ordinalChoice": "1#1st|2#2nd|3#3rd|21#21st|22#22nd|23#23rd|31#31st|#{num}th", + "separatorFull": ", ", + "separatorLong": ", ", + "separatorMedium": " ", + "separatorShort": " " +}; +ilib.data.pseudomap = { + "a": "à", + "c": "ç", + "d": "ð", + "e": "ë", + "g": "ğ", + "h": "ĥ", + "i": "í", + "j": "ĵ", + "k": "ķ", + "l": "ľ", + "n": "ñ", + "o": "õ", + "p": "þ", + "r": "ŕ", + "s": "š", + "t": "ţ", + "u": "ü", + "w": "ŵ", + "y": "ÿ", + "z": "ž", + "A": "Ã", + "B": "ß", + "C": "Ç", + "D": "Ð", + "E": "Ë", + "G": "Ĝ", + "H": "Ħ", + "I": "Ï", + "J": "Ĵ", + "K": "ĸ", + "L": "Ľ", + "N": "Ň", + "O": "Ø", + "R": "Ŗ", + "S": "Š", + "T": "Ť", + "U": "Ú", + "W": "Ŵ", + "Y": "Ŷ", + "Z": "Ż" +}; +ilib.data.scripts = { + "Adlm": { + "casing": true, + "ime": false, + "lid": "Adlam", + "nb": 166, + "nm": "Adlam", + "rtl": true + }, + "Afak": { + "lid": "Afaka", + "nb": 439, + "nm": "Afaka" + }, + "Aghb": { + "casing": false, + "ime": false, + "lid": "Caucasian_Albanian", + "nb": 239, + "nm": "Caucasian Albanian", + "rtl": false + }, + "Ahom": { + "casing": false, + "ime": false, + "lid": "Ahom", + "nb": 338, + "nm": "Ahom, Tai Ahom", + "rtl": false + }, + "Arab": { + "casing": false, + "ime": false, + "lid": "Arabic", + "nb": 160, + "nm": "Arabic", + "rtl": true + }, + "Aran": { + "lid": "Arabic_(Nastaliq_variant)", + "nb": 161, + "nm": "Arabic (Nastaliq variant)" + }, + "Armi": { + "casing": false, + "ime": false, + "lid": "Imperial_Aramaic", + "nb": 124, + "nm": "Imperial Aramaic", + "rtl": true + }, + "Armn": { + "casing": true, + "ime": false, + "lid": "Armenian", + "nb": 230, + "nm": "Armenian", + "rtl": false + }, + "Avst": { + "casing": false, + "ime": false, + "lid": "Avestan", + "nb": 134, + "nm": "Avestan", + "rtl": true + }, + "Bali": { + "casing": false, + "ime": false, + "lid": "Balinese", + "nb": 360, + "nm": "Balinese", + "rtl": false + }, + "Bamu": { + "casing": false, + "ime": true, + "lid": "Bamum", + "nb": 435, + "nm": "Bamum", + "rtl": false + }, + "Bass": { + "casing": false, + "ime": false, + "lid": "Bassa_Vah", + "nb": 259, + "nm": "Bassa Vah", + "rtl": false + }, + "Batk": { + "casing": false, + "ime": false, + "lid": "Batak", + "nb": 365, + "nm": "Batak", + "rtl": false + }, + "Beng": { + "casing": false, + "ime": false, + "lid": "Bengali", + "nb": 325, + "nm": "Bengali (Bangla)", + "rtl": false + }, + "Bhks": { + "casing": false, + "ime": false, + "lid": "Bhaiksuki", + "nb": 334, + "nm": "Bhaiksuki", + "rtl": false + }, + "Blis": { + "lid": "Blissymbols", + "nb": 550, + "nm": "Blissymbols" + }, + "Bopo": { + "casing": false, + "ime": false, + "lid": "Bopomofo", + "nb": 285, + "nm": "Bopomofo", + "rtl": false + }, + "Brah": { + "casing": false, + "ime": false, + "lid": "Brahmi", + "nb": 300, + "nm": "Brahmi", + "rtl": false + }, + "Brai": { + "casing": false, + "ime": false, + "lid": "Braille", + "nb": 570, + "nm": "Braille", + "rtl": false + }, + "Bugi": { + "casing": false, + "ime": false, + "lid": "Buginese", + "nb": 367, + "nm": "Buginese", + "rtl": false + }, + "Buhd": { + "casing": false, + "ime": false, + "lid": "Buhid", + "nb": 372, + "nm": "Buhid", + "rtl": false + }, + "Cakm": { + "casing": false, + "ime": false, + "lid": "Chakma", + "nb": 349, + "nm": "Chakma", + "rtl": false + }, + "Cans": { + "casing": false, + "ime": true, + "lid": "Canadian_Aboriginal", + "nb": 440, + "nm": "Unified Canadian Aboriginal Syllabics", + "rtl": false + }, + "Cari": { + "casing": false, + "ime": false, + "lid": "Carian", + "nb": 201, + "nm": "Carian", + "rtl": false + }, + "Cham": { + "casing": false, + "ime": false, + "lid": "Cham", + "nb": 358, + "nm": "Cham", + "rtl": false + }, + "Cher": { + "casing": true, + "ime": false, + "lid": "Cherokee", + "nb": 445, + "nm": "Cherokee", + "rtl": false + }, + "Chis": { + "lid": "Chisoi", + "nb": 298, + "nm": "Chisoi" + }, + "Chrs": { + "casing": false, + "ime": false, + "lid": "Chorasmian", + "nb": 109, + "nm": "Chorasmian", + "rtl": true + }, + "Cirt": { + "lid": "Cirth", + "nb": 291, + "nm": "Cirth" + }, + "Copt": { + "casing": true, + "ime": false, + "lid": "Coptic", + "nb": 204, + "nm": "Coptic", + "rtl": false + }, + "Cpmn": { + "casing": false, + "ime": true, + "lid": "Cypro_Minoan", + "nb": 402, + "nm": "Cypro-Minoan", + "rtl": false + }, + "Cprt": { + "casing": false, + "ime": false, + "lid": "Cypriot", + "nb": 403, + "nm": "Cypriot syllabary", + "rtl": true + }, + "Cyrl": { + "casing": true, + "ime": false, + "lid": "Cyrillic", + "nb": 220, + "nm": "Cyrillic", + "rtl": false + }, + "Cyrs": { + "lid": "Cyrillic_(Old_Church_Slavonic_variant)", + "nb": 221, + "nm": "Cyrillic (Old Church Slavonic variant)" + }, + "Deva": { + "casing": false, + "ime": false, + "lid": "Devanagari", + "nb": 315, + "nm": "Devanagari (Nagari)", + "rtl": false + }, + "Diak": { + "casing": false, + "ime": true, + "lid": "Dives_Akuru", + "nb": 342, + "nm": "Dives Akuru", + "rtl": false + }, + "Dogr": { + "casing": false, + "ime": false, + "lid": "Dogra", + "nb": 328, + "nm": "Dogra", + "rtl": false + }, + "Dsrt": { + "casing": true, + "ime": false, + "lid": "Deseret", + "nb": 250, + "nm": "Deseret (Mormon)", + "rtl": false + }, + "Dupl": { + "casing": false, + "ime": true, + "lid": "Duployan", + "nb": 755, + "nm": "Duployan shorthand, Duployan stenography", + "rtl": false + }, + "Egyd": { + "lid": "Egyptian_demotic", + "nb": 70, + "nm": "Egyptian demotic" + }, + "Egyh": { + "lid": "Egyptian_hieratic", + "nb": 60, + "nm": "Egyptian hieratic" + }, + "Egyp": { + "casing": false, + "ime": true, + "lid": "Egyptian_Hieroglyphs", + "nb": 50, + "nm": "Egyptian hieroglyphs", + "rtl": false + }, + "Elba": { + "casing": false, + "ime": false, + "lid": "Elbasan", + "nb": 226, + "nm": "Elbasan", + "rtl": false + }, + "Elym": { + "casing": false, + "ime": false, + "lid": "Elymaic", + "nb": 128, + "nm": "Elymaic", + "rtl": true + }, + "Ethi": { + "casing": false, + "ime": true, + "lid": "Ethiopic", + "nb": 430, + "nm": "Ethiopic (Geʻez)", + "rtl": false + }, + "Gara": { + "casing": true, + "ime": false, + "lid": "Garay", + "nb": 164, + "nm": "Garay", + "rtl": true + }, + "Geok": { + "lid": "Georgian", + "nb": 241, + "nm": "Khutsuri (Asomtavruli and Nuskhuri)" + }, + "Geor": { + "casing": false, + "ime": false, + "lid": "Georgian", + "nb": 240, + "nm": "Georgian (Mkhedruli and Mtavruli)", + "rtl": false + }, + "Glag": { + "casing": true, + "ime": false, + "lid": "Glagolitic", + "nb": 225, + "nm": "Glagolitic", + "rtl": false + }, + "Gong": { + "casing": false, + "ime": false, + "lid": "Gunjala_Gondi", + "nb": 312, + "nm": "Gunjala Gondi", + "rtl": false + }, + "Gonm": { + "casing": false, + "ime": false, + "lid": "Masaram_Gondi", + "nb": 313, + "nm": "Masaram Gondi", + "rtl": false + }, + "Goth": { + "casing": false, + "ime": false, + "lid": "Gothic", + "nb": 206, + "nm": "Gothic", + "rtl": false + }, + "Gran": { + "casing": false, + "ime": false, + "lid": "Grantha", + "nb": 343, + "nm": "Grantha", + "rtl": false + }, + "Grek": { + "casing": true, + "ime": false, + "lid": "Greek", + "nb": 200, + "nm": "Greek", + "rtl": false + }, + "Gujr": { + "casing": false, + "ime": false, + "lid": "Gujarati", + "nb": 320, + "nm": "Gujarati", + "rtl": false + }, + "Gukh": { + "casing": false, + "ime": false, + "lid": "Gurung_Khema", + "nb": 397, + "nm": "Gurung Khema", + "rtl": false + }, + "Guru": { + "casing": false, + "ime": false, + "lid": "Gurmukhi", + "nb": 310, + "nm": "Gurmukhi", + "rtl": false + }, + "Hanb": { + "casing": false, + "ime": true, + "lid": "Han_with_Bopomofo_(alias_for_Han_+_Bopomofo)", + "nb": 503, + "nm": "Han with Bopomofo (alias for Han + Bopomofo)", + "rtl": false + }, + "Hang": { + "casing": false, + "ime": true, + "lid": "Hangul", + "nb": 286, + "nm": "Hangul (Hangŭl, Hangeul)", + "rtl": false + }, + "Hani": { + "casing": false, + "ime": true, + "lid": "Han", + "nb": 500, + "nm": "Han (Hanzi, Kanji, Hanja)", + "rtl": false + }, + "Hano": { + "casing": false, + "ime": false, + "lid": "Hanunoo", + "nb": 371, + "nm": "Hanunoo (Hanunóo)", + "rtl": false + }, + "Hans": { + "casing": false, + "ime": true, + "lid": "Han_(Simplified_variant)", + "nb": 501, + "nm": "Han (Simplified variant)", + "rtl": false + }, + "Hant": { + "casing": false, + "ime": true, + "lid": "Han_(Traditional_variant)", + "nb": 502, + "nm": "Han (Traditional variant)", + "rtl": false + }, + "Hatr": { + "casing": false, + "ime": false, + "lid": "Hatran", + "nb": 127, + "nm": "Hatran", + "rtl": true + }, + "Hebr": { + "casing": false, + "ime": false, + "lid": "Hebrew", + "nb": 125, + "nm": "Hebrew", + "rtl": true + }, + "Hira": { + "casing": false, + "ime": false, + "lid": "Hiragana", + "nb": 410, + "nm": "Hiragana", + "rtl": false + }, + "Hluw": { + "casing": false, + "ime": true, + "lid": "Anatolian_Hieroglyphs", + "nb": 80, + "nm": "Anatolian Hieroglyphs (Luwian Hieroglyphs, Hittite Hieroglyphs)", + "rtl": false + }, + "Hmng": { + "casing": false, + "ime": false, + "lid": "Pahawh_Hmong", + "nb": 450, + "nm": "Pahawh Hmong", + "rtl": false + }, + "Hmnp": { + "casing": false, + "ime": false, + "lid": "Nyiakeng_Puachue_Hmong", + "nb": 451, + "nm": "Nyiakeng Puachue Hmong", + "rtl": false + }, + "Hrkt": { + "lid": "Katakana_Or_Hiragana", + "nb": 412, + "nm": "Japanese syllabaries (alias for Hiragana + Katakana)" + }, + "Hung": { + "casing": true, + "ime": false, + "lid": "Old_Hungarian", + "nb": 176, + "nm": "Old Hungarian (Hungarian Runic)", + "rtl": true + }, + "Inds": { + "lid": "Indus_(Harappan)", + "nb": 610, + "nm": "Indus (Harappan)" + }, + "Ital": { + "casing": false, + "ime": false, + "lid": "Old_Italic", + "nb": 210, + "nm": "Old Italic (Etruscan, Oscan, etc.)", + "rtl": false + }, + "Jamo": { + "casing": false, + "ime": true, + "lid": "Jamo_(alias_for_Jamo_subset_of_Hangul)", + "nb": 284, + "nm": "Jamo (alias for Jamo subset of Hangul)", + "rtl": false + }, + "Java": { + "casing": false, + "ime": false, + "lid": "Javanese", + "nb": 361, + "nm": "Javanese", + "rtl": false + }, + "Jpan": { + "casing": false, + "ime": true, + "lid": "Japanese_(alias_for_Han_+_Hiragana_+_Katakana)", + "nb": 413, + "nm": "Japanese (alias for Han + Hiragana + Katakana)", + "rtl": false + }, + "Jurc": { + "lid": "Jurchen", + "nb": 510, + "nm": "Jurchen" + }, + "Kali": { + "casing": false, + "ime": false, + "lid": "Kayah_Li", + "nb": 357, + "nm": "Kayah Li", + "rtl": false + }, + "Kana": { + "casing": false, + "ime": false, + "lid": "Katakana", + "nb": 411, + "nm": "Katakana", + "rtl": false + }, + "Kawi": { + "casing": false, + "ime": false, + "lid": "Kawi", + "nb": 368, + "nm": "Kawi", + "rtl": false + }, + "Khar": { + "casing": false, + "ime": false, + "lid": "Kharoshthi", + "nb": 305, + "nm": "Kharoshthi", + "rtl": true + }, + "Khmr": { + "casing": false, + "ime": false, + "lid": "Khmer", + "nb": 355, + "nm": "Khmer", + "rtl": false + }, + "Khoj": { + "casing": false, + "ime": false, + "lid": "Khojki", + "nb": 322, + "nm": "Khojki", + "rtl": false + }, + "Kitl": { + "lid": "Khitan_large_script", + "nb": 505, + "nm": "Khitan large script" + }, + "Kits": { + "casing": false, + "ime": true, + "lid": "Khitan_Small_Script", + "nb": 288, + "nm": "Khitan small script", + "rtl": false + }, + "Knda": { + "casing": false, + "ime": false, + "lid": "Kannada", + "nb": 345, + "nm": "Kannada", + "rtl": false + }, + "Kore": { + "casing": false, + "ime": true, + "lid": "Korean_(alias_for_Hangul_+_Han)", + "nb": 287, + "nm": "Korean (alias for Hangul + Han)", + "rtl": false + }, + "Kpel": { + "lid": "Kpelle", + "nb": 436, + "nm": "Kpelle" + }, + "Krai": { + "casing": false, + "ime": false, + "lid": "Kirat_Rai", + "nb": 396, + "nm": "Kirat Rai", + "rtl": false + }, + "Kthi": { + "casing": false, + "ime": false, + "lid": "Kaithi", + "nb": 317, + "nm": "Kaithi", + "rtl": false + }, + "Lana": { + "casing": false, + "ime": false, + "lid": "Tai_Tham", + "nb": 351, + "nm": "Tai Tham (Lanna)", + "rtl": false + }, + "Laoo": { + "casing": false, + "ime": false, + "lid": "Lao", + "nb": 356, + "nm": "Lao", + "rtl": false + }, + "Latf": { + "lid": "Latin_(Fraktur_variant)", + "nb": 217, + "nm": "Latin (Fraktur variant)" + }, + "Latg": { + "lid": "Latin_(Gaelic_variant)", + "nb": 216, + "nm": "Latin (Gaelic variant)" + }, + "Latn": { + "casing": true, + "ime": false, + "lid": "Latin", + "nb": 215, + "nm": "Latin", + "rtl": false + }, + "Leke": { + "lid": "Leke", + "nb": 364, + "nm": "Leke" + }, + "Lepc": { + "casing": false, + "ime": false, + "lid": "Lepcha", + "nb": 335, + "nm": "Lepcha (Róng)", + "rtl": false + }, + "Limb": { + "casing": false, + "ime": false, + "lid": "Limbu", + "nb": 336, + "nm": "Limbu", + "rtl": false + }, + "Lina": { + "casing": false, + "ime": true, + "lid": "Linear_A", + "nb": 400, + "nm": "Linear A", + "rtl": false + }, + "Linb": { + "casing": false, + "ime": true, + "lid": "Linear_B", + "nb": 401, + "nm": "Linear B", + "rtl": false + }, + "Lisu": { + "casing": false, + "ime": true, + "lid": "Lisu", + "nb": 399, + "nm": "Lisu (Fraser)", + "rtl": false + }, + "Loma": { + "lid": "Loma", + "nb": 437, + "nm": "Loma" + }, + "Lyci": { + "casing": false, + "ime": false, + "lid": "Lycian", + "nb": 202, + "nm": "Lycian", + "rtl": false + }, + "Lydi": { + "casing": false, + "ime": false, + "lid": "Lydian", + "nb": 116, + "nm": "Lydian", + "rtl": true + }, + "Mahj": { + "casing": false, + "ime": false, + "lid": "Mahajani", + "nb": 314, + "nm": "Mahajani", + "rtl": false + }, + "Maka": { + "casing": false, + "ime": false, + "lid": "Makasar", + "nb": 366, + "nm": "Makasar", + "rtl": false + }, + "Mand": { + "casing": false, + "ime": false, + "lid": "Mandaic", + "nb": 140, + "nm": "Mandaic, Mandaean", + "rtl": true + }, + "Mani": { + "casing": false, + "ime": false, + "lid": "Manichaean", + "nb": 139, + "nm": "Manichaean", + "rtl": true + }, + "Marc": { + "casing": false, + "ime": false, + "lid": "Marchen", + "nb": 332, + "nm": "Marchen", + "rtl": false + }, + "Maya": { + "lid": "Mayan_hieroglyphs", + "nb": 90, + "nm": "Mayan hieroglyphs" + }, + "Medf": { + "casing": true, + "ime": false, + "lid": "Medefaidrin", + "nb": 265, + "nm": "Medefaidrin (Oberi Okaime, Oberi Ɔkaimɛ)", + "rtl": false + }, + "Mend": { + "casing": false, + "ime": true, + "lid": "Mende_Kikakui", + "nb": 438, + "nm": "Mende Kikakui", + "rtl": true + }, + "Merc": { + "casing": false, + "ime": false, + "lid": "Meroitic_Cursive", + "nb": 101, + "nm": "Meroitic Cursive", + "rtl": true + }, + "Mero": { + "casing": false, + "ime": false, + "lid": "Meroitic_Hieroglyphs", + "nb": 100, + "nm": "Meroitic Hieroglyphs", + "rtl": true + }, + "Mlym": { + "casing": false, + "ime": false, + "lid": "Malayalam", + "nb": 347, + "nm": "Malayalam", + "rtl": false + }, + "Modi": { + "casing": false, + "ime": false, + "lid": "Modi", + "nb": 324, + "nm": "Modi, Moḍī", + "rtl": false + }, + "Mong": { + "casing": false, + "ime": false, + "lid": "Mongolian", + "nb": 145, + "nm": "Mongolian", + "rtl": false + }, + "Moon": { + "lid": "Moon_(Moon_code,_Moon_script,_Moon_type)", + "nb": 218, + "nm": "Moon (Moon code, Moon script, Moon type)" + }, + "Mroo": { + "casing": false, + "ime": false, + "lid": "Mro", + "nb": 264, + "nm": "Mro, Mru", + "rtl": false + }, + "Mtei": { + "casing": false, + "ime": false, + "lid": "Meetei_Mayek", + "nb": 337, + "nm": "Meitei Mayek (Meithei, Meetei)", + "rtl": false + }, + "Mult": { + "casing": false, + "ime": false, + "lid": "Multani", + "nb": 323, + "nm": "Multani", + "rtl": false + }, + "Mymr": { + "casing": false, + "ime": false, + "lid": "Myanmar", + "nb": 350, + "nm": "Myanmar (Burmese)", + "rtl": false + }, + "Nagm": { + "casing": false, + "ime": false, + "lid": "Nag_Mundari", + "nb": 295, + "nm": "Nag Mundari", + "rtl": false + }, + "Nand": { + "casing": false, + "ime": false, + "lid": "Nandinagari", + "nb": 311, + "nm": "Nandinagari", + "rtl": false + }, + "Narb": { + "casing": false, + "ime": false, + "lid": "Old_North_Arabian", + "nb": 106, + "nm": "Old North Arabian (Ancient North Arabian)", + "rtl": true + }, + "Nbat": { + "casing": false, + "ime": false, + "lid": "Nabataean", + "nb": 159, + "nm": "Nabataean", + "rtl": true + }, + "Newa": { + "casing": false, + "ime": false, + "lid": "Newa", + "nb": 333, + "nm": "Newa, Newar, Newari, Nepāla lipi", + "rtl": false + }, + "Nkdb": { + "lid": "Naxi_Dongba_(na²¹ɕi³³_to³³ba²¹,_Nakhi_Tomba)", + "nb": 85, + "nm": "Naxi Dongba (na²¹ɕi³³ to³³ba²¹, Nakhi Tomba)" + }, + "Nkgb": { + "lid": "Naxi_Geba_(na²¹ɕi³³_gʌ²¹ba²¹,_'Na-'Khi_²Ggŏ-¹baw,_Nakhi_Geba)", + "nb": 420, + "nm": "Naxi Geba (na²¹ɕi³³ gʌ²¹ba²¹, 'Na-'Khi ²Ggŏ-¹baw, Nakhi Geba)" + }, + "Nkoo": { + "casing": false, + "ime": false, + "lid": "Nko", + "nb": 165, + "nm": "N’Ko", + "rtl": true + }, + "Nshu": { + "casing": false, + "ime": true, + "lid": "Nushu", + "nb": 499, + "nm": "Nüshu", + "rtl": false + }, + "Ogam": { + "casing": false, + "ime": false, + "lid": "Ogham", + "nb": 212, + "nm": "Ogham", + "rtl": false + }, + "Olck": { + "casing": false, + "ime": false, + "lid": "Ol_Chiki", + "nb": 261, + "nm": "Ol Chiki (Ol Cemet’, Ol, Santali)", + "rtl": false + }, + "Onao": { + "casing": false, + "ime": false, + "lid": "Ol_Onal", + "nb": 296, + "nm": "Ol Onal", + "rtl": false + }, + "Orkh": { + "casing": false, + "ime": false, + "lid": "Old_Turkic", + "nb": 175, + "nm": "Old Turkic, Orkhon Runic", + "rtl": true + }, + "Orya": { + "casing": false, + "ime": false, + "lid": "Oriya", + "nb": 327, + "nm": "Oriya (Odia)", + "rtl": false + }, + "Osge": { + "casing": true, + "ime": false, + "lid": "Osage", + "nb": 219, + "nm": "Osage", + "rtl": false + }, + "Osma": { + "casing": false, + "ime": false, + "lid": "Osmanya", + "nb": 260, + "nm": "Osmanya", + "rtl": false + }, + "Ougr": { + "casing": false, + "ime": false, + "lid": "Old_Uyghur", + "nb": 143, + "nm": "Old Uyghur", + "rtl": true + }, + "Palm": { + "casing": false, + "ime": false, + "lid": "Palmyrene", + "nb": 126, + "nm": "Palmyrene", + "rtl": true + }, + "Pauc": { + "casing": false, + "ime": false, + "lid": "Pau_Cin_Hau", + "nb": 263, + "nm": "Pau Cin Hau", + "rtl": false + }, + "Pcun": { + "lid": "Proto-Cuneiform", + "nb": 15, + "nm": "Proto-Cuneiform" + }, + "Pelm": { + "lid": "Proto-Elamite", + "nb": 16, + "nm": "Proto-Elamite" + }, + "Perm": { + "casing": false, + "ime": false, + "lid": "Old_Permic", + "nb": 227, + "nm": "Old Permic", + "rtl": false + }, + "Phag": { + "casing": false, + "ime": false, + "lid": "Phags_Pa", + "nb": 331, + "nm": "Phags-pa", + "rtl": false + }, + "Phli": { + "casing": false, + "ime": false, + "lid": "Inscriptional_Pahlavi", + "nb": 131, + "nm": "Inscriptional Pahlavi", + "rtl": true + }, + "Phlp": { + "casing": false, + "ime": false, + "lid": "Psalter_Pahlavi", + "nb": 132, + "nm": "Psalter Pahlavi", + "rtl": true + }, + "Phlv": { + "lid": "Book_Pahlavi", + "nb": 133, + "nm": "Book Pahlavi" + }, + "Phnx": { + "casing": false, + "ime": false, + "lid": "Phoenician", + "nb": 115, + "nm": "Phoenician", + "rtl": true + }, + "Piqd": { + "lid": "Klingon_(KLI_pIqaD)", + "nb": 293, + "nm": "Klingon (KLI pIqaD)" + }, + "Plrd": { + "casing": false, + "ime": false, + "lid": "Miao", + "nb": 282, + "nm": "Miao (Pollard)", + "rtl": false + }, + "Prti": { + "casing": false, + "ime": false, + "lid": "Inscriptional_Parthian", + "nb": 130, + "nm": "Inscriptional Parthian", + "rtl": true + }, + "Psin": { + "lid": "Proto-Sinaitic", + "nb": 103, + "nm": "Proto-Sinaitic" + }, + "Qaaa": { + "lid": "Reserved_for_private_use_(start)", + "nb": 900, + "nm": "Reserved for private use (start)" + }, + "Qabx": { + "lid": "Reserved_for_private_use_(end)", + "nb": 949, + "nm": "Reserved for private use (end)" + }, + "Ranj": { + "lid": "Ranjana", + "nb": 303, + "nm": "Ranjana" + }, + "Rjng": { + "casing": false, + "ime": false, + "lid": "Rejang", + "nb": 363, + "nm": "Rejang (Redjang, Kaganga)", + "rtl": false + }, + "Rohg": { + "casing": false, + "ime": false, + "lid": "Hanifi_Rohingya", + "nb": 167, + "nm": "Hanifi Rohingya", + "rtl": true + }, + "Roro": { + "lid": "Rongorongo", + "nb": 620, + "nm": "Rongorongo" + }, + "Runr": { + "casing": false, + "ime": false, + "lid": "Runic", + "nb": 211, + "nm": "Runic", + "rtl": false + }, + "Samr": { + "casing": false, + "ime": false, + "lid": "Samaritan", + "nb": 123, + "nm": "Samaritan", + "rtl": true + }, + "Sara": { + "lid": "Sarati", + "nb": 292, + "nm": "Sarati" + }, + "Sarb": { + "casing": false, + "ime": false, + "lid": "Old_South_Arabian", + "nb": 105, + "nm": "Old South Arabian", + "rtl": true + }, + "Saur": { + "casing": false, + "ime": false, + "lid": "Saurashtra", + "nb": 344, + "nm": "Saurashtra", + "rtl": false + }, + "Sgnw": { + "casing": false, + "ime": true, + "lid": "SignWriting", + "nb": 95, + "nm": "SignWriting", + "rtl": false + }, + "Shaw": { + "casing": false, + "ime": false, + "lid": "Shavian", + "nb": 281, + "nm": "Shavian (Shaw)", + "rtl": false + }, + "Shrd": { + "casing": false, + "ime": false, + "lid": "Sharada", + "nb": 319, + "nm": "Sharada, Śāradā", + "rtl": false + }, + "Shui": { + "lid": "Shuishu", + "nb": 530, + "nm": "Shuishu" + }, + "Sidd": { + "casing": false, + "ime": false, + "lid": "Siddham", + "nb": 302, + "nm": "Siddham, Siddhaṃ, Siddhamātṛkā", + "rtl": false + }, + "Sidt": { + "lid": "Sidetic", + "nb": 180, + "nm": "Sidetic" + }, + "Sind": { + "casing": false, + "ime": false, + "lid": "Khudawadi", + "nb": 318, + "nm": "Khudawadi, Sindhi", + "rtl": false + }, + "Sinh": { + "casing": false, + "ime": false, + "lid": "Sinhala", + "nb": 348, + "nm": "Sinhala", + "rtl": false + }, + "Sogd": { + "casing": false, + "ime": false, + "lid": "Sogdian", + "nb": 141, + "nm": "Sogdian", + "rtl": true + }, + "Sogo": { + "casing": false, + "ime": false, + "lid": "Old_Sogdian", + "nb": 142, + "nm": "Old Sogdian", + "rtl": true + }, + "Sora": { + "casing": false, + "ime": false, + "lid": "Sora_Sompeng", + "nb": 398, + "nm": "Sora Sompeng", + "rtl": false + }, + "Soyo": { + "casing": false, + "ime": false, + "lid": "Soyombo", + "nb": 329, + "nm": "Soyombo", + "rtl": false + }, + "Sund": { + "casing": false, + "ime": false, + "lid": "Sundanese", + "nb": 362, + "nm": "Sundanese", + "rtl": false + }, + "Sunu": { + "casing": false, + "ime": false, + "lid": "Sunuwar", + "nb": 274, + "nm": "Sunuwar", + "rtl": false + }, + "Sylo": { + "casing": false, + "ime": false, + "lid": "Syloti_Nagri", + "nb": 316, + "nm": "Syloti Nagri", + "rtl": false + }, + "Syrc": { + "casing": false, + "ime": false, + "lid": "Syriac", + "nb": 135, + "nm": "Syriac", + "rtl": true + }, + "Syre": { + "lid": "Syriac_(Estrangelo_variant)", + "nb": 138, + "nm": "Syriac (Estrangelo variant)" + }, + "Syrj": { + "lid": "Syriac_(Western_variant)", + "nb": 137, + "nm": "Syriac (Western variant)" + }, + "Syrn": { + "lid": "Syriac_(Eastern_variant)", + "nb": 136, + "nm": "Syriac (Eastern variant)" + }, + "Tagb": { + "casing": false, + "ime": false, + "lid": "Tagbanwa", + "nb": 373, + "nm": "Tagbanwa", + "rtl": false + }, + "Takr": { + "casing": false, + "ime": false, + "lid": "Takri", + "nb": 321, + "nm": "Takri, Ṭākrī, Ṭāṅkrī", + "rtl": false + }, + "Tale": { + "casing": false, + "ime": false, + "lid": "Tai_Le", + "nb": 353, + "nm": "Tai Le", + "rtl": false + }, + "Talu": { + "casing": false, + "ime": false, + "lid": "New_Tai_Lue", + "nb": 354, + "nm": "New Tai Lue", + "rtl": false + }, + "Taml": { + "casing": false, + "ime": false, + "lid": "Tamil", + "nb": 346, + "nm": "Tamil", + "rtl": false + }, + "Tang": { + "casing": false, + "ime": true, + "lid": "Tangut", + "nb": 520, + "nm": "Tangut", + "rtl": false + }, + "Tavt": { + "casing": false, + "ime": false, + "lid": "Tai_Viet", + "nb": 359, + "nm": "Tai Viet", + "rtl": false + }, + "Tayo": { + "lid": "Tai_Yo", + "nb": 380, + "nm": "Tai Yo" + }, + "Telu": { + "casing": false, + "ime": false, + "lid": "Telugu", + "nb": 340, + "nm": "Telugu", + "rtl": false + }, + "Teng": { + "lid": "Tengwar", + "nb": 290, + "nm": "Tengwar" + }, + "Tfng": { + "casing": false, + "ime": false, + "lid": "Tifinagh", + "nb": 120, + "nm": "Tifinagh (Berber)", + "rtl": false + }, + "Tglg": { + "casing": false, + "ime": false, + "lid": "Tagalog", + "nb": 370, + "nm": "Tagalog (Baybayin, Alibata)", + "rtl": false + }, + "Thaa": { + "casing": false, + "ime": false, + "lid": "Thaana", + "nb": 170, + "nm": "Thaana", + "rtl": true + }, + "Thai": { + "casing": false, + "ime": false, + "lid": "Thai", + "nb": 352, + "nm": "Thai", + "rtl": false + }, + "Tibt": { + "casing": false, + "ime": false, + "lid": "Tibetan", + "nb": 330, + "nm": "Tibetan", + "rtl": false + }, + "Tirh": { + "casing": false, + "ime": false, + "lid": "Tirhuta", + "nb": 326, + "nm": "Tirhuta", + "rtl": false + }, + "Tnsa": { + "casing": false, + "ime": false, + "lid": "Tangsa", + "nb": 275, + "nm": "Tangsa", + "rtl": false + }, + "Todr": { + "casing": false, + "ime": false, + "lid": "Todhri", + "nb": 229, + "nm": "Todhri", + "rtl": false + }, + "Tols": { + "lid": "Tolong_Siki", + "nb": 299, + "nm": "Tolong Siki" + }, + "Toto": { + "casing": false, + "ime": false, + "lid": "Toto", + "nb": 294, + "nm": "Toto", + "rtl": false + }, + "Tutg": { + "casing": false, + "ime": false, + "lid": "Tulu-Tigalari", + "nb": 341, + "nm": "Tulu-Tigalari", + "rtl": false + }, + "Ugar": { + "casing": false, + "ime": false, + "lid": "Ugaritic", + "nb": 40, + "nm": "Ugaritic", + "rtl": false + }, + "Vaii": { + "casing": false, + "ime": true, + "lid": "Vai", + "nb": 470, + "nm": "Vai", + "rtl": false + }, + "Visp": { + "lid": "Visible_Speech", + "nb": 280, + "nm": "Visible Speech" + }, + "Vith": { + "casing": true, + "ime": false, + "lid": "Vithkuqi", + "nb": 228, + "nm": "Vithkuqi", + "rtl": false + }, + "Wara": { + "casing": true, + "ime": false, + "lid": "Warang_Citi", + "nb": 262, + "nm": "Warang Citi (Varang Kshiti)", + "rtl": false + }, + "Wcho": { + "casing": false, + "ime": false, + "lid": "Wancho", + "nb": 283, + "nm": "Wancho", + "rtl": false + }, + "Wole": { + "lid": "Woleai", + "nb": 480, + "nm": "Woleai" + }, + "Xpeo": { + "casing": false, + "ime": false, + "lid": "Old_Persian", + "nb": 30, + "nm": "Old Persian", + "rtl": false + }, + "Xsux": { + "casing": false, + "ime": true, + "lid": "Cuneiform", + "nb": 20, + "nm": "Cuneiform, Sumero-Akkadian", + "rtl": false + }, + "Yezi": { + "casing": false, + "ime": false, + "lid": "Yezidi", + "nb": 192, + "nm": "Yezidi", + "rtl": true + }, + "Yiii": { + "casing": false, + "ime": true, + "lid": "Yi", + "nb": 460, + "nm": "Yi", + "rtl": false + }, + "Zanb": { + "casing": false, + "ime": false, + "lid": "Zanabazar_Square", + "nb": 339, + "nm": "Zanabazar Square (Zanabazarin Dörböljin Useg, Xewtee Dörböljin Bicig, Horizontal Square Script)", + "rtl": false + }, + "Zinh": { + "casing": false, + "ime": false, + "lid": "Inherited", + "nb": 994, + "nm": "Code for inherited script", + "rtl": false + }, + "Zmth": { + "lid": "Mathematical_notation", + "nb": 995, + "nm": "Mathematical notation" + }, + "Zsye": { + "lid": "Symbols_(Emoji_variant)", + "nb": 993, + "nm": "Symbols (Emoji variant)" + }, + "Zsym": { + "lid": "Symbols", + "nb": 996, + "nm": "Symbols" + }, + "Zxxx": { + "lid": "Code_for_unwritten_documents", + "nb": 997, + "nm": "Code for unwritten documents" + }, + "Zyyy": { + "casing": false, + "ime": false, + "lid": "Common", + "nb": 998, + "nm": "Code for undetermined script", + "rtl": false + }, + "Zzzz": { + "casing": false, + "ime": false, + "lid": "Unknown", + "nb": 999, + "nm": "Code for uncoded script", + "rtl": false + } +}; +ilib.data.scriptToRange = { + "Adlm": [ + [ + 125184, + 125259 + ], + [ + 125264, + 125273 + ], + [ + 125278, + 125279 + ] + ], + "Aghb": [ + [ + 66864, + 66915 + ], + [ + 66927 + ] + ], + "Ahom": [ + [ + 71424, + 71450 + ], + [ + 71453, + 71467 + ], + [ + 71472, + 71494 + ] + ], + "Arab": [ + [ + 1536, + 1540 + ], + [ + 1542, + 1547 + ], + [ + 1549, + 1562 + ], + [ + 1564, + 1566 + ], + [ + 1568, + 1599 + ], + [ + 1601, + 1610 + ], + [ + 1622, + 1647 + ], + [ + 1649, + 1756 + ], + [ + 1758, + 1791 + ], + [ + 1872, + 1919 + ], + [ + 2160, + 2190 + ], + [ + 2192, + 2193 + ], + [ + 2199, + 2273 + ], + [ + 2275, + 2303 + ], + [ + 64336, + 64450 + ], + [ + 64467, + 64829 + ], + [ + 64832, + 64911 + ], + [ + 64914, + 64967 + ], + [ + 64975 + ], + [ + 65008, + 65023 + ], + [ + 65136, + 65140 + ], + [ + 65142, + 65276 + ], + [ + 69216, + 69246 + ], + [ + 69314, + 69316 + ], + [ + 69372, + 69375 + ], + [ + 126464, + 126467 + ], + [ + 126469, + 126495 + ], + [ + 126497, + 126498 + ], + [ + 126500 + ], + [ + 126503 + ], + [ + 126505, + 126514 + ], + [ + 126516, + 126519 + ], + [ + 126521 + ], + [ + 126523 + ], + [ + 126530 + ], + [ + 126535 + ], + [ + 126537 + ], + [ + 126539 + ], + [ + 126541, + 126543 + ], + [ + 126545, + 126546 + ], + [ + 126548 + ], + [ + 126551 + ], + [ + 126553 + ], + [ + 126555 + ], + [ + 126557 + ], + [ + 126559 + ], + [ + 126561, + 126562 + ], + [ + 126564 + ], + [ + 126567, + 126570 + ], + [ + 126572, + 126578 + ], + [ + 126580, + 126583 + ], + [ + 126585, + 126588 + ], + [ + 126590 + ], + [ + 126592, + 126601 + ], + [ + 126603, + 126619 + ], + [ + 126625, + 126627 + ], + [ + 126629, + 126633 + ], + [ + 126635, + 126651 + ], + [ + 126704, + 126705 + ] + ], + "Armi": [ + [ + 67648, + 67669 + ], + [ + 67671, + 67679 + ] + ], + "Armn": [ + [ + 1329, + 1366 + ], + [ + 1369, + 1418 + ], + [ + 1421, + 1423 + ], + [ + 64275, + 64279 + ] + ], + "Avst": [ + [ + 68352, + 68405 + ], + [ + 68409, + 68415 + ] + ], + "Bali": [ + [ + 6912, + 6988 + ], + [ + 6990, + 7039 + ] + ], + "Bamu": [ + [ + 42656, + 42743 + ], + [ + 92160, + 92728 + ] + ], + "Bass": [ + [ + 92880, + 92909 + ], + [ + 92912, + 92917 + ] + ], + "Batk": [ + [ + 7104, + 7155 + ], + [ + 7164, + 7167 + ] + ], + "Beng": [ + [ + 2432, + 2435 + ], + [ + 2437, + 2444 + ], + [ + 2447, + 2448 + ], + [ + 2451, + 2472 + ], + [ + 2474, + 2480 + ], + [ + 2482 + ], + [ + 2486, + 2489 + ], + [ + 2492, + 2500 + ], + [ + 2503, + 2504 + ], + [ + 2507, + 2510 + ], + [ + 2519 + ], + [ + 2524, + 2525 + ], + [ + 2527, + 2531 + ], + [ + 2534, + 2558 + ] + ], + "Bhks": [ + [ + 72704, + 72712 + ], + [ + 72714, + 72758 + ], + [ + 72760, + 72773 + ], + [ + 72784, + 72812 + ] + ], + "Bopo": [ + [ + 746, + 747 + ], + [ + 12549, + 12591 + ], + [ + 12704, + 12735 + ] + ], + "Brah": [ + [ + 69632, + 69709 + ], + [ + 69714, + 69749 + ], + [ + 69759 + ] + ], + "Brai": [ + [ + 10240, + 10495 + ] + ], + "Bugi": [ + [ + 6656, + 6683 + ], + [ + 6686, + 6687 + ] + ], + "Buhd": [ + [ + 5952, + 5971 + ] + ], + "Cakm": [ + [ + 69888, + 69940 + ], + [ + 69942, + 69959 + ] + ], + "Cans": [ + [ + 5120, + 5759 + ], + [ + 6320, + 6389 + ], + [ + 72368, + 72383 + ] + ], + "Cari": [ + [ + 66208, + 66256 + ] + ], + "Cham": [ + [ + 43520, + 43574 + ], + [ + 43584, + 43597 + ], + [ + 43600, + 43609 + ], + [ + 43612, + 43615 + ] + ], + "Cher": [ + [ + 5024, + 5109 + ], + [ + 5112, + 5117 + ], + [ + 43888, + 43967 + ] + ], + "Chrs": [ + [ + 69552, + 69579 + ] + ], + "Copt": [ + [ + 994, + 1007 + ], + [ + 11392, + 11507 + ], + [ + 11513, + 11519 + ] + ], + "Cpmn": [ + [ + 77712, + 77810 + ] + ], + "Cprt": [ + [ + 67584, + 67589 + ], + [ + 67592 + ], + [ + 67594, + 67637 + ], + [ + 67639, + 67640 + ], + [ + 67644 + ], + [ + 67647 + ] + ], + "Cyrl": [ + [ + 1024, + 1156 + ], + [ + 1159, + 1327 + ], + [ + 7296, + 7306 + ], + [ + 7467 + ], + [ + 7544 + ], + [ + 11744, + 11775 + ], + [ + 42560, + 42655 + ], + [ + 65070, + 65071 + ], + [ + 122928, + 122989 + ], + [ + 123023 + ] + ], + "Deva": [ + [ + 2304, + 2384 + ], + [ + 2389, + 2403 + ], + [ + 2406, + 2431 + ], + [ + 43232, + 43263 + ], + [ + 72448, + 72457 + ] + ], + "Diak": [ + [ + 71936, + 71942 + ], + [ + 71945 + ], + [ + 71948, + 71955 + ], + [ + 71957, + 71958 + ], + [ + 71960, + 71989 + ], + [ + 71991, + 71992 + ], + [ + 71995, + 72006 + ], + [ + 72016, + 72025 + ] + ], + "Dogr": [ + [ + 71680, + 71739 + ] + ], + "Dsrt": [ + [ + 66560, + 66639 + ] + ], + "Dupl": [ + [ + 113664, + 113770 + ], + [ + 113776, + 113788 + ], + [ + 113792, + 113800 + ], + [ + 113808, + 113817 + ], + [ + 113820, + 113823 + ] + ], + "Egyp": [ + [ + 77824, + 78933 + ], + [ + 78944, + 82938 + ] + ], + "Elba": [ + [ + 66816, + 66855 + ] + ], + "Elym": [ + [ + 69600, + 69622 + ] + ], + "Ethi": [ + [ + 4608, + 4680 + ], + [ + 4682, + 4685 + ], + [ + 4688, + 4694 + ], + [ + 4696 + ], + [ + 4698, + 4701 + ], + [ + 4704, + 4744 + ], + [ + 4746, + 4749 + ], + [ + 4752, + 4784 + ], + [ + 4786, + 4789 + ], + [ + 4792, + 4798 + ], + [ + 4800 + ], + [ + 4802, + 4805 + ], + [ + 4808, + 4822 + ], + [ + 4824, + 4880 + ], + [ + 4882, + 4885 + ], + [ + 4888, + 4954 + ], + [ + 4957, + 4988 + ], + [ + 4992, + 5017 + ], + [ + 11648, + 11670 + ], + [ + 11680, + 11686 + ], + [ + 11688, + 11694 + ], + [ + 11696, + 11702 + ], + [ + 11704, + 11710 + ], + [ + 11712, + 11718 + ], + [ + 11720, + 11726 + ], + [ + 11728, + 11734 + ], + [ + 11736, + 11742 + ], + [ + 43777, + 43782 + ], + [ + 43785, + 43790 + ], + [ + 43793, + 43798 + ], + [ + 43808, + 43814 + ], + [ + 43816, + 43822 + ], + [ + 124896, + 124902 + ], + [ + 124904, + 124907 + ], + [ + 124909, + 124910 + ], + [ + 124912, + 124926 + ] + ], + "Gara": [ + [ + 68928, + 68965 + ], + [ + 68969, + 68997 + ], + [ + 69006, + 69007 + ] + ], + "Geor": [ + [ + 4256, + 4293 + ], + [ + 4295 + ], + [ + 4301 + ], + [ + 4304, + 4346 + ], + [ + 4348, + 4351 + ], + [ + 7312, + 7354 + ], + [ + 7357, + 7359 + ], + [ + 11520, + 11557 + ], + [ + 11559 + ], + [ + 11565 + ] + ], + "Glag": [ + [ + 11264, + 11359 + ], + [ + 122880, + 122886 + ], + [ + 122888, + 122904 + ], + [ + 122907, + 122913 + ], + [ + 122915, + 122916 + ], + [ + 122918, + 122922 + ] + ], + "Gong": [ + [ + 73056, + 73061 + ], + [ + 73063, + 73064 + ], + [ + 73066, + 73102 + ], + [ + 73104, + 73105 + ], + [ + 73107, + 73112 + ], + [ + 73120, + 73129 + ] + ], + "Gonm": [ + [ + 72960, + 72966 + ], + [ + 72968, + 72969 + ], + [ + 72971, + 73014 + ], + [ + 73018 + ], + [ + 73020, + 73021 + ], + [ + 73023, + 73031 + ], + [ + 73040, + 73049 + ] + ], + "Goth": [ + [ + 66352, + 66378 + ] + ], + "Gran": [ + [ + 70400, + 70403 + ], + [ + 70405, + 70412 + ], + [ + 70415, + 70416 + ], + [ + 70419, + 70440 + ], + [ + 70442, + 70448 + ], + [ + 70450, + 70451 + ], + [ + 70453, + 70457 + ], + [ + 70460, + 70468 + ], + [ + 70471, + 70472 + ], + [ + 70475, + 70477 + ], + [ + 70480 + ], + [ + 70487 + ], + [ + 70493, + 70499 + ], + [ + 70502, + 70508 + ], + [ + 70512, + 70516 + ] + ], + "Grek": [ + [ + 880, + 883 + ], + [ + 885, + 887 + ], + [ + 890, + 893 + ], + [ + 895 + ], + [ + 900 + ], + [ + 902 + ], + [ + 904, + 906 + ], + [ + 908 + ], + [ + 910, + 929 + ], + [ + 931, + 993 + ], + [ + 1008, + 1023 + ], + [ + 7462, + 7466 + ], + [ + 7517, + 7521 + ], + [ + 7526, + 7530 + ], + [ + 7615 + ], + [ + 7936, + 7957 + ], + [ + 7960, + 7965 + ], + [ + 7968, + 8005 + ], + [ + 8008, + 8013 + ], + [ + 8016, + 8023 + ], + [ + 8025 + ], + [ + 8027 + ], + [ + 8029 + ], + [ + 8031, + 8061 + ], + [ + 8064, + 8116 + ], + [ + 8118, + 8132 + ], + [ + 8134, + 8147 + ], + [ + 8150, + 8155 + ], + [ + 8157, + 8175 + ], + [ + 8178, + 8180 + ], + [ + 8182, + 8190 + ], + [ + 8486 + ], + [ + 43877 + ], + [ + 65856, + 65934 + ], + [ + 65952 + ], + [ + 119296, + 119365 + ] + ], + "Gujr": [ + [ + 2689, + 2691 + ], + [ + 2693, + 2701 + ], + [ + 2703, + 2705 + ], + [ + 2707, + 2728 + ], + [ + 2730, + 2736 + ], + [ + 2738, + 2739 + ], + [ + 2741, + 2745 + ], + [ + 2748, + 2757 + ], + [ + 2759, + 2761 + ], + [ + 2763, + 2765 + ], + [ + 2768 + ], + [ + 2784, + 2787 + ], + [ + 2790, + 2801 + ], + [ + 2809, + 2815 + ] + ], + "Gukh": [ + [ + 90368, + 90425 + ] + ], + "Guru": [ + [ + 2561, + 2563 + ], + [ + 2565, + 2570 + ], + [ + 2575, + 2576 + ], + [ + 2579, + 2600 + ], + [ + 2602, + 2608 + ], + [ + 2610, + 2611 + ], + [ + 2613, + 2614 + ], + [ + 2616, + 2617 + ], + [ + 2620 + ], + [ + 2622, + 2626 + ], + [ + 2631, + 2632 + ], + [ + 2635, + 2637 + ], + [ + 2641 + ], + [ + 2649, + 2652 + ], + [ + 2654 + ], + [ + 2662, + 2678 + ] + ], + "Hang": [ + [ + 4352, + 4607 + ], + [ + 12334, + 12335 + ], + [ + 12593, + 12686 + ], + [ + 12800, + 12830 + ], + [ + 12896, + 12926 + ], + [ + 43360, + 43388 + ], + [ + 44032, + 55203 + ], + [ + 55216, + 55238 + ], + [ + 55243, + 55291 + ], + [ + 65440, + 65470 + ], + [ + 65474, + 65479 + ], + [ + 65482, + 65487 + ], + [ + 65490, + 65495 + ], + [ + 65498, + 65500 + ] + ], + "Hani": [ + [ + 11904, + 11929 + ], + [ + 11931, + 12019 + ], + [ + 12032, + 12245 + ], + [ + 12293 + ], + [ + 12295 + ], + [ + 12321, + 12329 + ], + [ + 12344, + 12347 + ], + [ + 13312, + 19903 + ], + [ + 19968, + 40959 + ], + [ + 63744, + 64109 + ], + [ + 64112, + 64217 + ], + [ + 94178, + 94179 + ], + [ + 94192, + 94193 + ], + [ + 131072, + 173791 + ], + [ + 173824, + 177977 + ], + [ + 177984, + 178205 + ], + [ + 178208, + 183969 + ], + [ + 183984, + 191456 + ], + [ + 191472, + 192093 + ], + [ + 194560, + 195101 + ], + [ + 196608, + 201546 + ], + [ + 201552, + 205743 + ] + ], + "Hano": [ + [ + 5920, + 5940 + ] + ], + "Hatr": [ + [ + 67808, + 67826 + ], + [ + 67828, + 67829 + ], + [ + 67835, + 67839 + ] + ], + "Hebr": [ + [ + 1425, + 1479 + ], + [ + 1488, + 1514 + ], + [ + 1519, + 1524 + ], + [ + 64285, + 64310 + ], + [ + 64312, + 64316 + ], + [ + 64318 + ], + [ + 64320, + 64321 + ], + [ + 64323, + 64324 + ], + [ + 64326, + 64335 + ] + ], + "Hira": [ + [ + 12353, + 12438 + ], + [ + 12445, + 12447 + ], + [ + 110593, + 110879 + ], + [ + 110898 + ], + [ + 110928, + 110930 + ], + [ + 127488 + ] + ], + "Hluw": [ + [ + 82944, + 83526 + ] + ], + "Hmng": [ + [ + 92928, + 92997 + ], + [ + 93008, + 93017 + ], + [ + 93019, + 93025 + ], + [ + 93027, + 93047 + ], + [ + 93053, + 93071 + ] + ], + "Hmnp": [ + [ + 123136, + 123180 + ], + [ + 123184, + 123197 + ], + [ + 123200, + 123209 + ], + [ + 123214, + 123215 + ] + ], + "Hung": [ + [ + 68736, + 68786 + ], + [ + 68800, + 68850 + ], + [ + 68858, + 68863 + ] + ], + "Ital": [ + [ + 66304, + 66339 + ], + [ + 66349, + 66351 + ] + ], + "Java": [ + [ + 43392, + 43469 + ], + [ + 43472, + 43481 + ], + [ + 43486, + 43487 + ] + ], + "Kali": [ + [ + 43264, + 43309 + ], + [ + 43311 + ] + ], + "Kana": [ + [ + 12449, + 12538 + ], + [ + 12541, + 12543 + ], + [ + 12784, + 12799 + ], + [ + 13008, + 13054 + ], + [ + 13056, + 13143 + ], + [ + 65382, + 65391 + ], + [ + 65393, + 65437 + ], + [ + 110576, + 110579 + ], + [ + 110581, + 110587 + ], + [ + 110589, + 110590 + ], + [ + 110592 + ], + [ + 110880, + 110882 + ], + [ + 110933 + ], + [ + 110948, + 110951 + ] + ], + "Kawi": [ + [ + 73472, + 73488 + ], + [ + 73490, + 73530 + ], + [ + 73534, + 73562 + ] + ], + "Khar": [ + [ + 68096, + 68099 + ], + [ + 68101, + 68102 + ], + [ + 68108, + 68115 + ], + [ + 68117, + 68119 + ], + [ + 68121, + 68149 + ], + [ + 68152, + 68154 + ], + [ + 68159, + 68168 + ], + [ + 68176, + 68184 + ] + ], + "Khmr": [ + [ + 6016, + 6109 + ], + [ + 6112, + 6121 + ], + [ + 6128, + 6137 + ], + [ + 6624, + 6655 + ] + ], + "Khoj": [ + [ + 70144, + 70161 + ], + [ + 70163, + 70209 + ] + ], + "Kits": [ + [ + 94180 + ], + [ + 101120, + 101589 + ], + [ + 101631 + ] + ], + "Knda": [ + [ + 3200, + 3212 + ], + [ + 3214, + 3216 + ], + [ + 3218, + 3240 + ], + [ + 3242, + 3251 + ], + [ + 3253, + 3257 + ], + [ + 3260, + 3268 + ], + [ + 3270, + 3272 + ], + [ + 3274, + 3277 + ], + [ + 3285, + 3286 + ], + [ + 3293, + 3294 + ], + [ + 3296, + 3299 + ], + [ + 3302, + 3311 + ], + [ + 3313, + 3315 + ] + ], + "Krai": [ + [ + 93504, + 93561 + ] + ], + "Kthi": [ + [ + 69760, + 69826 + ], + [ + 69837 + ] + ], + "Lana": [ + [ + 6688, + 6750 + ], + [ + 6752, + 6780 + ], + [ + 6783, + 6793 + ], + [ + 6800, + 6809 + ], + [ + 6816, + 6829 + ] + ], + "Laoo": [ + [ + 3713, + 3714 + ], + [ + 3716 + ], + [ + 3718, + 3722 + ], + [ + 3724, + 3747 + ], + [ + 3749 + ], + [ + 3751, + 3773 + ], + [ + 3776, + 3780 + ], + [ + 3782 + ], + [ + 3784, + 3790 + ], + [ + 3792, + 3801 + ], + [ + 3804, + 3807 + ] + ], + "Latn": [ + [ + 65, + 90 + ], + [ + 97, + 122 + ], + [ + 170 + ], + [ + 186 + ], + [ + 192, + 214 + ], + [ + 216, + 246 + ], + [ + 248, + 696 + ], + [ + 736, + 740 + ], + [ + 7424, + 7461 + ], + [ + 7468, + 7516 + ], + [ + 7522, + 7525 + ], + [ + 7531, + 7543 + ], + [ + 7545, + 7614 + ], + [ + 7680, + 7935 + ], + [ + 8305 + ], + [ + 8319 + ], + [ + 8336, + 8348 + ], + [ + 8490, + 8491 + ], + [ + 8498 + ], + [ + 8526 + ], + [ + 8544, + 8584 + ], + [ + 11360, + 11391 + ], + [ + 42786, + 42887 + ], + [ + 42891, + 42957 + ], + [ + 42960, + 42961 + ], + [ + 42963 + ], + [ + 42965, + 42972 + ], + [ + 42994, + 43007 + ], + [ + 43824, + 43866 + ], + [ + 43868, + 43876 + ], + [ + 43878, + 43881 + ], + [ + 64256, + 64262 + ], + [ + 65313, + 65338 + ], + [ + 65345, + 65370 + ], + [ + 67456, + 67461 + ], + [ + 67463, + 67504 + ], + [ + 67506, + 67514 + ], + [ + 122624, + 122654 + ], + [ + 122661, + 122666 + ] + ], + "Lepc": [ + [ + 7168, + 7223 + ], + [ + 7227, + 7241 + ], + [ + 7245, + 7247 + ] + ], + "Limb": [ + [ + 6400, + 6430 + ], + [ + 6432, + 6443 + ], + [ + 6448, + 6459 + ], + [ + 6464 + ], + [ + 6468, + 6479 + ] + ], + "Lina": [ + [ + 67072, + 67382 + ], + [ + 67392, + 67413 + ], + [ + 67424, + 67431 + ] + ], + "Linb": [ + [ + 65536, + 65547 + ], + [ + 65549, + 65574 + ], + [ + 65576, + 65594 + ], + [ + 65596, + 65597 + ], + [ + 65599, + 65613 + ], + [ + 65616, + 65629 + ], + [ + 65664, + 65786 + ] + ], + "Lisu": [ + [ + 42192, + 42239 + ], + [ + 73648 + ] + ], + "Lyci": [ + [ + 66176, + 66204 + ] + ], + "Lydi": [ + [ + 67872, + 67897 + ], + [ + 67903 + ] + ], + "Mahj": [ + [ + 69968, + 70006 + ] + ], + "Maka": [ + [ + 73440, + 73464 + ] + ], + "Mand": [ + [ + 2112, + 2139 + ], + [ + 2142 + ] + ], + "Mani": [ + [ + 68288, + 68326 + ], + [ + 68331, + 68342 + ] + ], + "Marc": [ + [ + 72816, + 72847 + ], + [ + 72850, + 72871 + ], + [ + 72873, + 72886 + ] + ], + "Medf": [ + [ + 93760, + 93850 + ] + ], + "Mend": [ + [ + 124928, + 125124 + ], + [ + 125127, + 125142 + ] + ], + "Merc": [ + [ + 68000, + 68023 + ], + [ + 68028, + 68047 + ], + [ + 68050, + 68095 + ] + ], + "Mero": [ + [ + 67968, + 67999 + ] + ], + "Mlym": [ + [ + 3328, + 3340 + ], + [ + 3342, + 3344 + ], + [ + 3346, + 3396 + ], + [ + 3398, + 3400 + ], + [ + 3402, + 3407 + ], + [ + 3412, + 3427 + ], + [ + 3430, + 3455 + ] + ], + "Modi": [ + [ + 71168, + 71236 + ], + [ + 71248, + 71257 + ] + ], + "Mong": [ + [ + 6144, + 6145 + ], + [ + 6148 + ], + [ + 6150, + 6169 + ], + [ + 6176, + 6264 + ], + [ + 6272, + 6314 + ], + [ + 71264, + 71276 + ] + ], + "Mroo": [ + [ + 92736, + 92766 + ], + [ + 92768, + 92777 + ], + [ + 92782, + 92783 + ] + ], + "Mtei": [ + [ + 43744, + 43766 + ], + [ + 43968, + 44013 + ], + [ + 44016, + 44025 + ] + ], + "Mult": [ + [ + 70272, + 70278 + ], + [ + 70280 + ], + [ + 70282, + 70285 + ], + [ + 70287, + 70301 + ], + [ + 70303, + 70313 + ] + ], + "Mymr": [ + [ + 4096, + 4255 + ], + [ + 43488, + 43518 + ], + [ + 43616, + 43647 + ], + [ + 71376, + 71395 + ] + ], + "Nagm": [ + [ + 124112, + 124153 + ] + ], + "Nand": [ + [ + 72096, + 72103 + ], + [ + 72106, + 72151 + ], + [ + 72154, + 72164 + ] + ], + "Narb": [ + [ + 68224, + 68255 + ] + ], + "Nbat": [ + [ + 67712, + 67742 + ], + [ + 67751, + 67759 + ] + ], + "Newa": [ + [ + 70656, + 70747 + ], + [ + 70749, + 70753 + ] + ], + "Nkoo": [ + [ + 1984, + 2042 + ], + [ + 2045, + 2047 + ] + ], + "Nshu": [ + [ + 94177 + ], + [ + 110960, + 111355 + ] + ], + "Ogam": [ + [ + 5760, + 5788 + ] + ], + "Olck": [ + [ + 7248, + 7295 + ] + ], + "Onao": [ + [ + 124368, + 124410 + ], + [ + 124415 + ] + ], + "Orkh": [ + [ + 68608, + 68680 + ] + ], + "Orya": [ + [ + 2817, + 2819 + ], + [ + 2821, + 2828 + ], + [ + 2831, + 2832 + ], + [ + 2835, + 2856 + ], + [ + 2858, + 2864 + ], + [ + 2866, + 2867 + ], + [ + 2869, + 2873 + ], + [ + 2876, + 2884 + ], + [ + 2887, + 2888 + ], + [ + 2891, + 2893 + ], + [ + 2901, + 2903 + ], + [ + 2908, + 2909 + ], + [ + 2911, + 2915 + ], + [ + 2918, + 2935 + ] + ], + "Osge": [ + [ + 66736, + 66771 + ], + [ + 66776, + 66811 + ] + ], + "Osma": [ + [ + 66688, + 66717 + ], + [ + 66720, + 66729 + ] + ], + "Ougr": [ + [ + 69488, + 69513 + ] + ], + "Palm": [ + [ + 67680, + 67711 + ] + ], + "Pauc": [ + [ + 72384, + 72440 + ] + ], + "Perm": [ + [ + 66384, + 66426 + ] + ], + "Phag": [ + [ + 43072, + 43127 + ] + ], + "Phli": [ + [ + 68448, + 68466 + ], + [ + 68472, + 68479 + ] + ], + "Phlp": [ + [ + 68480, + 68497 + ], + [ + 68505, + 68508 + ], + [ + 68521, + 68527 + ] + ], + "Phnx": [ + [ + 67840, + 67867 + ], + [ + 67871 + ] + ], + "Plrd": [ + [ + 93952, + 94026 + ], + [ + 94031, + 94087 + ], + [ + 94095, + 94111 + ] + ], + "Prti": [ + [ + 68416, + 68437 + ], + [ + 68440, + 68447 + ] + ], + "Rjng": [ + [ + 43312, + 43347 + ], + [ + 43359 + ] + ], + "Rohg": [ + [ + 68864, + 68903 + ], + [ + 68912, + 68921 + ] + ], + "Runr": [ + [ + 5792, + 5866 + ], + [ + 5870, + 5880 + ] + ], + "Samr": [ + [ + 2048, + 2093 + ], + [ + 2096, + 2110 + ] + ], + "Sarb": [ + [ + 68192, + 68223 + ] + ], + "Saur": [ + [ + 43136, + 43205 + ], + [ + 43214, + 43225 + ] + ], + "Sgnw": [ + [ + 120832, + 121483 + ], + [ + 121499, + 121503 + ], + [ + 121505, + 121519 + ] + ], + "Shaw": [ + [ + 66640, + 66687 + ] + ], + "Shrd": [ + [ + 70016, + 70111 + ] + ], + "Sidd": [ + [ + 71040, + 71093 + ], + [ + 71096, + 71133 + ] + ], + "Sind": [ + [ + 70320, + 70378 + ], + [ + 70384, + 70393 + ] + ], + "Sinh": [ + [ + 3457, + 3459 + ], + [ + 3461, + 3478 + ], + [ + 3482, + 3505 + ], + [ + 3507, + 3515 + ], + [ + 3517 + ], + [ + 3520, + 3526 + ], + [ + 3530 + ], + [ + 3535, + 3540 + ], + [ + 3542 + ], + [ + 3544, + 3551 + ], + [ + 3558, + 3567 + ], + [ + 3570, + 3572 + ], + [ + 70113, + 70132 + ] + ], + "Sogd": [ + [ + 69424, + 69465 + ] + ], + "Sogo": [ + [ + 69376, + 69415 + ] + ], + "Sora": [ + [ + 69840, + 69864 + ], + [ + 69872, + 69881 + ] + ], + "Soyo": [ + [ + 72272, + 72354 + ] + ], + "Sund": [ + [ + 7040, + 7103 + ], + [ + 7360, + 7367 + ] + ], + "Sunu": [ + [ + 72640, + 72673 + ], + [ + 72688, + 72697 + ] + ], + "Sylo": [ + [ + 43008, + 43052 + ] + ], + "Syrc": [ + [ + 1792, + 1805 + ], + [ + 1807, + 1866 + ], + [ + 1869, + 1871 + ], + [ + 2144, + 2154 + ] + ], + "Tagb": [ + [ + 5984, + 5996 + ], + [ + 5998, + 6000 + ], + [ + 6002, + 6003 + ] + ], + "Takr": [ + [ + 71296, + 71353 + ], + [ + 71360, + 71369 + ] + ], + "Tale": [ + [ + 6480, + 6509 + ], + [ + 6512, + 6516 + ] + ], + "Talu": [ + [ + 6528, + 6571 + ], + [ + 6576, + 6601 + ], + [ + 6608, + 6618 + ], + [ + 6622, + 6623 + ] + ], + "Taml": [ + [ + 2946, + 2947 + ], + [ + 2949, + 2954 + ], + [ + 2958, + 2960 + ], + [ + 2962, + 2965 + ], + [ + 2969, + 2970 + ], + [ + 2972 + ], + [ + 2974, + 2975 + ], + [ + 2979, + 2980 + ], + [ + 2984, + 2986 + ], + [ + 2990, + 3001 + ], + [ + 3006, + 3010 + ], + [ + 3014, + 3016 + ], + [ + 3018, + 3021 + ], + [ + 3024 + ], + [ + 3031 + ], + [ + 3046, + 3066 + ], + [ + 73664, + 73713 + ], + [ + 73727 + ] + ], + "Tang": [ + [ + 94176 + ], + [ + 94208, + 100343 + ], + [ + 100352, + 101119 + ], + [ + 101632, + 101640 + ] + ], + "Tavt": [ + [ + 43648, + 43714 + ], + [ + 43739, + 43743 + ] + ], + "Telu": [ + [ + 3072, + 3084 + ], + [ + 3086, + 3088 + ], + [ + 3090, + 3112 + ], + [ + 3114, + 3129 + ], + [ + 3132, + 3140 + ], + [ + 3142, + 3144 + ], + [ + 3146, + 3149 + ], + [ + 3157, + 3158 + ], + [ + 3160, + 3162 + ], + [ + 3165 + ], + [ + 3168, + 3171 + ], + [ + 3174, + 3183 + ], + [ + 3191, + 3199 + ] + ], + "Tfng": [ + [ + 11568, + 11623 + ], + [ + 11631, + 11632 + ], + [ + 11647 + ] + ], + "Tglg": [ + [ + 5888, + 5909 + ], + [ + 5919 + ] + ], + "Thaa": [ + [ + 1920, + 1969 + ] + ], + "Thai": [ + [ + 3585, + 3642 + ], + [ + 3648, + 3675 + ] + ], + "Tibt": [ + [ + 3840, + 3911 + ], + [ + 3913, + 3948 + ], + [ + 3953, + 3991 + ], + [ + 3993, + 4028 + ], + [ + 4030, + 4044 + ], + [ + 4046, + 4052 + ], + [ + 4057, + 4058 + ] + ], + "Tirh": [ + [ + 70784, + 70855 + ], + [ + 70864, + 70873 + ] + ], + "Tnsa": [ + [ + 92784, + 92862 + ], + [ + 92864, + 92873 + ] + ], + "Todr": [ + [ + 67008, + 67059 + ] + ], + "Toto": [ + [ + 123536, + 123566 + ] + ], + "Tulu_Tigalari": [ + [ + 70528, + 70537 + ], + [ + 70539 + ], + [ + 70542 + ], + [ + 70544, + 70581 + ], + [ + 70583, + 70592 + ], + [ + 70594 + ], + [ + 70597 + ], + [ + 70599, + 70602 + ], + [ + 70604, + 70613 + ], + [ + 70615, + 70616 + ], + [ + 70625, + 70626 + ] + ], + "Ugar": [ + [ + 66432, + 66461 + ], + [ + 66463 + ] + ], + "Vaii": [ + [ + 42240, + 42539 + ] + ], + "Vith": [ + [ + 66928, + 66938 + ], + [ + 66940, + 66954 + ], + [ + 66956, + 66962 + ], + [ + 66964, + 66965 + ], + [ + 66967, + 66977 + ], + [ + 66979, + 66993 + ], + [ + 66995, + 67001 + ], + [ + 67003, + 67004 + ] + ], + "Wara": [ + [ + 71840, + 71922 + ], + [ + 71935 + ] + ], + "Wcho": [ + [ + 123584, + 123641 + ], + [ + 123647 + ] + ], + "Xpeo": [ + [ + 66464, + 66499 + ], + [ + 66504, + 66517 + ] + ], + "Xsux": [ + [ + 73728, + 74649 + ], + [ + 74752, + 74862 + ], + [ + 74864, + 74868 + ], + [ + 74880, + 75075 + ] + ], + "Yezi": [ + [ + 69248, + 69289 + ], + [ + 69291, + 69293 + ], + [ + 69296, + 69297 + ] + ], + "Yiii": [ + [ + 40960, + 42124 + ], + [ + 42128, + 42182 + ] + ], + "Zanb": [ + [ + 72192, + 72263 + ] + ], + "Zinh": [ + [ + 768, + 879 + ], + [ + 1157, + 1158 + ], + [ + 1611, + 1621 + ], + [ + 1648 + ], + [ + 2385, + 2388 + ], + [ + 6832, + 6862 + ], + [ + 7376, + 7378 + ], + [ + 7380, + 7392 + ], + [ + 7394, + 7400 + ], + [ + 7405 + ], + [ + 7412 + ], + [ + 7416, + 7417 + ], + [ + 7616, + 7679 + ], + [ + 8204, + 8205 + ], + [ + 8400, + 8432 + ], + [ + 12330, + 12333 + ], + [ + 12441, + 12442 + ], + [ + 65024, + 65039 + ], + [ + 65056, + 65069 + ], + [ + 66045 + ], + [ + 66272 + ], + [ + 70459 + ], + [ + 118528, + 118573 + ], + [ + 118576, + 118598 + ], + [ + 119143, + 119145 + ], + [ + 119163, + 119170 + ], + [ + 119173, + 119179 + ], + [ + 119210, + 119213 + ], + [ + 917760, + 917999 + ] + ], + "Zyyy": [ + [ + 0, + 64 + ], + [ + 91, + 96 + ], + [ + 123, + 169 + ], + [ + 171, + 185 + ], + [ + 187, + 191 + ], + [ + 215 + ], + [ + 247 + ], + [ + 697, + 735 + ], + [ + 741, + 745 + ], + [ + 748, + 767 + ], + [ + 884 + ], + [ + 894 + ], + [ + 901 + ], + [ + 903 + ], + [ + 1541 + ], + [ + 1548 + ], + [ + 1563 + ], + [ + 1567 + ], + [ + 1600 + ], + [ + 1757 + ], + [ + 2274 + ], + [ + 2404, + 2405 + ], + [ + 3647 + ], + [ + 4053, + 4056 + ], + [ + 4347 + ], + [ + 5867, + 5869 + ], + [ + 5941, + 5942 + ], + [ + 6146, + 6147 + ], + [ + 6149 + ], + [ + 7379 + ], + [ + 7393 + ], + [ + 7401, + 7404 + ], + [ + 7406, + 7411 + ], + [ + 7413, + 7415 + ], + [ + 7418 + ], + [ + 8192, + 8203 + ], + [ + 8206, + 8292 + ], + [ + 8294, + 8304 + ], + [ + 8308, + 8318 + ], + [ + 8320, + 8334 + ], + [ + 8352, + 8384 + ], + [ + 8448, + 8485 + ], + [ + 8487, + 8489 + ], + [ + 8492, + 8497 + ], + [ + 8499, + 8525 + ], + [ + 8527, + 8543 + ], + [ + 8585, + 8587 + ], + [ + 8592, + 9257 + ], + [ + 9280, + 9290 + ], + [ + 9312, + 10239 + ], + [ + 10496, + 11123 + ], + [ + 11126, + 11157 + ], + [ + 11159, + 11263 + ], + [ + 11776, + 11869 + ], + [ + 12272, + 12292 + ], + [ + 12294 + ], + [ + 12296, + 12320 + ], + [ + 12336, + 12343 + ], + [ + 12348, + 12351 + ], + [ + 12443, + 12444 + ], + [ + 12448 + ], + [ + 12539, + 12540 + ], + [ + 12688, + 12703 + ], + [ + 12736, + 12773 + ], + [ + 12783 + ], + [ + 12832, + 12895 + ], + [ + 12927, + 13007 + ], + [ + 13055 + ], + [ + 13144, + 13311 + ], + [ + 19904, + 19967 + ], + [ + 42752, + 42785 + ], + [ + 42888, + 42890 + ], + [ + 43056, + 43065 + ], + [ + 43310 + ], + [ + 43471 + ], + [ + 43867 + ], + [ + 43882, + 43883 + ], + [ + 64830, + 64831 + ], + [ + 65040, + 65049 + ], + [ + 65072, + 65106 + ], + [ + 65108, + 65126 + ], + [ + 65128, + 65131 + ], + [ + 65279 + ], + [ + 65281, + 65312 + ], + [ + 65339, + 65344 + ], + [ + 65371, + 65381 + ], + [ + 65392 + ], + [ + 65438, + 65439 + ], + [ + 65504, + 65510 + ], + [ + 65512, + 65518 + ], + [ + 65529, + 65533 + ], + [ + 65792, + 65794 + ], + [ + 65799, + 65843 + ], + [ + 65847, + 65855 + ], + [ + 65936, + 65948 + ], + [ + 66000, + 66044 + ], + [ + 66273, + 66299 + ], + [ + 113824, + 113827 + ], + [ + 117760, + 118009 + ], + [ + 118016, + 118451 + ], + [ + 118608, + 118723 + ], + [ + 118784, + 119029 + ], + [ + 119040, + 119078 + ], + [ + 119081, + 119142 + ], + [ + 119146, + 119162 + ], + [ + 119171, + 119172 + ], + [ + 119180, + 119209 + ], + [ + 119214, + 119274 + ], + [ + 119488, + 119507 + ], + [ + 119520, + 119539 + ], + [ + 119552, + 119638 + ], + [ + 119648, + 119672 + ], + [ + 119808, + 119892 + ], + [ + 119894, + 119964 + ], + [ + 119966, + 119967 + ], + [ + 119970 + ], + [ + 119973, + 119974 + ], + [ + 119977, + 119980 + ], + [ + 119982, + 119993 + ], + [ + 119995 + ], + [ + 119997, + 120003 + ], + [ + 120005, + 120069 + ], + [ + 120071, + 120074 + ], + [ + 120077, + 120084 + ], + [ + 120086, + 120092 + ], + [ + 120094, + 120121 + ], + [ + 120123, + 120126 + ], + [ + 120128, + 120132 + ], + [ + 120134 + ], + [ + 120138, + 120144 + ], + [ + 120146, + 120485 + ], + [ + 120488, + 120779 + ], + [ + 120782, + 120831 + ], + [ + 126065, + 126132 + ], + [ + 126209, + 126269 + ], + [ + 126976, + 127019 + ], + [ + 127024, + 127123 + ], + [ + 127136, + 127150 + ], + [ + 127153, + 127167 + ], + [ + 127169, + 127183 + ], + [ + 127185, + 127221 + ], + [ + 127232, + 127405 + ], + [ + 127462, + 127487 + ], + [ + 127489, + 127490 + ], + [ + 127504, + 127547 + ], + [ + 127552, + 127560 + ], + [ + 127568, + 127569 + ], + [ + 127584, + 127589 + ], + [ + 127744, + 128727 + ], + [ + 128732, + 128748 + ], + [ + 128752, + 128764 + ], + [ + 128768, + 128886 + ], + [ + 128891, + 128985 + ], + [ + 128992, + 129003 + ], + [ + 129008 + ], + [ + 129024, + 129035 + ], + [ + 129040, + 129095 + ], + [ + 129104, + 129113 + ], + [ + 129120, + 129159 + ], + [ + 129168, + 129197 + ], + [ + 129200, + 129211 + ], + [ + 129216, + 129217 + ], + [ + 129280, + 129619 + ], + [ + 129632, + 129645 + ], + [ + 129648, + 129660 + ], + [ + 129664, + 129673 + ], + [ + 129679, + 129734 + ], + [ + 129742, + 129756 + ], + [ + 129759, + 129769 + ], + [ + 129776, + 129784 + ], + [ + 129792, + 129938 + ], + [ + 129940, + 130041 + ], + [ + 917505 + ], + [ + 917536, + 917631 + ] + ] +}; +ilib.data.ctype = { + "adlam": [ + [ + 125184, + 125279 + ] + ], + "aegean": [ + [ + 65792, + 65855 + ] + ], + "ahom": [ + [ + 71424, + 71503 + ] + ], + "albanian": [ + [ + 66864, + 66927 + ] + ], + "alchemic": [ + [ + 128768, + 128895 + ] + ], + "ancient": [ + [ + 65936, + 65999 + ] + ], + "arabic": [ + [ + 1536, + 1791 + ], + [ + 1872, + 1919 + ], + [ + 2208, + 2303 + ], + [ + 64336, + 65023 + ], + [ + 65136, + 65279 + ], + [ + 126464, + 126719 + ] + ], + "arabic extended-b": [ + [ + 2160, + 2207 + ] + ], + "arabic extended-c": [ + [ + 69312, + 69375 + ] + ], + "aramaic": [ + [ + 67648, + 67679 + ] + ], + "armenian": [ + [ + 1328, + 1423 + ] + ], + "arrows": [ + [ + 8592, + 8703 + ], + [ + 10224, + 10239 + ], + [ + 10496, + 10623 + ], + [ + 11008, + 11263 + ], + [ + 129024, + 129279 + ] + ], + "ascii": [ + [ + 32, + 127 + ] + ], + "avestan": [ + [ + 68352, + 68415 + ] + ], + "balinese": [ + [ + 6912, + 7039 + ] + ], + "bamum": [ + [ + 42656, + 42751 + ], + [ + 92160, + 92735 + ] + ], + "bassavah": [ + [ + 92880, + 92927 + ] + ], + "batak": [ + [ + 7104, + 7167 + ] + ], + "bengali": [ + [ + 2432, + 2559 + ] + ], + "bhaiksuki": [ + [ + 72704, + 72815 + ] + ], + "blank": [ + [ + 9, + 9 + ], + [ + 32, + 32 + ] + ], + "block": [ + [ + 9600, + 9631 + ] + ], + "bopomofo": [ + [ + 12544, + 12591 + ], + [ + 12704, + 12735 + ] + ], + "box": [ + [ + 9472, + 9599 + ] + ], + "brahmi": [ + [ + 69632, + 69759 + ] + ], + "braille": [ + [ + 10240, + 10495 + ] + ], + "buginese": [ + [ + 6656, + 6687 + ] + ], + "buhid": [ + [ + 5952, + 5983 + ] + ], + "byzantinemusic": [ + [ + 118784, + 119039 + ] + ], + "canadian": [ + [ + 5120, + 5759 + ], + [ + 6320, + 6399 + ] + ], + "carian": [ + [ + 66208, + 66271 + ] + ], + "chakma": [ + [ + 69888, + 69967 + ] + ], + "cham": [ + [ + 43520, + 43615 + ] + ], + "cherokee": [ + [ + 5024, + 5119 + ], + [ + 43888, + 43967 + ] + ], + "chess symbols": [ + [ + 129536, + 129647 + ] + ], + "chorasmian": [ + [ + 69552, + 69599 + ] + ], + "cjk": [ + [ + 12272, + 12287 + ], + [ + 13312, + 19903 + ], + [ + 19968, + 40959 + ], + [ + 131072, + 173791 + ], + [ + 173824, + 183983 + ] + ], + "cjk unified ideographs extension f": [ + [ + 183984, + 191471 + ] + ], + "cjk unified ideographs extension g": [ + [ + 196608, + 201551 + ] + ], + "cjk unified ideographs extension h": [ + [ + 201552, + 205743 + ] + ], + "cjk unified ideographs extension i": [ + [ + 191472, + 192095 + ] + ], + "cjkcompatibility": [ + [ + 13056, + 13311 + ], + [ + 63744, + 64255 + ], + [ + 65072, + 65103 + ], + [ + 194560, + 195103 + ] + ], + "cjkpunct": [ + [ + 12288, + 12351 + ] + ], + "cjkradicals": [ + [ + 11904, + 12255 + ] + ], + "cjkstrokes": [ + [ + 12736, + 12783 + ] + ], + "combining": [ + [ + 768, + 879 + ], + [ + 6832, + 6911 + ], + [ + 7616, + 7679 + ], + [ + 8400, + 8447 + ] + ], + "controlpictures": [ + [ + 9216, + 9279 + ] + ], + "coptic": [ + [ + 11392, + 11519 + ] + ], + "copticnumber": [ + [ + 66272, + 66303 + ] + ], + "cuneiform": [ + [ + 73728, + 74751 + ], + [ + 74880, + 75087 + ] + ], + "cuneiformnumbers": [ + [ + 74752, + 74879 + ] + ], + "currency": [ + [ + 8352, + 8399 + ] + ], + "cypriot": [ + [ + 67584, + 67647 + ] + ], + "cypro-minoan": [ + [ + 77712, + 77823 + ] + ], + "cyrillic": [ + [ + 1024, + 1327 + ], + [ + 7296, + 7311 + ], + [ + 11744, + 11775 + ], + [ + 42560, + 42655 + ] + ], + "cyrillic extended-d": [ + [ + 122928, + 123023 + ] + ], + "deseret": [ + [ + 66560, + 66639 + ] + ], + "devanagari": [ + [ + 2304, + 2431 + ], + [ + 43232, + 43263 + ] + ], + "devanagari extended-a": [ + [ + 72448, + 72543 + ] + ], + "digit": [ + [ + 48, + 57 + ] + ], + "dingbats": [ + [ + 9984, + 10175 + ] + ], + "dives akuru": [ + [ + 71936, + 72031 + ] + ], + "dogra": [ + [ + 71680, + 71759 + ] + ], + "domino": [ + [ + 127024, + 127135 + ] + ], + "duployan": [ + [ + 113664, + 113823 + ] + ], + "egyptian hieroglyph format controls": [ + [ + 78896, + 78943 + ] + ], + "egyptian hieroglyphs extended-a": [ + [ + 78944, + 82943 + ] + ], + "elbasan": [ + [ + 66816, + 66863 + ] + ], + "elymaic": [ + [ + 69600, + 69631 + ] + ], + "emoticons": [ + [ + 128512, + 128591 + ] + ], + "enclosedalpha": [ + [ + 9312, + 9471 + ], + [ + 127232, + 127487 + ] + ], + "enclosedcjk": [ + [ + 12800, + 13055 + ], + [ + 127488, + 127743 + ] + ], + "ethiopic": [ + [ + 4608, + 5023 + ], + [ + 11648, + 11743 + ], + [ + 43776, + 43823 + ] + ], + "ethiopic extended-b": [ + [ + 124896, + 124927 + ] + ], + "garay": [ + [ + 68928, + 69007 + ] + ], + "geometric": [ + [ + 9632, + 9727 + ], + [ + 128896, + 129023 + ] + ], + "georgian": [ + [ + 4256, + 4351 + ], + [ + 11520, + 11567 + ] + ], + "georgian extended": [ + [ + 7312, + 7359 + ] + ], + "glagolitic": [ + [ + 11264, + 11359 + ], + [ + 122880, + 122927 + ] + ], + "gothic": [ + [ + 66352, + 66383 + ] + ], + "grantha": [ + [ + 70400, + 70527 + ] + ], + "greek": [ + [ + 880, + 1023 + ], + [ + 7936, + 8191 + ] + ], + "greekmusic": [ + [ + 119296, + 119375 + ] + ], + "greeknumbers": [ + [ + 65856, + 65935 + ] + ], + "gujarati": [ + [ + 2688, + 2815 + ] + ], + "gunjala gondi": [ + [ + 73056, + 73135 + ] + ], + "gurmukhi": [ + [ + 2560, + 2687 + ] + ], + "gurung khema": [ + [ + 90368, + 90431 + ] + ], + "halfmarks": [ + [ + 65056, + 65071 + ] + ], + "hangul": [ + [ + 4352, + 4607 + ], + [ + 12592, + 12687 + ], + [ + 43360, + 43391 + ], + [ + 44032, + 55295 + ] + ], + "hanifi rohingya": [ + [ + 68864, + 68927 + ] + ], + "hanunoo": [ + [ + 5920, + 5951 + ] + ], + "hatran": [ + [ + 67808, + 67839 + ] + ], + "hebrew": [ + [ + 1424, + 1535 + ] + ], + "hieroglyphs": [ + [ + 67968, + 67999 + ], + [ + 77824, + 78895 + ], + [ + 82944, + 83583 + ] + ], + "highsurrogates": [ + [ + 55296, + 56319 + ] + ], + "hiragana": [ + [ + 12352, + 12447 + ] + ], + "ideograph": [ + [ + 4352, + 4607 + ], + [ + 12272, + 12287 + ], + [ + 12448, + 12543 + ], + [ + 12544, + 12591 + ], + [ + 12592, + 12687 + ], + [ + 12704, + 12735 + ], + [ + 12784, + 12799 + ], + [ + 13056, + 13311 + ], + [ + 13312, + 19903 + ], + [ + 19968, + 40959 + ], + [ + 40960, + 42191 + ], + [ + 43360, + 43391 + ], + [ + 44032, + 55295 + ], + [ + 63744, + 64255 + ], + [ + 65072, + 65103 + ], + [ + 110592, + 110847 + ], + [ + 131072, + 173791 + ], + [ + 173824, + 183983 + ], + [ + 194560, + 195103 + ] + ], + "ideoother": [ + [ + 4352, + 4607 + ], + [ + 11904, + 12255 + ], + [ + 12288, + 12351 + ], + [ + 12352, + 12447 + ], + [ + 12448, + 12543 + ], + [ + 12544, + 12591 + ], + [ + 12592, + 12687 + ], + [ + 12704, + 12735 + ], + [ + 12736, + 12783 + ], + [ + 12784, + 12799 + ], + [ + 13056, + 13311 + ], + [ + 43360, + 43391 + ], + [ + 44032, + 55295 + ], + [ + 63744, + 64255 + ], + [ + 65072, + 65103 + ], + [ + 110592, + 110847 + ], + [ + 194560, + 195103 + ] + ], + "indic siyaq numbers": [ + [ + 126064, + 126143 + ] + ], + "indicnumber": [ + [ + 43056, + 43071 + ] + ], + "ipa": [ + [ + 592, + 687 + ], + [ + 7424, + 7615 + ] + ], + "javanese": [ + [ + 43392, + 43487 + ] + ], + "kaithi": [ + [ + 69760, + 69839 + ] + ], + "kaktovik numerals": [ + [ + 119488, + 119519 + ] + ], + "kana extended-a": [ + [ + 110848, + 110895 + ] + ], + "kana extended-b": [ + [ + 110576, + 110591 + ] + ], + "kanbun": [ + [ + 12688, + 12703 + ] + ], + "kannada": [ + [ + 3200, + 3327 + ] + ], + "katakana": [ + [ + 12448, + 12543 + ], + [ + 12784, + 12799 + ], + [ + 110592, + 110847 + ] + ], + "kawi": [ + [ + 73472, + 73567 + ] + ], + "kayahli": [ + [ + 43264, + 43311 + ] + ], + "kharoshthi": [ + [ + 68096, + 68191 + ] + ], + "khitan small script": [ + [ + 101120, + 101631 + ] + ], + "khmer": [ + [ + 6016, + 6143 + ] + ], + "khmersymbols": [ + [ + 6624, + 6655 + ] + ], + "khojki": [ + [ + 70144, + 70223 + ] + ], + "khudawadi": [ + [ + 70320, + 70399 + ] + ], + "kirat rai": [ + [ + 93504, + 93567 + ] + ], + "lao": [ + [ + 3712, + 3839 + ] + ], + "latin": [ + [ + 0, + 591 + ], + [ + 7680, + 7935 + ], + [ + 11360, + 11391 + ], + [ + 42784, + 43007 + ], + [ + 43824, + 43887 + ] + ], + "latin extended-f": [ + [ + 67456, + 67519 + ] + ], + "latin extended-g": [ + [ + 122624, + 122879 + ] + ], + "lepcha": [ + [ + 7168, + 7247 + ] + ], + "letterlike": [ + [ + 8448, + 8527 + ] + ], + "limbu": [ + [ + 6400, + 6479 + ] + ], + "lineara": [ + [ + 67072, + 67455 + ] + ], + "linearb": [ + [ + 65536, + 65791 + ] + ], + "lisu": [ + [ + 42192, + 42239 + ] + ], + "lisu supplement": [ + [ + 73648, + 73663 + ] + ], + "lowsurrogates": [ + [ + 56320, + 57343 + ] + ], + "lycian": [ + [ + 66176, + 66207 + ] + ], + "lydian": [ + [ + 67872, + 67903 + ] + ], + "mahajani": [ + [ + 69968, + 70015 + ] + ], + "mahjong": [ + [ + 126976, + 127023 + ] + ], + "makasar": [ + [ + 73440, + 73471 + ] + ], + "malayalam": [ + [ + 3328, + 3455 + ] + ], + "mandaic": [ + [ + 2112, + 2143 + ] + ], + "manichaean": [ + [ + 68288, + 68351 + ] + ], + "mapsymbols": [ + [ + 128640, + 128767 + ] + ], + "marchen": [ + [ + 72816, + 72895 + ] + ], + "masaram gondi": [ + [ + 72960, + 73055 + ] + ], + "mathematical": [ + [ + 10176, + 10223 + ], + [ + 10624, + 10751 + ], + [ + 119808, + 120831 + ] + ], + "mayan numerals": [ + [ + 119520, + 119551 + ] + ], + "medefaidrin": [ + [ + 93760, + 93855 + ] + ], + "meeteimayek": [ + [ + 43744, + 43775 + ], + [ + 43968, + 44031 + ] + ], + "mende kikakui": [ + [ + 124928, + 125151 + ] + ], + "meroitic": [ + [ + 68000, + 68095 + ] + ], + "miao": [ + [ + 93952, + 94111 + ] + ], + "misc": [ + [ + 8960, + 9215 + ] + ], + "miscsymbols": [ + [ + 9728, + 9983 + ] + ], + "modi": [ + [ + 71168, + 71263 + ] + ], + "modifiertone": [ + [ + 42752, + 42783 + ] + ], + "mongolian": [ + [ + 6144, + 6319 + ], + [ + 71264, + 71295 + ] + ], + "mro": [ + [ + 92736, + 92783 + ] + ], + "multani": [ + [ + 70272, + 70319 + ] + ], + "musical symbols": [ + [ + 119040, + 119295 + ] + ], + "myanmar": [ + [ + 4096, + 4255 + ], + [ + 43488, + 43519 + ], + [ + 43616, + 43647 + ] + ], + "myanmar extended-c": [ + [ + 71376, + 71423 + ] + ], + "nabataean": [ + [ + 67712, + 67759 + ] + ], + "nag mundari": [ + [ + 124112, + 124159 + ] + ], + "nandinagari": [ + [ + 72096, + 72191 + ] + ], + "newa": [ + [ + 70656, + 70783 + ] + ], + "newtailue": [ + [ + 6528, + 6623 + ] + ], + "nko": [ + [ + 1984, + 2047 + ] + ], + "numbers": [ + [ + 8528, + 8591 + ] + ], + "nushu": [ + [ + 110960, + 111359 + ] + ], + "nyiakeng puachue hmong": [ + [ + 123136, + 123215 + ] + ], + "ocr": [ + [ + 9280, + 9311 + ] + ], + "ogham": [ + [ + 5760, + 5791 + ] + ], + "ol onal": [ + [ + 124368, + 124415 + ] + ], + "olchiki": [ + [ + 7248, + 7295 + ] + ], + "old sogdian": [ + [ + 69376, + 69423 + ] + ], + "old uyghur": [ + [ + 69488, + 69551 + ] + ], + "oldhungarian": [ + [ + 68736, + 68863 + ] + ], + "olditalic": [ + [ + 66304, + 66351 + ] + ], + "oldnortharabian": [ + [ + 68224, + 68255 + ] + ], + "oldpermic": [ + [ + 66384, + 66431 + ] + ], + "oldpersian": [ + [ + 66464, + 66527 + ] + ], + "oldsoutharabian": [ + [ + 68192, + 68223 + ] + ], + "oldturkic": [ + [ + 68608, + 68687 + ] + ], + "operators": [ + [ + 8704, + 8959 + ], + [ + 10752, + 11007 + ] + ], + "oriya": [ + [ + 2816, + 2943 + ] + ], + "ornamentaldingbats": [ + [ + 128592, + 128639 + ] + ], + "osage": [ + [ + 66736, + 66815 + ] + ], + "osmanya": [ + [ + 66688, + 66735 + ] + ], + "ottoman siyaq numbers": [ + [ + 126208, + 126287 + ] + ], + "pahawhhmong": [ + [ + 92928, + 93071 + ] + ], + "pahlavi": [ + [ + 68448, + 68527 + ] + ], + "palmyrene": [ + [ + 67680, + 67711 + ] + ], + "parthian": [ + [ + 68416, + 68447 + ] + ], + "paucinhau": [ + [ + 72384, + 72447 + ] + ], + "phagspa": [ + [ + 43072, + 43135 + ] + ], + "phaistosdisc": [ + [ + 66000, + 66047 + ] + ], + "phoenician": [ + [ + 67840, + 67871 + ] + ], + "pictographs": [ + [ + 127744, + 128511 + ], + [ + 129280, + 129535 + ] + ], + "playingcards": [ + [ + 127136, + 127231 + ] + ], + "presentation": [ + [ + 64256, + 64335 + ] + ], + "privateuse": [ + [ + 57344, + 63743 + ], + [ + 983040, + 1114111 + ] + ], + "punctuation": [ + [ + 8192, + 8303 + ], + [ + 11776, + 11903 + ] + ], + "rejang": [ + [ + 43312, + 43359 + ] + ], + "rodnumerals": [ + [ + 119648, + 119679 + ] + ], + "ruminumerals": [ + [ + 69216, + 69247 + ] + ], + "runic": [ + [ + 5792, + 5887 + ] + ], + "samaritan": [ + [ + 2048, + 2111 + ] + ], + "saurashtra": [ + [ + 43136, + 43231 + ] + ], + "sharada": [ + [ + 70016, + 70111 + ] + ], + "shavian": [ + [ + 66640, + 66687 + ] + ], + "shorthandformat": [ + [ + 113824, + 113839 + ] + ], + "siddham": [ + [ + 71040, + 71167 + ] + ], + "sinhala": [ + [ + 3456, + 3583 + ], + [ + 70112, + 70143 + ] + ], + "small": [ + [ + 65104, + 65135 + ] + ], + "small kana extension": [ + [ + 110896, + 110959 + ] + ], + "sogdian": [ + [ + 69424, + 69487 + ] + ], + "sorasompeng": [ + [ + 69840, + 69887 + ] + ], + "soyombo": [ + [ + 72272, + 72367 + ] + ], + "space": [ + [ + 9, + 13 + ], + [ + 32, + 32 + ], + [ + 133 + ], + [ + 8232, + 8233 + ] + ], + "spacing": [ + [ + 688, + 767 + ] + ], + "specials": [ + [ + 65520, + 65535 + ] + ], + "sundanese": [ + [ + 7040, + 7103 + ], + [ + 7360, + 7375 + ] + ], + "sunuwar": [ + [ + 72640, + 72703 + ] + ], + "supersub": [ + [ + 8304, + 8351 + ] + ], + "suttonsignwriting": [ + [ + 120832, + 121519 + ] + ], + "sylotinagri": [ + [ + 43008, + 43055 + ] + ], + "symbols and pictographs extended-a": [ + [ + 129648, + 129791 + ] + ], + "symbols for legacy computing": [ + [ + 129792, + 130047 + ] + ], + "symbols for legacy computing supplement": [ + [ + 117760, + 118463 + ] + ], + "syriac": [ + [ + 1792, + 1871 + ] + ], + "syriac supplement": [ + [ + 2144, + 2159 + ] + ], + "tagalog": [ + [ + 5888, + 5919 + ] + ], + "tagbanwa": [ + [ + 5984, + 6015 + ] + ], + "tags": [ + [ + 917504, + 917631 + ] + ], + "taile": [ + [ + 6480, + 6527 + ] + ], + "taitham": [ + [ + 6688, + 6831 + ] + ], + "taiviet": [ + [ + 43648, + 43743 + ] + ], + "taixuanjing": [ + [ + 119552, + 119647 + ] + ], + "takri": [ + [ + 71296, + 71375 + ] + ], + "tamil": [ + [ + 2944, + 3071 + ] + ], + "tamil supplement": [ + [ + 73664, + 73727 + ] + ], + "tangsa": [ + [ + 92784, + 92879 + ] + ], + "tangut": [ + [ + 94176, + 101119 + ] + ], + "tangut supplement": [ + [ + 101632, + 101759 + ] + ], + "telugu": [ + [ + 3072, + 3199 + ] + ], + "thaana": [ + [ + 1920, + 1983 + ] + ], + "thai": [ + [ + 3584, + 3711 + ] + ], + "tibetan": [ + [ + 3840, + 4095 + ] + ], + "tifinagh": [ + [ + 11568, + 11647 + ] + ], + "tirhuta": [ + [ + 70784, + 70879 + ] + ], + "todhri": [ + [ + 67008, + 67071 + ] + ], + "toto": [ + [ + 123536, + 123583 + ] + ], + "tulu-tigalari": [ + [ + 70528, + 70655 + ] + ], + "ugaritic": [ + [ + 66432, + 66463 + ] + ], + "unified canadian aboriginal syllabics extended-a": [ + [ + 72368, + 72383 + ] + ], + "vai": [ + [ + 42240, + 42559 + ] + ], + "variations": [ + [ + 65024, + 65039 + ], + [ + 917760, + 917999 + ] + ], + "vedic": [ + [ + 7376, + 7423 + ] + ], + "vertical": [ + [ + 65040, + 65055 + ] + ], + "vithkuqi": [ + [ + 66928, + 67007 + ] + ], + "wancho": [ + [ + 123584, + 123647 + ] + ], + "warangciti": [ + [ + 71840, + 71935 + ] + ], + "width": [ + [ + 65280, + 65519 + ] + ], + "xdigit": [ + [ + 48, + 57 + ], + [ + 65, + 70 + ], + [ + 97, + 102 + ] + ], + "yezidi": [ + [ + 69248, + 69311 + ] + ], + "yi": [ + [ + 40960, + 42191 + ] + ], + "yijing": [ + [ + 19904, + 19967 + ] + ], + "zanabazar square": [ + [ + 72192, + 72271 + ] + ], + "znamenny musical notation": [ + [ + 118528, + 118735 + ] + ] +}; +ilib.data.ctype_c = { + "Cc": [ + [ + 0, + 31 + ], + [ + 127, + 159 + ] + ], + "Cf": [ + [ + 173 + ], + [ + 1536, + 1541 + ], + [ + 1564 + ], + [ + 1757 + ], + [ + 1807 + ], + [ + 2192, + 2193 + ], + [ + 2274 + ], + [ + 6158 + ], + [ + 8203, + 8207 + ], + [ + 8234, + 8238 + ], + [ + 8288, + 8292 + ], + [ + 8294, + 8303 + ], + [ + 65279 + ], + [ + 65529, + 65531 + ], + [ + 69821 + ], + [ + 69837 + ], + [ + 78896, + 78911 + ], + [ + 113824, + 113827 + ], + [ + 119155, + 119162 + ], + [ + 917505 + ], + [ + 917536, + 917631 + ] + ], + "Cn": [ + [ + 888, + 889 + ], + [ + 896, + 899 + ], + [ + 907 + ], + [ + 909 + ], + [ + 930 + ], + [ + 1328 + ], + [ + 1367, + 1368 + ], + [ + 1419, + 1420 + ], + [ + 1424 + ], + [ + 1480, + 1487 + ], + [ + 1515, + 1518 + ], + [ + 1525, + 1535 + ], + [ + 1806 + ], + [ + 1867, + 1868 + ], + [ + 1970, + 1983 + ], + [ + 2043, + 2044 + ], + [ + 2094, + 2095 + ], + [ + 2111 + ], + [ + 2140, + 2141 + ], + [ + 2143 + ], + [ + 2155, + 2159 + ], + [ + 2191 + ], + [ + 2194, + 2198 + ], + [ + 2436 + ], + [ + 2445, + 2446 + ], + [ + 2449, + 2450 + ], + [ + 2473 + ], + [ + 2481 + ], + [ + 2483, + 2485 + ], + [ + 2490, + 2491 + ], + [ + 2501, + 2502 + ], + [ + 2505, + 2506 + ], + [ + 2511, + 2518 + ], + [ + 2520, + 2523 + ], + [ + 2526 + ], + [ + 2532, + 2533 + ], + [ + 2559, + 2560 + ], + [ + 2564 + ], + [ + 2571, + 2574 + ], + [ + 2577, + 2578 + ], + [ + 2601 + ], + [ + 2609 + ], + [ + 2612 + ], + [ + 2615 + ], + [ + 2618, + 2619 + ], + [ + 2621 + ], + [ + 2627, + 2630 + ], + [ + 2633, + 2634 + ], + [ + 2638, + 2640 + ], + [ + 2642, + 2648 + ], + [ + 2653 + ], + [ + 2655, + 2661 + ], + [ + 2679, + 2688 + ], + [ + 2692 + ], + [ + 2702 + ], + [ + 2706 + ], + [ + 2729 + ], + [ + 2737 + ], + [ + 2740 + ], + [ + 2746, + 2747 + ], + [ + 2758 + ], + [ + 2762 + ], + [ + 2766, + 2767 + ], + [ + 2769, + 2783 + ], + [ + 2788, + 2789 + ], + [ + 2802, + 2808 + ], + [ + 2816 + ], + [ + 2820 + ], + [ + 2829, + 2830 + ], + [ + 2833, + 2834 + ], + [ + 2857 + ], + [ + 2865 + ], + [ + 2868 + ], + [ + 2874, + 2875 + ], + [ + 2885, + 2886 + ], + [ + 2889, + 2890 + ], + [ + 2894, + 2900 + ], + [ + 2904, + 2907 + ], + [ + 2910 + ], + [ + 2916, + 2917 + ], + [ + 2936, + 2945 + ], + [ + 2948 + ], + [ + 2955, + 2957 + ], + [ + 2961 + ], + [ + 2966, + 2968 + ], + [ + 2971 + ], + [ + 2973 + ], + [ + 2976, + 2978 + ], + [ + 2981, + 2983 + ], + [ + 2987, + 2989 + ], + [ + 3002, + 3005 + ], + [ + 3011, + 3013 + ], + [ + 3017 + ], + [ + 3022, + 3023 + ], + [ + 3025, + 3030 + ], + [ + 3032, + 3045 + ], + [ + 3067, + 3071 + ], + [ + 3085 + ], + [ + 3089 + ], + [ + 3113 + ], + [ + 3130, + 3131 + ], + [ + 3141 + ], + [ + 3145 + ], + [ + 3150, + 3156 + ], + [ + 3159 + ], + [ + 3163, + 3164 + ], + [ + 3166, + 3167 + ], + [ + 3172, + 3173 + ], + [ + 3184, + 3190 + ], + [ + 3213 + ], + [ + 3217 + ], + [ + 3241 + ], + [ + 3252 + ], + [ + 3258, + 3259 + ], + [ + 3269 + ], + [ + 3273 + ], + [ + 3278, + 3284 + ], + [ + 3287, + 3292 + ], + [ + 3295 + ], + [ + 3300, + 3301 + ], + [ + 3312 + ], + [ + 3316, + 3327 + ], + [ + 3341 + ], + [ + 3345 + ], + [ + 3397 + ], + [ + 3401 + ], + [ + 3408, + 3411 + ], + [ + 3428, + 3429 + ], + [ + 3456 + ], + [ + 3460 + ], + [ + 3479, + 3481 + ], + [ + 3506 + ], + [ + 3516 + ], + [ + 3518, + 3519 + ], + [ + 3527, + 3529 + ], + [ + 3531, + 3534 + ], + [ + 3541 + ], + [ + 3543 + ], + [ + 3552, + 3557 + ], + [ + 3568, + 3569 + ], + [ + 3573, + 3584 + ], + [ + 3643, + 3646 + ], + [ + 3676, + 3712 + ], + [ + 3715 + ], + [ + 3717 + ], + [ + 3723 + ], + [ + 3748 + ], + [ + 3750 + ], + [ + 3774, + 3775 + ], + [ + 3781 + ], + [ + 3783 + ], + [ + 3791 + ], + [ + 3802, + 3803 + ], + [ + 3808, + 3839 + ], + [ + 3912 + ], + [ + 3949, + 3952 + ], + [ + 3992 + ], + [ + 4029 + ], + [ + 4045 + ], + [ + 4059, + 4095 + ], + [ + 4294 + ], + [ + 4296, + 4300 + ], + [ + 4302, + 4303 + ], + [ + 4681 + ], + [ + 4686, + 4687 + ], + [ + 4695 + ], + [ + 4697 + ], + [ + 4702, + 4703 + ], + [ + 4745 + ], + [ + 4750, + 4751 + ], + [ + 4785 + ], + [ + 4790, + 4791 + ], + [ + 4799 + ], + [ + 4801 + ], + [ + 4806, + 4807 + ], + [ + 4823 + ], + [ + 4881 + ], + [ + 4886, + 4887 + ], + [ + 4955, + 4956 + ], + [ + 4989, + 4991 + ], + [ + 5018, + 5023 + ], + [ + 5110, + 5111 + ], + [ + 5118, + 5119 + ], + [ + 5789, + 5791 + ], + [ + 5881, + 5887 + ], + [ + 5910, + 5918 + ], + [ + 5943, + 5951 + ], + [ + 5972, + 5983 + ], + [ + 5997 + ], + [ + 6001 + ], + [ + 6004, + 6015 + ], + [ + 6110, + 6111 + ], + [ + 6122, + 6127 + ], + [ + 6138, + 6143 + ], + [ + 6170, + 6175 + ], + [ + 6265, + 6271 + ], + [ + 6315, + 6319 + ], + [ + 6390, + 6399 + ], + [ + 6431 + ], + [ + 6444, + 6447 + ], + [ + 6460, + 6463 + ], + [ + 6465, + 6467 + ], + [ + 6510, + 6511 + ], + [ + 6517, + 6527 + ], + [ + 6572, + 6575 + ], + [ + 6602, + 6607 + ], + [ + 6619, + 6621 + ], + [ + 6684, + 6685 + ], + [ + 6751 + ], + [ + 6781, + 6782 + ], + [ + 6794, + 6799 + ], + [ + 6810, + 6815 + ], + [ + 6830, + 6831 + ], + [ + 6863, + 6911 + ], + [ + 6989 + ], + [ + 7156, + 7163 + ], + [ + 7224, + 7226 + ], + [ + 7242, + 7244 + ], + [ + 7307, + 7311 + ], + [ + 7355, + 7356 + ], + [ + 7368, + 7375 + ], + [ + 7419, + 7423 + ], + [ + 7958, + 7959 + ], + [ + 7966, + 7967 + ], + [ + 8006, + 8007 + ], + [ + 8014, + 8015 + ], + [ + 8024 + ], + [ + 8026 + ], + [ + 8028 + ], + [ + 8030 + ], + [ + 8062, + 8063 + ], + [ + 8117 + ], + [ + 8133 + ], + [ + 8148, + 8149 + ], + [ + 8156 + ], + [ + 8176, + 8177 + ], + [ + 8181 + ], + [ + 8191 + ], + [ + 8293 + ], + [ + 8306, + 8307 + ], + [ + 8335 + ], + [ + 8349, + 8351 + ], + [ + 8385, + 8399 + ], + [ + 8433, + 8447 + ], + [ + 8588, + 8591 + ], + [ + 9258, + 9279 + ], + [ + 9291, + 9311 + ], + [ + 11124, + 11125 + ], + [ + 11158 + ], + [ + 11508, + 11512 + ], + [ + 11558 + ], + [ + 11560, + 11564 + ], + [ + 11566, + 11567 + ], + [ + 11624, + 11630 + ], + [ + 11633, + 11646 + ], + [ + 11671, + 11679 + ], + [ + 11687 + ], + [ + 11695 + ], + [ + 11703 + ], + [ + 11711 + ], + [ + 11719 + ], + [ + 11727 + ], + [ + 11735 + ], + [ + 11743 + ], + [ + 11870, + 11903 + ], + [ + 11930 + ], + [ + 12020, + 12031 + ], + [ + 12246, + 12271 + ], + [ + 12352 + ], + [ + 12439, + 12440 + ], + [ + 12544, + 12548 + ], + [ + 12592 + ], + [ + 12687 + ], + [ + 12774, + 12782 + ], + [ + 12831 + ], + [ + 42125, + 42127 + ], + [ + 42183, + 42191 + ], + [ + 42540, + 42559 + ], + [ + 42744, + 42751 + ], + [ + 42958, + 42959 + ], + [ + 42962 + ], + [ + 42964 + ], + [ + 42973, + 42993 + ], + [ + 43053, + 43055 + ], + [ + 43066, + 43071 + ], + [ + 43128, + 43135 + ], + [ + 43206, + 43213 + ], + [ + 43226, + 43231 + ], + [ + 43348, + 43358 + ], + [ + 43389, + 43391 + ], + [ + 43470 + ], + [ + 43482, + 43485 + ], + [ + 43519 + ], + [ + 43575, + 43583 + ], + [ + 43598, + 43599 + ], + [ + 43610, + 43611 + ], + [ + 43715, + 43738 + ], + [ + 43767, + 43776 + ], + [ + 43783, + 43784 + ], + [ + 43791, + 43792 + ], + [ + 43799, + 43807 + ], + [ + 43815 + ], + [ + 43823 + ], + [ + 43884, + 43887 + ], + [ + 44014, + 44015 + ], + [ + 44026, + 44031 + ], + [ + 55204, + 55215 + ], + [ + 55239, + 55242 + ], + [ + 55292, + 55295 + ], + [ + 64110, + 64111 + ], + [ + 64218, + 64255 + ], + [ + 64263, + 64274 + ], + [ + 64280, + 64284 + ], + [ + 64311 + ], + [ + 64317 + ], + [ + 64319 + ], + [ + 64322 + ], + [ + 64325 + ], + [ + 64451, + 64466 + ], + [ + 64912, + 64913 + ], + [ + 64968, + 64974 + ], + [ + 64976, + 65007 + ], + [ + 65050, + 65055 + ], + [ + 65107 + ], + [ + 65127 + ], + [ + 65132, + 65135 + ], + [ + 65141 + ], + [ + 65277, + 65278 + ], + [ + 65280 + ], + [ + 65471, + 65473 + ], + [ + 65480, + 65481 + ], + [ + 65488, + 65489 + ], + [ + 65496, + 65497 + ], + [ + 65501, + 65503 + ], + [ + 65511 + ], + [ + 65519, + 65528 + ], + [ + 65534, + 65535 + ], + [ + 65548 + ], + [ + 65575 + ], + [ + 65595 + ], + [ + 65598 + ], + [ + 65614, + 65615 + ], + [ + 65630, + 65663 + ], + [ + 65787, + 65791 + ], + [ + 65795, + 65798 + ], + [ + 65844, + 65846 + ], + [ + 65935 + ], + [ + 65949, + 65951 + ], + [ + 65953, + 65999 + ], + [ + 66046, + 66175 + ], + [ + 66205, + 66207 + ], + [ + 66257, + 66271 + ], + [ + 66300, + 66303 + ], + [ + 66340, + 66348 + ], + [ + 66379, + 66383 + ], + [ + 66427, + 66431 + ], + [ + 66462 + ], + [ + 66500, + 66503 + ], + [ + 66518, + 66559 + ], + [ + 66718, + 66719 + ], + [ + 66730, + 66735 + ], + [ + 66772, + 66775 + ], + [ + 66812, + 66815 + ], + [ + 66856, + 66863 + ], + [ + 66916, + 66926 + ], + [ + 66939 + ], + [ + 66955 + ], + [ + 66963 + ], + [ + 66966 + ], + [ + 66978 + ], + [ + 66994 + ], + [ + 67002 + ], + [ + 67005, + 67007 + ], + [ + 67060, + 67071 + ], + [ + 67383, + 67391 + ], + [ + 67414, + 67423 + ], + [ + 67432, + 67455 + ], + [ + 67462 + ], + [ + 67505 + ], + [ + 67515, + 67583 + ], + [ + 67590, + 67591 + ], + [ + 67593 + ], + [ + 67638 + ], + [ + 67641, + 67643 + ], + [ + 67645, + 67646 + ], + [ + 67670 + ], + [ + 67743, + 67750 + ], + [ + 67760, + 67807 + ], + [ + 67827 + ], + [ + 67830, + 67834 + ], + [ + 67868, + 67870 + ], + [ + 67898, + 67902 + ], + [ + 67904, + 67967 + ], + [ + 68024, + 68027 + ], + [ + 68048, + 68049 + ], + [ + 68100 + ], + [ + 68103, + 68107 + ], + [ + 68116 + ], + [ + 68120 + ], + [ + 68150, + 68151 + ], + [ + 68155, + 68158 + ], + [ + 68169, + 68175 + ], + [ + 68185, + 68191 + ], + [ + 68256, + 68287 + ], + [ + 68327, + 68330 + ], + [ + 68343, + 68351 + ], + [ + 68406, + 68408 + ], + [ + 68438, + 68439 + ], + [ + 68467, + 68471 + ], + [ + 68498, + 68504 + ], + [ + 68509, + 68520 + ], + [ + 68528, + 68607 + ], + [ + 68681, + 68735 + ], + [ + 68787, + 68799 + ], + [ + 68851, + 68857 + ], + [ + 68904, + 68911 + ], + [ + 68922, + 68927 + ], + [ + 68966, + 68968 + ], + [ + 68998, + 69005 + ], + [ + 69008, + 69215 + ], + [ + 69247 + ], + [ + 69290 + ], + [ + 69294, + 69295 + ], + [ + 69298, + 69313 + ], + [ + 69317, + 69371 + ], + [ + 69416, + 69423 + ], + [ + 69466, + 69487 + ], + [ + 69514, + 69551 + ], + [ + 69580, + 69599 + ], + [ + 69623, + 69631 + ], + [ + 69710, + 69713 + ], + [ + 69750, + 69758 + ], + [ + 69827, + 69836 + ], + [ + 69838, + 69839 + ], + [ + 69865, + 69871 + ], + [ + 69882, + 69887 + ], + [ + 69941 + ], + [ + 69960, + 69967 + ], + [ + 70007, + 70015 + ], + [ + 70112 + ], + [ + 70133, + 70143 + ], + [ + 70162 + ], + [ + 70210, + 70271 + ], + [ + 70279 + ], + [ + 70281 + ], + [ + 70286 + ], + [ + 70302 + ], + [ + 70314, + 70319 + ], + [ + 70379, + 70383 + ], + [ + 70394, + 70399 + ], + [ + 70404 + ], + [ + 70413, + 70414 + ], + [ + 70417, + 70418 + ], + [ + 70441 + ], + [ + 70449 + ], + [ + 70452 + ], + [ + 70458 + ], + [ + 70469, + 70470 + ], + [ + 70473, + 70474 + ], + [ + 70478, + 70479 + ], + [ + 70481, + 70486 + ], + [ + 70488, + 70492 + ], + [ + 70500, + 70501 + ], + [ + 70509, + 70511 + ], + [ + 70517, + 70527 + ], + [ + 70538 + ], + [ + 70540, + 70541 + ], + [ + 70543 + ], + [ + 70582 + ], + [ + 70593 + ], + [ + 70595, + 70596 + ], + [ + 70598 + ], + [ + 70603 + ], + [ + 70614 + ], + [ + 70617, + 70624 + ], + [ + 70627, + 70655 + ], + [ + 70748 + ], + [ + 70754, + 70783 + ], + [ + 70856, + 70863 + ], + [ + 70874, + 71039 + ], + [ + 71094, + 71095 + ], + [ + 71134, + 71167 + ], + [ + 71237, + 71247 + ], + [ + 71258, + 71263 + ], + [ + 71277, + 71295 + ], + [ + 71354, + 71359 + ], + [ + 71370, + 71375 + ], + [ + 71396, + 71423 + ], + [ + 71451, + 71452 + ], + [ + 71468, + 71471 + ], + [ + 71495, + 71679 + ], + [ + 71740, + 71839 + ], + [ + 71923, + 71934 + ], + [ + 71943, + 71944 + ], + [ + 71946, + 71947 + ], + [ + 71956 + ], + [ + 71959 + ], + [ + 71990 + ], + [ + 71993, + 71994 + ], + [ + 72007, + 72015 + ], + [ + 72026, + 72095 + ], + [ + 72104, + 72105 + ], + [ + 72152, + 72153 + ], + [ + 72165, + 72191 + ], + [ + 72264, + 72271 + ], + [ + 72355, + 72367 + ], + [ + 72441, + 72447 + ], + [ + 72458, + 72639 + ], + [ + 72674, + 72687 + ], + [ + 72698, + 72703 + ], + [ + 72713 + ], + [ + 72759 + ], + [ + 72774, + 72783 + ], + [ + 72813, + 72815 + ], + [ + 72848, + 72849 + ], + [ + 72872 + ], + [ + 72887, + 72959 + ], + [ + 72967 + ], + [ + 72970 + ], + [ + 73015, + 73017 + ], + [ + 73019 + ], + [ + 73022 + ], + [ + 73032, + 73039 + ], + [ + 73050, + 73055 + ], + [ + 73062 + ], + [ + 73065 + ], + [ + 73103 + ], + [ + 73106 + ], + [ + 73113, + 73119 + ], + [ + 73130, + 73439 + ], + [ + 73465, + 73471 + ], + [ + 73489 + ], + [ + 73531, + 73533 + ], + [ + 73563, + 73647 + ], + [ + 73649, + 73663 + ], + [ + 73714, + 73726 + ], + [ + 74650, + 74751 + ], + [ + 74863 + ], + [ + 74869, + 74879 + ], + [ + 75076, + 77711 + ], + [ + 77811, + 77823 + ], + [ + 78934, + 78943 + ], + [ + 82939, + 82943 + ], + [ + 83527, + 90367 + ], + [ + 90426, + 92159 + ], + [ + 92729, + 92735 + ], + [ + 92767 + ], + [ + 92778, + 92781 + ], + [ + 92863 + ], + [ + 92874, + 92879 + ], + [ + 92910, + 92911 + ], + [ + 92918, + 92927 + ], + [ + 92998, + 93007 + ], + [ + 93018 + ], + [ + 93026 + ], + [ + 93048, + 93052 + ], + [ + 93072, + 93503 + ], + [ + 93562, + 93759 + ], + [ + 93851, + 93951 + ], + [ + 94027, + 94030 + ], + [ + 94088, + 94094 + ], + [ + 94112, + 94175 + ], + [ + 94181, + 94191 + ], + [ + 94194, + 94207 + ], + [ + 100344, + 100351 + ], + [ + 101590, + 101630 + ], + [ + 101641, + 110575 + ], + [ + 110580 + ], + [ + 110588 + ], + [ + 110591 + ], + [ + 110883, + 110897 + ], + [ + 110899, + 110927 + ], + [ + 110931, + 110932 + ], + [ + 110934, + 110947 + ], + [ + 110952, + 110959 + ], + [ + 111356, + 113663 + ], + [ + 113771, + 113775 + ], + [ + 113789, + 113791 + ], + [ + 113801, + 113807 + ], + [ + 113818, + 113819 + ], + [ + 113828, + 117759 + ], + [ + 118010, + 118015 + ], + [ + 118452, + 118527 + ], + [ + 118574, + 118575 + ], + [ + 118599, + 118607 + ], + [ + 118724, + 118783 + ], + [ + 119030, + 119039 + ], + [ + 119079, + 119080 + ], + [ + 119275, + 119295 + ], + [ + 119366, + 119487 + ], + [ + 119508, + 119519 + ], + [ + 119540, + 119551 + ], + [ + 119639, + 119647 + ], + [ + 119673, + 119807 + ], + [ + 119893 + ], + [ + 119965 + ], + [ + 119968, + 119969 + ], + [ + 119971, + 119972 + ], + [ + 119975, + 119976 + ], + [ + 119981 + ], + [ + 119994 + ], + [ + 119996 + ], + [ + 120004 + ], + [ + 120070 + ], + [ + 120075, + 120076 + ], + [ + 120085 + ], + [ + 120093 + ], + [ + 120122 + ], + [ + 120127 + ], + [ + 120133 + ], + [ + 120135, + 120137 + ], + [ + 120145 + ], + [ + 120486, + 120487 + ], + [ + 120780, + 120781 + ], + [ + 121484, + 121498 + ], + [ + 121504 + ], + [ + 121520, + 122623 + ], + [ + 122655, + 122660 + ], + [ + 122667, + 122879 + ], + [ + 122887 + ], + [ + 122905, + 122906 + ], + [ + 122914 + ], + [ + 122917 + ], + [ + 122923, + 122927 + ], + [ + 122990, + 123022 + ], + [ + 123024, + 123135 + ], + [ + 123181, + 123183 + ], + [ + 123198, + 123199 + ], + [ + 123210, + 123213 + ], + [ + 123216, + 123535 + ], + [ + 123567, + 123583 + ], + [ + 123642, + 123646 + ], + [ + 123648, + 124111 + ], + [ + 124154, + 124367 + ], + [ + 124411, + 124414 + ], + [ + 124416, + 124895 + ], + [ + 124903 + ], + [ + 124908 + ], + [ + 124911 + ], + [ + 124927 + ], + [ + 125125, + 125126 + ], + [ + 125143, + 125183 + ], + [ + 125260, + 125263 + ], + [ + 125274, + 125277 + ], + [ + 125280, + 126064 + ], + [ + 126133, + 126208 + ], + [ + 126270, + 126463 + ], + [ + 126468 + ], + [ + 126496 + ], + [ + 126499 + ], + [ + 126501, + 126502 + ], + [ + 126504 + ], + [ + 126515 + ], + [ + 126520 + ], + [ + 126522 + ], + [ + 126524, + 126529 + ], + [ + 126531, + 126534 + ], + [ + 126536 + ], + [ + 126538 + ], + [ + 126540 + ], + [ + 126544 + ], + [ + 126547 + ], + [ + 126549, + 126550 + ], + [ + 126552 + ], + [ + 126554 + ], + [ + 126556 + ], + [ + 126558 + ], + [ + 126560 + ], + [ + 126563 + ], + [ + 126565, + 126566 + ], + [ + 126571 + ], + [ + 126579 + ], + [ + 126584 + ], + [ + 126589 + ], + [ + 126591 + ], + [ + 126602 + ], + [ + 126620, + 126624 + ], + [ + 126628 + ], + [ + 126634 + ], + [ + 126652, + 126703 + ], + [ + 126706, + 126975 + ], + [ + 127020, + 127023 + ], + [ + 127124, + 127135 + ], + [ + 127151, + 127152 + ], + [ + 127168 + ], + [ + 127184 + ], + [ + 127222, + 127231 + ], + [ + 127406, + 127461 + ], + [ + 127491, + 127503 + ], + [ + 127548, + 127551 + ], + [ + 127561, + 127567 + ], + [ + 127570, + 127583 + ], + [ + 127590, + 127743 + ], + [ + 128728, + 128731 + ], + [ + 128749, + 128751 + ], + [ + 128765, + 128767 + ], + [ + 128887, + 128890 + ], + [ + 128986, + 128991 + ], + [ + 129004, + 129007 + ], + [ + 129009, + 129023 + ], + [ + 129036, + 129039 + ], + [ + 129096, + 129103 + ], + [ + 129114, + 129119 + ], + [ + 129160, + 129167 + ], + [ + 129198, + 129199 + ], + [ + 129212, + 129215 + ], + [ + 129218, + 129279 + ], + [ + 129620, + 129631 + ], + [ + 129646, + 129647 + ], + [ + 129661, + 129663 + ], + [ + 129674, + 129678 + ], + [ + 129735, + 129741 + ], + [ + 129757, + 129758 + ], + [ + 129770, + 129775 + ], + [ + 129785, + 129791 + ], + [ + 129939 + ], + [ + 130042, + 131071 + ], + [ + 173792, + 173823 + ], + [ + 177978, + 177983 + ], + [ + 178206, + 178207 + ], + [ + 183970, + 183983 + ], + [ + 191457, + 191471 + ], + [ + 192094, + 194559 + ], + [ + 195102, + 196607 + ], + [ + 201547, + 201551 + ], + [ + 205744, + 917504 + ], + [ + 917506, + 917535 + ], + [ + 917632, + 917759 + ], + [ + 918000, + 983039 + ], + [ + 1048574, + 1048575 + ], + [ + 1114110, + 1114111 + ] + ], + "Co": [ + [ + 57344, + 63743 + ], + [ + 983040, + 1048573 + ], + [ + 1048576, + 1114109 + ] + ], + "Cs": [ + [ + 55296, + 57343 + ] + ] +}; +ilib.data.ctype_l = { + "Ll": [ + [ + 97, + 122 + ], + [ + 181 + ], + [ + 223, + 246 + ], + [ + 248, + 255 + ], + [ + 257 + ], + [ + 259 + ], + [ + 261 + ], + [ + 263 + ], + [ + 265 + ], + [ + 267 + ], + [ + 269 + ], + [ + 271 + ], + [ + 273 + ], + [ + 275 + ], + [ + 277 + ], + [ + 279 + ], + [ + 281 + ], + [ + 283 + ], + [ + 285 + ], + [ + 287 + ], + [ + 289 + ], + [ + 291 + ], + [ + 293 + ], + [ + 295 + ], + [ + 297 + ], + [ + 299 + ], + [ + 301 + ], + [ + 303 + ], + [ + 305 + ], + [ + 307 + ], + [ + 309 + ], + [ + 311, + 312 + ], + [ + 314 + ], + [ + 316 + ], + [ + 318 + ], + [ + 320 + ], + [ + 322 + ], + [ + 324 + ], + [ + 326 + ], + [ + 328, + 329 + ], + [ + 331 + ], + [ + 333 + ], + [ + 335 + ], + [ + 337 + ], + [ + 339 + ], + [ + 341 + ], + [ + 343 + ], + [ + 345 + ], + [ + 347 + ], + [ + 349 + ], + [ + 351 + ], + [ + 353 + ], + [ + 355 + ], + [ + 357 + ], + [ + 359 + ], + [ + 361 + ], + [ + 363 + ], + [ + 365 + ], + [ + 367 + ], + [ + 369 + ], + [ + 371 + ], + [ + 373 + ], + [ + 375 + ], + [ + 378 + ], + [ + 380 + ], + [ + 382, + 384 + ], + [ + 387 + ], + [ + 389 + ], + [ + 392 + ], + [ + 396, + 397 + ], + [ + 402 + ], + [ + 405 + ], + [ + 409, + 411 + ], + [ + 414 + ], + [ + 417 + ], + [ + 419 + ], + [ + 421 + ], + [ + 424 + ], + [ + 426, + 427 + ], + [ + 429 + ], + [ + 432 + ], + [ + 436 + ], + [ + 438 + ], + [ + 441, + 442 + ], + [ + 445, + 447 + ], + [ + 454 + ], + [ + 457 + ], + [ + 460 + ], + [ + 462 + ], + [ + 464 + ], + [ + 466 + ], + [ + 468 + ], + [ + 470 + ], + [ + 472 + ], + [ + 474 + ], + [ + 476, + 477 + ], + [ + 479 + ], + [ + 481 + ], + [ + 483 + ], + [ + 485 + ], + [ + 487 + ], + [ + 489 + ], + [ + 491 + ], + [ + 493 + ], + [ + 495, + 496 + ], + [ + 499 + ], + [ + 501 + ], + [ + 505 + ], + [ + 507 + ], + [ + 509 + ], + [ + 511 + ], + [ + 513 + ], + [ + 515 + ], + [ + 517 + ], + [ + 519 + ], + [ + 521 + ], + [ + 523 + ], + [ + 525 + ], + [ + 527 + ], + [ + 529 + ], + [ + 531 + ], + [ + 533 + ], + [ + 535 + ], + [ + 537 + ], + [ + 539 + ], + [ + 541 + ], + [ + 543 + ], + [ + 545 + ], + [ + 547 + ], + [ + 549 + ], + [ + 551 + ], + [ + 553 + ], + [ + 555 + ], + [ + 557 + ], + [ + 559 + ], + [ + 561 + ], + [ + 563, + 569 + ], + [ + 572 + ], + [ + 575, + 576 + ], + [ + 578 + ], + [ + 583 + ], + [ + 585 + ], + [ + 587 + ], + [ + 589 + ], + [ + 591, + 659 + ], + [ + 661, + 687 + ], + [ + 881 + ], + [ + 883 + ], + [ + 887 + ], + [ + 891, + 893 + ], + [ + 912 + ], + [ + 940, + 974 + ], + [ + 976, + 977 + ], + [ + 981, + 983 + ], + [ + 985 + ], + [ + 987 + ], + [ + 989 + ], + [ + 991 + ], + [ + 993 + ], + [ + 995 + ], + [ + 997 + ], + [ + 999 + ], + [ + 1001 + ], + [ + 1003 + ], + [ + 1005 + ], + [ + 1007, + 1011 + ], + [ + 1013 + ], + [ + 1016 + ], + [ + 1019, + 1020 + ], + [ + 1072, + 1119 + ], + [ + 1121 + ], + [ + 1123 + ], + [ + 1125 + ], + [ + 1127 + ], + [ + 1129 + ], + [ + 1131 + ], + [ + 1133 + ], + [ + 1135 + ], + [ + 1137 + ], + [ + 1139 + ], + [ + 1141 + ], + [ + 1143 + ], + [ + 1145 + ], + [ + 1147 + ], + [ + 1149 + ], + [ + 1151 + ], + [ + 1153 + ], + [ + 1163 + ], + [ + 1165 + ], + [ + 1167 + ], + [ + 1169 + ], + [ + 1171 + ], + [ + 1173 + ], + [ + 1175 + ], + [ + 1177 + ], + [ + 1179 + ], + [ + 1181 + ], + [ + 1183 + ], + [ + 1185 + ], + [ + 1187 + ], + [ + 1189 + ], + [ + 1191 + ], + [ + 1193 + ], + [ + 1195 + ], + [ + 1197 + ], + [ + 1199 + ], + [ + 1201 + ], + [ + 1203 + ], + [ + 1205 + ], + [ + 1207 + ], + [ + 1209 + ], + [ + 1211 + ], + [ + 1213 + ], + [ + 1215 + ], + [ + 1218 + ], + [ + 1220 + ], + [ + 1222 + ], + [ + 1224 + ], + [ + 1226 + ], + [ + 1228 + ], + [ + 1230, + 1231 + ], + [ + 1233 + ], + [ + 1235 + ], + [ + 1237 + ], + [ + 1239 + ], + [ + 1241 + ], + [ + 1243 + ], + [ + 1245 + ], + [ + 1247 + ], + [ + 1249 + ], + [ + 1251 + ], + [ + 1253 + ], + [ + 1255 + ], + [ + 1257 + ], + [ + 1259 + ], + [ + 1261 + ], + [ + 1263 + ], + [ + 1265 + ], + [ + 1267 + ], + [ + 1269 + ], + [ + 1271 + ], + [ + 1273 + ], + [ + 1275 + ], + [ + 1277 + ], + [ + 1279 + ], + [ + 1281 + ], + [ + 1283 + ], + [ + 1285 + ], + [ + 1287 + ], + [ + 1289 + ], + [ + 1291 + ], + [ + 1293 + ], + [ + 1295 + ], + [ + 1297 + ], + [ + 1299 + ], + [ + 1301 + ], + [ + 1303 + ], + [ + 1305 + ], + [ + 1307 + ], + [ + 1309 + ], + [ + 1311 + ], + [ + 1313 + ], + [ + 1315 + ], + [ + 1317 + ], + [ + 1319 + ], + [ + 1321 + ], + [ + 1323 + ], + [ + 1325 + ], + [ + 1327 + ], + [ + 1376, + 1416 + ], + [ + 4304, + 4346 + ], + [ + 4349, + 4351 + ], + [ + 5112, + 5117 + ], + [ + 7296, + 7304 + ], + [ + 7306 + ], + [ + 7424, + 7467 + ], + [ + 7531, + 7543 + ], + [ + 7545, + 7578 + ], + [ + 7681 + ], + [ + 7683 + ], + [ + 7685 + ], + [ + 7687 + ], + [ + 7689 + ], + [ + 7691 + ], + [ + 7693 + ], + [ + 7695 + ], + [ + 7697 + ], + [ + 7699 + ], + [ + 7701 + ], + [ + 7703 + ], + [ + 7705 + ], + [ + 7707 + ], + [ + 7709 + ], + [ + 7711 + ], + [ + 7713 + ], + [ + 7715 + ], + [ + 7717 + ], + [ + 7719 + ], + [ + 7721 + ], + [ + 7723 + ], + [ + 7725 + ], + [ + 7727 + ], + [ + 7729 + ], + [ + 7731 + ], + [ + 7733 + ], + [ + 7735 + ], + [ + 7737 + ], + [ + 7739 + ], + [ + 7741 + ], + [ + 7743 + ], + [ + 7745 + ], + [ + 7747 + ], + [ + 7749 + ], + [ + 7751 + ], + [ + 7753 + ], + [ + 7755 + ], + [ + 7757 + ], + [ + 7759 + ], + [ + 7761 + ], + [ + 7763 + ], + [ + 7765 + ], + [ + 7767 + ], + [ + 7769 + ], + [ + 7771 + ], + [ + 7773 + ], + [ + 7775 + ], + [ + 7777 + ], + [ + 7779 + ], + [ + 7781 + ], + [ + 7783 + ], + [ + 7785 + ], + [ + 7787 + ], + [ + 7789 + ], + [ + 7791 + ], + [ + 7793 + ], + [ + 7795 + ], + [ + 7797 + ], + [ + 7799 + ], + [ + 7801 + ], + [ + 7803 + ], + [ + 7805 + ], + [ + 7807 + ], + [ + 7809 + ], + [ + 7811 + ], + [ + 7813 + ], + [ + 7815 + ], + [ + 7817 + ], + [ + 7819 + ], + [ + 7821 + ], + [ + 7823 + ], + [ + 7825 + ], + [ + 7827 + ], + [ + 7829, + 7837 + ], + [ + 7839 + ], + [ + 7841 + ], + [ + 7843 + ], + [ + 7845 + ], + [ + 7847 + ], + [ + 7849 + ], + [ + 7851 + ], + [ + 7853 + ], + [ + 7855 + ], + [ + 7857 + ], + [ + 7859 + ], + [ + 7861 + ], + [ + 7863 + ], + [ + 7865 + ], + [ + 7867 + ], + [ + 7869 + ], + [ + 7871 + ], + [ + 7873 + ], + [ + 7875 + ], + [ + 7877 + ], + [ + 7879 + ], + [ + 7881 + ], + [ + 7883 + ], + [ + 7885 + ], + [ + 7887 + ], + [ + 7889 + ], + [ + 7891 + ], + [ + 7893 + ], + [ + 7895 + ], + [ + 7897 + ], + [ + 7899 + ], + [ + 7901 + ], + [ + 7903 + ], + [ + 7905 + ], + [ + 7907 + ], + [ + 7909 + ], + [ + 7911 + ], + [ + 7913 + ], + [ + 7915 + ], + [ + 7917 + ], + [ + 7919 + ], + [ + 7921 + ], + [ + 7923 + ], + [ + 7925 + ], + [ + 7927 + ], + [ + 7929 + ], + [ + 7931 + ], + [ + 7933 + ], + [ + 7935, + 7943 + ], + [ + 7952, + 7957 + ], + [ + 7968, + 7975 + ], + [ + 7984, + 7991 + ], + [ + 8000, + 8005 + ], + [ + 8016, + 8023 + ], + [ + 8032, + 8039 + ], + [ + 8048, + 8061 + ], + [ + 8064, + 8071 + ], + [ + 8080, + 8087 + ], + [ + 8096, + 8103 + ], + [ + 8112, + 8116 + ], + [ + 8118, + 8119 + ], + [ + 8126 + ], + [ + 8130, + 8132 + ], + [ + 8134, + 8135 + ], + [ + 8144, + 8147 + ], + [ + 8150, + 8151 + ], + [ + 8160, + 8167 + ], + [ + 8178, + 8180 + ], + [ + 8182, + 8183 + ], + [ + 8458 + ], + [ + 8462, + 8463 + ], + [ + 8467 + ], + [ + 8495 + ], + [ + 8500 + ], + [ + 8505 + ], + [ + 8508, + 8509 + ], + [ + 8518, + 8521 + ], + [ + 8526 + ], + [ + 8580 + ], + [ + 11312, + 11359 + ], + [ + 11361 + ], + [ + 11365, + 11366 + ], + [ + 11368 + ], + [ + 11370 + ], + [ + 11372 + ], + [ + 11377 + ], + [ + 11379, + 11380 + ], + [ + 11382, + 11387 + ], + [ + 11393 + ], + [ + 11395 + ], + [ + 11397 + ], + [ + 11399 + ], + [ + 11401 + ], + [ + 11403 + ], + [ + 11405 + ], + [ + 11407 + ], + [ + 11409 + ], + [ + 11411 + ], + [ + 11413 + ], + [ + 11415 + ], + [ + 11417 + ], + [ + 11419 + ], + [ + 11421 + ], + [ + 11423 + ], + [ + 11425 + ], + [ + 11427 + ], + [ + 11429 + ], + [ + 11431 + ], + [ + 11433 + ], + [ + 11435 + ], + [ + 11437 + ], + [ + 11439 + ], + [ + 11441 + ], + [ + 11443 + ], + [ + 11445 + ], + [ + 11447 + ], + [ + 11449 + ], + [ + 11451 + ], + [ + 11453 + ], + [ + 11455 + ], + [ + 11457 + ], + [ + 11459 + ], + [ + 11461 + ], + [ + 11463 + ], + [ + 11465 + ], + [ + 11467 + ], + [ + 11469 + ], + [ + 11471 + ], + [ + 11473 + ], + [ + 11475 + ], + [ + 11477 + ], + [ + 11479 + ], + [ + 11481 + ], + [ + 11483 + ], + [ + 11485 + ], + [ + 11487 + ], + [ + 11489 + ], + [ + 11491, + 11492 + ], + [ + 11500 + ], + [ + 11502 + ], + [ + 11507 + ], + [ + 11520, + 11557 + ], + [ + 11559 + ], + [ + 11565 + ], + [ + 42561 + ], + [ + 42563 + ], + [ + 42565 + ], + [ + 42567 + ], + [ + 42569 + ], + [ + 42571 + ], + [ + 42573 + ], + [ + 42575 + ], + [ + 42577 + ], + [ + 42579 + ], + [ + 42581 + ], + [ + 42583 + ], + [ + 42585 + ], + [ + 42587 + ], + [ + 42589 + ], + [ + 42591 + ], + [ + 42593 + ], + [ + 42595 + ], + [ + 42597 + ], + [ + 42599 + ], + [ + 42601 + ], + [ + 42603 + ], + [ + 42605 + ], + [ + 42625 + ], + [ + 42627 + ], + [ + 42629 + ], + [ + 42631 + ], + [ + 42633 + ], + [ + 42635 + ], + [ + 42637 + ], + [ + 42639 + ], + [ + 42641 + ], + [ + 42643 + ], + [ + 42645 + ], + [ + 42647 + ], + [ + 42649 + ], + [ + 42651 + ], + [ + 42787 + ], + [ + 42789 + ], + [ + 42791 + ], + [ + 42793 + ], + [ + 42795 + ], + [ + 42797 + ], + [ + 42799, + 42801 + ], + [ + 42803 + ], + [ + 42805 + ], + [ + 42807 + ], + [ + 42809 + ], + [ + 42811 + ], + [ + 42813 + ], + [ + 42815 + ], + [ + 42817 + ], + [ + 42819 + ], + [ + 42821 + ], + [ + 42823 + ], + [ + 42825 + ], + [ + 42827 + ], + [ + 42829 + ], + [ + 42831 + ], + [ + 42833 + ], + [ + 42835 + ], + [ + 42837 + ], + [ + 42839 + ], + [ + 42841 + ], + [ + 42843 + ], + [ + 42845 + ], + [ + 42847 + ], + [ + 42849 + ], + [ + 42851 + ], + [ + 42853 + ], + [ + 42855 + ], + [ + 42857 + ], + [ + 42859 + ], + [ + 42861 + ], + [ + 42863 + ], + [ + 42865, + 42872 + ], + [ + 42874 + ], + [ + 42876 + ], + [ + 42879 + ], + [ + 42881 + ], + [ + 42883 + ], + [ + 42885 + ], + [ + 42887 + ], + [ + 42892 + ], + [ + 42894 + ], + [ + 42897 + ], + [ + 42899, + 42901 + ], + [ + 42903 + ], + [ + 42905 + ], + [ + 42907 + ], + [ + 42909 + ], + [ + 42911 + ], + [ + 42913 + ], + [ + 42915 + ], + [ + 42917 + ], + [ + 42919 + ], + [ + 42921 + ], + [ + 42927 + ], + [ + 42933 + ], + [ + 42935 + ], + [ + 42937 + ], + [ + 42939 + ], + [ + 42941 + ], + [ + 42943 + ], + [ + 42945 + ], + [ + 42947 + ], + [ + 42952 + ], + [ + 42954 + ], + [ + 42957 + ], + [ + 42961 + ], + [ + 42963 + ], + [ + 42965 + ], + [ + 42967 + ], + [ + 42969 + ], + [ + 42971 + ], + [ + 42998 + ], + [ + 43002 + ], + [ + 43824, + 43866 + ], + [ + 43872, + 43880 + ], + [ + 43888, + 43967 + ], + [ + 64256, + 64262 + ], + [ + 64275, + 64279 + ], + [ + 65345, + 65370 + ], + [ + 66600, + 66639 + ], + [ + 66776, + 66811 + ], + [ + 66967, + 66977 + ], + [ + 66979, + 66993 + ], + [ + 66995, + 67001 + ], + [ + 67003, + 67004 + ], + [ + 68800, + 68850 + ], + [ + 68976, + 68997 + ], + [ + 71872, + 71903 + ], + [ + 93792, + 93823 + ], + [ + 119834, + 119859 + ], + [ + 119886, + 119892 + ], + [ + 119894, + 119911 + ], + [ + 119938, + 119963 + ], + [ + 119990, + 119993 + ], + [ + 119995 + ], + [ + 119997, + 120003 + ], + [ + 120005, + 120015 + ], + [ + 120042, + 120067 + ], + [ + 120094, + 120119 + ], + [ + 120146, + 120171 + ], + [ + 120198, + 120223 + ], + [ + 120250, + 120275 + ], + [ + 120302, + 120327 + ], + [ + 120354, + 120379 + ], + [ + 120406, + 120431 + ], + [ + 120458, + 120485 + ], + [ + 120514, + 120538 + ], + [ + 120540, + 120545 + ], + [ + 120572, + 120596 + ], + [ + 120598, + 120603 + ], + [ + 120630, + 120654 + ], + [ + 120656, + 120661 + ], + [ + 120688, + 120712 + ], + [ + 120714, + 120719 + ], + [ + 120746, + 120770 + ], + [ + 120772, + 120777 + ], + [ + 120779 + ], + [ + 122624, + 122633 + ], + [ + 122635, + 122654 + ], + [ + 122661, + 122666 + ], + [ + 125218, + 125251 + ] + ], + "Lm": [ + [ + 688, + 705 + ], + [ + 710, + 721 + ], + [ + 736, + 740 + ], + [ + 748 + ], + [ + 750 + ], + [ + 884 + ], + [ + 890 + ], + [ + 1369 + ], + [ + 1600 + ], + [ + 1765, + 1766 + ], + [ + 2036, + 2037 + ], + [ + 2042 + ], + [ + 2074 + ], + [ + 2084 + ], + [ + 2088 + ], + [ + 2249 + ], + [ + 2417 + ], + [ + 3654 + ], + [ + 3782 + ], + [ + 4348 + ], + [ + 6103 + ], + [ + 6211 + ], + [ + 6823 + ], + [ + 7288, + 7293 + ], + [ + 7468, + 7530 + ], + [ + 7544 + ], + [ + 7579, + 7615 + ], + [ + 8305 + ], + [ + 8319 + ], + [ + 8336, + 8348 + ], + [ + 11388, + 11389 + ], + [ + 11631 + ], + [ + 11823 + ], + [ + 12293 + ], + [ + 12337, + 12341 + ], + [ + 12347 + ], + [ + 12445, + 12446 + ], + [ + 12540, + 12542 + ], + [ + 40981 + ], + [ + 42232, + 42237 + ], + [ + 42508 + ], + [ + 42623 + ], + [ + 42652, + 42653 + ], + [ + 42775, + 42783 + ], + [ + 42864 + ], + [ + 42888 + ], + [ + 42994, + 42996 + ], + [ + 43000, + 43001 + ], + [ + 43471 + ], + [ + 43494 + ], + [ + 43632 + ], + [ + 43741 + ], + [ + 43763, + 43764 + ], + [ + 43868, + 43871 + ], + [ + 43881 + ], + [ + 65392 + ], + [ + 65438, + 65439 + ], + [ + 67456, + 67461 + ], + [ + 67463, + 67504 + ], + [ + 67506, + 67514 + ], + [ + 68942 + ], + [ + 68975 + ], + [ + 92992, + 92995 + ], + [ + 93504, + 93506 + ], + [ + 93547, + 93548 + ], + [ + 94099, + 94111 + ], + [ + 94176, + 94177 + ], + [ + 94179 + ], + [ + 110576, + 110579 + ], + [ + 110581, + 110587 + ], + [ + 110589, + 110590 + ], + [ + 122928, + 122989 + ], + [ + 123191, + 123197 + ], + [ + 124139 + ], + [ + 125259 + ] + ], + "Lo": [ + [ + 170 + ], + [ + 186 + ], + [ + 443 + ], + [ + 448, + 451 + ], + [ + 660 + ], + [ + 1488, + 1514 + ], + [ + 1519, + 1522 + ], + [ + 1568, + 1599 + ], + [ + 1601, + 1610 + ], + [ + 1646, + 1647 + ], + [ + 1649, + 1747 + ], + [ + 1749 + ], + [ + 1774, + 1775 + ], + [ + 1786, + 1788 + ], + [ + 1791 + ], + [ + 1808 + ], + [ + 1810, + 1839 + ], + [ + 1869, + 1957 + ], + [ + 1969 + ], + [ + 1994, + 2026 + ], + [ + 2048, + 2069 + ], + [ + 2112, + 2136 + ], + [ + 2144, + 2154 + ], + [ + 2160, + 2183 + ], + [ + 2185, + 2190 + ], + [ + 2208, + 2248 + ], + [ + 2308, + 2361 + ], + [ + 2365 + ], + [ + 2384 + ], + [ + 2392, + 2401 + ], + [ + 2418, + 2432 + ], + [ + 2437, + 2444 + ], + [ + 2447, + 2448 + ], + [ + 2451, + 2472 + ], + [ + 2474, + 2480 + ], + [ + 2482 + ], + [ + 2486, + 2489 + ], + [ + 2493 + ], + [ + 2510 + ], + [ + 2524, + 2525 + ], + [ + 2527, + 2529 + ], + [ + 2544, + 2545 + ], + [ + 2556 + ], + [ + 2565, + 2570 + ], + [ + 2575, + 2576 + ], + [ + 2579, + 2600 + ], + [ + 2602, + 2608 + ], + [ + 2610, + 2611 + ], + [ + 2613, + 2614 + ], + [ + 2616, + 2617 + ], + [ + 2649, + 2652 + ], + [ + 2654 + ], + [ + 2674, + 2676 + ], + [ + 2693, + 2701 + ], + [ + 2703, + 2705 + ], + [ + 2707, + 2728 + ], + [ + 2730, + 2736 + ], + [ + 2738, + 2739 + ], + [ + 2741, + 2745 + ], + [ + 2749 + ], + [ + 2768 + ], + [ + 2784, + 2785 + ], + [ + 2809 + ], + [ + 2821, + 2828 + ], + [ + 2831, + 2832 + ], + [ + 2835, + 2856 + ], + [ + 2858, + 2864 + ], + [ + 2866, + 2867 + ], + [ + 2869, + 2873 + ], + [ + 2877 + ], + [ + 2908, + 2909 + ], + [ + 2911, + 2913 + ], + [ + 2929 + ], + [ + 2947 + ], + [ + 2949, + 2954 + ], + [ + 2958, + 2960 + ], + [ + 2962, + 2965 + ], + [ + 2969, + 2970 + ], + [ + 2972 + ], + [ + 2974, + 2975 + ], + [ + 2979, + 2980 + ], + [ + 2984, + 2986 + ], + [ + 2990, + 3001 + ], + [ + 3024 + ], + [ + 3077, + 3084 + ], + [ + 3086, + 3088 + ], + [ + 3090, + 3112 + ], + [ + 3114, + 3129 + ], + [ + 3133 + ], + [ + 3160, + 3162 + ], + [ + 3165 + ], + [ + 3168, + 3169 + ], + [ + 3200 + ], + [ + 3205, + 3212 + ], + [ + 3214, + 3216 + ], + [ + 3218, + 3240 + ], + [ + 3242, + 3251 + ], + [ + 3253, + 3257 + ], + [ + 3261 + ], + [ + 3293, + 3294 + ], + [ + 3296, + 3297 + ], + [ + 3313, + 3314 + ], + [ + 3332, + 3340 + ], + [ + 3342, + 3344 + ], + [ + 3346, + 3386 + ], + [ + 3389 + ], + [ + 3406 + ], + [ + 3412, + 3414 + ], + [ + 3423, + 3425 + ], + [ + 3450, + 3455 + ], + [ + 3461, + 3478 + ], + [ + 3482, + 3505 + ], + [ + 3507, + 3515 + ], + [ + 3517 + ], + [ + 3520, + 3526 + ], + [ + 3585, + 3632 + ], + [ + 3634, + 3635 + ], + [ + 3648, + 3653 + ], + [ + 3713, + 3714 + ], + [ + 3716 + ], + [ + 3718, + 3722 + ], + [ + 3724, + 3747 + ], + [ + 3749 + ], + [ + 3751, + 3760 + ], + [ + 3762, + 3763 + ], + [ + 3773 + ], + [ + 3776, + 3780 + ], + [ + 3804, + 3807 + ], + [ + 3840 + ], + [ + 3904, + 3911 + ], + [ + 3913, + 3948 + ], + [ + 3976, + 3980 + ], + [ + 4096, + 4138 + ], + [ + 4159 + ], + [ + 4176, + 4181 + ], + [ + 4186, + 4189 + ], + [ + 4193 + ], + [ + 4197, + 4198 + ], + [ + 4206, + 4208 + ], + [ + 4213, + 4225 + ], + [ + 4238 + ], + [ + 4352, + 4680 + ], + [ + 4682, + 4685 + ], + [ + 4688, + 4694 + ], + [ + 4696 + ], + [ + 4698, + 4701 + ], + [ + 4704, + 4744 + ], + [ + 4746, + 4749 + ], + [ + 4752, + 4784 + ], + [ + 4786, + 4789 + ], + [ + 4792, + 4798 + ], + [ + 4800 + ], + [ + 4802, + 4805 + ], + [ + 4808, + 4822 + ], + [ + 4824, + 4880 + ], + [ + 4882, + 4885 + ], + [ + 4888, + 4954 + ], + [ + 4992, + 5007 + ], + [ + 5121, + 5740 + ], + [ + 5743, + 5759 + ], + [ + 5761, + 5786 + ], + [ + 5792, + 5866 + ], + [ + 5873, + 5880 + ], + [ + 5888, + 5905 + ], + [ + 5919, + 5937 + ], + [ + 5952, + 5969 + ], + [ + 5984, + 5996 + ], + [ + 5998, + 6000 + ], + [ + 6016, + 6067 + ], + [ + 6108 + ], + [ + 6176, + 6210 + ], + [ + 6212, + 6264 + ], + [ + 6272, + 6276 + ], + [ + 6279, + 6312 + ], + [ + 6314 + ], + [ + 6320, + 6389 + ], + [ + 6400, + 6430 + ], + [ + 6480, + 6509 + ], + [ + 6512, + 6516 + ], + [ + 6528, + 6571 + ], + [ + 6576, + 6601 + ], + [ + 6656, + 6678 + ], + [ + 6688, + 6740 + ], + [ + 6917, + 6963 + ], + [ + 6981, + 6988 + ], + [ + 7043, + 7072 + ], + [ + 7086, + 7087 + ], + [ + 7098, + 7141 + ], + [ + 7168, + 7203 + ], + [ + 7245, + 7247 + ], + [ + 7258, + 7287 + ], + [ + 7401, + 7404 + ], + [ + 7406, + 7411 + ], + [ + 7413, + 7414 + ], + [ + 7418 + ], + [ + 8501, + 8504 + ], + [ + 11568, + 11623 + ], + [ + 11648, + 11670 + ], + [ + 11680, + 11686 + ], + [ + 11688, + 11694 + ], + [ + 11696, + 11702 + ], + [ + 11704, + 11710 + ], + [ + 11712, + 11718 + ], + [ + 11720, + 11726 + ], + [ + 11728, + 11734 + ], + [ + 11736, + 11742 + ], + [ + 12294 + ], + [ + 12348 + ], + [ + 12353, + 12438 + ], + [ + 12447 + ], + [ + 12449, + 12538 + ], + [ + 12543 + ], + [ + 12549, + 12591 + ], + [ + 12593, + 12686 + ], + [ + 12704, + 12735 + ], + [ + 12784, + 12799 + ], + [ + 13312, + 19903 + ], + [ + 19968, + 40980 + ], + [ + 40982, + 42124 + ], + [ + 42192, + 42231 + ], + [ + 42240, + 42507 + ], + [ + 42512, + 42527 + ], + [ + 42538, + 42539 + ], + [ + 42606 + ], + [ + 42656, + 42725 + ], + [ + 42895 + ], + [ + 42999 + ], + [ + 43003, + 43009 + ], + [ + 43011, + 43013 + ], + [ + 43015, + 43018 + ], + [ + 43020, + 43042 + ], + [ + 43072, + 43123 + ], + [ + 43138, + 43187 + ], + [ + 43250, + 43255 + ], + [ + 43259 + ], + [ + 43261, + 43262 + ], + [ + 43274, + 43301 + ], + [ + 43312, + 43334 + ], + [ + 43360, + 43388 + ], + [ + 43396, + 43442 + ], + [ + 43488, + 43492 + ], + [ + 43495, + 43503 + ], + [ + 43514, + 43518 + ], + [ + 43520, + 43560 + ], + [ + 43584, + 43586 + ], + [ + 43588, + 43595 + ], + [ + 43616, + 43631 + ], + [ + 43633, + 43638 + ], + [ + 43642 + ], + [ + 43646, + 43695 + ], + [ + 43697 + ], + [ + 43701, + 43702 + ], + [ + 43705, + 43709 + ], + [ + 43712 + ], + [ + 43714 + ], + [ + 43739, + 43740 + ], + [ + 43744, + 43754 + ], + [ + 43762 + ], + [ + 43777, + 43782 + ], + [ + 43785, + 43790 + ], + [ + 43793, + 43798 + ], + [ + 43808, + 43814 + ], + [ + 43816, + 43822 + ], + [ + 43968, + 44002 + ], + [ + 44032, + 55203 + ], + [ + 55216, + 55238 + ], + [ + 55243, + 55291 + ], + [ + 63744, + 64109 + ], + [ + 64112, + 64217 + ], + [ + 64285 + ], + [ + 64287, + 64296 + ], + [ + 64298, + 64310 + ], + [ + 64312, + 64316 + ], + [ + 64318 + ], + [ + 64320, + 64321 + ], + [ + 64323, + 64324 + ], + [ + 64326, + 64433 + ], + [ + 64467, + 64829 + ], + [ + 64848, + 64911 + ], + [ + 64914, + 64967 + ], + [ + 65008, + 65019 + ], + [ + 65136, + 65140 + ], + [ + 65142, + 65276 + ], + [ + 65382, + 65391 + ], + [ + 65393, + 65437 + ], + [ + 65440, + 65470 + ], + [ + 65474, + 65479 + ], + [ + 65482, + 65487 + ], + [ + 65490, + 65495 + ], + [ + 65498, + 65500 + ], + [ + 65536, + 65547 + ], + [ + 65549, + 65574 + ], + [ + 65576, + 65594 + ], + [ + 65596, + 65597 + ], + [ + 65599, + 65613 + ], + [ + 65616, + 65629 + ], + [ + 65664, + 65786 + ], + [ + 66176, + 66204 + ], + [ + 66208, + 66256 + ], + [ + 66304, + 66335 + ], + [ + 66349, + 66368 + ], + [ + 66370, + 66377 + ], + [ + 66384, + 66421 + ], + [ + 66432, + 66461 + ], + [ + 66464, + 66499 + ], + [ + 66504, + 66511 + ], + [ + 66640, + 66717 + ], + [ + 66816, + 66855 + ], + [ + 66864, + 66915 + ], + [ + 67008, + 67059 + ], + [ + 67072, + 67382 + ], + [ + 67392, + 67413 + ], + [ + 67424, + 67431 + ], + [ + 67584, + 67589 + ], + [ + 67592 + ], + [ + 67594, + 67637 + ], + [ + 67639, + 67640 + ], + [ + 67644 + ], + [ + 67647, + 67669 + ], + [ + 67680, + 67702 + ], + [ + 67712, + 67742 + ], + [ + 67808, + 67826 + ], + [ + 67828, + 67829 + ], + [ + 67840, + 67861 + ], + [ + 67872, + 67897 + ], + [ + 67968, + 68023 + ], + [ + 68030, + 68031 + ], + [ + 68096 + ], + [ + 68112, + 68115 + ], + [ + 68117, + 68119 + ], + [ + 68121, + 68149 + ], + [ + 68192, + 68220 + ], + [ + 68224, + 68252 + ], + [ + 68288, + 68295 + ], + [ + 68297, + 68324 + ], + [ + 68352, + 68405 + ], + [ + 68416, + 68437 + ], + [ + 68448, + 68466 + ], + [ + 68480, + 68497 + ], + [ + 68608, + 68680 + ], + [ + 68864, + 68899 + ], + [ + 68938, + 68941 + ], + [ + 68943 + ], + [ + 69248, + 69289 + ], + [ + 69296, + 69297 + ], + [ + 69314, + 69316 + ], + [ + 69376, + 69404 + ], + [ + 69415 + ], + [ + 69424, + 69445 + ], + [ + 69488, + 69505 + ], + [ + 69552, + 69572 + ], + [ + 69600, + 69622 + ], + [ + 69635, + 69687 + ], + [ + 69745, + 69746 + ], + [ + 69749 + ], + [ + 69763, + 69807 + ], + [ + 69840, + 69864 + ], + [ + 69891, + 69926 + ], + [ + 69956 + ], + [ + 69959 + ], + [ + 69968, + 70002 + ], + [ + 70006 + ], + [ + 70019, + 70066 + ], + [ + 70081, + 70084 + ], + [ + 70106 + ], + [ + 70108 + ], + [ + 70144, + 70161 + ], + [ + 70163, + 70187 + ], + [ + 70207, + 70208 + ], + [ + 70272, + 70278 + ], + [ + 70280 + ], + [ + 70282, + 70285 + ], + [ + 70287, + 70301 + ], + [ + 70303, + 70312 + ], + [ + 70320, + 70366 + ], + [ + 70405, + 70412 + ], + [ + 70415, + 70416 + ], + [ + 70419, + 70440 + ], + [ + 70442, + 70448 + ], + [ + 70450, + 70451 + ], + [ + 70453, + 70457 + ], + [ + 70461 + ], + [ + 70480 + ], + [ + 70493, + 70497 + ], + [ + 70528, + 70537 + ], + [ + 70539 + ], + [ + 70542 + ], + [ + 70544, + 70581 + ], + [ + 70583 + ], + [ + 70609 + ], + [ + 70611 + ], + [ + 70656, + 70708 + ], + [ + 70727, + 70730 + ], + [ + 70751, + 70753 + ], + [ + 70784, + 70831 + ], + [ + 70852, + 70853 + ], + [ + 70855 + ], + [ + 71040, + 71086 + ], + [ + 71128, + 71131 + ], + [ + 71168, + 71215 + ], + [ + 71236 + ], + [ + 71296, + 71338 + ], + [ + 71352 + ], + [ + 71424, + 71450 + ], + [ + 71488, + 71494 + ], + [ + 71680, + 71723 + ], + [ + 71935, + 71942 + ], + [ + 71945 + ], + [ + 71948, + 71955 + ], + [ + 71957, + 71958 + ], + [ + 71960, + 71983 + ], + [ + 71999 + ], + [ + 72001 + ], + [ + 72096, + 72103 + ], + [ + 72106, + 72144 + ], + [ + 72161 + ], + [ + 72163 + ], + [ + 72192 + ], + [ + 72203, + 72242 + ], + [ + 72250 + ], + [ + 72272 + ], + [ + 72284, + 72329 + ], + [ + 72349 + ], + [ + 72368, + 72440 + ], + [ + 72640, + 72672 + ], + [ + 72704, + 72712 + ], + [ + 72714, + 72750 + ], + [ + 72768 + ], + [ + 72818, + 72847 + ], + [ + 72960, + 72966 + ], + [ + 72968, + 72969 + ], + [ + 72971, + 73008 + ], + [ + 73030 + ], + [ + 73056, + 73061 + ], + [ + 73063, + 73064 + ], + [ + 73066, + 73097 + ], + [ + 73112 + ], + [ + 73440, + 73458 + ], + [ + 73474 + ], + [ + 73476, + 73488 + ], + [ + 73490, + 73523 + ], + [ + 73648 + ], + [ + 73728, + 74649 + ], + [ + 74880, + 75075 + ], + [ + 77712, + 77808 + ], + [ + 77824, + 78895 + ], + [ + 78913, + 78918 + ], + [ + 78944, + 82938 + ], + [ + 82944, + 83526 + ], + [ + 90368, + 90397 + ], + [ + 92160, + 92728 + ], + [ + 92736, + 92766 + ], + [ + 92784, + 92862 + ], + [ + 92880, + 92909 + ], + [ + 92928, + 92975 + ], + [ + 93027, + 93047 + ], + [ + 93053, + 93071 + ], + [ + 93507, + 93546 + ], + [ + 93952, + 94026 + ], + [ + 94032 + ], + [ + 94208, + 100343 + ], + [ + 100352, + 101589 + ], + [ + 101631, + 101640 + ], + [ + 110592, + 110882 + ], + [ + 110898 + ], + [ + 110928, + 110930 + ], + [ + 110933 + ], + [ + 110948, + 110951 + ], + [ + 110960, + 111355 + ], + [ + 113664, + 113770 + ], + [ + 113776, + 113788 + ], + [ + 113792, + 113800 + ], + [ + 113808, + 113817 + ], + [ + 122634 + ], + [ + 123136, + 123180 + ], + [ + 123214 + ], + [ + 123536, + 123565 + ], + [ + 123584, + 123627 + ], + [ + 124112, + 124138 + ], + [ + 124368, + 124397 + ], + [ + 124400 + ], + [ + 124896, + 124902 + ], + [ + 124904, + 124907 + ], + [ + 124909, + 124910 + ], + [ + 124912, + 124926 + ], + [ + 124928, + 125124 + ], + [ + 126464, + 126467 + ], + [ + 126469, + 126495 + ], + [ + 126497, + 126498 + ], + [ + 126500 + ], + [ + 126503 + ], + [ + 126505, + 126514 + ], + [ + 126516, + 126519 + ], + [ + 126521 + ], + [ + 126523 + ], + [ + 126530 + ], + [ + 126535 + ], + [ + 126537 + ], + [ + 126539 + ], + [ + 126541, + 126543 + ], + [ + 126545, + 126546 + ], + [ + 126548 + ], + [ + 126551 + ], + [ + 126553 + ], + [ + 126555 + ], + [ + 126557 + ], + [ + 126559 + ], + [ + 126561, + 126562 + ], + [ + 126564 + ], + [ + 126567, + 126570 + ], + [ + 126572, + 126578 + ], + [ + 126580, + 126583 + ], + [ + 126585, + 126588 + ], + [ + 126590 + ], + [ + 126592, + 126601 + ], + [ + 126603, + 126619 + ], + [ + 126625, + 126627 + ], + [ + 126629, + 126633 + ], + [ + 126635, + 126651 + ], + [ + 131072, + 173791 + ], + [ + 173824, + 177977 + ], + [ + 177984, + 178205 + ], + [ + 178208, + 183969 + ], + [ + 183984, + 191456 + ], + [ + 191472, + 192093 + ], + [ + 194560, + 195101 + ], + [ + 196608, + 201546 + ], + [ + 201552, + 205743 + ] + ], + "Lt": [ + [ + 453 + ], + [ + 456 + ], + [ + 459 + ], + [ + 498 + ], + [ + 8072, + 8079 + ], + [ + 8088, + 8095 + ], + [ + 8104, + 8111 + ], + [ + 8124 + ], + [ + 8140 + ], + [ + 8188 + ] + ], + "Lu": [ + [ + 65, + 90 + ], + [ + 192, + 214 + ], + [ + 216, + 222 + ], + [ + 256 + ], + [ + 258 + ], + [ + 260 + ], + [ + 262 + ], + [ + 264 + ], + [ + 266 + ], + [ + 268 + ], + [ + 270 + ], + [ + 272 + ], + [ + 274 + ], + [ + 276 + ], + [ + 278 + ], + [ + 280 + ], + [ + 282 + ], + [ + 284 + ], + [ + 286 + ], + [ + 288 + ], + [ + 290 + ], + [ + 292 + ], + [ + 294 + ], + [ + 296 + ], + [ + 298 + ], + [ + 300 + ], + [ + 302 + ], + [ + 304 + ], + [ + 306 + ], + [ + 308 + ], + [ + 310 + ], + [ + 313 + ], + [ + 315 + ], + [ + 317 + ], + [ + 319 + ], + [ + 321 + ], + [ + 323 + ], + [ + 325 + ], + [ + 327 + ], + [ + 330 + ], + [ + 332 + ], + [ + 334 + ], + [ + 336 + ], + [ + 338 + ], + [ + 340 + ], + [ + 342 + ], + [ + 344 + ], + [ + 346 + ], + [ + 348 + ], + [ + 350 + ], + [ + 352 + ], + [ + 354 + ], + [ + 356 + ], + [ + 358 + ], + [ + 360 + ], + [ + 362 + ], + [ + 364 + ], + [ + 366 + ], + [ + 368 + ], + [ + 370 + ], + [ + 372 + ], + [ + 374 + ], + [ + 376, + 377 + ], + [ + 379 + ], + [ + 381 + ], + [ + 385, + 386 + ], + [ + 388 + ], + [ + 390, + 391 + ], + [ + 393, + 395 + ], + [ + 398, + 401 + ], + [ + 403, + 404 + ], + [ + 406, + 408 + ], + [ + 412, + 413 + ], + [ + 415, + 416 + ], + [ + 418 + ], + [ + 420 + ], + [ + 422, + 423 + ], + [ + 425 + ], + [ + 428 + ], + [ + 430, + 431 + ], + [ + 433, + 435 + ], + [ + 437 + ], + [ + 439, + 440 + ], + [ + 444 + ], + [ + 452 + ], + [ + 455 + ], + [ + 458 + ], + [ + 461 + ], + [ + 463 + ], + [ + 465 + ], + [ + 467 + ], + [ + 469 + ], + [ + 471 + ], + [ + 473 + ], + [ + 475 + ], + [ + 478 + ], + [ + 480 + ], + [ + 482 + ], + [ + 484 + ], + [ + 486 + ], + [ + 488 + ], + [ + 490 + ], + [ + 492 + ], + [ + 494 + ], + [ + 497 + ], + [ + 500 + ], + [ + 502, + 504 + ], + [ + 506 + ], + [ + 508 + ], + [ + 510 + ], + [ + 512 + ], + [ + 514 + ], + [ + 516 + ], + [ + 518 + ], + [ + 520 + ], + [ + 522 + ], + [ + 524 + ], + [ + 526 + ], + [ + 528 + ], + [ + 530 + ], + [ + 532 + ], + [ + 534 + ], + [ + 536 + ], + [ + 538 + ], + [ + 540 + ], + [ + 542 + ], + [ + 544 + ], + [ + 546 + ], + [ + 548 + ], + [ + 550 + ], + [ + 552 + ], + [ + 554 + ], + [ + 556 + ], + [ + 558 + ], + [ + 560 + ], + [ + 562 + ], + [ + 570, + 571 + ], + [ + 573, + 574 + ], + [ + 577 + ], + [ + 579, + 582 + ], + [ + 584 + ], + [ + 586 + ], + [ + 588 + ], + [ + 590 + ], + [ + 880 + ], + [ + 882 + ], + [ + 886 + ], + [ + 895 + ], + [ + 902 + ], + [ + 904, + 906 + ], + [ + 908 + ], + [ + 910, + 911 + ], + [ + 913, + 929 + ], + [ + 931, + 939 + ], + [ + 975 + ], + [ + 978, + 980 + ], + [ + 984 + ], + [ + 986 + ], + [ + 988 + ], + [ + 990 + ], + [ + 992 + ], + [ + 994 + ], + [ + 996 + ], + [ + 998 + ], + [ + 1000 + ], + [ + 1002 + ], + [ + 1004 + ], + [ + 1006 + ], + [ + 1012 + ], + [ + 1015 + ], + [ + 1017, + 1018 + ], + [ + 1021, + 1071 + ], + [ + 1120 + ], + [ + 1122 + ], + [ + 1124 + ], + [ + 1126 + ], + [ + 1128 + ], + [ + 1130 + ], + [ + 1132 + ], + [ + 1134 + ], + [ + 1136 + ], + [ + 1138 + ], + [ + 1140 + ], + [ + 1142 + ], + [ + 1144 + ], + [ + 1146 + ], + [ + 1148 + ], + [ + 1150 + ], + [ + 1152 + ], + [ + 1162 + ], + [ + 1164 + ], + [ + 1166 + ], + [ + 1168 + ], + [ + 1170 + ], + [ + 1172 + ], + [ + 1174 + ], + [ + 1176 + ], + [ + 1178 + ], + [ + 1180 + ], + [ + 1182 + ], + [ + 1184 + ], + [ + 1186 + ], + [ + 1188 + ], + [ + 1190 + ], + [ + 1192 + ], + [ + 1194 + ], + [ + 1196 + ], + [ + 1198 + ], + [ + 1200 + ], + [ + 1202 + ], + [ + 1204 + ], + [ + 1206 + ], + [ + 1208 + ], + [ + 1210 + ], + [ + 1212 + ], + [ + 1214 + ], + [ + 1216, + 1217 + ], + [ + 1219 + ], + [ + 1221 + ], + [ + 1223 + ], + [ + 1225 + ], + [ + 1227 + ], + [ + 1229 + ], + [ + 1232 + ], + [ + 1234 + ], + [ + 1236 + ], + [ + 1238 + ], + [ + 1240 + ], + [ + 1242 + ], + [ + 1244 + ], + [ + 1246 + ], + [ + 1248 + ], + [ + 1250 + ], + [ + 1252 + ], + [ + 1254 + ], + [ + 1256 + ], + [ + 1258 + ], + [ + 1260 + ], + [ + 1262 + ], + [ + 1264 + ], + [ + 1266 + ], + [ + 1268 + ], + [ + 1270 + ], + [ + 1272 + ], + [ + 1274 + ], + [ + 1276 + ], + [ + 1278 + ], + [ + 1280 + ], + [ + 1282 + ], + [ + 1284 + ], + [ + 1286 + ], + [ + 1288 + ], + [ + 1290 + ], + [ + 1292 + ], + [ + 1294 + ], + [ + 1296 + ], + [ + 1298 + ], + [ + 1300 + ], + [ + 1302 + ], + [ + 1304 + ], + [ + 1306 + ], + [ + 1308 + ], + [ + 1310 + ], + [ + 1312 + ], + [ + 1314 + ], + [ + 1316 + ], + [ + 1318 + ], + [ + 1320 + ], + [ + 1322 + ], + [ + 1324 + ], + [ + 1326 + ], + [ + 1329, + 1366 + ], + [ + 4256, + 4293 + ], + [ + 4295 + ], + [ + 4301 + ], + [ + 5024, + 5109 + ], + [ + 7305 + ], + [ + 7312, + 7354 + ], + [ + 7357, + 7359 + ], + [ + 7680 + ], + [ + 7682 + ], + [ + 7684 + ], + [ + 7686 + ], + [ + 7688 + ], + [ + 7690 + ], + [ + 7692 + ], + [ + 7694 + ], + [ + 7696 + ], + [ + 7698 + ], + [ + 7700 + ], + [ + 7702 + ], + [ + 7704 + ], + [ + 7706 + ], + [ + 7708 + ], + [ + 7710 + ], + [ + 7712 + ], + [ + 7714 + ], + [ + 7716 + ], + [ + 7718 + ], + [ + 7720 + ], + [ + 7722 + ], + [ + 7724 + ], + [ + 7726 + ], + [ + 7728 + ], + [ + 7730 + ], + [ + 7732 + ], + [ + 7734 + ], + [ + 7736 + ], + [ + 7738 + ], + [ + 7740 + ], + [ + 7742 + ], + [ + 7744 + ], + [ + 7746 + ], + [ + 7748 + ], + [ + 7750 + ], + [ + 7752 + ], + [ + 7754 + ], + [ + 7756 + ], + [ + 7758 + ], + [ + 7760 + ], + [ + 7762 + ], + [ + 7764 + ], + [ + 7766 + ], + [ + 7768 + ], + [ + 7770 + ], + [ + 7772 + ], + [ + 7774 + ], + [ + 7776 + ], + [ + 7778 + ], + [ + 7780 + ], + [ + 7782 + ], + [ + 7784 + ], + [ + 7786 + ], + [ + 7788 + ], + [ + 7790 + ], + [ + 7792 + ], + [ + 7794 + ], + [ + 7796 + ], + [ + 7798 + ], + [ + 7800 + ], + [ + 7802 + ], + [ + 7804 + ], + [ + 7806 + ], + [ + 7808 + ], + [ + 7810 + ], + [ + 7812 + ], + [ + 7814 + ], + [ + 7816 + ], + [ + 7818 + ], + [ + 7820 + ], + [ + 7822 + ], + [ + 7824 + ], + [ + 7826 + ], + [ + 7828 + ], + [ + 7838 + ], + [ + 7840 + ], + [ + 7842 + ], + [ + 7844 + ], + [ + 7846 + ], + [ + 7848 + ], + [ + 7850 + ], + [ + 7852 + ], + [ + 7854 + ], + [ + 7856 + ], + [ + 7858 + ], + [ + 7860 + ], + [ + 7862 + ], + [ + 7864 + ], + [ + 7866 + ], + [ + 7868 + ], + [ + 7870 + ], + [ + 7872 + ], + [ + 7874 + ], + [ + 7876 + ], + [ + 7878 + ], + [ + 7880 + ], + [ + 7882 + ], + [ + 7884 + ], + [ + 7886 + ], + [ + 7888 + ], + [ + 7890 + ], + [ + 7892 + ], + [ + 7894 + ], + [ + 7896 + ], + [ + 7898 + ], + [ + 7900 + ], + [ + 7902 + ], + [ + 7904 + ], + [ + 7906 + ], + [ + 7908 + ], + [ + 7910 + ], + [ + 7912 + ], + [ + 7914 + ], + [ + 7916 + ], + [ + 7918 + ], + [ + 7920 + ], + [ + 7922 + ], + [ + 7924 + ], + [ + 7926 + ], + [ + 7928 + ], + [ + 7930 + ], + [ + 7932 + ], + [ + 7934 + ], + [ + 7944, + 7951 + ], + [ + 7960, + 7965 + ], + [ + 7976, + 7983 + ], + [ + 7992, + 7999 + ], + [ + 8008, + 8013 + ], + [ + 8025 + ], + [ + 8027 + ], + [ + 8029 + ], + [ + 8031 + ], + [ + 8040, + 8047 + ], + [ + 8120, + 8123 + ], + [ + 8136, + 8139 + ], + [ + 8152, + 8155 + ], + [ + 8168, + 8172 + ], + [ + 8184, + 8187 + ], + [ + 8450 + ], + [ + 8455 + ], + [ + 8459, + 8461 + ], + [ + 8464, + 8466 + ], + [ + 8469 + ], + [ + 8473, + 8477 + ], + [ + 8484 + ], + [ + 8486 + ], + [ + 8488 + ], + [ + 8490, + 8493 + ], + [ + 8496, + 8499 + ], + [ + 8510, + 8511 + ], + [ + 8517 + ], + [ + 8579 + ], + [ + 11264, + 11311 + ], + [ + 11360 + ], + [ + 11362, + 11364 + ], + [ + 11367 + ], + [ + 11369 + ], + [ + 11371 + ], + [ + 11373, + 11376 + ], + [ + 11378 + ], + [ + 11381 + ], + [ + 11390, + 11392 + ], + [ + 11394 + ], + [ + 11396 + ], + [ + 11398 + ], + [ + 11400 + ], + [ + 11402 + ], + [ + 11404 + ], + [ + 11406 + ], + [ + 11408 + ], + [ + 11410 + ], + [ + 11412 + ], + [ + 11414 + ], + [ + 11416 + ], + [ + 11418 + ], + [ + 11420 + ], + [ + 11422 + ], + [ + 11424 + ], + [ + 11426 + ], + [ + 11428 + ], + [ + 11430 + ], + [ + 11432 + ], + [ + 11434 + ], + [ + 11436 + ], + [ + 11438 + ], + [ + 11440 + ], + [ + 11442 + ], + [ + 11444 + ], + [ + 11446 + ], + [ + 11448 + ], + [ + 11450 + ], + [ + 11452 + ], + [ + 11454 + ], + [ + 11456 + ], + [ + 11458 + ], + [ + 11460 + ], + [ + 11462 + ], + [ + 11464 + ], + [ + 11466 + ], + [ + 11468 + ], + [ + 11470 + ], + [ + 11472 + ], + [ + 11474 + ], + [ + 11476 + ], + [ + 11478 + ], + [ + 11480 + ], + [ + 11482 + ], + [ + 11484 + ], + [ + 11486 + ], + [ + 11488 + ], + [ + 11490 + ], + [ + 11499 + ], + [ + 11501 + ], + [ + 11506 + ], + [ + 42560 + ], + [ + 42562 + ], + [ + 42564 + ], + [ + 42566 + ], + [ + 42568 + ], + [ + 42570 + ], + [ + 42572 + ], + [ + 42574 + ], + [ + 42576 + ], + [ + 42578 + ], + [ + 42580 + ], + [ + 42582 + ], + [ + 42584 + ], + [ + 42586 + ], + [ + 42588 + ], + [ + 42590 + ], + [ + 42592 + ], + [ + 42594 + ], + [ + 42596 + ], + [ + 42598 + ], + [ + 42600 + ], + [ + 42602 + ], + [ + 42604 + ], + [ + 42624 + ], + [ + 42626 + ], + [ + 42628 + ], + [ + 42630 + ], + [ + 42632 + ], + [ + 42634 + ], + [ + 42636 + ], + [ + 42638 + ], + [ + 42640 + ], + [ + 42642 + ], + [ + 42644 + ], + [ + 42646 + ], + [ + 42648 + ], + [ + 42650 + ], + [ + 42786 + ], + [ + 42788 + ], + [ + 42790 + ], + [ + 42792 + ], + [ + 42794 + ], + [ + 42796 + ], + [ + 42798 + ], + [ + 42802 + ], + [ + 42804 + ], + [ + 42806 + ], + [ + 42808 + ], + [ + 42810 + ], + [ + 42812 + ], + [ + 42814 + ], + [ + 42816 + ], + [ + 42818 + ], + [ + 42820 + ], + [ + 42822 + ], + [ + 42824 + ], + [ + 42826 + ], + [ + 42828 + ], + [ + 42830 + ], + [ + 42832 + ], + [ + 42834 + ], + [ + 42836 + ], + [ + 42838 + ], + [ + 42840 + ], + [ + 42842 + ], + [ + 42844 + ], + [ + 42846 + ], + [ + 42848 + ], + [ + 42850 + ], + [ + 42852 + ], + [ + 42854 + ], + [ + 42856 + ], + [ + 42858 + ], + [ + 42860 + ], + [ + 42862 + ], + [ + 42873 + ], + [ + 42875 + ], + [ + 42877, + 42878 + ], + [ + 42880 + ], + [ + 42882 + ], + [ + 42884 + ], + [ + 42886 + ], + [ + 42891 + ], + [ + 42893 + ], + [ + 42896 + ], + [ + 42898 + ], + [ + 42902 + ], + [ + 42904 + ], + [ + 42906 + ], + [ + 42908 + ], + [ + 42910 + ], + [ + 42912 + ], + [ + 42914 + ], + [ + 42916 + ], + [ + 42918 + ], + [ + 42920 + ], + [ + 42922, + 42926 + ], + [ + 42928, + 42932 + ], + [ + 42934 + ], + [ + 42936 + ], + [ + 42938 + ], + [ + 42940 + ], + [ + 42942 + ], + [ + 42944 + ], + [ + 42946 + ], + [ + 42948, + 42951 + ], + [ + 42953 + ], + [ + 42955, + 42956 + ], + [ + 42960 + ], + [ + 42966 + ], + [ + 42968 + ], + [ + 42970 + ], + [ + 42972 + ], + [ + 42997 + ], + [ + 65313, + 65338 + ], + [ + 66560, + 66599 + ], + [ + 66736, + 66771 + ], + [ + 66928, + 66938 + ], + [ + 66940, + 66954 + ], + [ + 66956, + 66962 + ], + [ + 66964, + 66965 + ], + [ + 68736, + 68786 + ], + [ + 68944, + 68965 + ], + [ + 71840, + 71871 + ], + [ + 93760, + 93791 + ], + [ + 119808, + 119833 + ], + [ + 119860, + 119885 + ], + [ + 119912, + 119937 + ], + [ + 119964 + ], + [ + 119966, + 119967 + ], + [ + 119970 + ], + [ + 119973, + 119974 + ], + [ + 119977, + 119980 + ], + [ + 119982, + 119989 + ], + [ + 120016, + 120041 + ], + [ + 120068, + 120069 + ], + [ + 120071, + 120074 + ], + [ + 120077, + 120084 + ], + [ + 120086, + 120092 + ], + [ + 120120, + 120121 + ], + [ + 120123, + 120126 + ], + [ + 120128, + 120132 + ], + [ + 120134 + ], + [ + 120138, + 120144 + ], + [ + 120172, + 120197 + ], + [ + 120224, + 120249 + ], + [ + 120276, + 120301 + ], + [ + 120328, + 120353 + ], + [ + 120380, + 120405 + ], + [ + 120432, + 120457 + ], + [ + 120488, + 120512 + ], + [ + 120546, + 120570 + ], + [ + 120604, + 120628 + ], + [ + 120662, + 120686 + ], + [ + 120720, + 120744 + ], + [ + 120778 + ], + [ + 125184, + 125217 + ] + ] +}; +ilib.data.ctype_m = { + "Mc": [ + [ + 2307 + ], + [ + 2363 + ], + [ + 2366, + 2368 + ], + [ + 2377, + 2380 + ], + [ + 2382, + 2383 + ], + [ + 2434, + 2435 + ], + [ + 2494, + 2496 + ], + [ + 2503, + 2504 + ], + [ + 2507, + 2508 + ], + [ + 2519 + ], + [ + 2563 + ], + [ + 2622, + 2624 + ], + [ + 2691 + ], + [ + 2750, + 2752 + ], + [ + 2761 + ], + [ + 2763, + 2764 + ], + [ + 2818, + 2819 + ], + [ + 2878 + ], + [ + 2880 + ], + [ + 2887, + 2888 + ], + [ + 2891, + 2892 + ], + [ + 2903 + ], + [ + 3006, + 3007 + ], + [ + 3009, + 3010 + ], + [ + 3014, + 3016 + ], + [ + 3018, + 3020 + ], + [ + 3031 + ], + [ + 3073, + 3075 + ], + [ + 3137, + 3140 + ], + [ + 3202, + 3203 + ], + [ + 3262 + ], + [ + 3264, + 3268 + ], + [ + 3271, + 3272 + ], + [ + 3274, + 3275 + ], + [ + 3285, + 3286 + ], + [ + 3315 + ], + [ + 3330, + 3331 + ], + [ + 3390, + 3392 + ], + [ + 3398, + 3400 + ], + [ + 3402, + 3404 + ], + [ + 3415 + ], + [ + 3458, + 3459 + ], + [ + 3535, + 3537 + ], + [ + 3544, + 3551 + ], + [ + 3570, + 3571 + ], + [ + 3902, + 3903 + ], + [ + 3967 + ], + [ + 4139, + 4140 + ], + [ + 4145 + ], + [ + 4152 + ], + [ + 4155, + 4156 + ], + [ + 4182, + 4183 + ], + [ + 4194, + 4196 + ], + [ + 4199, + 4205 + ], + [ + 4227, + 4228 + ], + [ + 4231, + 4236 + ], + [ + 4239 + ], + [ + 4250, + 4252 + ], + [ + 5909 + ], + [ + 5940 + ], + [ + 6070 + ], + [ + 6078, + 6085 + ], + [ + 6087, + 6088 + ], + [ + 6435, + 6438 + ], + [ + 6441, + 6443 + ], + [ + 6448, + 6449 + ], + [ + 6451, + 6456 + ], + [ + 6681, + 6682 + ], + [ + 6741 + ], + [ + 6743 + ], + [ + 6753 + ], + [ + 6755, + 6756 + ], + [ + 6765, + 6770 + ], + [ + 6916 + ], + [ + 6965 + ], + [ + 6971 + ], + [ + 6973, + 6977 + ], + [ + 6979, + 6980 + ], + [ + 7042 + ], + [ + 7073 + ], + [ + 7078, + 7079 + ], + [ + 7082 + ], + [ + 7143 + ], + [ + 7146, + 7148 + ], + [ + 7150 + ], + [ + 7154, + 7155 + ], + [ + 7204, + 7211 + ], + [ + 7220, + 7221 + ], + [ + 7393 + ], + [ + 7415 + ], + [ + 12334, + 12335 + ], + [ + 43043, + 43044 + ], + [ + 43047 + ], + [ + 43136, + 43137 + ], + [ + 43188, + 43203 + ], + [ + 43346, + 43347 + ], + [ + 43395 + ], + [ + 43444, + 43445 + ], + [ + 43450, + 43451 + ], + [ + 43454, + 43456 + ], + [ + 43567, + 43568 + ], + [ + 43571, + 43572 + ], + [ + 43597 + ], + [ + 43643 + ], + [ + 43645 + ], + [ + 43755 + ], + [ + 43758, + 43759 + ], + [ + 43765 + ], + [ + 44003, + 44004 + ], + [ + 44006, + 44007 + ], + [ + 44009, + 44010 + ], + [ + 44012 + ], + [ + 69632 + ], + [ + 69634 + ], + [ + 69762 + ], + [ + 69808, + 69810 + ], + [ + 69815, + 69816 + ], + [ + 69932 + ], + [ + 69957, + 69958 + ], + [ + 70018 + ], + [ + 70067, + 70069 + ], + [ + 70079, + 70080 + ], + [ + 70094 + ], + [ + 70188, + 70190 + ], + [ + 70194, + 70195 + ], + [ + 70197 + ], + [ + 70368, + 70370 + ], + [ + 70402, + 70403 + ], + [ + 70462, + 70463 + ], + [ + 70465, + 70468 + ], + [ + 70471, + 70472 + ], + [ + 70475, + 70477 + ], + [ + 70487 + ], + [ + 70498, + 70499 + ], + [ + 70584, + 70586 + ], + [ + 70594 + ], + [ + 70597 + ], + [ + 70599, + 70602 + ], + [ + 70604, + 70605 + ], + [ + 70607 + ], + [ + 70709, + 70711 + ], + [ + 70720, + 70721 + ], + [ + 70725 + ], + [ + 70832, + 70834 + ], + [ + 70841 + ], + [ + 70843, + 70846 + ], + [ + 70849 + ], + [ + 71087, + 71089 + ], + [ + 71096, + 71099 + ], + [ + 71102 + ], + [ + 71216, + 71218 + ], + [ + 71227, + 71228 + ], + [ + 71230 + ], + [ + 71340 + ], + [ + 71342, + 71343 + ], + [ + 71350 + ], + [ + 71454 + ], + [ + 71456, + 71457 + ], + [ + 71462 + ], + [ + 71724, + 71726 + ], + [ + 71736 + ], + [ + 71984, + 71989 + ], + [ + 71991, + 71992 + ], + [ + 71997 + ], + [ + 72000 + ], + [ + 72002 + ], + [ + 72145, + 72147 + ], + [ + 72156, + 72159 + ], + [ + 72164 + ], + [ + 72249 + ], + [ + 72279, + 72280 + ], + [ + 72343 + ], + [ + 72751 + ], + [ + 72766 + ], + [ + 72873 + ], + [ + 72881 + ], + [ + 72884 + ], + [ + 73098, + 73102 + ], + [ + 73107, + 73108 + ], + [ + 73110 + ], + [ + 73461, + 73462 + ], + [ + 73475 + ], + [ + 73524, + 73525 + ], + [ + 73534, + 73535 + ], + [ + 73537 + ], + [ + 90410, + 90412 + ], + [ + 94033, + 94087 + ], + [ + 94192, + 94193 + ], + [ + 119141, + 119142 + ], + [ + 119149, + 119154 + ] + ], + "Me": [ + [ + 1160, + 1161 + ], + [ + 6846 + ], + [ + 8413, + 8416 + ], + [ + 8418, + 8420 + ], + [ + 42608, + 42610 + ] + ], + "Mn": [ + [ + 768, + 879 + ], + [ + 1155, + 1159 + ], + [ + 1425, + 1469 + ], + [ + 1471 + ], + [ + 1473, + 1474 + ], + [ + 1476, + 1477 + ], + [ + 1479 + ], + [ + 1552, + 1562 + ], + [ + 1611, + 1631 + ], + [ + 1648 + ], + [ + 1750, + 1756 + ], + [ + 1759, + 1764 + ], + [ + 1767, + 1768 + ], + [ + 1770, + 1773 + ], + [ + 1809 + ], + [ + 1840, + 1866 + ], + [ + 1958, + 1968 + ], + [ + 2027, + 2035 + ], + [ + 2045 + ], + [ + 2070, + 2073 + ], + [ + 2075, + 2083 + ], + [ + 2085, + 2087 + ], + [ + 2089, + 2093 + ], + [ + 2137, + 2139 + ], + [ + 2199, + 2207 + ], + [ + 2250, + 2273 + ], + [ + 2275, + 2306 + ], + [ + 2362 + ], + [ + 2364 + ], + [ + 2369, + 2376 + ], + [ + 2381 + ], + [ + 2385, + 2391 + ], + [ + 2402, + 2403 + ], + [ + 2433 + ], + [ + 2492 + ], + [ + 2497, + 2500 + ], + [ + 2509 + ], + [ + 2530, + 2531 + ], + [ + 2558 + ], + [ + 2561, + 2562 + ], + [ + 2620 + ], + [ + 2625, + 2626 + ], + [ + 2631, + 2632 + ], + [ + 2635, + 2637 + ], + [ + 2641 + ], + [ + 2672, + 2673 + ], + [ + 2677 + ], + [ + 2689, + 2690 + ], + [ + 2748 + ], + [ + 2753, + 2757 + ], + [ + 2759, + 2760 + ], + [ + 2765 + ], + [ + 2786, + 2787 + ], + [ + 2810, + 2815 + ], + [ + 2817 + ], + [ + 2876 + ], + [ + 2879 + ], + [ + 2881, + 2884 + ], + [ + 2893 + ], + [ + 2901, + 2902 + ], + [ + 2914, + 2915 + ], + [ + 2946 + ], + [ + 3008 + ], + [ + 3021 + ], + [ + 3072 + ], + [ + 3076 + ], + [ + 3132 + ], + [ + 3134, + 3136 + ], + [ + 3142, + 3144 + ], + [ + 3146, + 3149 + ], + [ + 3157, + 3158 + ], + [ + 3170, + 3171 + ], + [ + 3201 + ], + [ + 3260 + ], + [ + 3263 + ], + [ + 3270 + ], + [ + 3276, + 3277 + ], + [ + 3298, + 3299 + ], + [ + 3328, + 3329 + ], + [ + 3387, + 3388 + ], + [ + 3393, + 3396 + ], + [ + 3405 + ], + [ + 3426, + 3427 + ], + [ + 3457 + ], + [ + 3530 + ], + [ + 3538, + 3540 + ], + [ + 3542 + ], + [ + 3633 + ], + [ + 3636, + 3642 + ], + [ + 3655, + 3662 + ], + [ + 3761 + ], + [ + 3764, + 3772 + ], + [ + 3784, + 3790 + ], + [ + 3864, + 3865 + ], + [ + 3893 + ], + [ + 3895 + ], + [ + 3897 + ], + [ + 3953, + 3966 + ], + [ + 3968, + 3972 + ], + [ + 3974, + 3975 + ], + [ + 3981, + 3991 + ], + [ + 3993, + 4028 + ], + [ + 4038 + ], + [ + 4141, + 4144 + ], + [ + 4146, + 4151 + ], + [ + 4153, + 4154 + ], + [ + 4157, + 4158 + ], + [ + 4184, + 4185 + ], + [ + 4190, + 4192 + ], + [ + 4209, + 4212 + ], + [ + 4226 + ], + [ + 4229, + 4230 + ], + [ + 4237 + ], + [ + 4253 + ], + [ + 4957, + 4959 + ], + [ + 5906, + 5908 + ], + [ + 5938, + 5939 + ], + [ + 5970, + 5971 + ], + [ + 6002, + 6003 + ], + [ + 6068, + 6069 + ], + [ + 6071, + 6077 + ], + [ + 6086 + ], + [ + 6089, + 6099 + ], + [ + 6109 + ], + [ + 6155, + 6157 + ], + [ + 6159 + ], + [ + 6277, + 6278 + ], + [ + 6313 + ], + [ + 6432, + 6434 + ], + [ + 6439, + 6440 + ], + [ + 6450 + ], + [ + 6457, + 6459 + ], + [ + 6679, + 6680 + ], + [ + 6683 + ], + [ + 6742 + ], + [ + 6744, + 6750 + ], + [ + 6752 + ], + [ + 6754 + ], + [ + 6757, + 6764 + ], + [ + 6771, + 6780 + ], + [ + 6783 + ], + [ + 6832, + 6845 + ], + [ + 6847, + 6862 + ], + [ + 6912, + 6915 + ], + [ + 6964 + ], + [ + 6966, + 6970 + ], + [ + 6972 + ], + [ + 6978 + ], + [ + 7019, + 7027 + ], + [ + 7040, + 7041 + ], + [ + 7074, + 7077 + ], + [ + 7080, + 7081 + ], + [ + 7083, + 7085 + ], + [ + 7142 + ], + [ + 7144, + 7145 + ], + [ + 7149 + ], + [ + 7151, + 7153 + ], + [ + 7212, + 7219 + ], + [ + 7222, + 7223 + ], + [ + 7376, + 7378 + ], + [ + 7380, + 7392 + ], + [ + 7394, + 7400 + ], + [ + 7405 + ], + [ + 7412 + ], + [ + 7416, + 7417 + ], + [ + 7616, + 7679 + ], + [ + 8400, + 8412 + ], + [ + 8417 + ], + [ + 8421, + 8432 + ], + [ + 11503, + 11505 + ], + [ + 11647 + ], + [ + 11744, + 11775 + ], + [ + 12330, + 12333 + ], + [ + 12441, + 12442 + ], + [ + 42607 + ], + [ + 42612, + 42621 + ], + [ + 42654, + 42655 + ], + [ + 42736, + 42737 + ], + [ + 43010 + ], + [ + 43014 + ], + [ + 43019 + ], + [ + 43045, + 43046 + ], + [ + 43052 + ], + [ + 43204, + 43205 + ], + [ + 43232, + 43249 + ], + [ + 43263 + ], + [ + 43302, + 43309 + ], + [ + 43335, + 43345 + ], + [ + 43392, + 43394 + ], + [ + 43443 + ], + [ + 43446, + 43449 + ], + [ + 43452, + 43453 + ], + [ + 43493 + ], + [ + 43561, + 43566 + ], + [ + 43569, + 43570 + ], + [ + 43573, + 43574 + ], + [ + 43587 + ], + [ + 43596 + ], + [ + 43644 + ], + [ + 43696 + ], + [ + 43698, + 43700 + ], + [ + 43703, + 43704 + ], + [ + 43710, + 43711 + ], + [ + 43713 + ], + [ + 43756, + 43757 + ], + [ + 43766 + ], + [ + 44005 + ], + [ + 44008 + ], + [ + 44013 + ], + [ + 64286 + ], + [ + 65024, + 65039 + ], + [ + 65056, + 65071 + ], + [ + 66045 + ], + [ + 66272 + ], + [ + 66422, + 66426 + ], + [ + 68097, + 68099 + ], + [ + 68101, + 68102 + ], + [ + 68108, + 68111 + ], + [ + 68152, + 68154 + ], + [ + 68159 + ], + [ + 68325, + 68326 + ], + [ + 68900, + 68903 + ], + [ + 68969, + 68973 + ], + [ + 69291, + 69292 + ], + [ + 69372, + 69375 + ], + [ + 69446, + 69456 + ], + [ + 69506, + 69509 + ], + [ + 69633 + ], + [ + 69688, + 69702 + ], + [ + 69744 + ], + [ + 69747, + 69748 + ], + [ + 69759, + 69761 + ], + [ + 69811, + 69814 + ], + [ + 69817, + 69818 + ], + [ + 69826 + ], + [ + 69888, + 69890 + ], + [ + 69927, + 69931 + ], + [ + 69933, + 69940 + ], + [ + 70003 + ], + [ + 70016, + 70017 + ], + [ + 70070, + 70078 + ], + [ + 70089, + 70092 + ], + [ + 70095 + ], + [ + 70191, + 70193 + ], + [ + 70196 + ], + [ + 70198, + 70199 + ], + [ + 70206 + ], + [ + 70209 + ], + [ + 70367 + ], + [ + 70371, + 70378 + ], + [ + 70400, + 70401 + ], + [ + 70459, + 70460 + ], + [ + 70464 + ], + [ + 70502, + 70508 + ], + [ + 70512, + 70516 + ], + [ + 70587, + 70592 + ], + [ + 70606 + ], + [ + 70608 + ], + [ + 70610 + ], + [ + 70625, + 70626 + ], + [ + 70712, + 70719 + ], + [ + 70722, + 70724 + ], + [ + 70726 + ], + [ + 70750 + ], + [ + 70835, + 70840 + ], + [ + 70842 + ], + [ + 70847, + 70848 + ], + [ + 70850, + 70851 + ], + [ + 71090, + 71093 + ], + [ + 71100, + 71101 + ], + [ + 71103, + 71104 + ], + [ + 71132, + 71133 + ], + [ + 71219, + 71226 + ], + [ + 71229 + ], + [ + 71231, + 71232 + ], + [ + 71339 + ], + [ + 71341 + ], + [ + 71344, + 71349 + ], + [ + 71351 + ], + [ + 71453 + ], + [ + 71455 + ], + [ + 71458, + 71461 + ], + [ + 71463, + 71467 + ], + [ + 71727, + 71735 + ], + [ + 71737, + 71738 + ], + [ + 71995, + 71996 + ], + [ + 71998 + ], + [ + 72003 + ], + [ + 72148, + 72151 + ], + [ + 72154, + 72155 + ], + [ + 72160 + ], + [ + 72193, + 72202 + ], + [ + 72243, + 72248 + ], + [ + 72251, + 72254 + ], + [ + 72263 + ], + [ + 72273, + 72278 + ], + [ + 72281, + 72283 + ], + [ + 72330, + 72342 + ], + [ + 72344, + 72345 + ], + [ + 72752, + 72758 + ], + [ + 72760, + 72765 + ], + [ + 72767 + ], + [ + 72850, + 72871 + ], + [ + 72874, + 72880 + ], + [ + 72882, + 72883 + ], + [ + 72885, + 72886 + ], + [ + 73009, + 73014 + ], + [ + 73018 + ], + [ + 73020, + 73021 + ], + [ + 73023, + 73029 + ], + [ + 73031 + ], + [ + 73104, + 73105 + ], + [ + 73109 + ], + [ + 73111 + ], + [ + 73459, + 73460 + ], + [ + 73472, + 73473 + ], + [ + 73526, + 73530 + ], + [ + 73536 + ], + [ + 73538 + ], + [ + 73562 + ], + [ + 78912 + ], + [ + 78919, + 78933 + ], + [ + 90398, + 90409 + ], + [ + 90413, + 90415 + ], + [ + 92912, + 92916 + ], + [ + 92976, + 92982 + ], + [ + 94031 + ], + [ + 94095, + 94098 + ], + [ + 94180 + ], + [ + 113821, + 113822 + ], + [ + 118528, + 118573 + ], + [ + 118576, + 118598 + ], + [ + 119143, + 119145 + ], + [ + 119163, + 119170 + ], + [ + 119173, + 119179 + ], + [ + 119210, + 119213 + ], + [ + 119362, + 119364 + ], + [ + 121344, + 121398 + ], + [ + 121403, + 121452 + ], + [ + 121461 + ], + [ + 121476 + ], + [ + 121499, + 121503 + ], + [ + 121505, + 121519 + ], + [ + 122880, + 122886 + ], + [ + 122888, + 122904 + ], + [ + 122907, + 122913 + ], + [ + 122915, + 122916 + ], + [ + 122918, + 122922 + ], + [ + 123023 + ], + [ + 123184, + 123190 + ], + [ + 123566 + ], + [ + 123628, + 123631 + ], + [ + 124140, + 124143 + ], + [ + 124398, + 124399 + ], + [ + 125136, + 125142 + ], + [ + 125252, + 125258 + ], + [ + 917760, + 917999 + ] + ] +}; +ilib.data.ctype_n = { + "Nd": [ + [ + 48, + 57 + ], + [ + 1632, + 1641 + ], + [ + 1776, + 1785 + ], + [ + 1984, + 1993 + ], + [ + 2406, + 2415 + ], + [ + 2534, + 2543 + ], + [ + 2662, + 2671 + ], + [ + 2790, + 2799 + ], + [ + 2918, + 2927 + ], + [ + 3046, + 3055 + ], + [ + 3174, + 3183 + ], + [ + 3302, + 3311 + ], + [ + 3430, + 3439 + ], + [ + 3558, + 3567 + ], + [ + 3664, + 3673 + ], + [ + 3792, + 3801 + ], + [ + 3872, + 3881 + ], + [ + 4160, + 4169 + ], + [ + 4240, + 4249 + ], + [ + 6112, + 6121 + ], + [ + 6160, + 6169 + ], + [ + 6470, + 6479 + ], + [ + 6608, + 6617 + ], + [ + 6784, + 6793 + ], + [ + 6800, + 6809 + ], + [ + 6992, + 7001 + ], + [ + 7088, + 7097 + ], + [ + 7232, + 7241 + ], + [ + 7248, + 7257 + ], + [ + 42528, + 42537 + ], + [ + 43216, + 43225 + ], + [ + 43264, + 43273 + ], + [ + 43472, + 43481 + ], + [ + 43504, + 43513 + ], + [ + 43600, + 43609 + ], + [ + 44016, + 44025 + ], + [ + 65296, + 65305 + ], + [ + 66720, + 66729 + ], + [ + 68912, + 68921 + ], + [ + 68928, + 68937 + ], + [ + 69734, + 69743 + ], + [ + 69872, + 69881 + ], + [ + 69942, + 69951 + ], + [ + 70096, + 70105 + ], + [ + 70384, + 70393 + ], + [ + 70736, + 70745 + ], + [ + 70864, + 70873 + ], + [ + 71248, + 71257 + ], + [ + 71360, + 71369 + ], + [ + 71376, + 71395 + ], + [ + 71472, + 71481 + ], + [ + 71904, + 71913 + ], + [ + 72016, + 72025 + ], + [ + 72688, + 72697 + ], + [ + 72784, + 72793 + ], + [ + 73040, + 73049 + ], + [ + 73120, + 73129 + ], + [ + 73552, + 73561 + ], + [ + 90416, + 90425 + ], + [ + 92768, + 92777 + ], + [ + 92864, + 92873 + ], + [ + 93008, + 93017 + ], + [ + 93552, + 93561 + ], + [ + 118000, + 118009 + ], + [ + 120782, + 120831 + ], + [ + 123200, + 123209 + ], + [ + 123632, + 123641 + ], + [ + 124144, + 124153 + ], + [ + 124401, + 124410 + ], + [ + 125264, + 125273 + ], + [ + 130032, + 130041 + ] + ], + "Nl": [ + [ + 5870, + 5872 + ], + [ + 8544, + 8578 + ], + [ + 8581, + 8584 + ], + [ + 12295 + ], + [ + 12321, + 12329 + ], + [ + 12344, + 12346 + ], + [ + 42726, + 42735 + ], + [ + 65856, + 65908 + ], + [ + 66369 + ], + [ + 66378 + ], + [ + 66513, + 66517 + ], + [ + 74752, + 74862 + ] + ], + "No": [ + [ + 178, + 179 + ], + [ + 185 + ], + [ + 188, + 190 + ], + [ + 2548, + 2553 + ], + [ + 2930, + 2935 + ], + [ + 3056, + 3058 + ], + [ + 3192, + 3198 + ], + [ + 3416, + 3422 + ], + [ + 3440, + 3448 + ], + [ + 3882, + 3891 + ], + [ + 4969, + 4988 + ], + [ + 6128, + 6137 + ], + [ + 6618 + ], + [ + 8304 + ], + [ + 8308, + 8313 + ], + [ + 8320, + 8329 + ], + [ + 8528, + 8543 + ], + [ + 8585 + ], + [ + 9312, + 9371 + ], + [ + 9450, + 9471 + ], + [ + 10102, + 10131 + ], + [ + 11517 + ], + [ + 12690, + 12693 + ], + [ + 12832, + 12841 + ], + [ + 12872, + 12879 + ], + [ + 12881, + 12895 + ], + [ + 12928, + 12937 + ], + [ + 12977, + 12991 + ], + [ + 43056, + 43061 + ], + [ + 65799, + 65843 + ], + [ + 65909, + 65912 + ], + [ + 65930, + 65931 + ], + [ + 66273, + 66299 + ], + [ + 66336, + 66339 + ], + [ + 67672, + 67679 + ], + [ + 67705, + 67711 + ], + [ + 67751, + 67759 + ], + [ + 67835, + 67839 + ], + [ + 67862, + 67867 + ], + [ + 68028, + 68029 + ], + [ + 68032, + 68047 + ], + [ + 68050, + 68095 + ], + [ + 68160, + 68168 + ], + [ + 68221, + 68222 + ], + [ + 68253, + 68255 + ], + [ + 68331, + 68335 + ], + [ + 68440, + 68447 + ], + [ + 68472, + 68479 + ], + [ + 68521, + 68527 + ], + [ + 68858, + 68863 + ], + [ + 69216, + 69246 + ], + [ + 69405, + 69414 + ], + [ + 69457, + 69460 + ], + [ + 69573, + 69579 + ], + [ + 69714, + 69733 + ], + [ + 70113, + 70132 + ], + [ + 71482, + 71483 + ], + [ + 71914, + 71922 + ], + [ + 72794, + 72812 + ], + [ + 73664, + 73684 + ], + [ + 93019, + 93025 + ], + [ + 93824, + 93846 + ], + [ + 119488, + 119507 + ], + [ + 119520, + 119539 + ], + [ + 119648, + 119672 + ], + [ + 125127, + 125135 + ], + [ + 126065, + 126123 + ], + [ + 126125, + 126127 + ], + [ + 126129, + 126132 + ], + [ + 126209, + 126253 + ], + [ + 126255, + 126269 + ], + [ + 127232, + 127244 + ] + ] +}; +ilib.data.ctype_p = { + "Pc": [ + [ + 95 + ], + [ + 8255, + 8256 + ], + [ + 8276 + ], + [ + 65075, + 65076 + ], + [ + 65101, + 65103 + ], + [ + 65343 + ] + ], + "Pd": [ + [ + 45 + ], + [ + 1418 + ], + [ + 1470 + ], + [ + 5120 + ], + [ + 6150 + ], + [ + 8208, + 8213 + ], + [ + 11799 + ], + [ + 11802 + ], + [ + 11834, + 11835 + ], + [ + 11840 + ], + [ + 11869 + ], + [ + 12316 + ], + [ + 12336 + ], + [ + 12448 + ], + [ + 65073, + 65074 + ], + [ + 65112 + ], + [ + 65123 + ], + [ + 65293 + ], + [ + 68974 + ], + [ + 69293 + ] + ], + "Pe": [ + [ + 41 + ], + [ + 93 + ], + [ + 125 + ], + [ + 3899 + ], + [ + 3901 + ], + [ + 5788 + ], + [ + 8262 + ], + [ + 8318 + ], + [ + 8334 + ], + [ + 8969 + ], + [ + 8971 + ], + [ + 9002 + ], + [ + 10089 + ], + [ + 10091 + ], + [ + 10093 + ], + [ + 10095 + ], + [ + 10097 + ], + [ + 10099 + ], + [ + 10101 + ], + [ + 10182 + ], + [ + 10215 + ], + [ + 10217 + ], + [ + 10219 + ], + [ + 10221 + ], + [ + 10223 + ], + [ + 10628 + ], + [ + 10630 + ], + [ + 10632 + ], + [ + 10634 + ], + [ + 10636 + ], + [ + 10638 + ], + [ + 10640 + ], + [ + 10642 + ], + [ + 10644 + ], + [ + 10646 + ], + [ + 10648 + ], + [ + 10713 + ], + [ + 10715 + ], + [ + 10749 + ], + [ + 11811 + ], + [ + 11813 + ], + [ + 11815 + ], + [ + 11817 + ], + [ + 11862 + ], + [ + 11864 + ], + [ + 11866 + ], + [ + 11868 + ], + [ + 12297 + ], + [ + 12299 + ], + [ + 12301 + ], + [ + 12303 + ], + [ + 12305 + ], + [ + 12309 + ], + [ + 12311 + ], + [ + 12313 + ], + [ + 12315 + ], + [ + 12318, + 12319 + ], + [ + 64830 + ], + [ + 65048 + ], + [ + 65078 + ], + [ + 65080 + ], + [ + 65082 + ], + [ + 65084 + ], + [ + 65086 + ], + [ + 65088 + ], + [ + 65090 + ], + [ + 65092 + ], + [ + 65096 + ], + [ + 65114 + ], + [ + 65116 + ], + [ + 65118 + ], + [ + 65289 + ], + [ + 65341 + ], + [ + 65373 + ], + [ + 65376 + ], + [ + 65379 + ] + ], + "Pf": [ + [ + 187 + ], + [ + 8217 + ], + [ + 8221 + ], + [ + 8250 + ], + [ + 11779 + ], + [ + 11781 + ], + [ + 11786 + ], + [ + 11789 + ], + [ + 11805 + ], + [ + 11809 + ] + ], + "Pi": [ + [ + 171 + ], + [ + 8216 + ], + [ + 8219, + 8220 + ], + [ + 8223 + ], + [ + 8249 + ], + [ + 11778 + ], + [ + 11780 + ], + [ + 11785 + ], + [ + 11788 + ], + [ + 11804 + ], + [ + 11808 + ] + ], + "Po": [ + [ + 33, + 35 + ], + [ + 37, + 39 + ], + [ + 42 + ], + [ + 44 + ], + [ + 46, + 47 + ], + [ + 58, + 59 + ], + [ + 63, + 64 + ], + [ + 92 + ], + [ + 161 + ], + [ + 167 + ], + [ + 182, + 183 + ], + [ + 191 + ], + [ + 894 + ], + [ + 903 + ], + [ + 1370, + 1375 + ], + [ + 1417 + ], + [ + 1472 + ], + [ + 1475 + ], + [ + 1478 + ], + [ + 1523, + 1524 + ], + [ + 1545, + 1546 + ], + [ + 1548, + 1549 + ], + [ + 1563 + ], + [ + 1565, + 1567 + ], + [ + 1642, + 1645 + ], + [ + 1748 + ], + [ + 1792, + 1805 + ], + [ + 2039, + 2041 + ], + [ + 2096, + 2110 + ], + [ + 2142 + ], + [ + 2404, + 2405 + ], + [ + 2416 + ], + [ + 2557 + ], + [ + 2678 + ], + [ + 2800 + ], + [ + 3191 + ], + [ + 3204 + ], + [ + 3572 + ], + [ + 3663 + ], + [ + 3674, + 3675 + ], + [ + 3844, + 3858 + ], + [ + 3860 + ], + [ + 3973 + ], + [ + 4048, + 4052 + ], + [ + 4057, + 4058 + ], + [ + 4170, + 4175 + ], + [ + 4347 + ], + [ + 4960, + 4968 + ], + [ + 5742 + ], + [ + 5867, + 5869 + ], + [ + 5941, + 5942 + ], + [ + 6100, + 6102 + ], + [ + 6104, + 6106 + ], + [ + 6144, + 6149 + ], + [ + 6151, + 6154 + ], + [ + 6468, + 6469 + ], + [ + 6686, + 6687 + ], + [ + 6816, + 6822 + ], + [ + 6824, + 6829 + ], + [ + 6990, + 6991 + ], + [ + 7002, + 7008 + ], + [ + 7037, + 7039 + ], + [ + 7164, + 7167 + ], + [ + 7227, + 7231 + ], + [ + 7294, + 7295 + ], + [ + 7360, + 7367 + ], + [ + 7379 + ], + [ + 8214, + 8215 + ], + [ + 8224, + 8231 + ], + [ + 8240, + 8248 + ], + [ + 8251, + 8254 + ], + [ + 8257, + 8259 + ], + [ + 8263, + 8273 + ], + [ + 8275 + ], + [ + 8277, + 8286 + ], + [ + 11513, + 11516 + ], + [ + 11518, + 11519 + ], + [ + 11632 + ], + [ + 11776, + 11777 + ], + [ + 11782, + 11784 + ], + [ + 11787 + ], + [ + 11790, + 11798 + ], + [ + 11800, + 11801 + ], + [ + 11803 + ], + [ + 11806, + 11807 + ], + [ + 11818, + 11822 + ], + [ + 11824, + 11833 + ], + [ + 11836, + 11839 + ], + [ + 11841 + ], + [ + 11843, + 11855 + ], + [ + 11858, + 11860 + ], + [ + 12289, + 12291 + ], + [ + 12349 + ], + [ + 12539 + ], + [ + 42238, + 42239 + ], + [ + 42509, + 42511 + ], + [ + 42611 + ], + [ + 42622 + ], + [ + 42738, + 42743 + ], + [ + 43124, + 43127 + ], + [ + 43214, + 43215 + ], + [ + 43256, + 43258 + ], + [ + 43260 + ], + [ + 43310, + 43311 + ], + [ + 43359 + ], + [ + 43457, + 43469 + ], + [ + 43486, + 43487 + ], + [ + 43612, + 43615 + ], + [ + 43742, + 43743 + ], + [ + 43760, + 43761 + ], + [ + 44011 + ], + [ + 65040, + 65046 + ], + [ + 65049 + ], + [ + 65072 + ], + [ + 65093, + 65094 + ], + [ + 65097, + 65100 + ], + [ + 65104, + 65106 + ], + [ + 65108, + 65111 + ], + [ + 65119, + 65121 + ], + [ + 65128 + ], + [ + 65130, + 65131 + ], + [ + 65281, + 65283 + ], + [ + 65285, + 65287 + ], + [ + 65290 + ], + [ + 65292 + ], + [ + 65294, + 65295 + ], + [ + 65306, + 65307 + ], + [ + 65311, + 65312 + ], + [ + 65340 + ], + [ + 65377 + ], + [ + 65380, + 65381 + ], + [ + 65792, + 65794 + ], + [ + 66463 + ], + [ + 66512 + ], + [ + 66927 + ], + [ + 67671 + ], + [ + 67871 + ], + [ + 67903 + ], + [ + 68176, + 68184 + ], + [ + 68223 + ], + [ + 68336, + 68342 + ], + [ + 68409, + 68415 + ], + [ + 68505, + 68508 + ], + [ + 69461, + 69465 + ], + [ + 69510, + 69513 + ], + [ + 69703, + 69709 + ], + [ + 69819, + 69820 + ], + [ + 69822, + 69825 + ], + [ + 69952, + 69955 + ], + [ + 70004, + 70005 + ], + [ + 70085, + 70088 + ], + [ + 70093 + ], + [ + 70107 + ], + [ + 70109, + 70111 + ], + [ + 70200, + 70205 + ], + [ + 70313 + ], + [ + 70612, + 70613 + ], + [ + 70615, + 70616 + ], + [ + 70731, + 70735 + ], + [ + 70746, + 70747 + ], + [ + 70749 + ], + [ + 70854 + ], + [ + 71105, + 71127 + ], + [ + 71233, + 71235 + ], + [ + 71264, + 71276 + ], + [ + 71353 + ], + [ + 71484, + 71486 + ], + [ + 71739 + ], + [ + 72004, + 72006 + ], + [ + 72162 + ], + [ + 72255, + 72262 + ], + [ + 72346, + 72348 + ], + [ + 72350, + 72354 + ], + [ + 72448, + 72457 + ], + [ + 72673 + ], + [ + 72769, + 72773 + ], + [ + 72816, + 72817 + ], + [ + 73463, + 73464 + ], + [ + 73539, + 73551 + ], + [ + 73727 + ], + [ + 74864, + 74868 + ], + [ + 77809, + 77810 + ], + [ + 92782, + 92783 + ], + [ + 92917 + ], + [ + 92983, + 92987 + ], + [ + 92996 + ], + [ + 93549, + 93551 + ], + [ + 93847, + 93850 + ], + [ + 94178 + ], + [ + 113823 + ], + [ + 121479, + 121483 + ], + [ + 124415 + ], + [ + 125278, + 125279 + ] + ], + "Ps": [ + [ + 40 + ], + [ + 91 + ], + [ + 123 + ], + [ + 3898 + ], + [ + 3900 + ], + [ + 5787 + ], + [ + 8218 + ], + [ + 8222 + ], + [ + 8261 + ], + [ + 8317 + ], + [ + 8333 + ], + [ + 8968 + ], + [ + 8970 + ], + [ + 9001 + ], + [ + 10088 + ], + [ + 10090 + ], + [ + 10092 + ], + [ + 10094 + ], + [ + 10096 + ], + [ + 10098 + ], + [ + 10100 + ], + [ + 10181 + ], + [ + 10214 + ], + [ + 10216 + ], + [ + 10218 + ], + [ + 10220 + ], + [ + 10222 + ], + [ + 10627 + ], + [ + 10629 + ], + [ + 10631 + ], + [ + 10633 + ], + [ + 10635 + ], + [ + 10637 + ], + [ + 10639 + ], + [ + 10641 + ], + [ + 10643 + ], + [ + 10645 + ], + [ + 10647 + ], + [ + 10712 + ], + [ + 10714 + ], + [ + 10748 + ], + [ + 11810 + ], + [ + 11812 + ], + [ + 11814 + ], + [ + 11816 + ], + [ + 11842 + ], + [ + 11861 + ], + [ + 11863 + ], + [ + 11865 + ], + [ + 11867 + ], + [ + 12296 + ], + [ + 12298 + ], + [ + 12300 + ], + [ + 12302 + ], + [ + 12304 + ], + [ + 12308 + ], + [ + 12310 + ], + [ + 12312 + ], + [ + 12314 + ], + [ + 12317 + ], + [ + 64831 + ], + [ + 65047 + ], + [ + 65077 + ], + [ + 65079 + ], + [ + 65081 + ], + [ + 65083 + ], + [ + 65085 + ], + [ + 65087 + ], + [ + 65089 + ], + [ + 65091 + ], + [ + 65095 + ], + [ + 65113 + ], + [ + 65115 + ], + [ + 65117 + ], + [ + 65288 + ], + [ + 65339 + ], + [ + 65371 + ], + [ + 65375 + ], + [ + 65378 + ] + ] +}; +ilib.data.ctype_s = { + "Sc": [ + [ + 36 + ], + [ + 162, + 165 + ], + [ + 1423 + ], + [ + 1547 + ], + [ + 2046, + 2047 + ], + [ + 2546, + 2547 + ], + [ + 2555 + ], + [ + 2801 + ], + [ + 3065 + ], + [ + 3647 + ], + [ + 6107 + ], + [ + 8352, + 8384 + ], + [ + 43064 + ], + [ + 65020 + ], + [ + 65129 + ], + [ + 65284 + ], + [ + 65504, + 65505 + ], + [ + 65509, + 65510 + ], + [ + 73693, + 73696 + ], + [ + 123647 + ], + [ + 126128 + ] + ], + "Sk": [ + [ + 94 + ], + [ + 96 + ], + [ + 168 + ], + [ + 175 + ], + [ + 180 + ], + [ + 184 + ], + [ + 706, + 709 + ], + [ + 722, + 735 + ], + [ + 741, + 747 + ], + [ + 749 + ], + [ + 751, + 767 + ], + [ + 885 + ], + [ + 900, + 901 + ], + [ + 2184 + ], + [ + 8125 + ], + [ + 8127, + 8129 + ], + [ + 8141, + 8143 + ], + [ + 8157, + 8159 + ], + [ + 8173, + 8175 + ], + [ + 8189, + 8190 + ], + [ + 12443, + 12444 + ], + [ + 42752, + 42774 + ], + [ + 42784, + 42785 + ], + [ + 42889, + 42890 + ], + [ + 43867 + ], + [ + 43882, + 43883 + ], + [ + 64434, + 64450 + ], + [ + 65342 + ], + [ + 65344 + ], + [ + 65507 + ], + [ + 127995, + 127999 + ] + ], + "Sm": [ + [ + 43 + ], + [ + 60, + 62 + ], + [ + 124 + ], + [ + 126 + ], + [ + 172 + ], + [ + 177 + ], + [ + 215 + ], + [ + 247 + ], + [ + 1014 + ], + [ + 1542, + 1544 + ], + [ + 8260 + ], + [ + 8274 + ], + [ + 8314, + 8316 + ], + [ + 8330, + 8332 + ], + [ + 8472 + ], + [ + 8512, + 8516 + ], + [ + 8523 + ], + [ + 8592, + 8596 + ], + [ + 8602, + 8603 + ], + [ + 8608 + ], + [ + 8611 + ], + [ + 8614 + ], + [ + 8622 + ], + [ + 8654, + 8655 + ], + [ + 8658 + ], + [ + 8660 + ], + [ + 8692, + 8959 + ], + [ + 8992, + 8993 + ], + [ + 9084 + ], + [ + 9115, + 9139 + ], + [ + 9180, + 9185 + ], + [ + 9655 + ], + [ + 9665 + ], + [ + 9720, + 9727 + ], + [ + 9839 + ], + [ + 10176, + 10180 + ], + [ + 10183, + 10213 + ], + [ + 10224, + 10239 + ], + [ + 10496, + 10626 + ], + [ + 10649, + 10711 + ], + [ + 10716, + 10747 + ], + [ + 10750, + 11007 + ], + [ + 11056, + 11076 + ], + [ + 11079, + 11084 + ], + [ + 64297 + ], + [ + 65122 + ], + [ + 65124, + 65126 + ], + [ + 65291 + ], + [ + 65308, + 65310 + ], + [ + 65372 + ], + [ + 65374 + ], + [ + 65506 + ], + [ + 65513, + 65516 + ], + [ + 69006, + 69007 + ], + [ + 120513 + ], + [ + 120539 + ], + [ + 120571 + ], + [ + 120597 + ], + [ + 120629 + ], + [ + 120655 + ], + [ + 120687 + ], + [ + 120713 + ], + [ + 120745 + ], + [ + 120771 + ], + [ + 126704, + 126705 + ] + ], + "So": [ + [ + 166 + ], + [ + 169 + ], + [ + 174 + ], + [ + 176 + ], + [ + 1154 + ], + [ + 1421, + 1422 + ], + [ + 1550, + 1551 + ], + [ + 1758 + ], + [ + 1769 + ], + [ + 1789, + 1790 + ], + [ + 2038 + ], + [ + 2554 + ], + [ + 2928 + ], + [ + 3059, + 3064 + ], + [ + 3066 + ], + [ + 3199 + ], + [ + 3407 + ], + [ + 3449 + ], + [ + 3841, + 3843 + ], + [ + 3859 + ], + [ + 3861, + 3863 + ], + [ + 3866, + 3871 + ], + [ + 3892 + ], + [ + 3894 + ], + [ + 3896 + ], + [ + 4030, + 4037 + ], + [ + 4039, + 4044 + ], + [ + 4046, + 4047 + ], + [ + 4053, + 4056 + ], + [ + 4254, + 4255 + ], + [ + 5008, + 5017 + ], + [ + 5741 + ], + [ + 6464 + ], + [ + 6622, + 6655 + ], + [ + 7009, + 7018 + ], + [ + 7028, + 7036 + ], + [ + 8448, + 8449 + ], + [ + 8451, + 8454 + ], + [ + 8456, + 8457 + ], + [ + 8468 + ], + [ + 8470, + 8471 + ], + [ + 8478, + 8483 + ], + [ + 8485 + ], + [ + 8487 + ], + [ + 8489 + ], + [ + 8494 + ], + [ + 8506, + 8507 + ], + [ + 8522 + ], + [ + 8524, + 8525 + ], + [ + 8527 + ], + [ + 8586, + 8587 + ], + [ + 8597, + 8601 + ], + [ + 8604, + 8607 + ], + [ + 8609, + 8610 + ], + [ + 8612, + 8613 + ], + [ + 8615, + 8621 + ], + [ + 8623, + 8653 + ], + [ + 8656, + 8657 + ], + [ + 8659 + ], + [ + 8661, + 8691 + ], + [ + 8960, + 8967 + ], + [ + 8972, + 8991 + ], + [ + 8994, + 9000 + ], + [ + 9003, + 9083 + ], + [ + 9085, + 9114 + ], + [ + 9140, + 9179 + ], + [ + 9186, + 9257 + ], + [ + 9280, + 9290 + ], + [ + 9372, + 9449 + ], + [ + 9472, + 9654 + ], + [ + 9656, + 9664 + ], + [ + 9666, + 9719 + ], + [ + 9728, + 9838 + ], + [ + 9840, + 10087 + ], + [ + 10132, + 10175 + ], + [ + 10240, + 10495 + ], + [ + 11008, + 11055 + ], + [ + 11077, + 11078 + ], + [ + 11085, + 11123 + ], + [ + 11126, + 11157 + ], + [ + 11159, + 11263 + ], + [ + 11493, + 11498 + ], + [ + 11856, + 11857 + ], + [ + 11904, + 11929 + ], + [ + 11931, + 12019 + ], + [ + 12032, + 12245 + ], + [ + 12272, + 12287 + ], + [ + 12292 + ], + [ + 12306, + 12307 + ], + [ + 12320 + ], + [ + 12342, + 12343 + ], + [ + 12350, + 12351 + ], + [ + 12688, + 12689 + ], + [ + 12694, + 12703 + ], + [ + 12736, + 12773 + ], + [ + 12783 + ], + [ + 12800, + 12830 + ], + [ + 12842, + 12871 + ], + [ + 12880 + ], + [ + 12896, + 12927 + ], + [ + 12938, + 12976 + ], + [ + 12992, + 13311 + ], + [ + 19904, + 19967 + ], + [ + 42128, + 42182 + ], + [ + 43048, + 43051 + ], + [ + 43062, + 43063 + ], + [ + 43065 + ], + [ + 43639, + 43641 + ], + [ + 64832, + 64847 + ], + [ + 64975 + ], + [ + 65021, + 65023 + ], + [ + 65508 + ], + [ + 65512 + ], + [ + 65517, + 65518 + ], + [ + 65532, + 65533 + ], + [ + 65847, + 65855 + ], + [ + 65913, + 65929 + ], + [ + 65932, + 65934 + ], + [ + 65936, + 65948 + ], + [ + 65952 + ], + [ + 66000, + 66044 + ], + [ + 67703, + 67704 + ], + [ + 68296 + ], + [ + 71487 + ], + [ + 73685, + 73692 + ], + [ + 73697, + 73713 + ], + [ + 92988, + 92991 + ], + [ + 92997 + ], + [ + 113820 + ], + [ + 117760, + 117999 + ], + [ + 118016, + 118451 + ], + [ + 118608, + 118723 + ], + [ + 118784, + 119029 + ], + [ + 119040, + 119078 + ], + [ + 119081, + 119140 + ], + [ + 119146, + 119148 + ], + [ + 119171, + 119172 + ], + [ + 119180, + 119209 + ], + [ + 119214, + 119274 + ], + [ + 119296, + 119361 + ], + [ + 119365 + ], + [ + 119552, + 119638 + ], + [ + 120832, + 121343 + ], + [ + 121399, + 121402 + ], + [ + 121453, + 121460 + ], + [ + 121462, + 121475 + ], + [ + 121477, + 121478 + ], + [ + 123215 + ], + [ + 126124 + ], + [ + 126254 + ], + [ + 126976, + 127019 + ], + [ + 127024, + 127123 + ], + [ + 127136, + 127150 + ], + [ + 127153, + 127167 + ], + [ + 127169, + 127183 + ], + [ + 127185, + 127221 + ], + [ + 127245, + 127405 + ], + [ + 127462, + 127490 + ], + [ + 127504, + 127547 + ], + [ + 127552, + 127560 + ], + [ + 127568, + 127569 + ], + [ + 127584, + 127589 + ], + [ + 127744, + 127994 + ], + [ + 128000, + 128727 + ], + [ + 128732, + 128748 + ], + [ + 128752, + 128764 + ], + [ + 128768, + 128886 + ], + [ + 128891, + 128985 + ], + [ + 128992, + 129003 + ], + [ + 129008 + ], + [ + 129024, + 129035 + ], + [ + 129040, + 129095 + ], + [ + 129104, + 129113 + ], + [ + 129120, + 129159 + ], + [ + 129168, + 129197 + ], + [ + 129200, + 129211 + ], + [ + 129216, + 129217 + ], + [ + 129280, + 129619 + ], + [ + 129632, + 129645 + ], + [ + 129648, + 129660 + ], + [ + 129664, + 129673 + ], + [ + 129679, + 129734 + ], + [ + 129742, + 129756 + ], + [ + 129759, + 129769 + ], + [ + 129776, + 129784 + ], + [ + 129792, + 129938 + ], + [ + 129940, + 130031 + ] + ] +}; +ilib.data.ctype_z = { + "Zl": [ + [ + 8232 + ] + ], + "Zp": [ + [ + 8233 + ] + ], + "Zs": [ + [ + 32 + ], + [ + 160 + ], + [ + 5760 + ], + [ + 8192, + 8202 + ], + [ + 8239 + ], + [ + 8287 + ], + [ + 12288 + ] + ] +}; +ilib.data.zoneinfo["Africa/Abidjan"] = { + "c": "CI", + "f": "GMT", + "n": "Greenwich {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["Africa/Accra"] = { + "c": "GH", + "f": "GMT", + "n": "Greenwich {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["Africa/Addis_Ababa"] = { + "c": "ET", + "f": "EAT", + "n": "E. Africa {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Africa/Algiers"] = { + "c": "DZ", + "f": "CET", + "n": "W. Central Africa {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Africa/Asmara"] = { + "c": "ER", + "f": "EAT", + "o": "3:0" +}; +ilib.data.zoneinfo["Africa/Asmera"] = { + "c": "KE", + "f": "EAT", + "n": "E. Africa {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Africa/Bamako"] = { + "c": "ML", + "f": "GMT", + "n": "Greenwich {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["Africa/Bangui"] = { + "c": "CF", + "f": "WAT", + "n": "W. Central Africa {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Africa/Banjul"] = { + "c": "GM", + "f": "GMT", + "n": "Greenwich {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["Africa/Bissau"] = { + "c": "GW", + "f": "GMT", + "n": "Greenwich {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["Africa/Blantyre"] = { + "c": "MW", + "f": "CAT", + "n": "South Africa {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Africa/Brazzaville"] = { + "c": "CG", + "f": "WAT", + "n": "W. Central Africa {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Africa/Bujumbura"] = { + "c": "BI", + "f": "CAT", + "n": "South Africa {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Africa/Cairo"] = { + "c": "EG", + "e": { + "m": 10, + "r": "l5", + "t": "0:0" + }, + "f": "EE{c}T", + "n": "Egypt {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 4, + "r": "l5", + "t": "0:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Africa/Casablanca"] = { + "c": "MA", + "e": { + "m": 4, + "r": "14", + "t": "2:0" + }, + "f": "+01/+00", + "n": "Morocco {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Africa/Ceuta"] = { + "c": "ES", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "Romance {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Africa/Conakry"] = { + "c": "GN", + "f": "GMT", + "n": "Greenwich {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["Africa/Dakar"] = { + "c": "SN", + "f": "GMT", + "n": "Greenwich {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["Africa/Dar_es_Salaam"] = { + "c": "TZ", + "f": "EAT", + "n": "E. Africa {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Africa/Djibouti"] = { + "c": "DJ", + "f": "EAT", + "n": "E. Africa {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Africa/Douala"] = { + "c": "CM", + "f": "WAT", + "n": "W. Central Africa {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Africa/El_Aaiun"] = { + "c": "EH", + "e": { + "m": 4, + "r": "14", + "t": "2:0" + }, + "f": "+01/+00", + "n": "Morocco {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Africa/Freetown"] = { + "c": "SL", + "f": "GMT", + "n": "Greenwich {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["Africa/Gaborone"] = { + "c": "BW", + "f": "CAT", + "n": "South Africa {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Africa/Harare"] = { + "c": "ZW", + "f": "CAT", + "n": "South Africa {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Africa/Johannesburg"] = { + "c": "ZA", + "f": "SAST", + "n": "South Africa {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Africa/Juba"] = { + "c": "SS", + "f": "CAT", + "n": "South Sudan {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Africa/Kampala"] = { + "c": "UG", + "f": "EAT", + "n": "E. Africa {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Africa/Khartoum"] = { + "c": "SD", + "f": "CAT", + "n": "Sudan {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Africa/Kigali"] = { + "c": "RW", + "f": "CAT", + "n": "South Africa {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Africa/Kinshasa"] = { + "c": "CD", + "f": "WAT", + "n": "W. Central Africa {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Africa/Lagos"] = { + "c": "NG", + "f": "WAT", + "n": "W. Central Africa {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Africa/Libreville"] = { + "c": "GA", + "f": "WAT", + "n": "W. Central Africa {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Africa/Lome"] = { + "c": "TG", + "f": "GMT", + "n": "Greenwich {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["Africa/Luanda"] = { + "c": "AO", + "f": "WAT", + "n": "W. Central Africa {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Africa/Lubumbashi"] = { + "c": "CD", + "f": "CAT", + "n": "South Africa {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Africa/Lusaka"] = { + "c": "ZM", + "f": "CAT", + "n": "South Africa {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Africa/Malabo"] = { + "c": "GQ", + "f": "WAT", + "n": "W. Central Africa {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Africa/Maputo"] = { + "c": "MZ", + "f": "CAT", + "n": "South Africa {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Africa/Maseru"] = { + "c": "LS", + "f": "SAST", + "n": "South Africa {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Africa/Mbabane"] = { + "c": "SZ", + "f": "SAST", + "n": "South Africa {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Africa/Mogadishu"] = { + "c": "SO", + "f": "EAT", + "n": "E. Africa {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Africa/Monrovia"] = { + "c": "LR", + "f": "GMT", + "n": "Greenwich {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["Africa/Nairobi"] = { + "c": "KE", + "f": "EAT", + "n": "E. Africa {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Africa/Ndjamena"] = { + "c": "TD", + "f": "WAT", + "n": "W. Central Africa {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Africa/Niamey"] = { + "c": "NE", + "f": "WAT", + "n": "W. Central Africa {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Africa/Nouakchott"] = { + "c": "MR", + "f": "GMT", + "n": "Greenwich {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["Africa/Ouagadougou"] = { + "c": "BF", + "f": "GMT", + "n": "Greenwich {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["Africa/Porto-Novo"] = { + "c": "BJ", + "f": "WAT", + "n": "W. Central Africa {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Africa/Sao_Tome"] = { + "c": "ST", + "f": "GMT", + "n": "Sao Tome {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["Africa/Timbuktu"] = { + "c": "CI", + "f": "GMT", + "o": "0:0" +}; +ilib.data.zoneinfo["Africa/Tripoli"] = { + "c": "LY", + "f": "EET", + "n": "Libya {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Africa/Tunis"] = { + "c": "TN", + "f": "CEST", + "n": "W. Central Africa {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Africa/Windhoek"] = { + "c": "NA", + "f": "WAT", + "n": "Namibia {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["America/Adak"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "H{c}T", + "n": "Aleutian {c} Time", + "o": "-10:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Anchorage"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "AK{c}T", + "n": "Alaskan {c} Time", + "o": "-9:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Anguilla"] = { + "c": "AI", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Antigua"] = { + "c": "AG", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Araguaina"] = { + "c": "BR", + "f": "-03", + "n": "Tocantins {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Argentina/Buenos_Aires"] = { + "c": "AR", + "f": "-03/-02", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Argentina/Catamarca"] = { + "c": "AR", + "f": "-03", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Argentina/ComodRivadavia"] = { + "c": "AR", + "f": "-03", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Argentina/Cordoba"] = { + "c": "AR", + "f": "-03/-02", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Argentina/Jujuy"] = { + "c": "AR", + "f": "-03", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Argentina/La_Rioja"] = { + "c": "AR", + "f": "-03", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Argentina/Mendoza"] = { + "c": "AR", + "f": "-03", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Argentina/Rio_Gallegos"] = { + "c": "AR", + "f": "-03", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Argentina/Salta"] = { + "c": "AR", + "f": "-03", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Argentina/San_Juan"] = { + "c": "AR", + "f": "-03", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Argentina/San_Luis"] = { + "c": "AR", + "f": "-03", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Argentina/Tucuman"] = { + "c": "AR", + "f": "-03/-02", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Argentina/Ushuaia"] = { + "c": "AR", + "f": "-03", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Aruba"] = { + "c": "AW", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Asuncion"] = { + "c": "PY", + "e": { + "m": 3, + "r": "0>22", + "t": "0:0" + }, + "f": "-04/-03", + "n": "Paraguay {c} Time", + "o": "-4:0", + "s": { + "m": 10, + "r": "0>1", + "t": "0:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Atikokan"] = { + "c": "CA", + "f": "EST", + "o": "-5:0" +}; +ilib.data.zoneinfo["America/Bahia"] = { + "c": "BR", + "f": "-03", + "n": "Bahia {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Bahia_Banderas"] = { + "c": "MX", + "f": "CST", + "n": "Central {c} Time (Mexico)", + "o": "-6:0" +}; +ilib.data.zoneinfo["America/Barbados"] = { + "c": "BB", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Belem"] = { + "c": "BR", + "f": "-03", + "n": "SA Eastern {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Belize"] = { + "c": "BZ", + "f": "CST", + "n": "Central America {c} Time", + "o": "-6:0" +}; +ilib.data.zoneinfo["America/Blanc-Sablon"] = { + "c": "CA", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Boa_Vista"] = { + "c": "BR", + "f": "-04", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Bogota"] = { + "c": "CO", + "f": "-05/-04", + "n": "SA Pacific {c} Time", + "o": "-5:0" +}; +ilib.data.zoneinfo["America/Boise"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "M{c}T", + "n": "Mountain {c} Time", + "o": "-7:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Buenos_Aires"] = { + "c": "AR", + "f": "-03/-02", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Cambridge_Bay"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "M{c}T", + "n": "Mountain {c} Time", + "o": "-7:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Campo_Grande"] = { + "c": "BR", + "f": "-04/-03", + "n": "Central Brazilian {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Cancun"] = { + "c": "MX", + "f": "EST", + "n": "Eastern {c} Time (Mexico)", + "o": "-5:0" +}; +ilib.data.zoneinfo["America/Caracas"] = { + "c": "VE", + "f": "-04", + "n": "Venezuela {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Catamarca"] = { + "c": "AR", + "f": "-03", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Cayenne"] = { + "c": "GF", + "f": "-03", + "n": "SA Eastern {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Cayman"] = { + "c": "KY", + "f": "EST", + "n": "SA Pacific {c} Time", + "o": "-5:0" +}; +ilib.data.zoneinfo["America/Chicago"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "n": "Central {c} Time", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Chihuahua"] = { + "c": "MX", + "f": "CST", + "n": "Central {c} Time (Mexico)", + "o": "-6:0" +}; +ilib.data.zoneinfo["America/Ciudad_Juarez"] = { + "c": "MX", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "M{c}T", + "n": "Mountain {c} Time", + "o": "-7:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Coral_Harbour"] = { + "c": "CA", + "f": "EST", + "n": "SA Pacific {c} Time", + "o": "-5:0" +}; +ilib.data.zoneinfo["America/Cordoba"] = { + "c": "AR", + "f": "-03/-02", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Costa_Rica"] = { + "c": "CR", + "f": "CST", + "n": "Central America {c} Time", + "o": "-6:0" +}; +ilib.data.zoneinfo["America/Creston"] = { + "c": "CA", + "f": "MST", + "n": "US Mountain {c} Time", + "o": "-7:0" +}; +ilib.data.zoneinfo["America/Cuiaba"] = { + "c": "BR", + "f": "-04/-03", + "n": "Central Brazilian {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Curacao"] = { + "c": "CW", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Danmarkshavn"] = { + "c": "GL", + "f": "GMT", + "n": "Greenwich {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["America/Dawson"] = { + "c": "CA", + "f": "MST", + "n": "Yukon {c} Time", + "o": "-7:0" +}; +ilib.data.zoneinfo["America/Dawson_Creek"] = { + "c": "CA", + "f": "MST", + "n": "US Mountain {c} Time", + "o": "-7:0" +}; +ilib.data.zoneinfo["America/Denver"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "M{c}T", + "n": "Mountain {c} Time", + "o": "-7:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Detroit"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Dominica"] = { + "c": "DM", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Edmonton"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "M{c}T", + "n": "Mountain {c} Time", + "o": "-7:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Eirunepe"] = { + "c": "BR", + "f": "-05", + "n": "SA Pacific {c} Time", + "o": "-5:0" +}; +ilib.data.zoneinfo["America/El_Salvador"] = { + "c": "SV", + "f": "CST", + "n": "Central America {c} Time", + "o": "-6:0" +}; +ilib.data.zoneinfo["America/Ensenada"] = { + "c": "MX", + "f": "PST", + "o": "-8:0" +}; +ilib.data.zoneinfo["America/Fort_Nelson"] = { + "c": "CA", + "f": "MST", + "n": "US Mountain {c} Time", + "o": "-7:0" +}; +ilib.data.zoneinfo["America/Fort_Wayne"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Fortaleza"] = { + "c": "BR", + "f": "-03", + "n": "SA Eastern {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Glace_Bay"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "A{c}T", + "n": "Atlantic {c} Time", + "o": "-4:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Godthab"] = { + "e": { + "m": 10, + "r": "l6", + "t": "23:0" + }, + "f": "-03/-02", + "o": "-3:0", + "s": { + "c": "S", + "m": 3, + "r": "l6", + "t": "22:0", + "v": "1:0" + }, + "c": "GL", + "n": "Greenland {c} Time" +}; +ilib.data.zoneinfo["America/Goose_Bay"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "A{c}T", + "n": "Atlantic {c} Time", + "o": "-4:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Grand_Turk"] = { + "c": "TC", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Turks And Caicos {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Grenada"] = { + "c": "GD", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Guadeloupe"] = { + "c": "GP", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Guatemala"] = { + "c": "GT", + "f": "CST", + "n": "Central America {c} Time", + "o": "-6:0" +}; +ilib.data.zoneinfo["America/Guayaquil"] = { + "c": "EC", + "f": "-05/-04", + "n": "SA Pacific {c} Time", + "o": "-5:0" +}; +ilib.data.zoneinfo["America/Guyana"] = { + "c": "GY", + "f": "-04", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Halifax"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "A{c}T", + "n": "Atlantic {c} Time", + "o": "-4:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Havana"] = { + "c": "CU", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "1:0" + }, + "f": "C{c}T", + "n": "Cuba {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "0:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Hermosillo"] = { + "c": "MX", + "f": "MST", + "n": "US Mountain {c} Time", + "o": "-7:0" +}; +ilib.data.zoneinfo["America/Indiana/Indianapolis"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "US Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Indiana/Knox"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "n": "Central {c} Time", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Indiana/Marengo"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "US Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Indiana/Petersburg"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Indiana/Tell_City"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "n": "Central {c} Time", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Indiana/Vevay"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "US Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Indiana/Vincennes"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Indiana/Winamac"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Indianapolis"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "US Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Inuvik"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "M{c}T", + "n": "Mountain {c} Time", + "o": "-7:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Iqaluit"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Jamaica"] = { + "c": "JM", + "f": "EST", + "n": "SA Pacific {c} Time", + "o": "-5:0" +}; +ilib.data.zoneinfo["America/Jujuy"] = { + "c": "AR", + "f": "-03", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Juneau"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "AK{c}T", + "n": "Alaskan {c} Time", + "o": "-9:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Kentucky/Louisville"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Kentucky/Monticello"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Knox_IN"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Kralendijk"] = { + "c": "BQ", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/La_Paz"] = { + "c": "BO", + "f": "-04", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Lima"] = { + "c": "PE", + "f": "-05/-04", + "n": "SA Pacific {c} Time", + "o": "-5:0" +}; +ilib.data.zoneinfo["America/Los_Angeles"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "P{c}T", + "n": "Pacific {c} Time", + "o": "-8:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Louisville"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Lower_Princes"] = { + "c": "SX", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Maceio"] = { + "c": "BR", + "f": "-03", + "n": "SA Eastern {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Managua"] = { + "c": "NI", + "f": "CST", + "n": "Central America {c} Time", + "o": "-6:0" +}; +ilib.data.zoneinfo["America/Manaus"] = { + "c": "BR", + "f": "-04", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Marigot"] = { + "c": "MF", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Martinique"] = { + "c": "MQ", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Matamoros"] = { + "c": "MX", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "n": "Central {c} Time", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Mazatlan"] = { + "c": "MX", + "f": "MST", + "n": "Mountain {c} Time (Mexico)", + "o": "-7:0" +}; +ilib.data.zoneinfo["America/Mendoza"] = { + "c": "AR", + "f": "-03", + "n": "Argentina {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Menominee"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "n": "Central {c} Time", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Merida"] = { + "c": "MX", + "f": "CST", + "n": "Central {c} Time (Mexico)", + "o": "-6:0" +}; +ilib.data.zoneinfo["America/Metlakatla"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "AK{c}T", + "n": "Alaskan {c} Time", + "o": "-9:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Mexico_City"] = { + "c": "MX", + "f": "CST", + "n": "Central {c} Time (Mexico)", + "o": "-6:0" +}; +ilib.data.zoneinfo["America/Miquelon"] = { + "c": "PM", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "-03/-02", + "n": "Saint Pierre {c} Time", + "o": "-3:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Moncton"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "A{c}T", + "n": "Atlantic {c} Time", + "o": "-4:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Monterrey"] = { + "c": "MX", + "f": "CST", + "n": "Central {c} Time (Mexico)", + "o": "-6:0" +}; +ilib.data.zoneinfo["America/Montevideo"] = { + "c": "UY", + "f": "-03/-02", + "n": "Montevideo {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Montreal"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Montserrat"] = { + "c": "MS", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Nassau"] = { + "c": "BS", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/New_York"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Nipigon"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Nome"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "AK{c}T", + "n": "Alaskan {c} Time", + "o": "-9:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Noronha"] = { + "c": "BR", + "f": "-02", + "n": "UTC-02", + "o": "-2:0" +}; +ilib.data.zoneinfo["America/North_Dakota/Beulah"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "n": "Central {c} Time", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/North_Dakota/Center"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "n": "Central {c} Time", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/North_Dakota/New_Salem"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "n": "Central {c} Time", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Nuuk"] = { + "c": "GL", + "e": { + "m": 10, + "r": "l0", + "t": "0:0" + }, + "f": "-02/-01", + "n": "Greenland {c} Time", + "o": "-2:0", + "s": { + "c": "S", + "m": 3, + "r": "l6", + "t": "23:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Ojinaga"] = { + "c": "MX", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "n": "Central {c} Time", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Panama"] = { + "c": "PA", + "f": "EST", + "n": "SA Pacific {c} Time", + "o": "-5:0" +}; +ilib.data.zoneinfo["America/Pangnirtung"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Paramaribo"] = { + "c": "SR", + "f": "-03", + "n": "SA Eastern {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Phoenix"] = { + "c": "US", + "f": "MST", + "n": "US Mountain {c} Time", + "o": "-7:0" +}; +ilib.data.zoneinfo["America/Port-au-Prince"] = { + "c": "HT", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Haiti {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Port_of_Spain"] = { + "c": "TT", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Porto_Acre"] = { + "c": "BR", + "f": "-05", + "o": "-5:0" +}; +ilib.data.zoneinfo["America/Porto_Velho"] = { + "c": "BR", + "f": "-04", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Puerto_Rico"] = { + "c": "PR", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Punta_Arenas"] = { + "c": "CL", + "f": "-03", + "n": "Magallanes {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Rainy_River"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "n": "Central {c} Time", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Rankin_Inlet"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "n": "Central {c} Time", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Recife"] = { + "c": "BR", + "f": "-03", + "n": "SA Eastern {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Regina"] = { + "c": "CA", + "f": "CST", + "n": "Canada Central {c} Time", + "o": "-6:0" +}; +ilib.data.zoneinfo["America/Resolute"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "n": "Central {c} Time", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Rio_Branco"] = { + "c": "BR", + "f": "-05", + "n": "SA Pacific {c} Time", + "o": "-5:0" +}; +ilib.data.zoneinfo["America/Rosario"] = { + "c": "AR", + "f": "-03/-02", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Santarem"] = { + "c": "BR", + "f": "-03", + "n": "SA Eastern {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Santiago"] = { + "c": "CL", + "e": { + "m": 4, + "r": "0>2", + "t": "0:0" + }, + "f": "-04/-03", + "n": "Pacific SA {c} Time", + "o": "-4:0", + "s": { + "m": 9, + "r": "0>2", + "t": "0:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Santo_Domingo"] = { + "c": "DO", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Sao_Paulo"] = { + "c": "BR", + "f": "-03/-02", + "n": "E. South America {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["America/Scoresbysund"] = { + "c": "GL", + "e": { + "m": 10, + "r": "l0", + "t": "0:0" + }, + "f": "-02/-01", + "n": "Azores {c} Time", + "o": "-2:0", + "s": { + "c": "S", + "m": 3, + "r": "l6", + "t": "23:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Sitka"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "AK{c}T", + "n": "Alaskan {c} Time", + "o": "-9:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/St_Barthelemy"] = { + "c": "BL", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/St_Johns"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "N{c}T", + "n": "Newfoundland {c} Time", + "o": "-3:30", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/St_Kitts"] = { + "c": "KN", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/St_Lucia"] = { + "c": "LC", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/St_Thomas"] = { + "c": "VI", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/St_Vincent"] = { + "c": "VC", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Swift_Current"] = { + "c": "CA", + "f": "CST", + "n": "Canada Central {c} Time", + "o": "-6:0" +}; +ilib.data.zoneinfo["America/Tegucigalpa"] = { + "c": "HN", + "f": "CST", + "n": "Central America {c} Time", + "o": "-6:0" +}; +ilib.data.zoneinfo["America/Thule"] = { + "c": "GL", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "A{c}T", + "n": "Atlantic {c} Time", + "o": "-4:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Thunder_Bay"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Tijuana"] = { + "c": "MX", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "P{c}T", + "n": "Pacific {c} Time (Mexico)", + "o": "-8:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Toronto"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Tortola"] = { + "c": "VG", + "f": "AST", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Vancouver"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "P{c}T", + "n": "Pacific {c} Time", + "o": "-8:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Virgin"] = { + "c": "TT", + "f": "AST", + "o": "-4:0" +}; +ilib.data.zoneinfo["America/Whitehorse"] = { + "c": "CA", + "f": "MST", + "n": "Yukon {c} Time", + "o": "-7:0" +}; +ilib.data.zoneinfo["America/Winnipeg"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "n": "Central {c} Time", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Yakutat"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "AK{c}T", + "n": "Alaskan {c} Time", + "o": "-9:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["America/Yellowknife"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "M{c}T", + "n": "Mountain {c} Time", + "o": "-7:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Antarctica/Casey"] = { + "c": "AQ", + "f": "+08", + "n": "Central Pacific {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Antarctica/Davis"] = { + "c": "AQ", + "f": "+07", + "n": "SE Asia {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Antarctica/DumontDUrville"] = { + "c": "AQ", + "f": "+10", + "n": "West Pacific {c} Time", + "o": "10:0" +}; +ilib.data.zoneinfo["Antarctica/Macquarie"] = { + "c": "AU", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "AE{c}T", + "n": "Tasmania {c} Time", + "o": "10:0", + "s": { + "c": "D", + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Antarctica/Mawson"] = { + "c": "AQ", + "f": "+05", + "n": "West Asia {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Antarctica/McMurdo"] = { + "c": "AQ", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "NZ{c}T", + "n": "New Zealand {c} Time", + "o": "12:0", + "s": { + "c": "D", + "m": 9, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Antarctica/Palmer"] = { + "c": "AQ", + "f": "-03", + "n": "SA Eastern {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["Antarctica/Rothera"] = { + "c": "AQ", + "f": "-03", + "n": "SA Eastern {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["Antarctica/South_Pole"] = { + "c": "NZ", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "NZ{c}T", + "o": "12:0", + "s": { + "c": "D", + "m": 9, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Antarctica/Syowa"] = { + "c": "AQ", + "f": "+03", + "n": "E. Africa {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Antarctica/Troll"] = { + "c": "AQ", + "e": { + "c": "+00", + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "+00", + "o": "0:0", + "s": { + "c": "+02", + "m": 3, + "r": "l0", + "t": "1:0", + "v": "2:0" + } +}; +ilib.data.zoneinfo["Antarctica/Vostok"] = { + "c": "AQ", + "f": "+05", + "n": "Central Asia {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Arctic/Longyearbyen"] = { + "c": "SJ", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Asia/Aden"] = { + "c": "YE", + "f": "+03", + "n": "Arab {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Asia/Almaty"] = { + "c": "KZ", + "f": "+05", + "n": "Central Asia {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Asia/Amman"] = { + "c": "JO", + "f": "+03", + "n": "Jordan {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Asia/Anadyr"] = { + "c": "RU", + "f": "+12", + "n": "Russia Time Zone 11", + "o": "12:0" +}; +ilib.data.zoneinfo["Asia/Aqtau"] = { + "c": "KZ", + "f": "+05", + "n": "West Asia {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Asia/Aqtobe"] = { + "c": "KZ", + "f": "+05", + "n": "West Asia {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Asia/Ashgabat"] = { + "c": "TM", + "f": "+05", + "n": "West Asia {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Asia/Atyrau"] = { + "c": "KZ", + "f": "+05", + "n": "West Asia {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Asia/Baghdad"] = { + "c": "IQ", + "f": "+03/+04", + "n": "Arabic {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Asia/Bahrain"] = { + "c": "BH", + "f": "+03", + "n": "Arab {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Asia/Baku"] = { + "c": "AZ", + "f": "+04/+05", + "n": "Azerbaijan {c} Time", + "o": "4:0" +}; +ilib.data.zoneinfo["Asia/Bangkok"] = { + "c": "TH", + "f": "+07", + "n": "SE Asia {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Asia/Barnaul"] = { + "c": "RU", + "f": "+07", + "n": "Altai {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Asia/Beirut"] = { + "c": "LB", + "e": { + "m": 10, + "r": "l0", + "t": "0:0" + }, + "f": "EE{c}T", + "n": "Middle East {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "0:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Asia/Bishkek"] = { + "c": "KG", + "f": "+06", + "n": "Central Asia {c} Time", + "o": "6:0" +}; +ilib.data.zoneinfo["Asia/Brunei"] = { + "c": "BN", + "f": "+08", + "n": "Singapore {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Chita"] = { + "c": "RU", + "f": "+09", + "n": "Transbaikal {c} Time", + "o": "9:0" +}; +ilib.data.zoneinfo["Asia/Choibalsan"] = { + "c": "MN", + "f": "+08/+09", + "n": "Ulaanbaatar {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Chongqing"] = { + "c": "CN", + "f": "CST", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Chungking"] = { + "c": "CN", + "f": "CST", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Colombo"] = { + "c": "LK", + "f": "+0530", + "n": "Sri Lanka {c} Time", + "o": "5:30" +}; +ilib.data.zoneinfo["Asia/Damascus"] = { + "c": "SY", + "f": "+03", + "n": "Syria {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Asia/Dhaka"] = { + "c": "BD", + "f": "+06/+07", + "n": "Bangladesh {c} Time", + "o": "6:0" +}; +ilib.data.zoneinfo["Asia/Dili"] = { + "c": "TL", + "f": "+09", + "n": "Tokyo {c} Time", + "o": "9:0" +}; +ilib.data.zoneinfo["Asia/Dubai"] = { + "c": "AE", + "f": "+04", + "n": "Mauritius {c} Time", + "o": "4:0" +}; +ilib.data.zoneinfo["Asia/Dushanbe"] = { + "c": "TJ", + "f": "+05", + "n": "West Asia {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Asia/Famagusta"] = { + "c": "CY", + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "n": "GTB {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Asia/Gaza"] = { + "c": "PS", + "e": { + "m": 10, + "r": "6<30", + "t": "2:0" + }, + "f": "EE{c}T", + "n": "West Bank {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 4, + "r": "20", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Asia/Hanoi"] = { + "f": "+07", + "o": "7:0" +}; +ilib.data.zoneinfo["Asia/Harbin"] = { + "c": "CN", + "f": "CST", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Hebron"] = { + "c": "PS", + "e": { + "m": 10, + "r": "6<30", + "t": "2:0" + }, + "f": "EE{c}T", + "n": "West Bank {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 4, + "r": "20", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Asia/Ho_Chi_Minh"] = { + "c": "VN", + "f": "+07", + "n": "SE Asia {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Asia/Hong_Kong"] = { + "c": "HK", + "f": "HKST", + "n": "China {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Hovd"] = { + "c": "MN", + "f": "+07/+08", + "n": "W. Mongolia {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Asia/Irkutsk"] = { + "c": "RU", + "f": "+08", + "n": "North Asia East {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Istanbul"] = { + "f": "+03", + "o": "3:0" +}; +ilib.data.zoneinfo["Asia/Jakarta"] = { + "c": "ID", + "f": "WIB", + "n": "SE Asia {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Asia/Jayapura"] = { + "c": "ID", + "f": "WIT", + "n": "Tokyo {c} Time", + "o": "9:0" +}; +ilib.data.zoneinfo["Asia/Jerusalem"] = { + "c": "IL", + "e": { + "c": "S", + "m": 10, + "r": "l0", + "t": "2:0" + }, + "f": "I{c}T", + "n": "Israel {c} Time", + "o": "2:0", + "s": { + "c": "D", + "m": 3, + "r": "5>23", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Asia/Kabul"] = { + "c": "AF", + "f": "+0430", + "n": "Afghanistan {c} Time", + "o": "4:30" +}; +ilib.data.zoneinfo["Asia/Kamchatka"] = { + "c": "RU", + "f": "+12", + "n": "Russia Time Zone 11", + "o": "12:0" +}; +ilib.data.zoneinfo["Asia/Karachi"] = { + "c": "PK", + "f": "PKST", + "n": "Pakistan {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Asia/Kashgar"] = { + "c": "CN", + "f": "CST", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Kathmandu"] = { + "c": "NP", + "f": "+0545", + "n": "Nepal {c} Time", + "o": "5:45" +}; +ilib.data.zoneinfo["Asia/Khandyga"] = { + "c": "RU", + "f": "+09", + "n": "Yakutsk {c} Time", + "o": "9:0" +}; +ilib.data.zoneinfo["Asia/Kolkata"] = { + "c": "IN", + "f": "IST", + "n": "India {c} Time", + "o": "5:30" +}; +ilib.data.zoneinfo["Asia/Krasnoyarsk"] = { + "c": "RU", + "f": "+07", + "n": "North Asia {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Asia/Kuala_Lumpur"] = { + "c": "MY", + "f": "+08", + "n": "Singapore {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Kuching"] = { + "c": "MY", + "f": "+08", + "n": "Singapore {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Kuwait"] = { + "c": "KW", + "f": "+03", + "n": "Arab {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Asia/Macau"] = { + "c": "MO", + "f": "CST", + "n": "China {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Magadan"] = { + "c": "RU", + "f": "+11", + "n": "Magadan {c} Time", + "o": "11:0" +}; +ilib.data.zoneinfo["Asia/Makassar"] = { + "c": "ID", + "f": "WITA", + "n": "Singapore {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Manila"] = { + "c": "PH", + "f": "PST", + "n": "Singapore {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Muscat"] = { + "c": "OM", + "f": "+04", + "n": "Arabian {c} Time", + "o": "4:0" +}; +ilib.data.zoneinfo["Asia/Nicosia"] = { + "c": "CY", + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "n": "GTB {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Asia/Novokuznetsk"] = { + "c": "RU", + "f": "+07", + "n": "North Asia {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Asia/Novosibirsk"] = { + "c": "RU", + "f": "+07", + "n": "N. Central Asia {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Asia/Omsk"] = { + "c": "RU", + "f": "+06", + "n": "Omsk {c} Time", + "o": "6:0" +}; +ilib.data.zoneinfo["Asia/Oral"] = { + "c": "KZ", + "f": "+05", + "n": "West Asia {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Asia/Phnom_Penh"] = { + "c": "KH", + "f": "+07", + "n": "SE Asia {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Asia/Pontianak"] = { + "c": "ID", + "f": "WIB", + "n": "SE Asia {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Asia/Pyongyang"] = { + "c": "KP", + "f": "KST", + "n": "North Korea {c} Time", + "o": "9:0" +}; +ilib.data.zoneinfo["Asia/Qatar"] = { + "c": "QA", + "f": "+03", + "n": "Arab {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Asia/Qostanay"] = { + "c": "KZ", + "f": "+05", + "n": "Central Asia {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Asia/Qyzylorda"] = { + "c": "KZ", + "f": "+05", + "n": "Qyzylorda {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Asia/Riyadh"] = { + "c": "SA", + "f": "+03", + "n": "E. Africa {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Asia/Saigon"] = { + "c": "VN", + "f": "+07", + "n": "SE Asia {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Asia/Sakhalin"] = { + "c": "RU", + "f": "+11", + "n": "Sakhalin {c} Time", + "o": "11:0" +}; +ilib.data.zoneinfo["Asia/Samarkand"] = { + "c": "UZ", + "f": "+05", + "n": "West Asia {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Asia/Seoul"] = { + "c": "KR", + "f": "KST", + "n": "Korea {c} Time", + "o": "9:0" +}; +ilib.data.zoneinfo["Asia/Shanghai"] = { + "c": "CN", + "f": "CST", + "n": "China {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Singapore"] = { + "c": "SG", + "f": "+08", + "n": "Singapore {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Srednekolymsk"] = { + "c": "RU", + "f": "+11", + "n": "Russia Time Zone 10", + "o": "11:0" +}; +ilib.data.zoneinfo["Asia/Taipei"] = { + "c": "TW", + "f": "CST", + "n": "Taipei {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Tashkent"] = { + "c": "UZ", + "f": "+05", + "n": "West Asia {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Asia/Tbilisi"] = { + "c": "GE", + "f": "+04", + "n": "Georgian {c} Time", + "o": "4:0" +}; +ilib.data.zoneinfo["Asia/Tehran"] = { + "c": "IR", + "f": "+0330/+0430", + "n": "Iran {c} Time", + "o": "3:30" +}; +ilib.data.zoneinfo["Asia/Tel_Aviv"] = { + "c": "IL", + "e": { + "c": "S", + "m": 10, + "r": "l0", + "t": "2:0" + }, + "f": "I{c}T", + "o": "2:0", + "s": { + "c": "D", + "m": 3, + "r": "5>23", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Asia/Thimphu"] = { + "c": "BT", + "f": "+06", + "n": "Bangladesh {c} Time", + "o": "6:0" +}; +ilib.data.zoneinfo["Asia/Tokyo"] = { + "c": "JP", + "f": "JST", + "n": "Tokyo {c} Time", + "o": "9:0" +}; +ilib.data.zoneinfo["Asia/Tomsk"] = { + "c": "RU", + "f": "+07", + "n": "Tomsk {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Asia/Ulaanbaatar"] = { + "c": "MN", + "f": "+08/+09", + "n": "Ulaanbaatar {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Ulan_Bator"] = { + "c": "MN", + "f": "+08/+09", + "o": "8:0" +}; +ilib.data.zoneinfo["Asia/Urumqi"] = { + "c": "CN", + "f": "+06", + "n": "Central Asia {c} Time", + "o": "6:0" +}; +ilib.data.zoneinfo["Asia/Ust-Nera"] = { + "c": "RU", + "f": "+10", + "n": "Vladivostok {c} Time", + "o": "10:0" +}; +ilib.data.zoneinfo["Asia/Vientiane"] = { + "c": "LA", + "f": "+07", + "n": "SE Asia {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Asia/Vladivostok"] = { + "c": "RU", + "f": "+10", + "n": "Vladivostok {c} Time", + "o": "10:0" +}; +ilib.data.zoneinfo["Asia/Yakutsk"] = { + "c": "RU", + "f": "+09", + "n": "Yakutsk {c} Time", + "o": "9:0" +}; +ilib.data.zoneinfo["Asia/Yangon"] = { + "c": "MM", + "f": "+0630", + "n": "Myanmar {c} Time", + "o": "6:30" +}; +ilib.data.zoneinfo["Asia/Yekaterinburg"] = { + "c": "RU", + "f": "+05", + "n": "Ekaterinburg {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Asia/Yerevan"] = { + "c": "AM", + "f": "+04/+05", + "n": "Caucasus {c} Time", + "o": "4:0" +}; +ilib.data.zoneinfo["Atlantic/Azores"] = { + "c": "PT", + "e": { + "m": 10, + "r": "l0", + "t": "1:0" + }, + "f": "-01/+00", + "n": "Azores {c} Time", + "o": "-1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "0:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Atlantic/Bermuda"] = { + "c": "BM", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "A{c}T", + "n": "Atlantic {c} Time", + "o": "-4:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Atlantic/Canary"] = { + "c": "ES", + "e": { + "m": 10, + "r": "l0", + "t": "2:0" + }, + "f": "WE{c}T", + "n": "GMT {c} Time", + "o": "0:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "1:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Atlantic/Cape_Verde"] = { + "c": "CV", + "f": "-01", + "n": "Cape Verde {c} Time", + "o": "-1:0" +}; +ilib.data.zoneinfo["Atlantic/Faroe"] = { + "c": "FO", + "e": { + "m": 10, + "r": "l0", + "t": "2:0" + }, + "f": "WE{c}T", + "n": "GMT {c} Time", + "o": "0:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "1:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Atlantic/Jan_Mayen"] = { + "c": "NO", + "f": "-01", + "o": "-1:0" +}; +ilib.data.zoneinfo["Atlantic/Madeira"] = { + "c": "PT", + "e": { + "m": 10, + "r": "l0", + "t": "2:0" + }, + "f": "WE{c}T", + "n": "GMT {c} Time", + "o": "0:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "1:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Atlantic/Reykjavik"] = { + "c": "IS", + "f": "GMT", + "n": "Greenwich {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["Atlantic/South_Georgia"] = { + "c": "GS", + "f": "-02", + "n": "UTC-02", + "o": "-2:0" +}; +ilib.data.zoneinfo["Atlantic/St_Helena"] = { + "c": "SH", + "f": "GMT", + "n": "Greenwich {c} Time", + "o": "0:0" +}; +ilib.data.zoneinfo["Atlantic/Stanley"] = { + "c": "FK", + "f": "-03", + "n": "SA Eastern {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["Australia/ACT"] = { + "c": "AU", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "AE{c}T", + "o": "10:0", + "s": { + "c": "D", + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Australia/Adelaide"] = { + "c": "AU", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "AC{c}T", + "n": "Cen. Australia {c} Time", + "o": "9:30", + "s": { + "c": "D", + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Australia/Brisbane"] = { + "c": "AU", + "f": "AEST", + "n": "E. Australia {c} Time", + "o": "10:0" +}; +ilib.data.zoneinfo["Australia/Broken_Hill"] = { + "c": "AU", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "AC{c}T", + "n": "Cen. Australia {c} Time", + "o": "9:30", + "s": { + "c": "D", + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Australia/Canberra"] = { + "c": "AU", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "AE{c}T", + "o": "10:0", + "s": { + "c": "D", + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Australia/Currie"] = { + "c": "AU", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "AE{c}T", + "n": "Tasmania {c} Time", + "o": "10:0", + "s": { + "c": "D", + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Australia/Darwin"] = { + "c": "AU", + "f": "ACST", + "n": "AUS Central {c} Time", + "o": "9:30" +}; +ilib.data.zoneinfo["Australia/Eucla"] = { + "c": "AU", + "f": "+0845/+0945", + "n": "Aus Central W. {c} Time", + "o": "8:45" +}; +ilib.data.zoneinfo["Australia/Hobart"] = { + "c": "AU", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "AE{c}T", + "n": "Tasmania {c} Time", + "o": "10:0", + "s": { + "c": "D", + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Australia/LHI"] = { + "c": "AU", + "e": { + "m": 4, + "r": "0>1", + "t": "2:0" + }, + "f": "+1030/+11", + "o": "10:30", + "s": { + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "0:30" + } +}; +ilib.data.zoneinfo["Australia/Lindeman"] = { + "c": "AU", + "f": "AEST", + "n": "E. Australia {c} Time", + "o": "10:0" +}; +ilib.data.zoneinfo["Australia/Lord_Howe"] = { + "c": "AU", + "e": { + "m": 4, + "r": "0>1", + "t": "2:0" + }, + "f": "+1030/+11", + "n": "Lord Howe {c} Time", + "o": "10:30", + "s": { + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "0:30" + } +}; +ilib.data.zoneinfo["Australia/Melbourne"] = { + "c": "AU", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "AE{c}T", + "n": "AUS Eastern {c} Time", + "o": "10:0", + "s": { + "c": "D", + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Australia/NSW"] = { + "c": "AU", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "AE{c}T", + "o": "10:0", + "s": { + "c": "D", + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Australia/North"] = { + "c": "AU", + "f": "ACST", + "o": "9:30" +}; +ilib.data.zoneinfo["Australia/Perth"] = { + "c": "AU", + "f": "AWST", + "n": "W. Australia {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Australia/Queensland"] = { + "c": "AU", + "f": "AEST", + "o": "10:0" +}; +ilib.data.zoneinfo["Australia/South"] = { + "c": "AU", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "AC{c}T", + "o": "9:30", + "s": { + "c": "D", + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Australia/Sydney"] = { + "c": "AU", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "AE{c}T", + "n": "AUS Eastern {c} Time", + "o": "10:0", + "s": { + "c": "D", + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Australia/Tasmania"] = { + "c": "AU", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "AE{c}T", + "o": "10:0", + "s": { + "c": "D", + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Australia/Victoria"] = { + "c": "AU", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "AE{c}T", + "o": "10:0", + "s": { + "c": "D", + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Australia/Yancowinna"] = { + "c": "AU", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "AC{c}T", + "o": "9:30", + "s": { + "c": "D", + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Brazil/Acre"] = { + "c": "BR", + "f": "-05", + "o": "-5:0" +}; +ilib.data.zoneinfo["Brazil/East"] = { + "c": "BR", + "f": "-03/-02", + "o": "-3:0" +}; +ilib.data.zoneinfo["CET"] = { + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["CST6CDT"] = { + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "n": "Central {c} Time", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Canada/Central"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Canada/Mountain"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "M{c}T", + "o": "-7:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Canada/Newfoundland"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "N{c}T", + "o": "-3:30", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Canada/Pacific"] = { + "c": "CA", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "P{c}T", + "o": "-8:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Canada/Yukon"] = { + "c": "CA", + "f": "MST", + "o": "-7:0" +}; +ilib.data.zoneinfo["Chile/Continental"] = { + "c": "CL", + "e": { + "m": 4, + "r": "0>2", + "t": "0:0" + }, + "f": "-04/-03", + "o": "-4:0", + "s": { + "m": 9, + "r": "0>2", + "t": "0:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["EET"] = { + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["EST"] = { + "f": "EST", + "o": "-5:0" +}; +ilib.data.zoneinfo["EST5EDT"] = { + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "n": "Eastern {c} Time", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Etc/GMT+1"] = { + "f": "-01", + "n": "Cape Verde {c} Time", + "o": "-1:0" +}; +ilib.data.zoneinfo["Etc/GMT+10"] = { + "f": "-10", + "n": "Hawaiian {c} Time", + "o": "-10:0" +}; +ilib.data.zoneinfo["Etc/GMT+11"] = { + "f": "-11", + "n": "UTC-11", + "o": "-11:0" +}; +ilib.data.zoneinfo["Etc/GMT+12"] = { + "f": "-12", + "n": "Dateline {c} Time", + "o": "-12:0" +}; +ilib.data.zoneinfo["Etc/GMT+2"] = { + "f": "-02", + "n": "UTC-02", + "o": "-2:0" +}; +ilib.data.zoneinfo["Etc/GMT+3"] = { + "f": "-03", + "n": "SA Eastern {c} Time", + "o": "-3:0" +}; +ilib.data.zoneinfo["Etc/GMT+4"] = { + "f": "-04", + "n": "SA Western {c} Time", + "o": "-4:0" +}; +ilib.data.zoneinfo["Etc/GMT+5"] = { + "f": "-05", + "n": "SA Pacific {c} Time", + "o": "-5:0" +}; +ilib.data.zoneinfo["Etc/GMT+6"] = { + "f": "-06", + "n": "Central America {c} Time", + "o": "-6:0" +}; +ilib.data.zoneinfo["Etc/GMT+7"] = { + "f": "-07", + "n": "US Mountain {c} Time", + "o": "-7:0" +}; +ilib.data.zoneinfo["Etc/GMT+8"] = { + "f": "-08", + "n": "UTC-08", + "o": "-8:0" +}; +ilib.data.zoneinfo["Etc/GMT+9"] = { + "f": "-09", + "n": "UTC-09", + "o": "-9:0" +}; +ilib.data.zoneinfo["Etc/GMT-1"] = { + "f": "+01", + "n": "W. Central Africa {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Etc/GMT-10"] = { + "f": "+10", + "n": "West Pacific {c} Time", + "o": "10:0" +}; +ilib.data.zoneinfo["Etc/GMT-11"] = { + "f": "+11", + "n": "Central Pacific {c} Time", + "o": "11:0" +}; +ilib.data.zoneinfo["Etc/GMT-12"] = { + "f": "+12", + "n": "UTC+12", + "o": "12:0" +}; +ilib.data.zoneinfo["Etc/GMT-13"] = { + "f": "+13", + "n": "UTC+13", + "o": "13:0" +}; +ilib.data.zoneinfo["Etc/GMT-14"] = { + "f": "+14", + "n": "Line Islands {c} Time", + "o": "14:0" +}; +ilib.data.zoneinfo["Etc/GMT-2"] = { + "f": "+02", + "n": "South Africa {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Etc/GMT-3"] = { + "f": "+03", + "n": "E. Africa {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Etc/GMT-4"] = { + "f": "+04", + "n": "Arabian {c} Time", + "o": "4:0" +}; +ilib.data.zoneinfo["Etc/GMT-5"] = { + "f": "+05", + "n": "West Asia {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Etc/GMT-6"] = { + "f": "+06", + "n": "Central Asia {c} Time", + "o": "6:0" +}; +ilib.data.zoneinfo["Etc/GMT-7"] = { + "f": "+07", + "n": "SE Asia {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Etc/GMT-8"] = { + "f": "+08", + "n": "Singapore {c} Time", + "o": "8:0" +}; +ilib.data.zoneinfo["Etc/GMT-9"] = { + "f": "+09", + "n": "Tokyo {c} Time", + "o": "9:0" +}; +ilib.data.zoneinfo["Etc/GMT"] = { + "f": "GMT", + "n": "UTC", + "o": "0:0" +}; +ilib.data.zoneinfo["Etc/UTC"] = { + "f": "UTC", + "n": "UTC", + "o": "0:0" +}; +ilib.data.zoneinfo["Europe/Amsterdam"] = { + "c": "NL", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Andorra"] = { + "c": "AD", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Astrakhan"] = { + "c": "RU", + "f": "+04", + "n": "Astrakhan {c} Time", + "o": "4:0" +}; +ilib.data.zoneinfo["Europe/Athens"] = { + "c": "GR", + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "n": "GTB {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Belfast"] = { + "c": "GB", + "e": { + "m": 10, + "r": "l0", + "t": "2:0" + }, + "f": "GMT/BST", + "o": "0:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "1:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Belgrade"] = { + "c": "RS", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "Central European {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Berlin"] = { + "c": "DE", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Bratislava"] = { + "c": "SK", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "Central Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Brussels"] = { + "c": "BE", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Bucharest"] = { + "c": "RO", + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "n": "GTB {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Budapest"] = { + "c": "HU", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "Central Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Busingen"] = { + "c": "DE", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Chisinau"] = { + "c": "MD", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "EE{c}T", + "n": "E. Europe {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Copenhagen"] = { + "c": "DK", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "Romance {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Dublin"] = { + "c": "IE", + "e": { + "m": 10, + "r": "l0", + "t": "1:0", + "z": "u" + }, + "f": "IST/GMT", + "n": "GMT {c} Time", + "o": "1:0" +}; +ilib.data.zoneinfo["Europe/Gibraltar"] = { + "c": "GI", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Guernsey"] = { + "c": "GG", + "e": { + "m": 10, + "r": "l0", + "t": "2:0" + }, + "f": "GMT/BST", + "n": "GMT {c} Time", + "o": "0:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "1:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Helsinki"] = { + "c": "FI", + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "n": "FLE {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Isle_of_Man"] = { + "c": "IM", + "e": { + "m": 10, + "r": "l0", + "t": "2:0" + }, + "f": "GMT/BST", + "n": "GMT {c} Time", + "o": "0:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "1:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Istanbul"] = { + "c": "TR", + "f": "+03", + "n": "Turkey {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Europe/Jersey"] = { + "c": "JE", + "e": { + "m": 10, + "r": "l0", + "t": "2:0" + }, + "f": "GMT/BST", + "n": "GMT {c} Time", + "o": "0:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "1:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Kaliningrad"] = { + "c": "RU", + "f": "EET", + "n": "Kaliningrad {c} Time", + "o": "2:0" +}; +ilib.data.zoneinfo["Europe/Kiev"] = { + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + }, + "c": "UA", + "n": "FLE {c} Time" +}; +ilib.data.zoneinfo["Europe/Kirov"] = { + "c": "RU", + "f": "MSK", + "n": "Russian {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Europe/Kyiv"] = { + "c": "UA", + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "n": "FLE {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Lisbon"] = { + "c": "PT", + "e": { + "m": 10, + "r": "l0", + "t": "2:0" + }, + "f": "WE{c}T", + "n": "GMT {c} Time", + "o": "0:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "1:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Ljubljana"] = { + "c": "SI", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "Central Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/London"] = { + "c": "GB", + "e": { + "m": 10, + "r": "l0", + "t": "2:0" + }, + "f": "GMT/BST", + "n": "GMT {c} Time", + "o": "0:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "1:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Luxembourg"] = { + "c": "LU", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Madrid"] = { + "c": "ES", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "Romance {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Malta"] = { + "c": "MT", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Mariehamn"] = { + "c": "AX", + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "n": "FLE {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Minsk"] = { + "c": "BY", + "f": "+03", + "n": "Belarus {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Europe/Monaco"] = { + "c": "MC", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Moscow"] = { + "c": "RU", + "f": "MSK", + "n": "Russian {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Europe/Nicosia"] = { + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Oslo"] = { + "c": "NO", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Paris"] = { + "c": "FR", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Podgorica"] = { + "c": "ME", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "Central Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Prague"] = { + "c": "CZ", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "Central Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Riga"] = { + "c": "LV", + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "n": "FLE {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Rome"] = { + "c": "IT", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Samara"] = { + "c": "RU", + "f": "+04", + "n": "Russia Time Zone 3", + "o": "4:0" +}; +ilib.data.zoneinfo["Europe/San_Marino"] = { + "c": "SM", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Sarajevo"] = { + "c": "BA", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "Central European {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Saratov"] = { + "c": "RU", + "f": "+04", + "n": "Saratov {c} Time", + "o": "4:0" +}; +ilib.data.zoneinfo["Europe/Simferopol"] = { + "c": "UA", + "f": "MSK", + "n": "Russian {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Europe/Skopje"] = { + "c": "MK", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "Central European {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Sofia"] = { + "c": "BG", + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "n": "FLE {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Stockholm"] = { + "c": "SE", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Tallinn"] = { + "c": "EE", + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "n": "FLE {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Tirane"] = { + "c": "AL", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "Central Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Tiraspol"] = { + "c": "MD", + "f": "MSK/MSD", + "o": "3:0" +}; +ilib.data.zoneinfo["Europe/Ulyanovsk"] = { + "c": "RU", + "f": "+04", + "n": "Astrakhan {c} Time", + "o": "4:0" +}; +ilib.data.zoneinfo["Europe/Uzhgorod"] = { + "c": "UA", + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "n": "FLE {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Vaduz"] = { + "c": "LI", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Vatican"] = { + "c": "VA", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Vienna"] = { + "c": "AT", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Vilnius"] = { + "c": "LT", + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "n": "FLE {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Volgograd"] = { + "c": "RU", + "f": "MSK", + "n": "Volgograd {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Europe/Warsaw"] = { + "c": "PL", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "Central European {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Zagreb"] = { + "c": "HR", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "Central European {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Zaporozhye"] = { + "c": "UA", + "e": { + "m": 10, + "r": "l0", + "t": "4:0" + }, + "f": "EE{c}T", + "n": "FLE {c} Time", + "o": "2:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "3:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Europe/Zurich"] = { + "c": "CH", + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "CE{c}T", + "n": "W. Europe {c} Time", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Factory"] = { + "f": "-00", + "o": "0:0" +}; +ilib.data.zoneinfo["HST"] = { + "f": "HST", + "o": "-10:0" +}; +ilib.data.zoneinfo["Iceland"] = { + "c": "CI", + "f": "GMT", + "o": "0:0" +}; +ilib.data.zoneinfo["Indian/Antananarivo"] = { + "c": "MG", + "f": "EAT", + "n": "E. Africa {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Indian/Chagos"] = { + "c": "IO", + "f": "+06", + "n": "Central Asia {c} Time", + "o": "6:0" +}; +ilib.data.zoneinfo["Indian/Christmas"] = { + "c": "CX", + "f": "+07", + "n": "SE Asia {c} Time", + "o": "7:0" +}; +ilib.data.zoneinfo["Indian/Cocos"] = { + "c": "CC", + "f": "+0630", + "n": "Myanmar {c} Time", + "o": "6:30" +}; +ilib.data.zoneinfo["Indian/Comoro"] = { + "c": "KM", + "f": "EAT", + "n": "E. Africa {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Indian/Kerguelen"] = { + "c": "TF", + "f": "+05", + "n": "West Asia {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Indian/Mahe"] = { + "c": "SC", + "f": "+04", + "n": "Mauritius {c} Time", + "o": "4:0" +}; +ilib.data.zoneinfo["Indian/Maldives"] = { + "c": "MV", + "f": "+05", + "n": "West Asia {c} Time", + "o": "5:0" +}; +ilib.data.zoneinfo["Indian/Mauritius"] = { + "c": "MU", + "f": "+04/+05", + "n": "Mauritius {c} Time", + "o": "4:0" +}; +ilib.data.zoneinfo["Indian/Mayotte"] = { + "c": "YT", + "f": "EAT", + "n": "E. Africa {c} Time", + "o": "3:0" +}; +ilib.data.zoneinfo["Indian/Reunion"] = { + "c": "RE", + "f": "+04", + "n": "Mauritius {c} Time", + "o": "4:0" +}; +ilib.data.zoneinfo["Kwajalein"] = { + "c": "MH", + "f": "+12", + "o": "12:0" +}; +ilib.data.zoneinfo["MET"] = { + "e": { + "m": 10, + "r": "l0", + "t": "3:0" + }, + "f": "ME{c}T", + "o": "1:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["MST"] = { + "f": "MST", + "o": "-7:0" +}; +ilib.data.zoneinfo["MST7MDT"] = { + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "M{c}T", + "n": "Mountain {c} Time", + "o": "-7:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Mexico/BajaSur"] = { + "c": "MX", + "f": "MST", + "o": "-7:0" +}; +ilib.data.zoneinfo["Mexico/General"] = { + "c": "MX", + "f": "CST", + "o": "-6:0" +}; +ilib.data.zoneinfo["NZ"] = { + "c": "NZ", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "NZ{c}T", + "o": "12:0", + "s": { + "c": "D", + "m": 9, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["PST8PDT"] = { + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "P{c}T", + "n": "Pacific {c} Time", + "o": "-8:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Pacific/Apia"] = { + "c": "WS", + "f": "+13/+14", + "n": "Samoa {c} Time", + "o": "13:0" +}; +ilib.data.zoneinfo["Pacific/Auckland"] = { + "c": "NZ", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "NZ{c}T", + "n": "New Zealand {c} Time", + "o": "12:0", + "s": { + "c": "D", + "m": 9, + "r": "l0", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Pacific/Bougainville"] = { + "c": "PG", + "f": "+11", + "n": "Bougainville {c} Time", + "o": "11:0" +}; +ilib.data.zoneinfo["Pacific/Chatham"] = { + "c": "NZ", + "e": { + "m": 4, + "r": "0>1", + "t": "3:45" + }, + "f": "+1245/+1345", + "n": "Chatham Islands {c} Time", + "o": "12:45", + "s": { + "m": 9, + "r": "l0", + "t": "2:45", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Pacific/Chuuk"] = { + "c": "FM", + "f": "+10", + "o": "10:0" +}; +ilib.data.zoneinfo["Pacific/Easter"] = { + "c": "CL", + "e": { + "m": 4, + "r": "0>1", + "t": "22:0" + }, + "f": "-06/-05", + "n": "Easter Island {c} Time", + "o": "-6:0", + "s": { + "m": 9, + "r": "0>1", + "t": "22:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Pacific/Efate"] = { + "c": "VU", + "f": "+11/+12", + "n": "Central Pacific {c} Time", + "o": "11:0" +}; +ilib.data.zoneinfo["Pacific/Enderbury"] = { + "c": "KI", + "f": "-00", + "n": "UTC+13", + "o": "0:0" +}; +ilib.data.zoneinfo["Pacific/Fakaofo"] = { + "c": "TK", + "f": "+13", + "n": "UTC+13", + "o": "13:0" +}; +ilib.data.zoneinfo["Pacific/Fiji"] = { + "c": "FJ", + "f": "+12/+13", + "n": "Fiji {c} Time", + "o": "12:0" +}; +ilib.data.zoneinfo["Pacific/Funafuti"] = { + "c": "TV", + "f": "+12", + "n": "UTC+12", + "o": "12:0" +}; +ilib.data.zoneinfo["Pacific/Galapagos"] = { + "c": "EC", + "f": "-06/-05", + "n": "Central America {c} Time", + "o": "-6:0" +}; +ilib.data.zoneinfo["Pacific/Gambier"] = { + "c": "PF", + "f": "-09", + "n": "UTC-09", + "o": "-9:0" +}; +ilib.data.zoneinfo["Pacific/Guadalcanal"] = { + "c": "SB", + "f": "+11", + "n": "Central Pacific {c} Time", + "o": "11:0" +}; +ilib.data.zoneinfo["Pacific/Guam"] = { + "c": "GU", + "f": "ChST", + "n": "West Pacific {c} Time", + "o": "10:0" +}; +ilib.data.zoneinfo["Pacific/Honolulu"] = { + "c": "US", + "f": "HST", + "n": "Hawaiian {c} Time", + "o": "-10:0" +}; +ilib.data.zoneinfo["Pacific/Johnston"] = { + "c": "US", + "f": "HST", + "n": "Hawaiian {c} Time", + "o": "-10:0" +}; +ilib.data.zoneinfo["Pacific/Kanton"] = { + "c": "KI", + "f": "+13", + "n": "UTC+13", + "o": "13:0" +}; +ilib.data.zoneinfo["Pacific/Kiritimati"] = { + "c": "KI", + "f": "+14", + "n": "Line Islands {c} Time", + "o": "14:0" +}; +ilib.data.zoneinfo["Pacific/Kosrae"] = { + "c": "FM", + "f": "+11", + "n": "Central Pacific {c} Time", + "o": "11:0" +}; +ilib.data.zoneinfo["Pacific/Kwajalein"] = { + "c": "MH", + "f": "+12", + "n": "UTC+12", + "o": "12:0" +}; +ilib.data.zoneinfo["Pacific/Majuro"] = { + "c": "MH", + "f": "+12", + "n": "UTC+12", + "o": "12:0" +}; +ilib.data.zoneinfo["Pacific/Marquesas"] = { + "c": "PF", + "f": "-0930", + "n": "Marquesas {c} Time", + "o": "-9:30" +}; +ilib.data.zoneinfo["Pacific/Midway"] = { + "c": "UM", + "f": "SST", + "n": "UTC-11", + "o": "-11:0" +}; +ilib.data.zoneinfo["Pacific/Nauru"] = { + "c": "NR", + "f": "+12", + "n": "UTC+12", + "o": "12:0" +}; +ilib.data.zoneinfo["Pacific/Niue"] = { + "c": "NU", + "f": "-11", + "n": "UTC-11", + "o": "-11:0" +}; +ilib.data.zoneinfo["Pacific/Norfolk"] = { + "c": "NF", + "e": { + "c": "S", + "m": 4, + "r": "0>1", + "t": "3:0" + }, + "f": "+11/+12", + "n": "Norfolk {c} Time", + "o": "11:0", + "s": { + "c": "D", + "m": 10, + "r": "0>1", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["Pacific/Noumea"] = { + "c": "NC", + "f": "+11/+12", + "n": "Central Pacific {c} Time", + "o": "11:0" +}; +ilib.data.zoneinfo["Pacific/Pago_Pago"] = { + "c": "AS", + "f": "SST", + "n": "UTC-11", + "o": "-11:0" +}; +ilib.data.zoneinfo["Pacific/Palau"] = { + "c": "PW", + "f": "+09", + "n": "Tokyo {c} Time", + "o": "9:0" +}; +ilib.data.zoneinfo["Pacific/Pitcairn"] = { + "c": "PN", + "f": "-08", + "n": "UTC-08", + "o": "-8:0" +}; +ilib.data.zoneinfo["Pacific/Pohnpei"] = { + "c": "FM", + "f": "+11", + "o": "11:0" +}; +ilib.data.zoneinfo["Pacific/Ponape"] = { + "c": "SB", + "f": "+11", + "n": "Central Pacific {c} Time", + "o": "11:0" +}; +ilib.data.zoneinfo["Pacific/Port_Moresby"] = { + "c": "PG", + "f": "+10", + "n": "West Pacific {c} Time", + "o": "10:0" +}; +ilib.data.zoneinfo["Pacific/Rarotonga"] = { + "c": "CK", + "f": "-10/-0930", + "n": "Hawaiian {c} Time", + "o": "-10:0" +}; +ilib.data.zoneinfo["Pacific/Saipan"] = { + "c": "MP", + "f": "ChST", + "n": "West Pacific {c} Time", + "o": "10:0" +}; +ilib.data.zoneinfo["Pacific/Samoa"] = { + "c": "AS", + "f": "SST", + "o": "-11:0" +}; +ilib.data.zoneinfo["Pacific/Tahiti"] = { + "c": "PF", + "f": "-10", + "n": "Hawaiian {c} Time", + "o": "-10:0" +}; +ilib.data.zoneinfo["Pacific/Tarawa"] = { + "c": "KI", + "f": "+12", + "n": "UTC+12", + "o": "12:0" +}; +ilib.data.zoneinfo["Pacific/Tongatapu"] = { + "c": "TO", + "f": "+13/+14", + "n": "Tonga {c} Time", + "o": "13:0" +}; +ilib.data.zoneinfo["Pacific/Truk"] = { + "c": "PG", + "f": "+10", + "n": "West Pacific {c} Time", + "o": "10:0" +}; +ilib.data.zoneinfo["Pacific/Wake"] = { + "c": "UM", + "f": "+12", + "n": "UTC+12", + "o": "12:0" +}; +ilib.data.zoneinfo["Pacific/Wallis"] = { + "c": "WF", + "f": "+12", + "n": "UTC+12", + "o": "12:0" +}; +ilib.data.zoneinfo["Pacific/Yap"] = { + "c": "PG", + "f": "+10", + "o": "10:0" +}; +ilib.data.zoneinfo["US/Alaska"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "AK{c}T", + "o": "-9:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["US/East-Indiana"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["US/Eastern"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "E{c}T", + "o": "-5:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["US/Hawaii"] = { + "c": "US", + "f": "HST", + "o": "-10:0" +}; +ilib.data.zoneinfo["US/Indiana-Starke"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "C{c}T", + "o": "-6:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["US/Pacific"] = { + "c": "US", + "e": { + "c": "S", + "m": 11, + "r": "0>1", + "t": "2:0" + }, + "f": "P{c}T", + "o": "-8:0", + "s": { + "c": "D", + "m": 3, + "r": "0>8", + "t": "2:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["US/Samoa"] = { + "c": "AS", + "f": "SST", + "o": "-11:0" +}; +ilib.data.zoneinfo["WET"] = { + "e": { + "m": 10, + "r": "l0", + "t": "2:0" + }, + "f": "WE{c}T", + "o": "0:0", + "s": { + "c": "S", + "m": 3, + "r": "l0", + "t": "1:0", + "v": "1:0" + } +}; +ilib.data.zoneinfo["zonetab"] = { + "AD": [ + "Europe/Andorra" + ], + "AE": [ + "Asia/Dubai" + ], + "AF": [ + "Asia/Kabul" + ], + "AG": [ + "America/Antigua" + ], + "AI": [ + "America/Anguilla" + ], + "AL": [ + "Europe/Tirane" + ], + "AM": [ + "Asia/Yerevan" + ], + "AO": [ + "Africa/Luanda" + ], + "AQ": [ + "Antarctica/Casey", + "Antarctica/Davis", + "Antarctica/DumontDUrville", + "Antarctica/Mawson", + "Antarctica/McMurdo", + "Antarctica/Palmer", + "Antarctica/Rothera", + "Antarctica/Syowa", + "Antarctica/Troll", + "Antarctica/Vostok" + ], + "AR": [ + "America/Argentina/Buenos_Aires", + "America/Argentina/Catamarca", + "America/Argentina/ComodRivadavia", + "America/Argentina/Cordoba", + "America/Argentina/Jujuy", + "America/Argentina/La_Rioja", + "America/Argentina/Mendoza", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Salta", + "America/Argentina/San_Juan", + "America/Argentina/San_Luis", + "America/Argentina/Tucuman", + "America/Argentina/Ushuaia", + "America/Buenos_Aires", + "America/Catamarca", + "America/Cordoba", + "America/Jujuy", + "America/Mendoza", + "America/Rosario" + ], + "AS": [ + "Pacific/Pago_Pago", + "Pacific/Samoa", + "US/Samoa" + ], + "AT": [ + "Europe/Vienna" + ], + "AU": [ + "Antarctica/Macquarie", + "Australia/ACT", + "Australia/Adelaide", + "Australia/Brisbane", + "Australia/Broken_Hill", + "Australia/Canberra", + "Australia/Currie", + "Australia/Darwin", + "Australia/Eucla", + "Australia/Hobart", + "Australia/LHI", + "Australia/Lindeman", + "Australia/Lord_Howe", + "Australia/Melbourne", + "Australia/NSW", + "Australia/North", + "Australia/Perth", + "Australia/Queensland", + "Australia/South", + "Australia/Sydney", + "Australia/Tasmania", + "Australia/Victoria", + "Australia/West", + "Australia/Yancowinna" + ], + "AW": [ + "America/Aruba" + ], + "AX": [ + "Europe/Mariehamn" + ], + "AZ": [ + "Asia/Baku" + ], + "BA": [ + "Europe/Sarajevo" + ], + "BB": [ + "America/Barbados" + ], + "BD": [ + "Asia/Dacca", + "Asia/Dhaka" + ], + "BE": [ + "Europe/Brussels" + ], + "BF": [ + "Africa/Ouagadougou" + ], + "BG": [ + "Europe/Sofia" + ], + "BH": [ + "Asia/Bahrain" + ], + "BI": [ + "Africa/Bujumbura" + ], + "BJ": [ + "Africa/Porto-Novo" + ], + "BL": [ + "America/St_Barthelemy" + ], + "BM": [ + "Atlantic/Bermuda" + ], + "BN": [ + "Asia/Brunei" + ], + "BO": [ + "America/La_Paz" + ], + "BQ": [ + "America/Kralendijk" + ], + "BR": [ + "America/Araguaina", + "America/Bahia", + "America/Belem", + "America/Boa_Vista", + "America/Campo_Grande", + "America/Cuiaba", + "America/Eirunepe", + "America/Fortaleza", + "America/Maceio", + "America/Manaus", + "America/Noronha", + "America/Porto_Acre", + "America/Porto_Velho", + "America/Recife", + "America/Rio_Branco", + "America/Santarem", + "America/Sao_Paulo", + "Brazil/Acre", + "Brazil/DeNoronha", + "Brazil/East", + "Brazil/West" + ], + "BS": [ + "America/Nassau" + ], + "BT": [ + "Asia/Thimbu", + "Asia/Thimphu" + ], + "BW": [ + "Africa/Gaborone" + ], + "BY": [ + "Europe/Minsk" + ], + "BZ": [ + "America/Belize" + ], + "CA": [ + "America/Atikokan", + "America/Blanc-Sablon", + "America/Cambridge_Bay", + "America/Coral_Harbour", + "America/Creston", + "America/Dawson", + "America/Dawson_Creek", + "America/Edmonton", + "America/Fort_Nelson", + "America/Glace_Bay", + "America/Goose_Bay", + "America/Halifax", + "America/Inuvik", + "America/Iqaluit", + "America/Moncton", + "America/Montreal", + "America/Nipigon", + "America/Pangnirtung", + "America/Rainy_River", + "America/Rankin_Inlet", + "America/Regina", + "America/Resolute", + "America/St_Johns", + "America/Swift_Current", + "America/Thunder_Bay", + "America/Toronto", + "America/Vancouver", + "America/Whitehorse", + "America/Winnipeg", + "America/Yellowknife", + "Canada/Atlantic", + "Canada/Central", + "Canada/Eastern", + "Canada/Mountain", + "Canada/Newfoundland", + "Canada/Pacific", + "Canada/Saskatchewan", + "Canada/Yukon" + ], + "CC": [ + "Indian/Cocos" + ], + "CD": [ + "Africa/Kinshasa", + "Africa/Lubumbashi" + ], + "CF": [ + "Africa/Bangui" + ], + "CG": [ + "Africa/Brazzaville" + ], + "CH": [ + "Europe/Zurich" + ], + "CI": [ + "Africa/Abidjan", + "Africa/Timbuktu" + ], + "CK": [ + "Pacific/Rarotonga" + ], + "CL": [ + "America/Punta_Arenas", + "America/Santiago", + "Chile/Continental", + "Chile/EasterIsland", + "Pacific/Easter" + ], + "CM": [ + "Africa/Douala" + ], + "CN": [ + "Asia/Chongqing", + "Asia/Chungking", + "Asia/Harbin", + "Asia/Kashgar", + "Asia/Shanghai", + "Asia/Urumqi", + "PRC" + ], + "CO": [ + "America/Bogota" + ], + "CR": [ + "America/Costa_Rica" + ], + "CU": [ + "America/Havana", + "Cuba" + ], + "CV": [ + "Atlantic/Cape_Verde" + ], + "CW": [ + "America/Curacao" + ], + "CX": [ + "Indian/Christmas" + ], + "CY": [ + "Asia/Famagusta", + "Asia/Nicosia", + "Europe/Nicosia" + ], + "CZ": [ + "Europe/Prague" + ], + "DE": [ + "Europe/Berlin", + "Europe/Busingen" + ], + "DJ": [ + "Africa/Djibouti" + ], + "DK": [ + "Europe/Copenhagen" + ], + "DM": [ + "America/Dominica" + ], + "DO": [ + "America/Santo_Domingo" + ], + "DZ": [ + "Africa/Algiers" + ], + "EC": [ + "America/Guayaquil", + "Pacific/Galapagos" + ], + "EE": [ + "Europe/Tallinn" + ], + "EG": [ + "Africa/Cairo", + "Egypt" + ], + "EH": [ + "Africa/El_Aaiun" + ], + "ER": [ + "Africa/Asmara" + ], + "ES": [ + "Africa/Ceuta", + "Atlantic/Canary", + "Europe/Madrid" + ], + "ET": [ + "Africa/Addis_Ababa" + ], + "FI": [ + "Europe/Helsinki" + ], + "FJ": [ + "Pacific/Fiji" + ], + "FK": [ + "Atlantic/Stanley" + ], + "FM": [ + "Pacific/Chuuk", + "Pacific/Kosrae", + "Pacific/Pohnpei", + "Pacific/Ponape", + "Pacific/Truk", + "Pacific/Yap" + ], + "FO": [ + "Atlantic/Faeroe", + "Atlantic/Faroe" + ], + "FR": [ + "Europe/Paris" + ], + "GA": [ + "Africa/Libreville" + ], + "GB": [ + "Europe/Belfast", + "Europe/London", + "GB", + "GB-Eire" + ], + "GD": [ + "America/Grenada" + ], + "GE": [ + "Asia/Tbilisi" + ], + "GF": [ + "America/Cayenne" + ], + "GG": [ + "Europe/Guernsey" + ], + "GH": [ + "Africa/Accra" + ], + "GI": [ + "Europe/Gibraltar" + ], + "GL": [ + "America/Danmarkshavn", + "America/Godthab", + "America/Nuuk", + "America/Scoresbysund", + "America/Thule" + ], + "GM": [ + "Africa/Banjul" + ], + "GN": [ + "Africa/Conakry" + ], + "GP": [ + "America/Guadeloupe" + ], + "GQ": [ + "Africa/Malabo" + ], + "GR": [ + "Europe/Athens" + ], + "GS": [ + "Atlantic/South_Georgia" + ], + "GT": [ + "America/Guatemala" + ], + "GU": [ + "Pacific/Guam" + ], + "GW": [ + "Africa/Bissau" + ], + "GY": [ + "America/Guyana" + ], + "HK": [ + "Asia/Hong_Kong", + "Hongkong" + ], + "HN": [ + "America/Tegucigalpa" + ], + "HR": [ + "Europe/Zagreb" + ], + "HT": [ + "America/Port-au-Prince" + ], + "HU": [ + "Europe/Budapest" + ], + "ID": [ + "Asia/Jakarta", + "Asia/Jayapura", + "Asia/Makassar", + "Asia/Pontianak", + "Asia/Ujung_Pandang" + ], + "IE": [ + "Eire", + "Europe/Dublin" + ], + "IL": [ + "Asia/Jerusalem", + "Asia/Tel_Aviv", + "Israel" + ], + "IM": [ + "Europe/Isle_of_Man" + ], + "IN": [ + "Asia/Calcutta", + "Asia/Kolkata" + ], + "IO": [ + "Indian/Chagos" + ], + "IQ": [ + "Asia/Baghdad" + ], + "IR": [ + "Asia/Tehran", + "Iran" + ], + "IS": [ + "Atlantic/Reykjavik", + "Iceland" + ], + "IT": [ + "Europe/Rome" + ], + "JE": [ + "Europe/Jersey" + ], + "JM": [ + "America/Jamaica", + "Jamaica" + ], + "JO": [ + "Asia/Amman" + ], + "JP": [ + "Asia/Tokyo", + "Japan" + ], + "KE": [ + "Africa/Asmera", + "Africa/Nairobi" + ], + "KG": [ + "Asia/Bishkek" + ], + "KH": [ + "Asia/Phnom_Penh" + ], + "KI": [ + "Pacific/Enderbury", + "Pacific/Kanton", + "Pacific/Kiritimati", + "Pacific/Tarawa" + ], + "KM": [ + "Indian/Comoro" + ], + "KN": [ + "America/St_Kitts" + ], + "KP": [ + "Asia/Pyongyang" + ], + "KR": [ + "Asia/Seoul", + "ROK" + ], + "KW": [ + "Asia/Kuwait" + ], + "KY": [ + "America/Cayman" + ], + "KZ": [ + "Asia/Almaty", + "Asia/Aqtau", + "Asia/Aqtobe", + "Asia/Atyrau", + "Asia/Oral", + "Asia/Qostanay", + "Asia/Qyzylorda" + ], + "LA": [ + "Asia/Vientiane" + ], + "LB": [ + "Asia/Beirut" + ], + "LC": [ + "America/St_Lucia" + ], + "LI": [ + "Europe/Vaduz" + ], + "LK": [ + "Asia/Colombo" + ], + "LR": [ + "Africa/Monrovia" + ], + "LS": [ + "Africa/Maseru" + ], + "LT": [ + "Europe/Vilnius" + ], + "LU": [ + "Europe/Luxembourg" + ], + "LV": [ + "Europe/Riga" + ], + "LY": [ + "Africa/Tripoli", + "Libya" + ], + "MA": [ + "Africa/Casablanca" + ], + "MC": [ + "Europe/Monaco" + ], + "MD": [ + "Europe/Chisinau", + "Europe/Tiraspol" + ], + "ME": [ + "Europe/Podgorica" + ], + "MF": [ + "America/Marigot" + ], + "MG": [ + "Indian/Antananarivo" + ], + "MH": [ + "Kwajalein", + "Pacific/Kwajalein", + "Pacific/Majuro" + ], + "MK": [ + "Europe/Skopje" + ], + "ML": [ + "Africa/Bamako" + ], + "MM": [ + "Asia/Rangoon", + "Asia/Yangon" + ], + "MN": [ + "Asia/Choibalsan", + "Asia/Hovd", + "Asia/Ulaanbaatar", + "Asia/Ulan_Bator" + ], + "MO": [ + "Asia/Macao", + "Asia/Macau" + ], + "MP": [ + "Pacific/Saipan" + ], + "MQ": [ + "America/Martinique" + ], + "MR": [ + "Africa/Nouakchott" + ], + "MS": [ + "America/Montserrat" + ], + "MT": [ + "Europe/Malta" + ], + "MU": [ + "Indian/Mauritius" + ], + "MV": [ + "Indian/Maldives" + ], + "MW": [ + "Africa/Blantyre" + ], + "MX": [ + "America/Bahia_Banderas", + "America/Cancun", + "America/Chihuahua", + "America/Ciudad_Juarez", + "America/Ensenada", + "America/Hermosillo", + "America/Matamoros", + "America/Mazatlan", + "America/Merida", + "America/Mexico_City", + "America/Monterrey", + "America/Ojinaga", + "America/Santa_Isabel", + "America/Tijuana", + "Mexico/BajaNorte", + "Mexico/BajaSur", + "Mexico/General" + ], + "MY": [ + "Asia/Kuala_Lumpur", + "Asia/Kuching" + ], + "MZ": [ + "Africa/Maputo" + ], + "NA": [ + "Africa/Windhoek" + ], + "NC": [ + "Pacific/Noumea" + ], + "NE": [ + "Africa/Niamey" + ], + "NF": [ + "Pacific/Norfolk" + ], + "NG": [ + "Africa/Lagos" + ], + "NI": [ + "America/Managua" + ], + "NL": [ + "Europe/Amsterdam" + ], + "NO": [ + "Atlantic/Jan_Mayen", + "Europe/Oslo" + ], + "NP": [ + "Asia/Kathmandu", + "Asia/Katmandu" + ], + "NR": [ + "Pacific/Nauru" + ], + "NU": [ + "Pacific/Niue" + ], + "NZ": [ + "Antarctica/South_Pole", + "NZ", + "NZ-CHAT", + "Pacific/Auckland", + "Pacific/Chatham" + ], + "OM": [ + "Asia/Muscat" + ], + "PA": [ + "America/Panama" + ], + "PE": [ + "America/Lima" + ], + "PF": [ + "Pacific/Gambier", + "Pacific/Marquesas", + "Pacific/Tahiti" + ], + "PG": [ + "Pacific/Bougainville", + "Pacific/Port_Moresby" + ], + "PH": [ + "Asia/Manila" + ], + "PK": [ + "Asia/Karachi" + ], + "PL": [ + "Europe/Warsaw", + "Poland" + ], + "PM": [ + "America/Miquelon" + ], + "PN": [ + "Pacific/Pitcairn" + ], + "PR": [ + "America/Puerto_Rico" + ], + "PS": [ + "Asia/Gaza", + "Asia/Hebron" + ], + "PT": [ + "Atlantic/Azores", + "Atlantic/Madeira", + "Europe/Lisbon", + "Portugal" + ], + "PW": [ + "Pacific/Palau" + ], + "PY": [ + "America/Asuncion" + ], + "QA": [ + "Asia/Qatar" + ], + "RE": [ + "Indian/Reunion" + ], + "RO": [ + "Europe/Bucharest" + ], + "RS": [ + "Europe/Belgrade" + ], + "RU": [ + "Asia/Anadyr", + "Asia/Barnaul", + "Asia/Chita", + "Asia/Irkutsk", + "Asia/Kamchatka", + "Asia/Khandyga", + "Asia/Krasnoyarsk", + "Asia/Magadan", + "Asia/Novokuznetsk", + "Asia/Novosibirsk", + "Asia/Omsk", + "Asia/Sakhalin", + "Asia/Srednekolymsk", + "Asia/Tomsk", + "Asia/Ust-Nera", + "Asia/Vladivostok", + "Asia/Yakutsk", + "Asia/Yekaterinburg", + "Europe/Astrakhan", + "Europe/Kaliningrad", + "Europe/Kirov", + "Europe/Moscow", + "Europe/Samara", + "Europe/Saratov", + "Europe/Ulyanovsk", + "Europe/Volgograd", + "W-SU" + ], + "RW": [ + "Africa/Kigali" + ], + "SA": [ + "Asia/Riyadh" + ], + "SB": [ + "Pacific/Guadalcanal" + ], + "SC": [ + "Indian/Mahe" + ], + "SD": [ + "Africa/Khartoum" + ], + "SE": [ + "Europe/Stockholm" + ], + "SG": [ + "Asia/Singapore", + "Singapore" + ], + "SH": [ + "Atlantic/St_Helena" + ], + "SI": [ + "Europe/Ljubljana" + ], + "SJ": [ + "Arctic/Longyearbyen" + ], + "SK": [ + "Europe/Bratislava" + ], + "SL": [ + "Africa/Freetown" + ], + "SM": [ + "Europe/San_Marino" + ], + "SN": [ + "Africa/Dakar" + ], + "SO": [ + "Africa/Mogadishu" + ], + "SR": [ + "America/Paramaribo" + ], + "SS": [ + "Africa/Juba" + ], + "ST": [ + "Africa/Sao_Tome" + ], + "SV": [ + "America/El_Salvador" + ], + "SX": [ + "America/Lower_Princes" + ], + "SY": [ + "Asia/Damascus" + ], + "SZ": [ + "Africa/Mbabane" + ], + "TC": [ + "America/Grand_Turk" + ], + "TD": [ + "Africa/Ndjamena" + ], + "TF": [ + "Indian/Kerguelen" + ], + "TG": [ + "Africa/Lome" + ], + "TH": [ + "Asia/Bangkok" + ], + "TJ": [ + "Asia/Dushanbe" + ], + "TK": [ + "Pacific/Fakaofo" + ], + "TL": [ + "Asia/Dili" + ], + "TM": [ + "Asia/Ashgabat", + "Asia/Ashkhabad" + ], + "TN": [ + "Africa/Tunis" + ], + "TO": [ + "Pacific/Tongatapu" + ], + "TR": [ + "Asia/Istanbul", + "Europe/Istanbul", + "Turkey" + ], + "TT": [ + "America/Port_of_Spain", + "America/Virgin" + ], + "TV": [ + "Pacific/Funafuti" + ], + "TW": [ + "Asia/Taipei", + "ROC" + ], + "TZ": [ + "Africa/Dar_es_Salaam" + ], + "UA": [ + "Europe/Kiev", + "Europe/Kyiv", + "Europe/Simferopol", + "Europe/Uzhgorod", + "Europe/Zaporozhye" + ], + "UG": [ + "Africa/Kampala" + ], + "UM": [ + "Pacific/Midway", + "Pacific/Wake" + ], + "US": [ + "America/Adak", + "America/Anchorage", + "America/Atka", + "America/Boise", + "America/Chicago", + "America/Denver", + "America/Detroit", + "America/Fort_Wayne", + "America/Indiana/Indianapolis", + "America/Indiana/Knox", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Tell_City", + "America/Indiana/Vevay", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Indianapolis", + "America/Juneau", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/Knox_IN", + "America/Los_Angeles", + "America/Louisville", + "America/Menominee", + "America/Metlakatla", + "America/New_York", + "America/Nome", + "America/North_Dakota/Beulah", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "America/Phoenix", + "America/Shiprock", + "America/Sitka", + "America/Yakutat", + "Navajo", + "Pacific/Honolulu", + "Pacific/Johnston", + "US/Alaska", + "US/Aleutian", + "US/Arizona", + "US/Central", + "US/East-Indiana", + "US/Eastern", + "US/Hawaii", + "US/Indiana-Starke", + "US/Michigan", + "US/Mountain", + "US/Pacific" + ], + "UY": [ + "America/Montevideo" + ], + "UZ": [ + "Asia/Samarkand", + "Asia/Tashkent" + ], + "VA": [ + "Europe/Vatican" + ], + "VC": [ + "America/St_Vincent" + ], + "VE": [ + "America/Caracas" + ], + "VG": [ + "America/Tortola" + ], + "VI": [ + "America/St_Thomas" + ], + "VN": [ + "Asia/Ho_Chi_Minh", + "Asia/Saigon" + ], + "VU": [ + "Pacific/Efate" + ], + "WF": [ + "Pacific/Wallis" + ], + "WS": [ + "Pacific/Apia" + ], + "YE": [ + "Asia/Aden" + ], + "YT": [ + "Indian/Mayotte" + ], + "ZA": [ + "Africa/Johannesburg" + ], + "ZM": [ + "Africa/Lusaka" + ], + "ZW": [ + "Africa/Harare" + ] +}; diff --git a/lib/ilib_durationfmt.dart b/lib/ilib_durationfmt.dart index 6a61f40..cb8723b 100644 --- a/lib/ilib_durationfmt.dart +++ b/lib/ilib_durationfmt.dart @@ -7,13 +7,13 @@ class ILibDurationFmt { locale = options.locale; length = options.length; style = options.style; - useNative = options.useNative; + useNative = options.useNative ?? true; } String? locale; String? length; String? style; - bool? useNative; + bool useNative = true; /// A string representation of parameters to call functions of iLib library properly String toJsonString() { diff --git a/test/durfmt/durfmt_test.dart b/test/durfmt/durfmt_test.dart index 48d5ef7..5ce31ce 100644 --- a/test/durfmt/durfmt_test.dart +++ b/test/durfmt/durfmt_test.dart @@ -700,7 +700,6 @@ void main() { '1 an, 1 mois, 1 semaine, 1 jour, 1 heure, 1 minute, 1 seconde et 1 milliseconde'); }); //test cases for bg-BG - test('testDurFmtBGFormatShortDefaultStyle', () { final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions(locale: 'bg-BG', length: 'short'); @@ -766,9 +765,7 @@ void main() { expect(fmt.format(dateOptions), '1 година, 1 месец, 1 седмица, 1 ден, 1 час, 1 минута и 1 секунда'); }); - //test cases for bs-Latn-BA - test('testDurFmtBSLatnFormatShortDefaultStyle', () { final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions(locale: 'bs-Latn-BA', length: 'short'); @@ -835,7 +832,6 @@ void main() { '1 godina, 1 mjesec, 1 sedmica, 1 dan, 1 sat, 1 minuta i 1 sekunda'); }); //test cases for cs-CZ - test('testDurFmtCSFormatShortDefaultStyle', () { final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions(locale: 'cs-CZ', length: 'short'); @@ -899,7 +895,6 @@ void main() { '1 rok, 1 měsíc, 1 týden, 1 den, 1 hodina, 1 minuta a 1 sekunda'); }); //test cases for da-DK - test('testDurFmtDAFormatShortDefaultStyle', () { final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions(locale: 'da-DK', length: 'short'); @@ -963,7 +958,6 @@ void main() { '1 år, 1 måned, 1 uge, 1 dag, 1 time, 1 minut og 1 sekund'); }); //test cases for el-GR - test('testDurFmtGRFormatShortDefaultStyle', () { final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions(locale: 'el-GR', length: 'short'); From c3836c9f73e651368fa9defad93b5c2f68e8872d Mon Sep 17 00:00:00 2001 From: "seonmi1.jin" Date: Mon, 26 Jan 2026 16:33:48 +0900 Subject: [PATCH 03/11] Add durfmt unittests - am-ET, az-Latn-AZ, ha-Latn-NG, si-LK, sw-KE - ar-SA, km-KH, or-IN --- test/durfmt/durfmt_am_ET_test.dart | 386 ++++++++++++++++++++ test/durfmt/durfmt_ar_SA_test.dart | 455 ++++++++++++++++++++++++ test/durfmt/durfmt_az_Latn_AZ_test.dart | 123 +++++++ test/durfmt/durfmt_ha_Latn_NG_test.dart | 120 +++++++ test/durfmt/durfmt_km_KH_test.dart | 122 +++++++ test/durfmt/durfmt_or_IN_test.dart | 122 +++++++ test/durfmt/durfmt_si_LK_test.dart | 119 +++++++ test/durfmt/durfmt_sw_KE_test.dart | 124 +++++++ 8 files changed, 1571 insertions(+) create mode 100644 test/durfmt/durfmt_am_ET_test.dart create mode 100644 test/durfmt/durfmt_ar_SA_test.dart create mode 100644 test/durfmt/durfmt_az_Latn_AZ_test.dart create mode 100644 test/durfmt/durfmt_ha_Latn_NG_test.dart create mode 100644 test/durfmt/durfmt_km_KH_test.dart create mode 100644 test/durfmt/durfmt_or_IN_test.dart create mode 100644 test/durfmt/durfmt_si_LK_test.dart create mode 100644 test/durfmt/durfmt_sw_KE_test.dart diff --git a/test/durfmt/durfmt_am_ET_test.dart b/test/durfmt/durfmt_am_ET_test.dart new file mode 100644 index 0000000..109c88a --- /dev/null +++ b/test/durfmt/durfmt_am_ET_test.dart @@ -0,0 +1,386 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_ilib/flutter_ilib.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../test_env.dart'; + +void main() { + late String testPlatform; + TestWidgetsFlutterBinding.ensureInitialized(); + debugPrint('Testing [datefmt_Clock_test.dart] file.'); + setUpAll(() async { + testPlatform = getTestPlatform(); + final ILibJS ilibjsinstance = ILibJS.instance; + await ilibjsinstance.loadJS(); + ilibjsinstance.initILib(); + await ilibjsinstance.loadILibLocaleDataAll(); + }); + + group('ILibDurationFmt am-ET', () { + test('testDurFmtAMFormatShortDefaultStyle1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'short'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect( + fmt.format(dateOptions), '1 ዓመት፣ 1 ወር፣ 1 ሳምንት፣ 1 ቀ፣ 1 ሰ፣ 1 ደ፣ 1 ሰ'); + }); + + test('testDurFmtAMFormatShortText1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'short', style: 'text'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect( + fmt.format(dateOptions), '1 ዓመት፣ 1 ወር፣ 1 ሳምንት፣ 1 ቀ፣ 1 ሰ፣ 1 ደ፣ 1 ሰ'); + }); + + test('testDurFmtAMFormatShortClock1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'am-ET', length: 'short', style: 'clock'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), '1 ዓመት፣ 1 ወር፣ 1 ሳምንት፣ 1 ቀ፣ 1:01:01'); + }); + + test('testDurFmtAMFormatMedium1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'medium'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect( + fmt.format(dateOptions), '1 ዓመት፣ 1 ወር፣ 1 ሳምንት፣ 1 ቀ፣ 1 ሰ፣ 1 ደ፣ 1 ሰ'); + }); + + test('testDurFmtAMFormatLong1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'long'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1 ዓመት፣ 1 ወራት፣ 1 ሳምንት፣ 1 ቀናት፣ 1 ሰዓ፣ 1 ደቂ፣ 1 ሰከ'); + }); + + test('testDurFmtAMFormatFull1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'full'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1 ዓመት፣ 1 ወር፣ 1 ሳምንት፣ 1 ቀናት፣ 1 ሰዓት፣ 1 ደቂቃ እና 1 ሰከንድ'); + }); + + test('testDurFmtAMFormatShortDefaultStyle2', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'short'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, + month: 2, + week: 2, + day: 2, + hour: 2, + minute: 2, + second: 2); + expect(fmt.format(dateOptions), '2 ዓ፣ 2 ወር፣ 2 ሳምንት፣ 2 ቀ፣ 2 ሰ፣ 2 ደ፣ 2 ሰ'); + }); + + test('testDurFmtAMFormatShortText2', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'short', style: 'text'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, + month: 2, + week: 2, + day: 2, + hour: 2, + minute: 2, + second: 2); + expect(fmt.format(dateOptions), '2 ዓ፣ 2 ወር፣ 2 ሳምንት፣ 2 ቀ፣ 2 ሰ፣ 2 ደ፣ 2 ሰ'); + }); + + test('testDurFmtAMFormatShortClock2', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'am-ET', length: 'short', style: 'clock'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, + month: 2, + week: 2, + day: 2, + hour: 2, + minute: 2, + second: 2); + expect(fmt.format(dateOptions), '2 ዓ፣ 2 ወር፣ 2 ሳምንት፣ 2 ቀ፣ 2:02:02'); + }); + + test('testDurFmtAMFormatMedium2', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'medium'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, + month: 2, + week: 2, + day: 2, + hour: 2, + minute: 2, + second: 2); + expect(fmt.format(dateOptions), '2 ዓ፣ 2 ወር፣ 2 ሳምንት፣ 2 ቀ፣ 2 ሰ፣ 2 ደ፣ 2 ሰ'); + }); + + test('testDurFmtAMFormatLong2', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'long'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, + month: 2, + week: 2, + day: 2, + hour: 2, + minute: 2, + second: 2); + expect(fmt.format(dateOptions), + '2 ዓመታት፣ 2 ወራት፣ 2 ሳምንታት፣ 2 ቀናት፣ 2 ሰዓ፣ 2 ደቂቃ፣ 2 ሰከ'); + }); + + test('testDurFmtAMFormatFull2', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'full'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, + month: 2, + week: 2, + day: 2, + hour: 2, + minute: 2, + second: 2); + expect(fmt.format(dateOptions), + '2 ዓመታት፣ 2 ወራት፣ 2 ሳምንታት፣ 2 ቀናት፣ 2 ሰዓቶች፣ 2 ደቂቃዎች እና 2 ሰከንዶች'); + }); + + test('testDurFmtAMFormatShortDefaultStyle3', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'short'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 3, month: 3, week: 3, day: 3, hour: 3, minute: 3, second: 3); + expect(fmt.format(dateOptions), '3 ዓ፣ 3 ወር፣ 3 ሳምንት፣ 3 ቀ፣ 3 ሰ፣ 3 ደ፣ 3 ሰ'); + }); + + test('testDurFmtAMFormatShortText3', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'short', style: 'text'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 3, month: 3, week: 3, day: 3, hour: 3, minute: 3, second: 3); + expect(fmt.format(dateOptions), '3 ዓ፣ 3 ወር፣ 3 ሳምንት፣ 3 ቀ፣ 3 ሰ፣ 3 ደ፣ 3 ሰ'); + }); + + test('testDurFmtAMFormatShortClock3', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'am-ET', length: 'short', style: 'clock'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 3, month: 3, week: 3, day: 3, hour: 3, minute: 3, second: 3); + expect(fmt.format(dateOptions), '3 ዓ፣ 3 ወር፣ 3 ሳምንት፣ 3 ቀ፣ 3:03:03'); + }); + + test('testDurFmtAMFormatMedium3', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'medium'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 3, month: 3, week: 3, day: 3, hour: 3, minute: 3, second: 3); + expect(fmt.format(dateOptions), '3 ዓ፣ 3 ወር፣ 3 ሳምንት፣ 3 ቀ፣ 3 ሰ፣ 3 ደ፣ 3 ሰ'); + }); + + test('testDurFmtAMFormatLong3', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'long'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 3, month: 3, week: 3, day: 3, hour: 3, minute: 3, second: 3); + expect(fmt.format(dateOptions), + '3 ዓመታት፣ 3 ወራት፣ 3 ሳምንታት፣ 3 ቀናት፣ 3 ሰዓ፣ 3 ደቂቃ፣ 3 ሰከ'); + }); + + test('testDurFmtAMFormatFull3', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'full'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 3, month: 3, week: 3, day: 3, hour: 3, minute: 3, second: 3); + expect(fmt.format(dateOptions), + '3 ዓመታት፣ 3 ወራት፣ 3 ሳምንታት፣ 3 ቀናት፣ 3 ሰዓቶች፣ 3 ደቂቃዎች እና 3 ሰከንዶች'); + }); + + test('testDurFmtAMFormatShortDefaultStyle11', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'short'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 11, + month: 11, + week: 11, + day: 11, + hour: 11, + minute: 11, + second: 11); + expect(fmt.format(dateOptions), + '11 ዓ፣ 11 ወር፣ 11 ሳምንት፣ 11 ቀ፣ 11 ሰ፣ 11 ደ፣ 11 ሰ'); + }); + + test('testDurFmtAMFormatShortText11', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'short', style: 'text'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 11, + month: 11, + week: 11, + day: 11, + hour: 11, + minute: 11, + second: 11); + expect(fmt.format(dateOptions), + '11 ዓ፣ 11 ወር፣ 11 ሳምንት፣ 11 ቀ፣ 11 ሰ፣ 11 ደ፣ 11 ሰ'); + }); + + test('testDurFmtAMFormatShortClock11', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'am-ET', length: 'short', style: 'clock'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 11, + month: 11, + week: 11, + day: 11, + hour: 11, + minute: 11, + second: 11); + expect(fmt.format(dateOptions), '11 ዓ፣ 11 ወር፣ 11 ሳምንት፣ 11 ቀ፣ 11:11:11'); + }); + + test('testDurFmtAMFormatMedium11', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'medium'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 11, + month: 11, + week: 11, + day: 11, + hour: 11, + minute: 11, + second: 11); + expect(fmt.format(dateOptions), + '11 ዓ፣ 11 ወር፣ 11 ሳምንት፣ 11 ቀ፣ 11 ሰ፣ 11 ደ፣ 11 ሰ'); + }); + + test('testDurFmtAMFormatLong11', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'long'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 11, + month: 11, + week: 11, + day: 11, + hour: 11, + minute: 11, + second: 11); + expect(fmt.format(dateOptions), + '11 ዓመታት፣ 11 ወራት፣ 11 ሳምንታት፣ 11 ቀናት፣ 11 ሰዓ፣ 11 ደቂቃ፣ 11 ሰከ'); + }); + + test('testDurFmtAMFormatFull11', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'am-ET', length: 'full'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 11, + month: 11, + week: 11, + day: 11, + hour: 11, + minute: 11, + second: 11); + expect(fmt.format(dateOptions), + '11 ዓመታት፣ 11 ወራት፣ 11 ሳምንታት፣ 11 ቀናት፣ 11 ሰዓቶች፣ 11 ደቂቃዎች እና 11 ሰከንዶች'); + }); + }); +} diff --git a/test/durfmt/durfmt_ar_SA_test.dart b/test/durfmt/durfmt_ar_SA_test.dart new file mode 100644 index 0000000..8b080f2 --- /dev/null +++ b/test/durfmt/durfmt_ar_SA_test.dart @@ -0,0 +1,455 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_ilib/flutter_ilib.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../test_env.dart'; + +void main() { + late String testPlatform; + TestWidgetsFlutterBinding.ensureInitialized(); + debugPrint('Testing [durfmt_ar_SA_test.dart] file.'); + setUpAll(() async { + testPlatform = getTestPlatform(); + final ILibJS ilibjsinstance = ILibJS.instance; + await ilibjsinstance.loadJS(); + ilibjsinstance.initILib(); + await ilibjsinstance.loadILibLocaleDataAll(); + }); + + group('ILibDurationFmt ar-SA', () { + test('testDurFmtARFormatShortDefaultStyle1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'short'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), '‏سنة وشهر و١ أ و١ ي و١ س و١ د و١ ث'); + }); + + test('testDurFmtARFormatShortText1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'short', style: 'text'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), '‏سنة وشهر و١ أ و١ ي و١ س و١ د و١ ث'); + }); + + test('testDurFmtARFormatShortClock1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'ar-SA', length: 'short', style: 'clock'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), '‏سنة وشهر و١ أ و١ ي و‏١:٠١:٠١'); + }); + + test('testDurFmtARFormatMedium1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'medium'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), '‏سنة وشهر و١ أ و١ ي و١ س و١ د و١ ث'); + }); + + test('testDurFmtARFormatLong1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'long'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '‏سنة، وشهر، وأسبوع، ويوم، و١ س، و١ د، و١ ث'); + }); + + test('testDurFmtARFormatFull1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'full'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '‏سنة، وشهر، وأسبوع، ويوم، وساعة، ودقيقة، وثانية'); + }); + + test('testDurFmtARFormatShortDefaultStyle2', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'short'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, month: 2, week: 2, day: 2, hour: 2, minute: 2, second: 2); + expect(fmt.format(dateOptions), '‏سنتان وشهران و٢ أ و٢ ي و٢ س و٢ د و٢ ث'); + }); + + test('testDurFmtARFormatShortText2', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'short', style: 'text'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, month: 2, week: 2, day: 2, hour: 2, minute: 2, second: 2); + expect(fmt.format(dateOptions), '‏سنتان وشهران و٢ أ و٢ ي و٢ س و٢ د و٢ ث'); + }); + + test('testDurFmtARFormatShortClock2', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'ar-SA', length: 'short', style: 'clock'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, month: 2, week: 2, day: 2, hour: 2, minute: 2, second: 2); + expect(fmt.format(dateOptions), '‏سنتان وشهران و٢ أ و٢ ي و‏٢:٠٢:٠٢'); + }); + + test('testDurFmtARFormatMedium2', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'medium'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, month: 2, week: 2, day: 2, hour: 2, minute: 2, second: 2); + expect(fmt.format(dateOptions), '‏سنتان وشهران و٢ أ و٢ ي و٢ س و٢ د و٢ ث'); + }); + + test('testDurFmtARFormatLong2', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'long'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, month: 2, week: 2, day: 2, hour: 2, minute: 2, second: 2); + expect(fmt.format(dateOptions), + '‏سنتان، وشهران، وأسبوعان، ويومان، و٢ س، و٢ د، و٢ ث'); + }); + + test('testDurFmtARFormatFull2', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'full'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 2, month: 2, week: 2, day: 2, hour: 2, minute: 2, second: 2); + expect(fmt.format(dateOptions), + '‏سنتان، وشهران، وأسبوعان، ويومان، وساعتان، ودقيقتان، وثانيتان'); + }); + + test('testDurFmtARFormatShortDefaultStyle3', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'short'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 3, month: 3, week: 3, day: 3, hour: 3, minute: 3, second: 3); + expect( + fmt.format(dateOptions), '‏٣ سنوات و٣ أشهر و٣ أ و٣ ي و٣ س و٣ د و٣ ث'); + }); + + test('testDurFmtARFormatShortText3', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'short', style: 'text'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 3, month: 3, week: 3, day: 3, hour: 3, minute: 3, second: 3); + expect( + fmt.format(dateOptions), '‏٣ سنوات و٣ أشهر و٣ أ و٣ ي و٣ س و٣ د و٣ ث'); + }); + + test('testDurFmtARFormatShortClock3', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'ar-SA', length: 'short', style: 'clock'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 3, month: 3, week: 3, day: 3, hour: 3, minute: 3, second: 3); + expect(fmt.format(dateOptions), '‏٣ سنوات و٣ أشهر و٣ أ و٣ ي و‏٣:٠٣:٠٣'); + }); + + test('testDurFmtARFormatMedium3', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'medium'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 3, month: 3, week: 3, day: 3, hour: 3, minute: 3, second: 3); + expect( + fmt.format(dateOptions), '‏٣ سنوات و٣ أشهر و٣ أ و٣ ي و٣ س و٣ د و٣ ث'); + }); + + test('testDurFmtARFormatLong3', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'long'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 3, month: 3, week: 3, day: 3, hour: 3, minute: 3, second: 3); + expect(fmt.format(dateOptions), + '‏٣ سنوات، و٣ أشهر، و٣ أسابيع، و٣ أيام، و٣ س، و٣ د، و٣ ث'); + }); + + test('testDurFmtARFormatFull3', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'full'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 3, month: 3, week: 3, day: 3, hour: 3, minute: 3, second: 3); + expect(fmt.format(dateOptions), + '‏٣ سنوات، و٣ أشهر، و٣ أسابيع، و٣ أيام، و٣ ساعات، و٣ دقائق، و٣ ثوانٍ'); + }); + + test('testDurFmtARFormatShortDefaultStyle11', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'short'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 11, + month: 11, + week: 11, + day: 11, + hour: 11, + minute: 11, + second: 11); + expect(fmt.format(dateOptions), + '‏١١ سنة و١١ شهرًا و١١ أ و١١ ي و١١ س و١١ د و١١ ث'); + }); + + test('testDurFmtARFormatShortText11', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'short', style: 'text'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 11, + month: 11, + week: 11, + day: 11, + hour: 11, + minute: 11, + second: 11); + expect(fmt.format(dateOptions), + '‏١١ سنة و١١ شهرًا و١١ أ و١١ ي و١١ س و١١ د و١١ ث'); + }); + + test('testDurFmtARFormatShortClock11', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'ar-SA', length: 'short', style: 'clock'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 11, + month: 11, + week: 11, + day: 11, + hour: 11, + minute: 11, + second: 11); + expect( + fmt.format(dateOptions), '‏١١ سنة و١١ شهرًا و١١ أ و١١ ي و‏١١:١١:١١'); + }); + + test('testDurFmtARFormatMedium11', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'medium'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 11, + month: 11, + week: 11, + day: 11, + hour: 11, + minute: 11, + second: 11); + expect(fmt.format(dateOptions), + '‏١١ سنة و١١ شهرًا و١١ أ و١١ ي و١١ س و١١ د و١١ ث'); + }); + + test('testDurFmtARFormatLong11', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'long'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 11, + month: 11, + week: 11, + day: 11, + hour: 11, + minute: 11, + second: 11); + expect(fmt.format(dateOptions), + '‏١١ سنة، و١١ شهرًا، و١١ أسبوعًا، و١١ يومًا، و١١ س، و١١ د، و١١ ث'); + }); + + test('testDurFmtARFormatFull11', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ar-SA', length: 'full'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 11, + month: 11, + week: 11, + day: 11, + hour: 11, + minute: 11, + second: 11); + expect(fmt.format(dateOptions), + '‏١١ سنة، و١١ شهرًا، و١١ أسبوعًا، و١١ يومًا، و١١ ساعة، و١١ دقيقة، و١١ ثانية'); + }); + + test('testDurFmtARFormatWesternShortDefaultStyle1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'ar-SA', length: 'short', useNative: false), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), '‏سنة وشهر و1 أ و1 ي و1 س و1 د و1 ث'); + }); + + test('testDurFmtARFormatWesternShortText1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'ar-SA', length: 'short', style: 'text', useNative: false), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), '‏سنة وشهر و1 أ و1 ي و1 س و1 د و1 ث'); + }); + + test('testDurFmtARFormatWesternShortClock1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'ar-SA', length: 'short', style: 'clock', useNative: false), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), '‏سنة وشهر و1 أ و1 ي و‏1:01:01'); + }); + + test('testDurFmtARFormatWesternMedium1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'ar-SA', length: 'medium', useNative: false), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), '‏سنة وشهر و1 أ و1 ي و1 س و1 د و1 ث'); + }); + + test('testDurFmtARFormatWesternLong1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'ar-SA', length: 'long', useNative: false), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '‏سنة، وشهر، وأسبوع، ويوم، و1 س، و1 د، و1 ث'); + }); + + test('testDurFmtARFormatWesternFull1', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'ar-SA', length: 'full', useNative: false), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '‏سنة، وشهر، وأسبوع، ويوم، وساعة، ودقيقة، وثانية'); + }); + }); +} diff --git a/test/durfmt/durfmt_az_Latn_AZ_test.dart b/test/durfmt/durfmt_az_Latn_AZ_test.dart new file mode 100644 index 0000000..081cc41 --- /dev/null +++ b/test/durfmt/durfmt_az_Latn_AZ_test.dart @@ -0,0 +1,123 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_ilib/flutter_ilib.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../test_env.dart'; + +void main() { + late String testPlatform; + TestWidgetsFlutterBinding.ensureInitialized(); + debugPrint('Testing [durfmt_az_Latn_AZ_test.dart] file.'); + setUpAll(() async { + testPlatform = getTestPlatform(); + final ILibJS ilibjsinstance = ILibJS.instance; + await ilibjsinstance.loadJS(); + ilibjsinstance.initILib(); + await ilibjsinstance.loadILibLocaleDataAll(); + }); + + group('ILibDurationFmt az-Latn-AZ', () { + test('testDurFmtAZFormatShortDefaultStyle', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'az-Latn-AZ', length: 'short'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1 il, 1 ay, 1 hft, 1 gün, 1 saat, 1 dəq, 1 san'); + }); + + test('testDurFmtAZFormatShortText', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'az-Latn-AZ', length: 'short', style: 'text'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1 il, 1 ay, 1 hft, 1 gün, 1 saat, 1 dəq, 1 san'); + }); + + test('testDurFmtAZFormatShortClock', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'az-Latn-AZ', length: 'short', style: 'clock'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), '1 il, 1 ay, 1 hft, 1 gün, 01:01:01'); + }); + + test('testDurFmtAZFormatMedium', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'az-Latn-AZ', length: 'medium'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1 il, 1 ay, 1 hft, 1 gün, 1 saat, 1 dəq, 1 san'); + }); + + test('testDurFmtAZFormatLong', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'az-Latn-AZ', length: 'long'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1 il, 1 ay, 1 hft, 1 gün, 1 saat, 1 dəq, 1 san'); + }); + + test('testDurFmtAZFormatFull', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'az-Latn-AZ', length: 'full'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1 il, 1 ay, 1 həftə, 1 gün, 1 saat, 1 dəqiqə, 1 saniyə'); + }); + }); +} diff --git a/test/durfmt/durfmt_ha_Latn_NG_test.dart b/test/durfmt/durfmt_ha_Latn_NG_test.dart new file mode 100644 index 0000000..517cb5c --- /dev/null +++ b/test/durfmt/durfmt_ha_Latn_NG_test.dart @@ -0,0 +1,120 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_ilib/flutter_ilib.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../test_env.dart'; + +void main() { + late String testPlatform; + TestWidgetsFlutterBinding.ensureInitialized(); + debugPrint('Testing [durfmt_ha_Latn_NG_test.dart] file.'); + setUpAll(() async { + testPlatform = getTestPlatform(); + final ILibJS ilibjsinstance = ILibJS.instance; + await ilibjsinstance.loadJS(); + ilibjsinstance.initILib(); + await ilibjsinstance.loadILibLocaleDataAll(); + }); + + group('ILibDurationFmt ha-Latn-NG', () { + test('testDurFmtHAFormatShortDefaultStyle', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ha-Latn-NG', length: 'short'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), 'shkr 1, w1, m1, r1, s1, minti1, d 1'); + }); + + test('testDurFmtHAFormatShortText', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'ha-Latn-NG', length: 'short', style: 'text'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), 'shkr 1, w1, m1, r1, s1, minti1, d 1'); + }); + + test('testDurFmtHAFormatShortClock', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'ha-Latn-NG', length: 'short', style: 'clock'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), 'shkr 1, w1, m1, r1, 01:01:01'); + }); + + test('testDurFmtHAFormatMedium', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ha-Latn-NG', length: 'medium'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), 'shkr 1, w1, m1, r1, s1, minti1, d 1'); + }); + + test('testDurFmtHAFormatLong', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ha-Latn-NG', length: 'long'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + 'shkr 1, wat 1, mk 1, rana 1, s 1, mnt 1, d 1'); + }); + + test('testDurFmtHAFormatFull', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'ha-Latn-NG', length: 'full'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + 'shekara 1, wata 1, mako 1, rana 1, sa′a 1, minti 1, daƙiƙa 1'); + }); + }); +} diff --git a/test/durfmt/durfmt_km_KH_test.dart b/test/durfmt/durfmt_km_KH_test.dart new file mode 100644 index 0000000..25305e5 --- /dev/null +++ b/test/durfmt/durfmt_km_KH_test.dart @@ -0,0 +1,122 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_ilib/flutter_ilib.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../test_env.dart'; + +void main() { + late String testPlatform; + TestWidgetsFlutterBinding.ensureInitialized(); + debugPrint('Testing [durfmt_km_KH_test.dart] file.'); + setUpAll(() async { + testPlatform = getTestPlatform(); + final ILibJS ilibjsinstance = ILibJS.instance; + await ilibjsinstance.loadJS(); + ilibjsinstance.initILib(); + await ilibjsinstance.loadILibLocaleDataAll(); + }); + + group('ILibDurationFmt km-KH', () { + test('testDurFmtKHFormatShortDefaultStyle', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'km-KH', length: 'short'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ 1 ម៉ោង 1 នាទី 1 វិនាទី'); + }); + + test('testDurFmtKHFormatShortText', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'km-KH', length: 'short', style: 'text'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ 1 ម៉ោង 1 នាទី 1 វិនាទី'); + }); + + test('testDurFmtKHFormatShortClock', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'km-KH', length: 'short', style: 'clock'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ 1:01:01'); + }); + + test('testDurFmtKHFormatMedium', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'km-KH', length: 'medium'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ 1 ម៉ោង 1 នាទី 1 វិនាទី'); + }); + + test('testDurFmtKHFormatLong', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'km-KH', length: 'long'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ 1 ម៉ោង 1 នាទី 1 វិនាទី'); + }); + + test('testDurFmtKHFormatFull', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'km-KH', length: 'full'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ 1 ម៉ោង 1 នាទី 1 វិនាទី'); + }); + }); +} diff --git a/test/durfmt/durfmt_or_IN_test.dart b/test/durfmt/durfmt_or_IN_test.dart new file mode 100644 index 0000000..e64cc2f --- /dev/null +++ b/test/durfmt/durfmt_or_IN_test.dart @@ -0,0 +1,122 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_ilib/flutter_ilib.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../test_env.dart'; + +void main() { + late String testPlatform; + TestWidgetsFlutterBinding.ensureInitialized(); + debugPrint('Testing [durfmt_or_IN_test.dart] file.'); + setUpAll(() async { + testPlatform = getTestPlatform(); + final ILibJS ilibjsinstance = ILibJS.instance; + await ilibjsinstance.loadJS(); + ilibjsinstance.initILib(); + await ilibjsinstance.loadILibLocaleDataAll(); + }); + + group('ILibDurationFmt or-IN', () { + test('testDurFmtORFormatShortDefaultStyle', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'or-IN', length: 'short'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1ବର୍ଷ 1ମାସ 1ସପ୍ 1ଦିନ 1ଘଣ୍ଟା 1ମିନିଟ୍‌ 1ସେକ୍'); + }); + + test('testDurFmtORFormatShortText', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'or-IN', length: 'short', style: 'text'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1ବର୍ଷ 1ମାସ 1ସପ୍ 1ଦିନ 1ଘଣ୍ଟା 1ମିନିଟ୍‌ 1ସେକ୍'); + }); + + test('testDurFmtORFormatShortClock', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'or-IN', length: 'short', style: 'clock'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), '1ବର୍ଷ 1ମାସ 1ସପ୍ 1ଦିନ 1:01:01'); + }); + + test('testDurFmtORFormatMedium', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'or-IN', length: 'medium'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1ବର୍ଷ 1ମାସ 1ସପ୍ 1ଦିନ 1ଘଣ୍ଟା 1ମିନିଟ୍‌ 1ସେକ୍'); + }); + + test('testDurFmtORFormatLong', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'or-IN', length: 'long'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1 ବର୍ଷ, 1 ମାସ, 1 ସପ୍ତାହ, 1 ଦିନ, 1 ଘଣ୍ଟା, 1 ମିନିଟ୍‌, 1 ସେକେଣ୍ଡ'); + }); + + test('testDurFmtORFormatFull', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'or-IN', length: 'full'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + '1 ବର୍ଷ, 1 ମାସ, 1 ସପ୍ତାହ, 1 ଦିନ, 1 ଘଣ୍ଟା, 1 ମିନିଟ୍‌, 1 ସେକେଣ୍ଡ'); + }); + }); +} diff --git a/test/durfmt/durfmt_si_LK_test.dart b/test/durfmt/durfmt_si_LK_test.dart new file mode 100644 index 0000000..4e5357c --- /dev/null +++ b/test/durfmt/durfmt_si_LK_test.dart @@ -0,0 +1,119 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_ilib/flutter_ilib.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../test_env.dart'; + +void main() { + late String testPlatform; + TestWidgetsFlutterBinding.ensureInitialized(); + debugPrint('Testing [durfmt_si_LK_test.dart] file.'); + setUpAll(() async { + testPlatform = getTestPlatform(); + final ILibJS ilibjsinstance = ILibJS.instance; + await ilibjsinstance.loadJS(); + ilibjsinstance.initILib(); + await ilibjsinstance.loadILibLocaleDataAll(); + }); + + group('ILibDurationFmt si-LK', () { + test('testDurFmtLKFormatShortDefaultStyle', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'si-LK', length: 'short'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), 'ව 1, මා 1, ස 1, දි 1, පැය 1, මි 1, ත 1'); + }); + + test('testDurFmtLKFormatShortText', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'si-LK', length: 'short', style: 'text'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), 'ව 1, මා 1, ස 1, දි 1, පැය 1, මි 1, ත 1'); + }); + + test('testDurFmtLKFormatShortClock', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'si-LK', length: 'short', style: 'clock'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), 'ව 1, මා 1, ස 1, දි 1, 01.01.01'); + }); + + test('testDurFmtLKFormatMedium', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'si-LK', length: 'medium'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), 'ව 1, මා 1, ස 1, දි 1, පැය 1, මි 1, ත 1'); + }); + + test('testDurFmtLKFormatLong', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'si-LK', length: 'long'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + 'වසර 1, මාස 1, සති 1, දින 1, පැය 1, මිනි 1, තත් 1'); + }); + + test('testDurFmtLKFormatFull', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'si-LK', length: 'full'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + 'වසර 1, මාස 1, සති 1, දින 1, පැය 1, මිනිත්තු 1, සහ තත්පර 1'); + }); + }); +} diff --git a/test/durfmt/durfmt_sw_KE_test.dart b/test/durfmt/durfmt_sw_KE_test.dart new file mode 100644 index 0000000..c09b7ea --- /dev/null +++ b/test/durfmt/durfmt_sw_KE_test.dart @@ -0,0 +1,124 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_ilib/flutter_ilib.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../test_env.dart'; + +void main() { + late String testPlatform; + TestWidgetsFlutterBinding.ensureInitialized(); + debugPrint('Testing [durfmt_sw_KE_test.dart] file.'); + setUpAll(() async { + testPlatform = getTestPlatform(); + final ILibJS ilibjsinstance = ILibJS.instance; + await ilibjsinstance.loadJS(); + ilibjsinstance.initILib(); + await ilibjsinstance.loadILibLocaleDataAll(); + }); + + group('ILibDurationFmt sw-KE', () { + test('testDurFmtKEFormatShortDefaultStyle', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'sw-Latn-KE', length: 'short'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + 'mwaka 1, mwezi 1, wiki 1, siku 1, saa 1, dak 1, sek 1'); + }); + + test('testDurFmtKEFormatShortText', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'sw-Latn-KE', length: 'short', style: 'text'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + 'mwaka 1, mwezi 1, wiki 1, siku 1, saa 1, dak 1, sek 1'); + }); + + test('testDurFmtKEFormatShortClock', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'sw-Latn-KE', length: 'short', style: 'clock'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + 'mwaka 1, mwezi 1, wiki 1, siku 1, 01:01:01'); + }); + + test('testDurFmtKEFormatMedium', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'sw-Latn-KE', length: 'medium'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + 'mwaka 1, mwezi 1, wiki 1, siku 1, saa 1, dak 1, sek 1'); + }); + + test('testDurFmtKEFormatLong', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'sw-Latn-KE', length: 'long'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + 'mwaka 1, mwezi 1, wiki 1, siku 1, saa 1, dakika 1, sekunde 1'); + }); + + test('testDurFmtKEFormatFull', () { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions(locale: 'sw-Latn-KE', length: 'full'), + ); + expect(fmt, isNotNull); + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1); + expect(fmt.format(dateOptions), + 'mwaka 1, mwezi 1, wiki 1, siku 1, saa 1, dakika 1 na sekunde 1'); + }); + }); +} From 8a647492c08008edb361d877800ddff57a2e55ef Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Mon, 26 Jan 2026 16:58:05 +0900 Subject: [PATCH 04/11] Convert more test cases from the iLib repo --- lib/ilib_durationfmt.dart | 6 +- test/basic/flutter_ilib_test.dart | 2 +- test/durfmt/durfmt2_test.dart | 3092 +++++++++++++++++++++++++++++ test/durfmt/durfmt_test.dart | 2328 +++++++++++++++++++++- 4 files changed, 5417 insertions(+), 11 deletions(-) create mode 100644 test/durfmt/durfmt2_test.dart diff --git a/lib/ilib_durationfmt.dart b/lib/ilib_durationfmt.dart index cb8723b..004469d 100644 --- a/lib/ilib_durationfmt.dart +++ b/lib/ilib_durationfmt.dart @@ -7,13 +7,13 @@ class ILibDurationFmt { locale = options.locale; length = options.length; style = options.style; - useNative = options.useNative ?? true; + useNative = options.useNative; } String? locale; String? length; String? style; - bool useNative = true; + bool? useNative; /// A string representation of parameters to call functions of iLib library properly String toJsonString() { @@ -47,10 +47,12 @@ class ILibDurationFmt { String result = ''; final String formatOptions = toJsonString(); final String dateOptions = date.toJsonString(); + result = ILibJS.instance .evaluate( 'new DurationFmt($formatOptions).format($dateOptions).toString()') .stringResult; + return result; } diff --git a/test/basic/flutter_ilib_test.dart b/test/basic/flutter_ilib_test.dart index d8873f5..3358179 100644 --- a/test/basic/flutter_ilib_test.dart +++ b/test/basic/flutter_ilib_test.dart @@ -215,6 +215,6 @@ void main() { const String str = 'new DurationFmt({locale:"$loc", length:"$length",style: "$style", useNative: false}).format({year: $year, month: $month, day: $day, hour: $hour, minute: $minute}).toString()'; - expect(flutterIlibPlugin.evaluateILib(str), '2 سال 3 ماه 16 روز ‏5:23'); + expect(flutterIlibPlugin.evaluateILib(str), '‏2 سال 3 ماه 16 روز ‏5:23'); }); } diff --git a/test/durfmt/durfmt2_test.dart b/test/durfmt/durfmt2_test.dart new file mode 100644 index 0000000..9762551 --- /dev/null +++ b/test/durfmt/durfmt2_test.dart @@ -0,0 +1,3092 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_ilib/flutter_ilib.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../test_env.dart'; + +void main() { + late String testPlatform; + final List length = ['full', 'long', 'medium', 'short']; + TestWidgetsFlutterBinding.ensureInitialized(); + debugPrint('Testing [durfmt_test.dart] file.'); + setUpAll(() async { + testPlatform = getTestPlatform(); + final ILibJS ilibjsinstance = ILibJS.instance; + await ilibjsinstance.loadJS(); + ilibjsinstance.initILib(); + await ilibjsinstance.loadILibLocaleDataAll(); + }); + + group('testDurFmt', () { + test('testDurFmt_ar_EG', () { + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ar-EG', + style: 'text', + length: length[i], + useNative: false, + ); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_IQ', () { + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ar-IQ', + style: 'text', + length: length[i], + useNative: false, + ); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_MA', () { + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ar-US', + style: 'text', + length: length[i], + useNative: false, + ); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_as_IN', () { + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'as-IN', + style: 'text', + length: length[i], + useNative: false, + ); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 বছৰ, 1 মাহ, 1 সপ্তাহ, 1 দিন'); + expect(textformatted_1[1], '1 বছৰ, 1 মাহ, 1 সপ্তাহ, 1 দিন'); + expect(textformatted_1[2], '1 বছৰ 1 মাহ 1 সপ্তাহ 1 দিন'); + expect(textformatted_1[3], '1 বছৰ 1 মাহ 1 সপ্তাহ 1 দিন'); + + expect(textformatted_2[0], '2 বছৰ, 2 মাহ, 2 সপ্তাহ, 2 দিন'); + expect(textformatted_2[1], '2 বছৰ, 2 মাহ, 2 সপ্তাহ, 2 দিন'); + expect(textformatted_2[2], '2 বছৰ 2 মাহ 2 সপ্তাহ 2 দিন'); + expect(textformatted_2[3], '2 বছৰ 2 মাহ 2 সপ্তাহ 2 দিন'); + + expect(clockformatted_1[0], '1 ঘণ্টা, 1 মিনিট, 1 ছেকেণ্ড'); + expect(clockformatted_1[1], '1 ঘণ্টা, 1 মিনিট, 1 ছেকেণ্ড'); + expect(clockformatted_1[2], '1 ঘণ্টা 1 মিনিট 1 ছেকেণ্ড'); + expect(clockformatted_1[3], '1 ঘণ্টা 1 মিনিট 1 ছেকেণ্ড'); + + expect(clockformatted_2[0], '2 ঘণ্টা, 2 মিনিট, 2 ছেকেণ্ড'); + expect(clockformatted_2[1], '2 ঘণ্টা, 2 মিনিট, 2 ছেকেণ্ড'); + expect(clockformatted_2[2], '2 ঘণ্টা 2 মিনিট 2 ছেকেণ্ড'); + expect(clockformatted_2[3], '2 ঘণ্টা 2 মিনিট 2 ছেকেণ্ড'); + }); + + test('testDurFmt_bg_BG', () { + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'bg-BG', + style: 'text', + length: length[i], + ), + ); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 година, 1 месец, 1 седмица и 1 ден'); + expect(textformatted_1[1], '1 год., 1 мес., 1 седм., 1 д'); + expect(textformatted_1[2], '1 г., 1 мес., 1 седм., 1 д'); + expect(textformatted_1[3], '1 г., 1 мес., 1 седм., 1 д'); + + expect(textformatted_2[0], '2 години, 2 месеца, 2 седмици и 2 дни'); + expect(textformatted_2[1], '2 год., 2 мес., 2 седм., 2 д'); + expect(textformatted_2[2], '2 г., 2 мес., 2 седм., 2 д'); + expect(textformatted_2[3], '2 г., 2 мес., 2 седм., 2 д'); + + expect(clockformatted_1[0], '1 час, 1 минута и 1 секунда'); + expect(clockformatted_1[1], '1 ч, 1 мин, 1 сек'); + expect(clockformatted_1[2], '1 ч, 1 мин, 1 с'); + expect(clockformatted_1[3], '1 ч, 1 мин, 1 с'); + + expect(clockformatted_2[0], '2 часа, 2 минути и 2 секунди'); + expect(clockformatted_2[1], '2 ч, 2 мин, 2 сек'); + expect(clockformatted_2[2], '2 ч, 2 мин, 2 с'); + expect(clockformatted_2[3], '2 ч, 2 мин, 2 с'); + }); + + test('testDurFmt_bn_IN', () { + final List textformatted_1 = []; + final List textformatted_18 = []; + final List clockformatted_1 = []; + final List clockformatted_18 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'bn-IN', + style: 'text', + length: length[i], + useNative: false, + ), + ); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_18.add(fmt + .format(ILibDateOptions(year: 18, month: 18, week: 18, day: 18))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_18 + .add(fmt.format(ILibDateOptions(hour: 18, minute: 18, second: 18))); + } + + expect(textformatted_1[0], '1 বছর, 1 মাস, 1 সপ্তাহ, 1 দিন'); + expect(textformatted_1[1], '1 বছর, 1 মাস, 1 সপ্তাহ, 1 দিন'); + expect(textformatted_1[2], '1 বছর, 1 মাস, 1 সপ্তাহ, 1 দিন'); + expect(textformatted_1[3], '1 বছর, 1 মাস, 1 সপ্তাহ, 1 দিন'); + + expect(textformatted_18[0], '18 বছর, 18 মাস, 18 সপ্তাহ, 18 দিন'); + expect(textformatted_18[1], '18 বছর, 18 মাস, 18 সপ্তাহ, 18 দিন'); + expect(textformatted_18[2], '18 বছর, 18 মাস, 18 সপ্তাহ, 18 দিন'); + expect(textformatted_18[3], '18 বছর, 18 মাস, 18 সপ্তাহ, 18 দিন'); + + expect(clockformatted_1[0], '1 ঘন্টা, 1 মিনিট, 1 সেকেন্ড'); + expect(clockformatted_1[1], '1 ঘন্টা, 1 মিনিট, 1 সেকেন্ড'); + expect(clockformatted_1[2], '1 ঘঃ, 1 মিঃ, 1 সেঃ'); + expect(clockformatted_1[3], '1 ঘঃ, 1 মিঃ, 1 সেঃ'); + + expect(clockformatted_18[0], '18 ঘন্টা, 18 মিনিট, 18 সেকেন্ড'); + expect(clockformatted_18[1], '18 ঘন্টা, 18 মিনিট, 18 সেকেন্ড'); + expect(clockformatted_18[2], '18 ঘঃ, 18 মিঃ, 18 সেঃ'); + expect(clockformatted_18[3], '18 ঘঃ, 18 মিঃ, 18 সেঃ'); + }); + + test('testDurFmt_bs_Latn_BA', () { + final List textformatted_1 = []; + final List textformatted_4 = []; + final List textformatted_5 = []; + final List clockformatted_1 = []; + final List clockformatted_4 = []; + final List clockformatted_5 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'bs-Latn-BA', + style: 'text', + length: length[i], + ), + ); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_4.add( + fmt.format(ILibDateOptions(year: 4, month: 4, week: 4, day: 4))); + textformatted_5.add( + fmt.format(ILibDateOptions(year: 5, month: 5, week: 5, day: 5))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_4 + .add(fmt.format(ILibDateOptions(hour: 4, minute: 4, second: 4))); + clockformatted_5 + .add(fmt.format(ILibDateOptions(hour: 5, minute: 5, second: 5))); + } + + expect(textformatted_1[0], '1 godina, 1 mjesec, 1 sedmica i 1 dan'); + expect(textformatted_1[1], '1 god., 1 mj., 1 sedm., 1 dan'); + expect(textformatted_1[2], '1 god., 1 mj., 1 sedm., 1 d.'); + expect(textformatted_1[3], '1 god., 1 mj., 1 sedm., 1 d.'); + + expect(textformatted_4[0], '4 godine, 4 mjeseca, 4 sedmice i 4 dana'); + expect(textformatted_4[1], '4 god., 4 mj., 4 sedm., 4 dana'); + expect(textformatted_4[2], '4 god., 4 mj., 4 sedm., 4 d.'); + expect(textformatted_4[3], '4 god., 4 mj., 4 sedm., 4 d.'); + + expect(textformatted_5[0], '5 godina, 5 mjeseci, 5 sedmica i 5 dana'); + expect(textformatted_5[1], '5 god., 5 mj., 5 sedm., 5 dana'); + expect(textformatted_5[2], '5 god., 5 mj., 5 sedm., 5 d.'); + expect(textformatted_5[3], '5 god., 5 mj., 5 sedm., 5 d.'); + + expect(clockformatted_1[0], '1 sat, 1 minuta i 1 sekunda'); + expect(clockformatted_1[1], '1 h, 1 min., 1 sek.'); + expect(clockformatted_1[2], '1 h, 1 m, 1 s'); + expect(clockformatted_1[3], '1 h, 1 m, 1 s'); + + expect(clockformatted_4[0], '4 sata, 4 minute i 4 sekunde'); + expect(clockformatted_4[1], '4 h, 4 min., 4 sek.'); + expect(clockformatted_4[2], '4 h, 4 m, 4 s'); + expect(clockformatted_4[3], '4 h, 4 m, 4 s'); + + expect(clockformatted_5[0], '5 sati, 5 minuta i 5 sekundi'); + expect(clockformatted_5[1], '5 h, 5 min., 5 sek.'); + expect(clockformatted_5[2], '5 h, 5 m, 5 s'); + expect(clockformatted_5[3], '5 h, 5 m, 5 s'); + }); + + test('testDurFmt_cs_CZ', () { + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_5 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_5 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'cs-CZ', style: 'text', length: length[i]), + ); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_5.add( + fmt.format(ILibDateOptions(year: 5, month: 5, week: 5, day: 5))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_5 + .add(fmt.format(ILibDateOptions(hour: 5, minute: 5, second: 5))); + } + + expect(textformatted_1[0], '1 rok, 1 měsíc, 1 týden a 1 den'); + expect(textformatted_1[1], '1 rok, 1 měs., 1 týd., 1 den'); + expect(textformatted_1[2], '1 r., 1 m., 1 t., 1 d.'); + expect(textformatted_1[3], '1 r. 1 m. 1 t. 1 d.'); + + expect(textformatted_2[0], '2 roky, 2 měsíce, 2 týdny a 2 dny'); + expect(textformatted_2[1], '2 roky, 2 měs., 2 týd., 2 dny'); + expect(textformatted_2[2], '2 r., 2 m., 2 t., 2 d.'); + expect(textformatted_2[3], '2 r. 2 m. 2 t. 2 d.'); + + expect(textformatted_5[0], '5 let, 5 měsíců, 5 týdnů a 5 dnů'); + expect(textformatted_5[1], '5 let, 5 měs., 5 týd., 5 dnů'); + expect(textformatted_5[2], '5 l., 5 m., 5 t., 5 d.'); + expect(textformatted_5[3], '5 l. 5 m. 5 t. 5 d.'); + + expect(clockformatted_1[0], '1 hodina, 1 minuta a 1 sekunda'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1 h, 1 m, 1 s'); + expect(clockformatted_1[3], '1 h 1 m 1 s'); + + expect(clockformatted_2[0], '2 hodiny, 2 minuty a 2 sekundy'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2 h, 2 m, 2 s'); + expect(clockformatted_2[3], '2 h 2 m 2 s'); + + expect(clockformatted_5[0], '5 hodin, 5 minut a 5 sekund'); + expect(clockformatted_5[1], '5 h, 5 min, 5 s'); + expect(clockformatted_5[2], '5 h, 5 m, 5 s'); + expect(clockformatted_5[3], '5 h 5 m 5 s'); + }); + + test('testDurFmt_da_DK', () { + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'da-DK', style: 'text', length: length[i]), + ); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 år, 1 måned, 1 uge og 1 dag'); + expect(textformatted_1[1], '1 år, 1 md., 1 uge, 1 dag'); + expect(textformatted_1[2], '1 år, 1 m, 1 u, 1 d'); + expect(textformatted_1[3], '1 år, 1 m, 1 u, 1 d'); + + expect(textformatted_2[0], '2 år, 2 måneder, 2 uger og 2 dage'); + expect(textformatted_2[1], '2 år, 2 mdr., 2 uger, 2 dage'); + expect(textformatted_2[2], '2 år, 2 m, 2 u, 2 d'); + expect(textformatted_2[3], '2 år, 2 m, 2 u, 2 d'); + + expect(clockformatted_1[0], '1 time, 1 minut og 1 sekund'); + expect(clockformatted_1[1], '1 t., 1 min., 1 sek.'); + expect(clockformatted_1[2], '1 t, 1 m, 1 s'); + expect(clockformatted_1[3], '1 t, 1 m, 1 s'); + + expect(clockformatted_2[0], '2 timer, 2 minutter og 2 sekunder'); + expect(clockformatted_2[1], '2 t., 2 min., 2 sek.'); + expect(clockformatted_2[2], '2 t, 2 m, 2 s'); + expect(clockformatted_2[3], '2 t, 2 m, 2 s'); + }); + + test('testDurFmt_de_AT', () { + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'de-AT', style: 'text', length: length[i]), + ); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 Jahr, 1 Monat, 1 Woche und 1 Tag'); + expect(textformatted_1[1], '1 J, 1 Mon., 1 Wo., 1 Tg.'); + expect(textformatted_1[2], '1 J, 1 M, 1 W, 1 T'); + expect(textformatted_1[3], '1 J, 1 M, 1 W, 1 T'); + + expect(textformatted_2[0], '2 Jahre, 2 Monate, 2 Wochen und 2 Tage'); + expect(textformatted_2[1], '2 J, 2 Mon., 2 Wo., 2 Tg.'); + expect(textformatted_2[2], '2 J, 2 M, 2 W, 2 T'); + expect(textformatted_2[3], '2 J, 2 M, 2 W, 2 T'); + + expect(clockformatted_1[0], '1 Stunde, 1 Minute und 1 Sekunde'); + expect(clockformatted_1[1], '1 Std., 1 Min., 1 Sek.'); + expect(clockformatted_1[2], '1 Std., 1 Min., 1 Sek.'); + expect(clockformatted_1[3], '1 Std., 1 Min., 1 Sek.'); + + expect(clockformatted_2[0], '2 Stunden, 2 Minuten und 2 Sekunden'); + expect(clockformatted_2[1], '2 Std., 2 Min., 2 Sek.'); + expect(clockformatted_2[2], '2 Std., 2 Min., 2 Sek.'); + expect(clockformatted_2[3], '2 Std., 2 Min., 2 Sek.'); + }); + + test('testDurFmt_de_CH', () { + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'de-CH', style: 'text', length: length[i]), + ); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 Jahr, 1 Monat, 1 Woche und 1 Tag'); + expect(textformatted_1[1], '1 J, 1 Mon., 1 Wo., 1 Tg.'); + expect(textformatted_1[2], '1 J, 1 M, 1 W, 1 T'); + expect(textformatted_1[3], '1 J, 1 M, 1 W, 1 T'); + + expect(textformatted_2[0], '2 Jahre, 2 Monate, 2 Wochen und 2 Tage'); + expect(textformatted_2[1], '2 J, 2 Mon., 2 Wo., 2 Tg.'); + expect(textformatted_2[2], '2 J, 2 M, 2 W, 2 T'); + expect(textformatted_2[3], '2 J, 2 M, 2 W, 2 T'); + + expect(clockformatted_1[0], '1 Stunde, 1 Minute und 1 Sekunde'); + expect(clockformatted_1[1], '1 Std., 1 Min., 1 Sek.'); + expect(clockformatted_1[2], '1 Std., 1 Min., 1 Sek.'); + expect(clockformatted_1[3], '1 Std., 1 Min., 1 Sek.'); + + expect(clockformatted_2[0], '2 Stunden, 2 Minuten und 2 Sekunden'); + expect(clockformatted_2[1], '2 Std., 2 Min., 2 Sek.'); + expect(clockformatted_2[2], '2 Std., 2 Min., 2 Sek.'); + expect(clockformatted_2[3], '2 Std., 2 Min., 2 Sek.'); + }); + test('testDurFmt_de_DE', () { + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'de-DE', style: 'text', length: length[i]), + ); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 Jahr, 1 Monat, 1 Woche und 1 Tag'); + expect(textformatted_1[1], '1 J, 1 Mon., 1 Wo., 1 Tg.'); + expect(textformatted_1[2], '1 J, 1 M, 1 W, 1 T'); + expect(textformatted_1[3], '1 J, 1 M, 1 W, 1 T'); + + expect(textformatted_16[0], '16 Jahre, 16 Monate, 16 Wochen und 16 Tage'); + expect(textformatted_16[1], '16 J, 16 Mon., 16 Wo., 16 Tg.'); + expect(textformatted_16[2], '16 J, 16 M, 16 W, 16 T'); + expect(textformatted_16[3], '16 J, 16 M, 16 W, 16 T'); + + expect(clockformatted_1[0], '1 Stunde, 1 Minute und 1 Sekunde'); + expect(clockformatted_1[1], '1 Std., 1 Min., 1 Sek.'); + expect(clockformatted_1[2], '1 Std., 1 Min., 1 Sek.'); + expect(clockformatted_1[3], '1 Std., 1 Min., 1 Sek.'); + + expect(clockformatted_16[0], '16 Stunden, 16 Minuten und 16 Sekunden'); + expect(clockformatted_16[1], '16 Std., 16 Min., 16 Sek.'); + expect(clockformatted_16[2], '16 Std., 16 Min., 16 Sek.'); + expect(clockformatted_16[3], '16 Std., 16 Min., 16 Sek.'); + }); + test('testDurFmt_de_LU', () { + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'de-LU', style: 'text', length: length[i]), + ); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 Jahr, 1 Monat, 1 Woche und 1 Tag'); + expect(textformatted_1[1], '1 J, 1 Mon., 1 Wo., 1 Tg.'); + expect(textformatted_1[2], '1 J, 1 M, 1 W, 1 T'); + expect(textformatted_1[3], '1 J, 1 M, 1 W, 1 T'); + + expect(textformatted_17[0], '17 Jahre, 17 Monate, 17 Wochen und 17 Tage'); + expect(textformatted_17[1], '17 J, 17 Mon., 17 Wo., 17 Tg.'); + expect(textformatted_17[2], '17 J, 17 M, 17 W, 17 T'); + expect(textformatted_17[3], '17 J, 17 M, 17 W, 17 T'); + + expect(clockformatted_1[0], '1 Stunde, 1 Minute und 1 Sekunde'); + expect(clockformatted_1[1], '1 Std., 1 Min., 1 Sek.'); + expect(clockformatted_1[2], '1 Std., 1 Min., 1 Sek.'); + expect(clockformatted_1[3], '1 Std., 1 Min., 1 Sek.'); + + expect(clockformatted_17[0], '17 Stunden, 17 Minuten und 17 Sekunden'); + expect(clockformatted_17[1], '17 Std., 17 Min., 17 Sek.'); + expect(clockformatted_17[2], '17 Std., 17 Min., 17 Sek.'); + expect(clockformatted_17[3], '17 Std., 17 Min., 17 Sek.'); + }); + test('testDurFmt_el_CY', () { + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'el-CY', style: 'text', length: length[i]), + ); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 έτος, 1 μήνας, 1 εβδομάδα, 1 ημέρα'); + expect(textformatted_1[1], '1 έτ., 1 μήν., 1 εβδ., 1 ημέρα'); + expect(textformatted_1[2], '1 έ, 1 μ, 1 ε, 1 η'); + expect(textformatted_1[3], '1 έ 1 μ 1 ε 1 η'); + + expect(textformatted_2[0], '2 έτη, 2 μήνες, 2 εβδομάδες, 2 ημέρες'); + expect(textformatted_2[1], '2 έτ., 2 μήν., 2 εβδ., 2 ημέρες'); + expect(textformatted_2[2], '2 έ, 2 μ, 2 ε, 2 η'); + expect(textformatted_2[3], '2 έ 2 μ 2 ε 2 η'); + + expect(clockformatted_1[0], '1 ώρα, 1 λεπτό, 1 δευτερόλεπτο'); + expect(clockformatted_1[1], '1 ώ., 1 λ., 1 δευτ.'); + expect(clockformatted_1[2], '1 ώ, 1 λ, 1 δ'); + expect(clockformatted_1[3], '1 ώ 1 λ 1 δ'); + + expect(clockformatted_2[0], '2 ώρες, 2 λεπτά, 2 δευτερόλεπτα'); + expect(clockformatted_2[1], '2 ώ., 2 λ., 2 δευτ.'); + expect(clockformatted_2[2], '2 ώ, 2 λ, 2 δ'); + expect(clockformatted_2[3], '2 ώ 2 λ 2 δ'); + }); + test('testDurFmt_el_GR', () { + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt( + ILibDurationFmtOptions( + locale: 'el-GR', style: 'text', length: length[i]), + ); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 έτος, 1 μήνας, 1 εβδομάδα, 1 ημέρα'); + expect(textformatted_1[1], '1 έτ., 1 μήν., 1 εβδ., 1 ημέρα'); + expect(textformatted_1[2], '1 έ, 1 μ, 1 ε, 1 η'); + expect(textformatted_1[3], '1 έ 1 μ 1 ε 1 η'); + + expect(textformatted_17[0], '17 έτη, 17 μήνες, 17 εβδομάδες, 17 ημέρες'); + expect(textformatted_17[1], '17 έτ., 17 μήν., 17 εβδ., 17 ημέρες'); + expect(textformatted_17[2], '17 έ, 17 μ, 17 ε, 17 η'); + expect(textformatted_17[3], '17 έ 17 μ 17 ε 17 η'); + + expect(clockformatted_1[0], '1 ώρα, 1 λεπτό, 1 δευτερόλεπτο'); + expect(clockformatted_1[1], '1 ώ., 1 λ., 1 δευτ.'); + expect(clockformatted_1[2], '1 ώ, 1 λ, 1 δ'); + expect(clockformatted_1[3], '1 ώ 1 λ 1 δ'); + + expect(clockformatted_17[0], '17 ώρες, 17 λεπτά, 17 δευτερόλεπτα'); + expect(clockformatted_17[1], '17 ώ., 17 λ., 17 δευτ.'); + expect(clockformatted_17[2], '17 ώ, 17 λ, 17 δ'); + expect(clockformatted_17[3], '17 ώ 17 λ 17 δ'); + }); + + test('testDurFmt_en_AM', () { + // 1,2 + + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-AM', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hr, 2 min, 2 sec'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_AU', () { + // 1.16 + + var textformatted_1 = [], textformatted_16 = []; + var clockformatted_1 = [], clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-AU', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_16[0], '16 years, 16 months, 16 weeks, 16 days'); + expect(textformatted_16[1], '16 yrs, 16 mths, 16 wks, 16 days'); + expect(textformatted_16[2], '16y, 16m, 16w, 16d'); + expect(textformatted_16[3], '16y 16m 16w 16d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_16[0], '16 hours, 16 minutes, 16 seconds'); + expect(clockformatted_16[1], '16 hrs, 16 mins, 16 secs'); + expect(clockformatted_16[3], '16h 16m 16s'); + expect(clockformatted_16[3], '16h 16m 16s'); + }); + test('testDurFmt_en_AZ', () { + // 1,17 + + var textformatted_1 = [], textformatted_17 = []; + var clockformatted_1 = [], clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-AZ', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_17[0], '17 years, 17 months, 17 weeks, 17 days'); + expect(textformatted_17[1], '17 yrs, 17 mths, 17 wks, 17 days'); + expect(textformatted_17[2], '17y, 17m, 17w, 17d'); + expect(textformatted_17[3], '17y 17m 17w 17d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_17[0], '17 hours, 17 minutes, 17 seconds'); + expect(clockformatted_17[1], '17 hr, 17 min, 17 sec'); + expect(clockformatted_17[2], '17h, 17m, 17s'); + expect(clockformatted_17[3], '17h 17m 17s'); + }); + test('testDurFmt_en_CA', () { + // 1,2 + + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-CA', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mo, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mos, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hrs, 2 mins, 2 secs'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_en_GB', () { + // 1,2 + + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-GB', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hrs, 2 mins, 2 secs'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_GH', () { + // 1,2 + + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-GH', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hrs, 2 mins, 2 secs'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_HK', () { + // 1,2 + + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-HK', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hrs, 2 mins, 2 secs'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_IE', () { + // 1,2 + + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-IE', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hrs, 2 mins, 2 secs'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_IN', () { + // 1,2 + + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-IN', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hrs, 2 mins, 2 secs'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_IS', () { + // 1,2 + + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-IS', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hr, 2 min, 2 sec'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_JP', () { + // 1,2 + + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-JP', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hr, 2 min, 2 sec'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_KE', () { + // 1,2 + + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-KE', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hrs, 2 mins, 2 secs'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_KR', () { + // 1,2 + + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-KR', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hr, 2 min, 2 sec'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_LK', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-LK', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hr, 2 min, 2 sec'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_MM', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-MM', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hr, 2 min, 2 sec'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_MW', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-MW', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hrs, 2 mins, 2 secs'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_MY', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-MY', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hrs, 2 mins, 2 secs'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_NG', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-NG', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hrs, 2 mins, 2 secs'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_NZ', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-NZ', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hrs, 2 mins, 2 secs'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_PH', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-PH', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hr, 2 min, 2 sec'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_PR', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-PR', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hr, 2 min, 2 sec'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_SG', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-SG', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hrs, 2 mins, 2 secs'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_US', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-US', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hr, 2 min, 2 sec'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_UG', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-UG', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hrs, 2 mins, 2 secs'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_ZA', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-ZA', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hrs, 2 mins, 2 secs'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_ZM', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-ZM', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hrs, 2 mins, 2 secs'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + + test('testDurFmt_es_AR', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-AR', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 año, 1 m., 1 sem., 1 d.'); + expect(textformatted_1[2], '1a., 1m., 1sem., 1d.'); + expect(textformatted_1[3], '1a. 1m. 1sem. 1d.'); + + expect(textformatted_2[0], '2 años, 2 meses, 2 semanas y 2 días'); + expect(textformatted_2[1], '2 años, 2 mm., 2 sems., 2 dd.'); + expect(textformatted_2[2], '2a., 2mm., 2sems., 2dd.'); + expect(textformatted_2[3], '2a. 2mm. 2sems. 2dd.'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 seg.'); + expect(clockformatted_1[2], '1h, 1min, 1seg.'); + expect(clockformatted_1[3], '1h 1min 1seg.'); + + expect(clockformatted_2[0], '2 horas, 2 minutos y 2 segundos'); + expect(clockformatted_2[1], '2 h, 2 min, 2 seg.'); + expect(clockformatted_2[2], '2h, 2min, 2seg.'); + expect(clockformatted_2[3], '2h 2min 2seg.'); + }); + test('testDurFmt_es_BO', () { + // 1 16 + + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-BO', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a., 1 m., 1 sem., 1 d.'); + expect(textformatted_1[2], '1a., 1m., 1sem., 1d.'); + expect(textformatted_1[3], '1a. 1m. 1sem. 1d.'); + + expect(textformatted_16[0], '2 años, 2 meses, 2 semanas y 2 días'); + expect(textformatted_16[1], '2 aa., 2 mm., 2 sems., 2 dd.'); + expect(textformatted_16[2], '2aa., 2mm., 2sems., 2dd.'); + expect(textformatted_16[3], '2aa. 2mm. 2sems. 2dd.'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_16[0], '2 horas, 2 minutos y 2 segundos'); + expect(clockformatted_16[1], '2 h, 2 min, 2 s'); + expect(clockformatted_16[2], '2h, 2min, 2s'); + expect(clockformatted_16[3], '2h 2min 2s'); + }); + test('testDurFmt_es_CL', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-CL', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a., 1 m., 1 sem., 1 d.'); + expect(textformatted_1[2], '1a., 1m., 1sem., 1d.'); + expect(textformatted_1[3], '1a. 1m. 1sem. 1d.'); + + expect(textformatted_2[0], '2 años, 2 meses, 2 semanas y 2 días'); + expect(textformatted_2[1], '2 aa., 2 mm., 2 sems., 2 dd.'); + expect(textformatted_2[2], '2aa., 2mm., 2sems., 2dd.'); + expect(textformatted_2[3], '2aa. 2mm. 2sems. 2dd.'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 horas, 2 minutos y 2 segundos'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_es_CO', () { + // 1 16 + + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-CO', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a., 1 mes, 1 sem., 1 día'); + expect(textformatted_1[2], '1 a., 1 mes, 1 sem., 1 día'); + expect(textformatted_1[3], '1 a. 1 mes 1 sem. 1 día'); + + expect(textformatted_16[0], '16 años, 16 meses, 16 semanas y 16 días'); + expect(textformatted_16[1], '16 a., 16 meses, 16 sems., 16 días'); + expect(textformatted_16[2], '16 a., 16 meses, 16 sems., 16 días'); + expect(textformatted_16[3], '16 a. 16 meses 16 sems. 16 días'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1 h, 1 min, 1 s'); + expect(clockformatted_1[3], '1 h 1 min 1 s'); + + expect(clockformatted_16[0], '16 horas, 16 minutos y 16 segundos'); + expect(clockformatted_16[1], '16 h, 16 min, 16 s'); + expect(clockformatted_16[2], '16 h, 16 min, 16 s'); + expect(clockformatted_16[3], '16 h 16 min 16 s'); + }); + test('testDurFmt_es_DO', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-DO', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a., 1 m., 1 sem., 1 d.'); + expect(textformatted_1[2], '1a., 1m., 1sem., 1d.'); + expect(textformatted_1[3], '1a. 1m. 1sem. 1d.'); + + expect(textformatted_2[0], '2 años, 2 meses, 2 semanas y 2 días'); + expect(textformatted_2[1], '2 aa., 2 mm., 2 sems., 2 dd.'); + expect(textformatted_2[2], '2aa., 2m., 2sems., 2d.'); + expect(textformatted_2[3], '2aa. 2m. 2sems. 2d.'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 seg.'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 horas, 2 minutos y 2 segundos'); + expect(clockformatted_2[1], '2 h, 2 min, 2 seg.'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_es_EC', () { + // 1 16 + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-EC', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a., 1 m., 1 sem., 1 d.'); + expect(textformatted_1[2], '1a., 1m., 1sem., 1d.'); + expect(textformatted_1[3], '1a. 1m. 1sem. 1d.'); + + expect(textformatted_16[0], '16 años, 16 meses, 16 semanas y 16 días'); + expect(textformatted_16[1], '16 aa., 16 mm., 16 sems., 16 dd.'); + expect(textformatted_16[2], '16aa., 16mm., 16sems., 16dd.'); + expect(textformatted_16[3], '16aa. 16mm. 16sems. 16dd.'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_16[0], '16 horas, 16 minutos y 16 segundos'); + expect(clockformatted_16[1], '16 h, 16 min, 16 s'); + expect(clockformatted_16[2], '16h, 16min, 16s'); + expect(clockformatted_16[3], '16h 16min 16s'); + }); + test('testDurFmt_es_ES', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-ES', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a, 1 m., 1 sem., 1 d'); + expect(textformatted_1[2], '1a, 1m, 1sem, 1d'); + expect(textformatted_1[3], '1a 1m 1sem 1d'); + + expect(textformatted_2[0], '2 años, 2 meses, 2 semanas y 2 días'); + expect(textformatted_2[1], '2 a, 2 m., 2 sem., 2 d'); + expect(textformatted_2[2], '2a, 2m, 2sem, 2d'); + expect(textformatted_2[3], '2a 2m 2sem 2d'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 horas, 2 minutos y 2 segundos'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_es_GT', () { + // 1 16 + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-GT', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a., 1 m., 1 sem., 1 d.'); + expect(textformatted_1[2], '1a., 1m., 1sem., 1d.'); + expect(textformatted_1[3], '1a. 1m. 1sem. 1d.'); + + expect(textformatted_16[0], '16 años, 16 meses, 16 semanas y 16 días'); + expect(textformatted_16[1], '16 aa., 16 mm., 16 sems., 16 dd.'); + expect(textformatted_16[2], '16aa., 16mm., 16sems., 16dd.'); + expect(textformatted_16[3], '16aa. 16mm. 16sems. 16dd.'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_16[0], '16 horas, 16 minutos y 16 segundos'); + expect(clockformatted_16[1], '16 h, 16 min, 16 s'); + expect(clockformatted_16[2], '16h, 16min, 16s'); + expect(clockformatted_16[3], '16h 16min 16s'); + }); + test('testDurFmt_es_HN', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-HN', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a., 1 m., 1 sem., 1 d.'); + expect(textformatted_1[2], '1a., 1m., 1sem., 1d.'); + expect(textformatted_1[3], '1a. 1m. 1sem. 1d.'); + + expect(textformatted_17[0], '17 años, 17 meses, 17 semanas y 17 días'); + expect(textformatted_17[1], '17 aa., 17 mm., 17 sems., 17 dd.'); + expect(textformatted_17[2], '17aa., 17mm., 17sems., 17dd.'); + expect(textformatted_17[3], '17aa. 17mm. 17sems. 17dd.'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_17[0], '17 horas, 17 minutos y 17 segundos'); + expect(clockformatted_17[1], '17 h, 17 min, 17 s'); + expect(clockformatted_17[2], '17h, 17min, 17s'); + expect(clockformatted_17[3], '17h 17min 17s'); + }); + test('testDurFmt_es_MX', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-MX', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a, 1 m., 1 sem., 1 día'); + expect(textformatted_1[2], '1a, 1m, 1sem, 1d'); + expect(textformatted_1[3], '1a 1m 1sem 1d'); + + expect(textformatted_2[0], '2 años, 2 meses, 2 semanas y 2 días'); + expect(textformatted_2[1], '2 a, 2 m, 2 sem, 2 días'); + expect(textformatted_2[2], '2a, 2m, 2sem, 2d'); + expect(textformatted_2[3], '2a 2m 2sem 2d'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 horas, 2 minutos y 2 segundos'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_es_NI', () { + // 1 16 + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-NI', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a., 1 m., 1 sem., 1 d.'); + expect(textformatted_1[2], '1a., 1m., 1sem., 1d.'); + expect(textformatted_1[3], '1a. 1m. 1sem. 1d.'); + + expect(textformatted_16[0], '16 años, 16 meses, 16 semanas y 16 días'); + expect(textformatted_16[1], '16 aa., 16 mm., 16 sems., 16 dd.'); + expect(textformatted_16[2], '16aa., 16mm., 16sems., 16dd.'); + expect(textformatted_16[3], '16aa. 16mm. 16sems. 16dd.'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_16[0], '16 horas, 16 minutos y 16 segundos'); + expect(clockformatted_16[1], '16 h, 16 min, 16 s'); + expect(clockformatted_16[2], '16h, 16min, 16s'); + expect(clockformatted_16[3], '16h 16min 16s'); + }); + test('testDurFmt_es_PA', () { + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + // 1 17 + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-PA', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a., 1 m., 1 sem., 1 d.'); + expect(textformatted_1[2], '1a., 1m., 1sem., 1d.'); + expect(textformatted_1[3], '1a. 1m. 1sem. 1d.'); + + expect(textformatted_17[0], '17 años, 17 meses, 17 semanas y 17 días'); + expect(textformatted_17[1], '17 aa., 17 mm., 17 sems., 17 dd.'); + expect(textformatted_17[2], '17aa., 17mm., 17sems., 17dd.'); + expect(textformatted_17[3], '17aa. 17mm. 17sems. 17dd.'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_17[0], '17 horas, 17 minutos y 17 segundos'); + expect(clockformatted_17[1], '17 h, 17 min, 17 s'); + expect(clockformatted_17[2], '17h, 17min, 17s'); + expect(clockformatted_17[3], '17h 17min 17s'); + }); + test('testDurFmt_es_PE', () { + // 1 16 + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-PE', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a., 1 m., 1 sem., 1 d.'); + expect(textformatted_1[2], '1a., 1m., 1sem., 1d.'); + expect(textformatted_1[3], '1a. 1m. 1sem. 1d.'); + + expect(textformatted_16[0], '16 años, 16 meses, 16 semanas y 16 días'); + expect(textformatted_16[1], '16 aa., 16 mm., 16 sems., 16 dd.'); + expect(textformatted_16[2], '16aa., 16mm., 16sems., 16dd.'); + expect(textformatted_16[3], '16aa. 16mm. 16sems. 16dd.'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_16[0], '16 horas, 16 minutos y 16 segundos'); + expect(clockformatted_16[1], '16 h, 16 min, 16 s'); + expect(clockformatted_16[2], '16h, 16min, 16s'); + expect(clockformatted_16[3], '16h 16min 16s'); + }); + test('testDurFmt_es_PR', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-PR', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a., 1 m., 1 sem., 1 d.'); + expect(textformatted_1[2], '1a., 1m., 1sem., 1d.'); + expect(textformatted_1[3], '1a. 1m. 1sem. 1d.'); + + expect(textformatted_2[0], '2 años, 2 meses, 2 semanas y 2 días'); + expect(textformatted_2[1], '2 aa., 2 mm., 2 sems., 2 dd.'); + expect(textformatted_2[2], '2aa., 2mm., 2sems., 2dd.'); + expect(textformatted_2[3], '2aa. 2mm. 2sems. 2dd.'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 horas, 2 minutos y 2 segundos'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_es_PY', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-PY', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 año, 1 mes, 1 sem., 1 día'); + expect(textformatted_1[2], '1a., 1m., 1sem., 1d.'); + expect(textformatted_1[3], '1a. 1m. 1sem. 1d.'); + + expect(textformatted_2[0], '2 años, 2 meses, 2 semanas y 2 días'); + expect(textformatted_2[1], '2 años, 2 meses, 2 sems., 2 días'); + expect(textformatted_2[2], '2aa., 2mm., 2sems., 2dd.'); + expect(textformatted_2[3], '2aa. 2mm. 2sems. 2dd.'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 seg.'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 horas, 2 minutos y 2 segundos'); + expect(clockformatted_2[1], '2 h, 2 min, 2 seg.'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_es_SV', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-SV', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a., 1 m., 1 sem., 1 d.'); + expect(textformatted_1[2], '1a., 1m., 1sem., 1d.'); + expect(textformatted_1[3], '1a. 1m. 1sem. 1d.'); + + expect(textformatted_17[0], '17 años, 17 meses, 17 semanas y 17 días'); + expect(textformatted_17[1], '17 aa., 17 mm., 17 sems., 17 dd.'); + expect(textformatted_17[2], '17aa., 17mm., 17sems., 17dd.'); + expect(textformatted_17[3], '17aa. 17mm. 17sems. 17dd.'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_17[0], '17 horas, 17 minutos y 17 segundos'); + expect(clockformatted_17[1], '17 h, 17 min, 17 s'); + expect(clockformatted_17[2], '17h, 17min, 17s'); + expect(clockformatted_17[3], '17h 17min 17s'); + }); + test('testDurFmt_es_US', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-US', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a, 1 m, 1 sem., 1 día'); + expect(textformatted_1[2], '1a, 1m, 1sem., 1d'); + expect(textformatted_1[3], '1a 1m 1sem. 1d'); + + expect(textformatted_17[0], '17 años, 17 meses, 17 semanas y 17 días'); + expect(textformatted_17[1], '17 aa., 17 mm., 17 sems., 17 días'); + expect(textformatted_17[2], '17a, 17m, 17sems., 17d'); + expect(textformatted_17[3], '17a 17m 17sems. 17d'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_17[0], '17 horas, 17 minutos y 17 segundos'); + expect(clockformatted_17[1], '17 h, 17 min, 17 s'); + expect(clockformatted_17[2], '17h, 17min, 17s'); + expect(clockformatted_17[3], '17h 17min 17s'); + }); + test('testDurFmt_es_UY', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-UY', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a., 1 m., 1 sem., 1 d.'); + expect(textformatted_1[2], '1a., 1m., 1sem., 1d.'); + expect(textformatted_1[3], '1a. 1m. 1sem. 1d.'); + + expect(textformatted_2[0], '2 años, 2 meses, 2 semanas y 2 días'); + expect(textformatted_2[1], '2 aa., 2 mm., 2 sems., 2 dd.'); + expect(textformatted_2[2], '2aa., 2mm., 2sems., 2dd.'); + expect(textformatted_2[3], '2aa. 2mm. 2sems. 2dd.'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 horas, 2 minutos y 2 segundos'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_es_VE', () { + // 1 16 + + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-VE', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a., 1 m., 1 sem., 1 d.'); + expect(textformatted_1[2], '1a., 1m., 1sem., 1d.'); + expect(textformatted_1[3], '1a. 1m. 1sem. 1d.'); + + expect(textformatted_16[0], '16 años, 16 meses, 16 semanas y 16 días'); + expect(textformatted_16[1], '16 aa., 16 mm., 16 sems., 16 dd.'); + expect(textformatted_16[2], '16aa., 16mm., 16sems., 16dd.'); + expect(textformatted_16[3], '16aa. 16mm. 16sems. 16dd.'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_16[0], '16 horas, 16 minutos y 16 segundos'); + expect(clockformatted_16[1], '16 h, 16 min, 16 s'); + expect(clockformatted_16[2], '16h, 16min, 16s'); + expect(clockformatted_16[3], '16h 16min 16s'); + }); + + test('testDurFmt_et_EE', () { + // 1 2 + + var textformatted_1 = [], textformatted_2 = []; + var clockformatted_1 = [], clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'et-EE', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 aasta, 1 kuu, 1 nädal, 1 ööpäev'); + expect(textformatted_1[1], '1 a, 1 kuu, 1 näd, 1 päev'); + expect(textformatted_1[2], '1 a, 1 k, 1 n, 1 p'); + expect(textformatted_1[3], '1 a 1 k 1 n 1 p'); + + expect(textformatted_2[0], '2 aastat, 2 kuud, 2 nädalat, 2 ööpäeva'); + expect(textformatted_2[1], '2 a, 2 kuud, 2 näd, 2 päeva'); + expect(textformatted_2[2], '2 a, 2 k, 2 n, 2 p'); + expect(textformatted_2[3], '2 a 2 k 2 n 2 p'); + + expect(clockformatted_1[0], '1 tund, 1 minut, 1 sekund'); + expect(clockformatted_1[1], '1 t, 1 min, 1 sek'); + expect(clockformatted_1[2], '1 t, 1 min, 1 s'); + expect(clockformatted_1[3], '1 t 1 min 1 s'); + + expect(clockformatted_2[0], '2 tundi, 2 minutit, 2 sekundit'); + expect(clockformatted_2[1], '2 t, 2 min, 2 sek'); + expect(clockformatted_2[2], '2 t, 2 min, 2 s'); + expect(clockformatted_2[3], '2 t 2 min 2 s'); + }); + test('testDurFmt_fa_AF', () { + // 1 2 + + var textformatted_1 = [], textformatted_2 = []; + var clockformatted_1 = [], clockformatted_2 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fa-AF', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '‏1 سال،‏ 1 ماه،‏ 1 هفته، و 1 روز'); + expect(textformatted_1[1], '‏1 سال،‏ 1 ماه،‏ 1 هفته،‏ 1 روز'); + expect(textformatted_1[2], '‏1 سال 1 ماه 1 هفته 1 روز'); + expect(textformatted_1[3], '‏1 سال 1 ماه 1 هفته 1 روز'); + + expect(textformatted_2[0], '‏2 سال،‏ 2 ماه،‏ 2 هفته، و 2 روز'); + expect(textformatted_2[1], '‏2 سال،‏ 2 ماه،‏ 2 هفته،‏ 2 روز'); + expect(textformatted_2[2], '‏2 سال 2 ماه 2 هفته 2 روز'); + expect(textformatted_2[3], '‏2 سال 2 ماه 2 هفته 2 روز'); + + expect(clockformatted_1[0], '‏1 ساعت،‏ 1 دقیقه، و 1 ثانیه'); + expect(clockformatted_1[1], '‏1 ساعت،‏ 1 دقیقه،‏ 1 ثانیه'); + expect(clockformatted_1[2], '‏1 ساعت 1 دقیقه 1 ث'); + expect(clockformatted_1[3], '‏1 ساعت 1 دقیقه 1 ث'); + + expect(clockformatted_2[0], '‏2 ساعت،‏ 2 دقیقه، و 2 ثانیه'); + expect(clockformatted_2[1], '‏2 ساعت،‏ 2 دقیقه،‏ 2 ثانیه'); + expect(clockformatted_2[2], '‏2 ساعت 2 دقیقه 2 ث'); + expect(clockformatted_2[3], '‏2 ساعت 2 دقیقه 2 ث'); + }); + test('testDurFmt_fa_IR', () { + // 1 18 + + final List textformatted_1 = []; + final List textformatted_18 = []; + final List clockformatted_1 = []; + final List clockformatted_18 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fa-IR', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_18.add(fmt + .format(ILibDateOptions(year: 18, month: 18, week: 18, day: 18))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_18 + .add(fmt.format(ILibDateOptions(hour: 18, minute: 18, second: 18))); + } + + expect(textformatted_1[0], '‏1 سال،‏ 1 ماه،‏ 1 هفته، و 1 روز'); + expect(textformatted_1[1], '‏1 سال،‏ 1 ماه،‏ 1 هفته،‏ 1 روز'); + expect(textformatted_1[2], '‏1 سال 1 ماه 1 هفته 1 روز'); + expect(textformatted_1[3], '‏1 سال 1 ماه 1 هفته 1 روز'); + + expect(textformatted_18[0], '‏18 سال،‏ 18 ماه،‏ 18 هفته، و 18 روز'); + expect(textformatted_18[1], '‏18 سال،‏ 18 ماه،‏ 18 هفته،‏ 18 روز'); + expect(textformatted_18[2], '‏18 سال 18 ماه 18 هفته 18 روز'); + expect(textformatted_18[3], '‏18 سال 18 ماه 18 هفته 18 روز'); + + expect(clockformatted_1[0], '‏1 ساعت،‏ 1 دقیقه، و 1 ثانیه'); + expect(clockformatted_1[1], '‏1 ساعت،‏ 1 دقیقه،‏ 1 ثانیه'); + expect(clockformatted_1[2], '‏1 ساعت 1 دقیقه 1 ث'); + expect(clockformatted_1[3], '‏1 ساعت 1 دقیقه 1 ث'); + + expect(clockformatted_18[0], '‏18 ساعت،‏ 18 دقیقه، و 18 ثانیه'); + expect(clockformatted_18[1], '‏18 ساعت،‏ 18 دقیقه،‏ 18 ثانیه'); + expect(clockformatted_18[2], '‏18 ساعت 18 دقیقه 18 ث'); + expect(clockformatted_18[3], '‏18 ساعت 18 دقیقه 18 ث'); + }); + test('testDurFmt_fi_FI', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fi-FI', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 vuosi, 1 kuukausi, 1 viikko ja 1 päivä'); + expect(textformatted_1[1], '1 v, 1 kk, 1 vk, 1 pv'); + expect(textformatted_1[2], '1v, 1kk, 1vk, 1pv'); + expect(textformatted_1[3], '1v 1kk 1vk 1pv'); + + expect(textformatted_17[0], + '17 vuotta, 17 kuukautta, 17 viikkoa ja 17 päivää'); + expect(textformatted_17[1], '17 v, 17 kk, 17 vk, 17 pv'); + expect(textformatted_17[2], '17v, 17kk, 17vk, 17pv'); + expect(textformatted_17[3], '17v 17kk 17vk 17pv'); + + expect(clockformatted_1[0], '1 tunti, 1 minuutti ja 1 sekunti'); + expect(clockformatted_1[1], '1 t, 1 min, 1 s'); + expect(clockformatted_1[2], '1t, 1min, 1s'); + expect(clockformatted_1[3], '1t 1min 1s'); + + expect(clockformatted_17[0], '17 tuntia, 17 minuuttia ja 17 sekuntia'); + expect(clockformatted_17[1], '17 t, 17 min, 17 s'); + expect(clockformatted_17[2], '17t, 17min, 17s'); + expect(clockformatted_17[3], '17t 17min 17s'); + }); + test('testDurFmt_fr_BE', () { + // 1 16 + + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-BE', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_16[0], '16 ans, 16 mois, 16 semaines et 16 jours'); + expect(textformatted_16[1], '16 ans, 16 m., 16 sem., 16 j'); + expect(textformatted_16[2], '16a, 16m., 16sem., 16j'); + expect(textformatted_16[3], '16a 16m. 16sem. 16j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_16[0], '16 heures, 16 minutes et 16 secondes'); + expect(clockformatted_16[1], '16 h, 16 min, 16 s'); + expect(clockformatted_16[2], '16h, 16min, 16s'); + expect(clockformatted_16[3], '16h 16min 16s'); + }); + test('testDurFmt_fr_CA', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-CA', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m, 1sem, 1j'); + expect(textformatted_1[3], '1a 1m 1sem 1j'); + + expect(textformatted_17[0], '17 ans, 17 mois, 17 semaines et 17 jours'); + expect(textformatted_17[1], '17 ans, 17 m., 17 sem., 17 j'); + expect(textformatted_17[2], '17a, 17m, 17sem, 17j'); + expect(textformatted_17[3], '17a 17m 17sem 17j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_17[0], '17 heures, 17 minutes et 17 secondes'); + expect(clockformatted_17[1], '17 h, 17 min, 17 s'); + expect(clockformatted_17[2], '17h, 17m, 17s'); + expect(clockformatted_17[3], '17h 17m 17s'); + }); + test('testDurFmt_fr_CH', () { + // 1 17 + + var textformatted_1 = [], textformatted_17 = []; + var clockformatted_1 = [], clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-CH', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_17[0], '17 ans, 17 mois, 17 semaines et 17 jours'); + expect(textformatted_17[1], '17 ans, 17 m., 17 sem., 17 j'); + expect(textformatted_17[2], '17a, 17m., 17sem., 17j'); + expect(textformatted_17[3], '17a 17m. 17sem. 17j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_17[0], '17 heures, 17 minutes et 17 secondes'); + expect(clockformatted_17[1], '17 h, 17 min, 17 s'); + expect(clockformatted_17[2], '17h, 17min, 17s'); + expect(clockformatted_17[3], '17h 17min 17s'); + }); + test('testDurFmt_fr_FR', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-FR', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_17[0], '17 ans, 17 mois, 17 semaines et 17 jours'); + expect(textformatted_17[1], '17 ans, 17 m., 17 sem., 17 j'); + expect(textformatted_17[2], '17a, 17m., 17sem., 17j'); + expect(textformatted_17[3], '17a 17m. 17sem. 17j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_17[0], '17 heures, 17 minutes et 17 secondes'); + expect(clockformatted_17[1], '17 h, 17 min, 17 s'); + expect(clockformatted_17[2], '17h, 17min, 17s'); + expect(clockformatted_17[3], '17h 17min 17s'); + }); + test('testDurFmt_fr_LU', () { + // 1 16 + + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-LU', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_16[0], '16 ans, 16 mois, 16 semaines et 16 jours'); + expect(textformatted_16[1], '16 ans, 16 m., 16 sem., 16 j'); + expect(textformatted_16[2], '16a, 16m., 16sem., 16j'); + expect(textformatted_16[3], '16a 16m. 16sem. 16j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_16[0], '16 heures, 16 minutes et 16 secondes'); + expect(clockformatted_16[1], '16 h, 16 min, 16 s'); + expect(clockformatted_16[2], '16h, 16min, 16s'); + expect(clockformatted_16[3], '16h 16min 16s'); + }); + }); +} diff --git a/test/durfmt/durfmt_test.dart b/test/durfmt/durfmt_test.dart index 5ce31ce..00c9e14 100644 --- a/test/durfmt/durfmt_test.dart +++ b/test/durfmt/durfmt_test.dart @@ -7,7 +7,7 @@ import '../test_env.dart'; void main() { late String testPlatform; TestWidgetsFlutterBinding.ensureInitialized(); - debugPrint('Testing [datefmt_Clock_test.dart] file.'); + debugPrint('Testing [durfmt_test.dart] file.'); setUpAll(() async { testPlatform = getTestPlatform(); final ILibJS ilibjsinstance = ILibJS.instance; @@ -16,7 +16,7 @@ void main() { await ilibjsinstance.loadILibLocaleDataAll(); }); - group('getClock()', () { + group('test_ILibDurationFmt', () { test('testDurFmtConstructorEmpty', () { final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions(); final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); @@ -1539,13 +1539,13 @@ void main() { if (platform === 'nodejs') { var cldrVersion = Number(process.versions['cldr']); if (Number(cldrVersion) < 36) { // Intl.PluralRules doesn't support this locale until this version. - test.equal(duration.toString(), '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'); + expect(fmt.format(dateOptions),, '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'); } else if(Number(cldrVersion) <= 41) { - test.equal(duration.toString(), '‏20 שנים, 20 חודשים, 20 שבועות, 20 יום, 20 שעות, 20 דקות ו-20 שניות'); + expect(fmt.format(dateOptions),, '‏20 שנים, 20 חודשים, 20 שבועות, 20 יום, 20 שעות, 20 דקות ו-20 שניות'); } else if (Number(cldrVersion) < 43) { // The `many` category has been removed since CLDR 42. - test.equal(duration.toString(), '‏20 שנים, 20 חודשים, 20 שבועות, 20 יום, 20 שעות, 20 דקות ו-‏20 שניות'); + expect(fmt.format(dateOptions),, '‏20 שנים, 20 חודשים, 20 שבועות, 20 יום, 20 שעות, 20 דקות ו-‏20 שניות'); } else { - test.equal(duration.toString(), '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'); + expect(fmt.format(dateOptions),, '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'); } } else if (platform === 'browser') { var browser = ilib._getBrowser(); @@ -1553,9 +1553,9 @@ void main() { if (browser === 'chrome' && getChromeVersion() >= 110) { expected = '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'; } - test.equal(duration.toString(), expected); + expect(fmt.format(dateOptions),, expected); } else { - test.equal(duration.toString(), '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'); + expect(fmt.format(dateOptions),, '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'); } test.done(); },*/ @@ -2174,5 +2174,2317 @@ void main() { expect(fmt.format(dateOptions), '১ বছর, ১ মাস, ১ সপ্তাহ, ১ দিন, ১ ঘন্টা, ১ মিনিট, ১ সেকেন্ড'); }); + test('testDurFmtASFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'as-IN', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '১ বছৰ ১ মাহ ১ সপ্তাহ ১ দিন ১ ঘণ্টা ১ মিনিট ১ ছেকেণ্ড'); + }); + test('testDurFmtASFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'as-IN', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '১ বছৰ ১ মাহ ১ সপ্তাহ ১ দিন ১ ঘণ্টা ১ মিনিট ১ ছেকেণ্ড'); + }); + test('testDurFmtASFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'as-IN', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '১ বছৰ ১ মাহ ১ সপ্তাহ ১ দিন ১.০১.০১'); + }); + test('testDurFmtASFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'as-IN', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '১ বছৰ ১ মাহ ১ সপ্তাহ ১ দিন ১ ঘণ্টা ১ মিনিট ১ ছেকেণ্ড'); + }); + test('testDurFmtASFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'as-IN', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '১ বছৰ, ১ মাহ, ১ সপ্তাহ, ১ দিন, ১ ঘণ্টা, ১ মিনিট, ১ ছেকেণ্ড'); + }); + test('testDurFmtASFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'as-IN', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '১ বছৰ, ১ মাহ, ১ সপ্তাহ, ১ দিন, ১ ঘণ্টা, ১ মিনিট, ১ ছেকেণ্ড'); + }); + //test cases for Punjabi(pa-Guru-IN) + test('testDurFmtPAFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pa-Guru-IN', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ਸਾਲ 1 ਮਹੀਨਾ 1 ਹਫ਼ਤਾ 1 ਦਿਨ 1 ਘੰਟਾ 1 ਮਿੰਟ 1 ਸਕਿੰਟ'); + }); + test('testDurFmtPAFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'pa-Guru-IN', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ਸਾਲ 1 ਮਹੀਨਾ 1 ਹਫ਼ਤਾ 1 ਦਿਨ 1 ਘੰਟਾ 1 ਮਿੰਟ 1 ਸਕਿੰਟ'); + }); + test('testDurFmtPAFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'pa-Guru-IN', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 ਸਾਲ 1 ਮਹੀਨਾ 1 ਹਫ਼ਤਾ 1 ਦਿਨ 1:01:01'); + }); + test('testDurFmtPAFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pa-Guru-IN', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ਸਾਲ 1 ਮਹੀਨਾ 1 ਹਫ਼ਤਾ 1 ਦਿਨ 1 ਘੰਟਾ 1 ਮਿੰਟ 1 ਸਕਿੰਟ'); + }); + test('testDurFmtPAFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pa-Guru-IN', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ਸਾਲ, 1 ਮਹੀਨਾ, 1 ਹਫ਼ਤਾ, 1 ਦਿਨ, 1 ਘੰਟਾ, 1 ਮਿੰਟ, 1 ਸਕਿੰਟ'); + }); + test('testDurFmtPAFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pa-Guru-IN', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ਸਾਲ, 1 ਮਹੀਨਾ, 1 ਹਫ਼ਤਾ, 1 ਦਿਨ, 1 ਘੰਟਾ, 1 ਮਿੰਟ, 1 ਸਕਿੰਟ'); + }); + //test cases for Urdu(ur-IN) + test('testDurFmtURFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ur-IN', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '‏۱ سال، ۱ مہینہ، ۱ ہفتہ، ۱ دن، ۱ گھنٹہ، ۱ منٹ، ۱ سیکنڈ'); + }); + test('testDurFmtURFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ur-IN', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '‏۱ سال، ۱ مہینہ، ۱ ہفتہ، ۱ دن، ۱ گھنٹہ، ۱ منٹ، ۱ سیکنڈ'); + }); + test('testDurFmtURFormatShortTextWestern', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ur-IN', length: 'short', style: 'text', useNative: false); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '‏1 سال، 1 مہینہ، 1 ہفتہ، 1 دن، 1 گھنٹہ، 1 منٹ، 1 سیکنڈ'); + }); + test('testDurFmtURFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ur-IN', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '‏۱ سال، ۱ مہینہ، ۱ ہفتہ، ۱ دن، ‏۱:۰۱:۰۱'); + }); + test('testDurFmtURFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ur-IN', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '‏۱ سال، ۱ مہینہ، ۱ ہفتہ، ۱ دن، ۱ گھنٹہ، ۱ منٹ، ۱ سیکنڈ'); + }); + test('testDurFmtURFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ur-IN', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '‏۱ سال، ۱ مہینہ، ۱ ہفتہ، ۱ دن، ۱ گھنٹہ، ۱ منٹ، ۱ سیکنڈ'); + }); + test('testDurFmtURFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ur-IN', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '‏۱ سال, ۱ مہینہ, ۱ ہفتہ, ۱ دن, ۱ گھنٹہ, ۱ منٹ، اور ۱ سیکنڈ'); + }); + //test cases for croation + test('testDurFmtHRFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'hr-HR', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 g. 1 mj. 1 tj. 1 d. 1 h 1 m 1 s'); + }); + test('testDurFmtHRFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'hr-HR', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 g. 1 mj. 1 tj. 1 d. 1 h 1 m 1 s'); + }); + test('testDurFmtHRFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'hr-HR', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 g. 1 mj. 1 tj. 1 d. 01:01:01'); + }); + test('testDurFmtHRFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'hr-HR', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 g., 1 mj., 1 tj., 1 d., 1 h, 1 m, 1 s'); + }); + test('testDurFmtHRFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'hr-HR', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 g., 1 mj., 1 tj., 1 dan, 1 h, 1 min, 1 s'); + }); + test('testDurFmtHRFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'hr-HR', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 godina, 1 mjesec, 1 tjedan, 1 dan, 1 sat, 1 minuta i 1 sekunda'); + }); + //test cases for hungarian + test('testDurFmtHUFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'hu-HU', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 év, 1 h., 1 hét, 1 nap, 1 ó, 1 p, 1 mp'); + }); + test('testDurFmtHUFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'hu-HU', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 év, 1 h., 1 hét, 1 nap, 1 ó, 1 p, 1 mp'); + }); + test('testDurFmtHUFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'hu-HU', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 év, 1 h., 1 hét, 1 nap, 1:01:01'); + }); + test('testDurFmtHUFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'hu-HU', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 év, 1 h., 1 hét, 1 nap, 1 ó, 1 p, 1 mp'); + }); + test('testDurFmtHUFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'hu-HU', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 év, 1 hónap, 1 hét, 1 nap, 1 ó, 1 p, 1 mp'); + }); + test('testDurFmtHUFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'hu-HU', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 év, 1 hónap, 1 hét, 1 nap, 1 óra, 1 perc és 1 másodperc'); + }); + //test cases for indonesia + test('testDurFmtIDFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'id-ID', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 thn, 1 bln, 1 mgg, 1 hr, 1 j, 1 mnt, 1 dtk'); + }); + test('testDurFmtIDFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'id-ID', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 thn, 1 bln, 1 mgg, 1 hr, 1 j, 1 mnt, 1 dtk'); + }); + test('testDurFmtIDFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'id-ID', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 thn, 1 bln, 1 mgg, 1 hr, 01.01.01'); + }); + test('testDurFmtIDFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'id-ID', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 thn, 1 bln, 1 mgg, 1 hr, 1 j, 1 mnt, 1 dtk'); + }); + test('testDurFmtIDFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'id-ID', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 thn, 1 bln, 1 mgg, 1 hr, 1 j, 1 mnt, 1 dtk'); + }); + test('testDurFmtIDFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'id-ID', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 tahun, 1 bulan, 1 minggu, 1 hari, 1 jam, 1 menit, 1 detik'); + }); + //test cases for Italy + test('testDurFmtITFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'it-IT', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1anno 1 mese 1sett. 1g 1h 1min 1s'); + }); + test('testDurFmtITFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'it-IT', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1anno 1 mese 1sett. 1g 1h 1min 1s'); + }); + test('testDurFmtITFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'it-IT', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1anno 1 mese 1sett. 1g 01:01:01'); + }); + test('testDurFmtITFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'it-IT', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1anno, 1 mese, 1sett., 1g, 1h, 1min, 1s'); + }); + test('testDurFmtITFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'it-IT', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 anno, 1 mese, 1 sett., 1 giorno, 1 h, 1 min, 1 s'); + }); + test('testDurFmtITFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'it-IT', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 anno, 1 mese, 1 settimana, 1 giorno, 1 ora, 1 minuto e 1 secondo'); + }); + //test cases for japanese + test('testDurFmtJAFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ja-JP', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1y1m1w1d1h1m1s1ms'); + }); + test('testDurFmtJAFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ja-JP', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1y1m1w1d1h1m1s1ms'); + }); + test('testDurFmtJAFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ja-JP', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1y1m1w1d1:01:01'); + }); + test('testDurFmtJAFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ja-JP', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1y1m1w1d1h1m1s1ms'); + }); + test('testDurFmtJAFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ja-JP', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1 年 1 か月 1 週間 1 日 1 時間 1 分 1 秒 1 ms'); + }); + test('testDurFmtJAFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ja-JP', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1 年 1 か月 1 週間 1 日 1 時間 1 分 1 秒 1 ミリ秒'); + }); + //test cases for kk-Cyrl-KZ + test('testDurFmtKKFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'kk-Cyrl-KZ', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 ж. 1 ай 1 ап. 1 к. 1 сағ 1 мин 1 с'); + }); + test('testDurFmtKKFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'kk-Cyrl-KZ', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 ж. 1 ай 1 ап. 1 к. 1 сағ 1 мин 1 с'); + }); + test('testDurFmtKKFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'kk-Cyrl-KZ', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 ж. 1 ай 1 ап. 1 к. 01:01:01'); + }); + test('testDurFmtKKFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'kk-Cyrl-KZ', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 ж. 1 ай 1 ап. 1 күн 1 сағ 1 мин 1 с'); + }); + test('testDurFmtKKFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'kk-Cyrl-KZ', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 жыл 1 ай 1 апта 1 күн 1 сағат 1 минут 1 секунд'); + }); + //test cases for ko-KR + test('testDurFmtKOFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ko-KR', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1년 1개월 1주 1일 1시간 1분 1초 1밀리초'); + }); + test('testDurFmtKOFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ko-KR', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1년 1개월 1주 1일 1시간 1분 1초 1밀리초'); + }); + test('testDurFmtKOFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ko-KR', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1년 1개월 1주 1일 1:01:01'); + }); + test('testDurFmtKOFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ko-KR', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1년 1개월 1주 1일 1시간 1분 1초 1밀리초'); + }); + test('testDurFmtKOFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ko-KR', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1년 1개월 1주 1일 1시간 1분 1초 1밀리초'); + }); + test('testDurFmtKOFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ko-KR', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, + month: 1, + week: 1, + day: 1, + hour: 1, + minute: 1, + second: 1, + millisecond: 1); + expect(fmt.format(dateOptions), '1년 1개월 1주 1일 1시간 1분 1초 1밀리초'); + }); + test('testDurFmtKUFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ku-Arab-IQ', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '‏١س ١م ١ﻪـ ١ر ١ک ١خ ١چ'); + }); + test('testDurFmtKUFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ku-Arab-IQ', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '‏١س ١م ١ﻪـ ١ر ١ک ١خ ١چ'); + }); + test('testDurFmtKUFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ku-Arab-IQ', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '‏١س ١م ١ﻪـ ١ر ‏١:٠١:٠١'); + }); + test('testDurFmtKUFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ku-Arab-IQ', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '‏١س ١م ١ﻪـ ١ر ١ک ١خ ١چ'); + }); + test('testDurFmtKUFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ku-Arab-IQ', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '‏١ ساڵ ١ مانگ ١ هەفتە ١ رۆژ ١ کاتژ ١ خول ١ چرک'); + }); + test('testDurFmtKUFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ku-Arab-IQ', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '‏١ ساڵ, ١ مانگ, ١ هەفتە, ١ رۆژ, ١ کاتژمێر, ١ خولەک, ١ چرکە'); + }); + //test cases for lt-LT + test('testDurFmtLTFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'lt-LT', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 m. 1 mėn. 1 sav. 1 d. 1 h 1 min. 1 s'); + }); + test('testDurFmtLTFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'lt-LT', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 m. 1 mėn. 1 sav. 1 d. 1 h 1 min. 1 s'); + }); + test('testDurFmtLTFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'lt-LT', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 m. 1 mėn. 1 sav. 1 d. 01:01:01'); + }); + test('testDurFmtLTFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'lt-LT', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 m. 1 mėn. 1 sav. 1 d. 1 h 1 min. 1 s'); + }); + test('testDurFmtLTFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'lt-LT', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 m. 1 mėn. 1 sav. 1 d. 1 val. 1 min. 1 sek.'); + }); + test('testDurFmtLTFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'lt-LT', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 metai 1 mėnuo 1 savaitė 1 diena 1 valanda 1 minutė ir 1 sekundė'); + }); + //test cases for lv-LV + test('testDurFmtLVFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'lv-LV', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 g. 1 m. 1 n. 1 d. 1 h 1 min 1 s'); + }); + test('testDurFmtLVFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'lv-LV', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 g. 1 m. 1 n. 1 d. 1 h 1 min 1 s'); + }); + test('testDurFmtLVFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'lv-LV', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 g. 1 m. 1 n. 1 d. 01:01:01'); + }); + test('testDurFmtLVFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'lv-LV', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 g., 1 m., 1 n., 1 d., 1 h, 1 min, 1 s'); + }); + test('testDurFmtLVFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'lv-LV', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 g., 1 mēn., 1 ned., 1 d., 1 st., 1 min, 1 sek.'); + }); + test('testDurFmtLVFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'lv-LV', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 gads, 1 mēnesis, 1 nedēļa, 1 diena, 1 stunda, 1 minūte un 1 sekunde'); + }); + //test cases for mk-MK + test('testDurFmtMKFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'mk-MK', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 г., 1 м., 1 с., 1 д., 1 ч., 1 м., 1 с.'); + }); + test('testDurFmtMKFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'mk-MK', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 г., 1 м., 1 с., 1 д., 1 ч., 1 м., 1 с.'); + }); + test('testDurFmtMKFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'mk-MK', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 г., 1 м., 1 с., 1 д., 01:01:01'); + }); + test('testDurFmtMKFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'mk-MK', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 г., 1 м., 1 с., 1 д., 1 ч., 1 м., 1 с.'); + }); + test('testDurFmtMKFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'mk-MK', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 год., 1 мес., 1 сед., 1 ден, 1 ч., 1 мин., 1 сек.'); + }); + test('testDurFmtMKFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'mk-MK', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 година, 1 месец, 1 седмица, 1 ден, 1 час, 1 минута и 1 секунда'); + }); + //test cases for mn-Cyrl-MN + test('testDurFmtMNFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'mn-Cyrl-MN', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1ж 1с 1 д.х 1 хоног 1 ц 1 мин 1 сек'); + }); + test('testDurFmtMNFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'mn-Cyrl-MN', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1ж 1с 1 д.х 1 хоног 1 ц 1 мин 1 сек'); + }); + test('testDurFmtMNFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'mn-Cyrl-MN', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1ж 1с 1 д.х 1 хоног 01:01:01'); + }); + test('testDurFmtMNFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'mn-Cyrl-MN', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1ж 1с 1 д.х 1 хоног 1 ц 1 мин 1 сек'); + }); + test('testDurFmtMNFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'mn-Cyrl-MN', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 жил 1 сар 1 д.х 1 хоног 1 цаг 1 мин 1 сек'); + }); + test('testDurFmtMNFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'mn-Cyrl-MN', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 жил 1 сар 1 долоо хоног 1 хоног 1 цаг 1 минут 1 секунд'); + }); + //test cases for ms-Latn-MY + test('testDurFmtMSFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ms-Latn-MY', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 thn 1 bln 1 mgu 1 h 1 j 1 min 1 s'); + }); + test('testDurFmtMSFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ms-Latn-MY', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 thn 1 bln 1 mgu 1 h 1 j 1 min 1 s'); + }); + test('testDurFmtMSFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ms-Latn-MY', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 thn 1 bln 1 mgu 1 h 1:01:01'); + }); + test('testDurFmtMSFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ms-Latn-MY', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 thn, 1 bln, 1 mgu, 1 h, 1 j, 1 min, 1 s'); + }); + test('testDurFmtMSFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ms-Latn-MY', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 thn, 1 bln, 1 mgu, 1 hari, 1 j, 1 min, 1 saat'); + }); + test('testDurFmtMSFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ms-Latn-MY', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 tahun, 1 bulan, 1 minggu, 1 hari, 1 jam, 1 minit, 1 saat'); + }); + //test cases for nb-NO + test('testDurFmtNBFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'nb-NO', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1å, 1 m, 1u, 1d, 1t, 1m, 1s'); + }); + test('testDurFmtNBFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'nb-NO', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1å, 1 m, 1u, 1d, 1t, 1m, 1s'); + }); + test('testDurFmtNBFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'nb-NO', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1å, 1 m, 1u, 1d, 01:01:01'); + }); + test('testDurFmtNBFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'nb-NO', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1å, 1 m, 1u, 1d, 1t, 1m, 1s'); + }); + test('testDurFmtNBFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'nb-NO', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 år, 1 md., 1 u, 1 d, 1 t, 1 min, 1 sek'); + }); + test('testDurFmtNBFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'nb-NO', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 år, 1 måned, 1 uke, 1 døgn, 1 time, 1 minutt og 1 sekund'); + }); + //test cases for nl-NL + test('testDurFmtNLFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'nl-NL', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 jr, 1 m, 1 w, 1 d, 1 u, 1 m, 1 s'); + }); + test('testDurFmtNLFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'nl-NL', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 jr, 1 m, 1 w, 1 d, 1 u, 1 m, 1 s'); + }); + test('testDurFmtNLFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'nl-NL', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 jr, 1 m, 1 w, 1 d, 01:01:01'); + }); + test('testDurFmtNLFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'nl-NL', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 jr, 1 m, 1 w, 1 d, 1 u, 1 m, 1 s'); + }); + test('testDurFmtNLFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'nl-NL', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 jr, 1 mnd, 1 wk, 1 dag, 1 uur, 1 min, 1 sec'); + }); + test('testDurFmtNLFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'nl-NL', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 jaar, 1 maand, 1 week, 1 dag, 1 uur, 1 minuut en 1 seconde'); + }); + //test cases for pl-PL + test('testDurFmtPLFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pl-PL', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 r., 1 m-c, 1 t., 1 d., 1 h, 1 min, 1 s'); + }); + test('testDurFmtPLFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'pl-PL', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 r., 1 m-c, 1 t., 1 d., 1 h, 1 min, 1 s'); + }); + test('testDurFmtPLFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'pl-PL', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 r., 1 m-c, 1 t., 1 d., 01:01:01'); + }); + test('testDurFmtPLFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pl-PL', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 r., 1 m-c, 1 t., 1 d., 1 h, 1 min, 1 s'); + }); + test('testDurFmtPLFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pl-PL', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 rok, 1 mies., 1 tydz., 1 dzień, 1 godz., 1 min, 1 sek.'); + }); + test('testDurFmtPLFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pl-PL', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 rok, 1 miesiąc, 1 tydzień, 1 dzień, 1 godzina, 1 minuta i 1 sekunda'); + }); + //test cases for pt-BR + test('testDurFmtPTFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pt-BR', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 ano 1 mês 1 sem. 1 dia 1 h 1 min 1 s'); + }); + test('testDurFmtPTFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'pt-BR', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 ano 1 mês 1 sem. 1 dia 1 h 1 min 1 s'); + }); + test('testDurFmtPTFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'pt-BR', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 ano 1 mês 1 sem. 1 dia 01:01:01'); + }); + test('testDurFmtPTFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pt-BR', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ano, 1 mês, 1 sem., 1 dia, 1 h, 1 min, 1 s'); + }); + test('testDurFmtPTFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pt-BR', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ano, 1 mês, 1 sem., 1 dia, 1 h, 1 min, 1 s'); + }); + test('testDurFmtPTFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pt-BR', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ano, 1 mês, 1 semana, 1 dia, 1 hora, 1 minuto e 1 segundo'); + }); + //test cases for ro-RO + test('testDurFmtROFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ro-RO', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 a, 1 l, 1 săpt., 1 z, 1 h, 1 m, 1 s'); + }); + test('testDurFmtROFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ro-RO', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 a, 1 l, 1 săpt., 1 z, 1 h, 1 m, 1 s'); + }); + test('testDurFmtROFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ro-RO', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 a, 1 l, 1 săpt., 1 z, 01:01:01'); + }); + test('testDurFmtROFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ro-RO', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 a, 1 l, 1 săpt., 1 z, 1 h, 1 m, 1 s'); + }); + test('testDurFmtROFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ro-RO', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 an, 1 lună, 1 săpt., 1 zi, 1 oră, 1 min., 1 s'); + }); + test('testDurFmtROFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ro-RO', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 an, 1 lună, 1 săptămână, 1 zi, 1 oră, 1 minut, 1 secundă'); + }); + //test cases for ru-RU + test('testDurFmtRUFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ru-RU', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 г. 1 м. 1 н. 1 д. 1 ч 1 мин 1 с'); + }); + test('testDurFmtRUFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ru-RU', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 г. 1 м. 1 н. 1 д. 1 ч 1 мин 1 с'); + }); + test('testDurFmtRUFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'ru-RU', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 г. 1 м. 1 н. 1 д. 01:01:01'); + }); + test('testDurFmtRUFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ru-RU', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 г. 1 м. 1 н. 1 д. 1 ч 1 мин 1 с'); + }); + test('testDurFmtRUFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ru-RU', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 г. 1 мес. 1 нед. 1 дн. 1 ч 1 мин 1 с'); + }); + test('testDurFmtRUFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'ru-RU', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 год 1 месяц 1 неделя 1 день 1 час 1 минута 1 секунда'); + }); + //test cases for sk-SK + test('testDurFmtSKFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sk-SK', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 r., 1 m., 1 t., 1 d., 1 h, 1 min, 1 s'); + }); + test('testDurFmtSKFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'sk-SK', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 r., 1 m., 1 t., 1 d., 1 h, 1 min, 1 s'); + }); + test('testDurFmtSKFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'sk-SK', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 r., 1 m., 1 t., 1 d., 1:01:01'); + }); + test('testDurFmtSKFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sk-SK', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 r., 1 m., 1 t., 1 d., 1 h, 1 min, 1 s'); + }); + test('testDurFmtSKFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sk-SK', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 r., 1 mes., 1 týž., 1 deň, 1 h, 1 min, 1 s'); + }); + test('testDurFmtSKFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sk-SK', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 rok, 1 mesiac, 1 týždeň, 1 deň, 1 hodina, 1 minúta, 1 sekunda'); + }); + //test cases for sq-AL + test('testDurFmtSQFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sq-AL', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 vit, 1 muaj, 1 javë, 1 ditë, 1 orë, 1 min., 1 sek.'); + }); + test('testDurFmtSQFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'sq-AL', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 vit, 1 muaj, 1 javë, 1 ditë, 1 orë, 1 min., 1 sek.'); + }); + test('testDurFmtSQFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'sq-AL', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 vit, 1 muaj, 1 javë, 1 ditë, 1:01:01'); + }); + test('testDurFmtSQFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sq-AL', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 vit, 1 muaj, 1 javë, 1 ditë, 1 orë, 1 min., 1 sek.'); + }); + test('testDurFmtSQFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sq-AL', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 vit, 1 muaj, 1 javë, 1 ditë, 1 orë, 1 min., 1 sek.'); + }); + test('testDurFmtSQFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sq-AL', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 vit, 1 muaj, 1 javë, 1 ditë, 1 orë, 1 minutë e 1 sekondë'); + }); + //test cases for sr-Latn-RS + test('testDurFmtSRFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sr-Latn-RS', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 g, 1 m, 1 n, 1 d, 1 č, 1 m, 1 s'); + }); + test('testDurFmtSRFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'sr-Latn-RS', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 g, 1 m, 1 n, 1 d, 1 č, 1 m, 1 s'); + }); + test('testDurFmtSRFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'sr-Latn-RS', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 g, 1 m, 1 n, 1 d, 01:01:01'); + }); + test('testDurFmtSRFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sr-Latn-RS', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 god, 1 mes., 1 ned., 1 dan, 1 sat, 1 min, 1 sek'); + }); + test('testDurFmtSRFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sr-Latn-RS', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 godina, 1 mesec, 1 nedelja, 1 dan, 1 sat, 1 minut i 1 sekunda'); + }); + //test cases for th-TH + test('testDurFmtTHFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'th-TH', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1ปี 1เดือน 1สัปดาห์ 1วัน 1ชม. 1นาที 1วิ'); + }); + test('testDurFmtTHFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'th-TH', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1ปี 1เดือน 1สัปดาห์ 1วัน 1ชม. 1นาที 1วิ'); + }); + test('testDurFmtTHFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'th-TH', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1ปี 1เดือน 1สัปดาห์ 1วัน 01:01:01'); + }); + test('testDurFmtTHFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'th-TH', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1ปี 1เดือน 1สัปดาห์ 1วัน 1ชม. 1นาที 1วิ'); + }); + test('testDurFmtTHFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'th-TH', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ปี 1 เดือน 1 สัปดาห์ 1 วัน 1 ชม. 1 นาที 1 วิ'); + }); + test('testDurFmtTHFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'th-TH', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ปี 1 เดือน 1 สัปดาห์ 1 วัน 1 ชั่วโมง 1 นาที และ 1 วินาที'); + }); + //test cases for uk-UA + test('testDurFmtUKUAFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'uk-UA', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1р, 1м, 1т, 1д, 1г, 1х, 1с'); + }); + test('testDurFmtUKUAFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'uk-UA', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1р, 1м, 1т, 1д, 1г, 1х, 1с'); + }); + test('testDurFmtUKUAFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'uk-UA', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1р, 1м, 1т, 1д, 01:01:01'); + }); + test('testDurFmtUKUAFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'uk-UA', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1р, 1м, 1т, 1д, 1г, 1х, 1с'); + }); + test('testDurFmtUKUAFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'uk-UA', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 р., 1 міс., 1 тиж., 1 дн., 1 год, 1 хв, 1 с'); + }); + test('testDurFmtUKUAFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'uk-UA', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 рік, 1 місяць, 1 тиждень, 1 день, 1 година, 1 хвилина і 1 секунда'); + }); + //test cases for uz-Latn-UZ + test('testDurFmtUZLATNFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'uz-Latn-UZ', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 yil 1 oy 1 hafta 1 kun 1 soat 1 daq. 1 s'); + }); + test('testDurFmtUZLATNFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'uz-Latn-UZ', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 yil 1 oy 1 hafta 1 kun 1 soat 1 daq. 1 s'); + }); + test('testDurFmtUZLATNFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'uz-Latn-UZ', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 yil 1 oy 1 hafta 1 kun 01:01:01'); + }); + test('testDurFmtUZLATNFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'uz-Latn-UZ', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 yil 1 oy 1 hafta 1 kun 1 soat 1 daq. 1 s'); + }); + test('testDurFmtUZLATNFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'uz-Latn-UZ', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 yil 1 oy 1 hafta 1 kun 1 soat 1 daq. 1 son.'); + }); + test('testDurFmtUZLATNFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'uz-Latn-UZ', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 yil 1 oy 1 hafta 1 kun 1 soat 1 daqiqa 1 soniya'); + }); + //test cases for vietnemese + test('testDurFmtVIFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'vi-VN', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 năm 1 tháng 1 tuần 1 ngày 1 giờ 1 phút 1 giây'); + }); + test('testDurFmtVIFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'vi-VN', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 năm 1 tháng 1 tuần 1 ngày 1 giờ 1 phút 1 giây'); + }); + test('testDurFmtVIFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'vi-VN', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 năm 1 tháng 1 tuần 1 ngày 01:01:01'); + }); + test('testDurFmtVIFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'vi-VN', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 năm, 1 tháng, 1 tuần, 1 ngày, 1 giờ, 1 phút, 1 giây'); + }); + test('testDurFmtVIFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'vi-VN', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 năm, 1 tháng, 1 tuần, 1 ngày, 1 giờ, 1 phút, 1 giây'); + }); + test('testDurFmtVIFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'vi-VN', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 năm, 1 tháng, 1 tuần, 1 ngày, 1 giờ, 1 phút, 1 giây'); + }); + //test cases for zh-Hant-TW + test('testDurFmtZHFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'zh-Hant-TW', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 年1 個月1 週1 天1 小時1 分鐘1 秒'); + }); + test('testDurFmtZHFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'zh-Hant-TW', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 年1 個月1 週1 天1 小時1 分鐘1 秒'); + }); + test('testDurFmtZHFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'zh-Hant-TW', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 年1 個月1 週1 天1:01:01'); + }); + test('testDurFmtZHFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'zh-Hant-TW', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 年1 個月1 週1 天1 小時1 分鐘1 秒'); + }); + test('testDurFmtZHFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'zh-Hant-TW', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 年 1 個月 1 週 1 天 1 小時 1 分鐘 1 秒'); + }); + test('testDurFmtZHFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'zh-Hant-TW', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 年 1 個月 1 週 1 天 1 小時 1 分鐘 1 秒'); + }); + //test cases for zh-Hank-HK + test('testDurFmtZHHKFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'zh-Hant-HK', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1年1個月1週1日1小時1分1秒'); + }); + test('testDurFmtZHHKFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'zh-Hant-HK', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1年1個月1週1日1小時1分1秒'); + }); + test('testDurFmtZHHKFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'zh-Hant-HK', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1年1個月1週1日1:01:01'); + }); + test('testDurFmtZHHKFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'zh-Hant-HK', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1年1個月1週1日1小時1分1秒'); + }); + test('testDurFmtZHHKFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'zh-Hant-HK', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 年 1 個月 1 星期 1 日 1 小時 1 分鐘 1 秒'); + }); + test('testDurFmtZHHKFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'zh-Hant-HK', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 年 1 個月 1 星期 1 日 1 小時 1 分鐘 1 秒'); + }); + //test cases for tr-TR + test('testDurFmtTRFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'tr-TR', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1y 1a 1h 1g 1 sa 1d 1sn'); + }); + test('testDurFmtTRFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'tr-TR', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1y 1a 1h 1g 1 sa 1d 1sn'); + }); + test('testDurFmtTRFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'tr-TR', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1y 1a 1h 1g 01:01:01'); + }); + test('testDurFmtTRFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'tr-TR', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1y 1a 1h 1g 1 sa 1d 1sn'); + }); + test('testDurFmtTRFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'tr-TR', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 yıl 1 ay 1 hf. 1 gün 1 sa. 1 dk. 1 sn.'); + }); + test('testDurFmtTRFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'tr-TR', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 yıl 1 ay 1 hafta 1 gün 1 saat 1 dakika 1 saniye'); + }); + //test cases for swedish + test('testDurFmtSVFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sv-SE', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1å 1m 1v 1d 1h 1m 1s'); + }); + test('testDurFmtSVFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'sv-SE', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1å 1m 1v 1d 1h 1m 1s'); + }); + test('testDurFmtSVFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'sv-SE', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1å 1m 1v 1d 01:01:01'); + }); + test('testDurFmtSVFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sv-SE', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1å, 1m, 1v, 1d, 1h, 1m, 1s'); + }); + test('testDurFmtSVFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sv-SE', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect( + fmt.format(dateOptions), '1 år, 1 mån, 1 v, 1 d, 1 tim, 1 min, 1 s'); + }); + test('testDurFmtSVFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sv-SE', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 år, 1 månad, 1 vecka, 1 dygn, 1 timme, 1 minut, 1 sekund'); + }); + //test cases for sl-SI + test('testDurFmtSLFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sl-SI', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 l, 1 m, 1 t, 1 d, 1 h, 1 min, 1 s'); + }); + test('testDurFmtSLFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'sl-SI', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 l, 1 m, 1 t, 1 d, 1 h, 1 min, 1 s'); + }); + test('testDurFmtSLFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'sl-SI', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 l, 1 m, 1 t, 1 d, 01:01:01'); + }); + test('testDurFmtSLFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sl-SI', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 l, 1 m, 1 t, 1 d, 1 h, 1 min, 1 s'); + }); + test('testDurFmtSLFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sl-SI', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 l, 1 m, 1 t, 1 d, 1 h, 1 min, 1 sek.'); + }); + test('testDurFmtSLFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'sl-SI', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 leto, 1 mesec, 1 teden, 1 dan, 1 ura, 1 minuta in 1 sekunda'); + }); + //test cases for portuguese pt-PU + test('testDurFmtPTPTFormatShortDefaultStyle', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pt-PT', length: 'short'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ano, 1 mês, 1 sem., 1 dia, 1 h, 1 min, 1 s'); + }); + test('testDurFmtPTPTFormatShortText', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'pt-PT', length: 'short', style: 'text'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ano, 1 mês, 1 sem., 1 dia, 1 h, 1 min, 1 s'); + }); + test('testDurFmtPTPTFormatShortClock', () { + final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( + locale: 'pt-PT', length: 'short', style: 'clock'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), '1 ano, 1 mês, 1 sem., 1 dia, 01:01:01'); + }); + test('testDurFmtPTPTFormatMedium', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pt-PT', length: 'medium'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ano, 1 mês, 1 sem., 1 dia, 1 h, 1 min, 1 s'); + }); + test('testDurFmtPTPTFormatLong', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pt-PT', length: 'long'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ano, 1 mês, 1 sem., 1 dia, 1 h, 1 min, 1 s'); + }); + test('testDurFmtPTPTFormatFull', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'pt-PT', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); + expect(fmt.format(dateOptions), + '1 ano, 1 mês, 1 semana, 1 dia, 1 hora, 1 minuto e 1 segundo'); + }); }); } From d44c7cbd4c99c2e87d24ff63fa08560600289ca1 Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Tue, 27 Jan 2026 11:44:52 +0900 Subject: [PATCH 05/11] Add more unit tests to verify DUrationFmt --- test/durfmt/durfmt2_test.dart | 5852 ++++++++++++++++++++++- test/durfmt/durfmt_am_ET_test.dart | 98 +- test/durfmt/durfmt_ar_SA_test.dart | 98 +- test/durfmt/durfmt_az_Latn_AZ_test.dart | 50 +- test/durfmt/durfmt_ha_Latn_NG_test.dart | 50 +- test/durfmt/durfmt_km_KH_test.dart | 50 +- test/durfmt/durfmt_or_IN_test.dart | 50 +- test/durfmt/durfmt_si_LK_test.dart | 50 +- test/durfmt/durfmt_sw_KE_test.dart | 50 +- test/durfmt/durfmt_test.dart | 60 +- 10 files changed, 5893 insertions(+), 515 deletions(-) diff --git a/test/durfmt/durfmt2_test.dart b/test/durfmt/durfmt2_test.dart index 9762551..ace9576 100644 --- a/test/durfmt/durfmt2_test.dart +++ b/test/durfmt/durfmt2_test.dart @@ -209,6 +209,7 @@ void main() { expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); }); test('testDurFmt_ar_MA', () { + // 1 2 3 11 100 final List textformatted_1 = []; final List textformatted_2 = []; final List textformatted_3 = []; @@ -304,6 +305,7 @@ void main() { expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); }); test('testDurFmt_as_IN', () { + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; @@ -351,6 +353,7 @@ void main() { }); test('testDurFmt_bg_BG', () { + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; @@ -398,6 +401,7 @@ void main() { }); test('testDurFmt_bn_IN', () { + // 1 18 final List textformatted_1 = []; final List textformatted_18 = []; final List clockformatted_1 = []; @@ -446,6 +450,7 @@ void main() { }); test('testDurFmt_bs_Latn_BA', () { + // 1 4 5 final List textformatted_1 = []; final List textformatted_4 = []; final List textformatted_5 = []; @@ -509,6 +514,7 @@ void main() { }); test('testDurFmt_cs_CZ', () { + // 1 2 5 final List textformatted_1 = []; final List textformatted_2 = []; final List textformatted_5 = []; @@ -569,6 +575,7 @@ void main() { }); test('testDurFmt_da_DK', () { + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; @@ -613,6 +620,7 @@ void main() { }); test('testDurFmt_de_AT', () { + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; @@ -657,6 +665,7 @@ void main() { }); test('testDurFmt_de_CH', () { + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; @@ -700,6 +709,7 @@ void main() { expect(clockformatted_2[3], '2 Std., 2 Min., 2 Sek.'); }); test('testDurFmt_de_DE', () { + // 1 16 final List textformatted_1 = []; final List textformatted_16 = []; final List clockformatted_1 = []; @@ -743,6 +753,7 @@ void main() { expect(clockformatted_16[3], '16 Std., 16 Min., 16 Sek.'); }); test('testDurFmt_de_LU', () { + // 1 17 final List textformatted_1 = []; final List textformatted_17 = []; final List clockformatted_1 = []; @@ -786,6 +797,7 @@ void main() { expect(clockformatted_17[3], '17 Std., 17 Min., 17 Sek.'); }); test('testDurFmt_el_CY', () { + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; @@ -829,6 +841,7 @@ void main() { expect(clockformatted_2[3], '2 ώ 2 λ 2 δ'); }); test('testDurFmt_el_GR', () { + // 1 17 final List textformatted_1 = []; final List textformatted_17 = []; final List clockformatted_1 = []; @@ -873,8 +886,7 @@ void main() { }); test('testDurFmt_en_AM', () { - // 1,2 - + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; @@ -916,10 +928,11 @@ void main() { expect(clockformatted_2[3], '2h 2m 2s'); }); test('testDurFmt_en_AU', () { - // 1.16 - - var textformatted_1 = [], textformatted_16 = []; - var clockformatted_1 = [], clockformatted_16 = []; + // 1 16 + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( @@ -956,10 +969,11 @@ void main() { expect(clockformatted_16[3], '16h 16m 16s'); }); test('testDurFmt_en_AZ', () { - // 1,17 - - var textformatted_1 = [], textformatted_17 = []; - var clockformatted_1 = [], clockformatted_17 = []; + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( @@ -996,8 +1010,7 @@ void main() { expect(clockformatted_17[3], '17h 17m 17s'); }); test('testDurFmt_en_CA', () { - // 1,2 - + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; @@ -1038,8 +1051,7 @@ void main() { expect(clockformatted_2[3], '2h 2min 2s'); }); test('testDurFmt_en_GB', () { - // 1,2 - + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; @@ -1081,8 +1093,7 @@ void main() { expect(clockformatted_2[3], '2h 2m 2s'); }); test('testDurFmt_en_GH', () { - // 1,2 - + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; @@ -1124,12 +1135,12 @@ void main() { expect(clockformatted_2[3], '2h 2m 2s'); }); test('testDurFmt_en_HK', () { - // 1,2 - + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-HK', style: 'text', length: length[i])); @@ -1166,8 +1177,7 @@ void main() { expect(clockformatted_2[3], '2h 2m 2s'); }); test('testDurFmt_en_IE', () { - // 1,2 - + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; @@ -1208,8 +1218,7 @@ void main() { expect(clockformatted_2[3], '2h 2m 2s'); }); test('testDurFmt_en_IN', () { - // 1,2 - + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; @@ -1251,12 +1260,12 @@ void main() { expect(clockformatted_2[3], '2h 2m 2s'); }); test('testDurFmt_en_IS', () { - // 1,2 - + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-IS', style: 'text', length: length[i])); @@ -1292,12 +1301,12 @@ void main() { expect(clockformatted_2[3], '2h 2m 2s'); }); test('testDurFmt_en_JP', () { - // 1,2 - + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-JP', style: 'text', length: length[i])); @@ -1333,12 +1342,12 @@ void main() { expect(clockformatted_2[3], '2h 2m 2s'); }); test('testDurFmt_en_KE', () { - // 1,2 - + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-KE', style: 'text', length: length[i])); @@ -1374,12 +1383,12 @@ void main() { expect(clockformatted_2[3], '2h 2m 2s'); }); test('testDurFmt_en_KR', () { - // 1,2 - + // 1 2 final List textformatted_1 = []; final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-KR', style: 'text', length: length[i])); @@ -1461,6 +1470,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-MM', style: 'text', length: length[i])); @@ -1501,6 +1511,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-MW', style: 'text', length: length[i])); @@ -1541,6 +1552,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-MY', style: 'text', length: length[i])); @@ -1581,6 +1593,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-NG', style: 'text', length: length[i])); @@ -1621,6 +1634,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-NZ', style: 'text', length: length[i])); @@ -1661,6 +1675,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-PH', style: 'text', length: length[i])); @@ -1701,6 +1716,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-PR', style: 'text', length: length[i])); @@ -1782,6 +1798,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-US', style: 'text', length: length[i])); @@ -1823,6 +1840,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-UG', style: 'text', length: length[i])); @@ -1863,6 +1881,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-ZA', style: 'text', length: length[i])); @@ -1903,6 +1922,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'en-ZM', style: 'text', length: length[i])); @@ -1944,6 +1964,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'es-AR', style: 'text', length: length[i])); @@ -1980,7 +2001,6 @@ void main() { }); test('testDurFmt_es_BO', () { // 1 16 - final List textformatted_1 = []; final List textformatted_16 = []; final List clockformatted_1 = []; @@ -2026,6 +2046,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'es-CL', style: 'text', length: length[i])); @@ -2062,7 +2083,6 @@ void main() { }); test('testDurFmt_es_CO', () { // 1 16 - final List textformatted_1 = []; final List textformatted_16 = []; final List clockformatted_1 = []; @@ -2108,6 +2128,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'es-DO', style: 'text', length: length[i])); @@ -2189,6 +2210,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'es-ES', style: 'text', length: length[i])); @@ -2270,6 +2292,7 @@ void main() { final List textformatted_17 = []; final List clockformatted_1 = []; final List clockformatted_17 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'es-HN', style: 'text', length: length[i])); @@ -2310,6 +2333,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'es-MX', style: 'text', length: length[i])); @@ -2386,12 +2410,12 @@ void main() { expect(clockformatted_16[3], '16h 16min 16s'); }); test('testDurFmt_es_PA', () { + // 1 17 final List textformatted_1 = []; final List textformatted_17 = []; final List clockformatted_1 = []; final List clockformatted_17 = []; - // 1 17 for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'es-PA', style: 'text', length: length[i])); @@ -2473,6 +2497,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'es-PR', style: 'text', length: length[i])); @@ -2513,6 +2538,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'es-PY', style: 'text', length: length[i])); @@ -2635,6 +2661,7 @@ void main() { final List textformatted_2 = []; final List clockformatted_1 = []; final List clockformatted_2 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'es-UY', style: 'text', length: length[i])); @@ -2671,7 +2698,6 @@ void main() { }); test('testDurFmt_es_VE', () { // 1 16 - final List textformatted_1 = []; final List textformatted_16 = []; final List clockformatted_1 = []; @@ -2714,9 +2740,11 @@ void main() { test('testDurFmt_et_EE', () { // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; - var textformatted_1 = [], textformatted_2 = []; - var clockformatted_1 = [], clockformatted_2 = []; for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'et-EE', style: 'text', length: length[i])); @@ -2754,9 +2782,11 @@ void main() { }); test('testDurFmt_fa_AF', () { // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; - var textformatted_1 = [], textformatted_2 = []; - var clockformatted_1 = [], clockformatted_2 = []; for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'fa-AF', @@ -2797,7 +2827,6 @@ void main() { }); test('testDurFmt_fa_IR', () { // 1 18 - final List textformatted_1 = []; final List textformatted_18 = []; final List clockformatted_1 = []; @@ -2847,6 +2876,7 @@ void main() { final List textformatted_17 = []; final List clockformatted_1 = []; final List clockformatted_17 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'fi-FI', style: 'text', length: length[i])); @@ -2885,7 +2915,6 @@ void main() { }); test('testDurFmt_fr_BE', () { // 1 16 - final List textformatted_1 = []; final List textformatted_16 = []; final List clockformatted_1 = []; @@ -2931,6 +2960,7 @@ void main() { final List textformatted_17 = []; final List clockformatted_1 = []; final List clockformatted_17 = []; + for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( locale: 'fr-CA', style: 'text', length: length[i])); @@ -2967,9 +2997,10 @@ void main() { }); test('testDurFmt_fr_CH', () { // 1 17 - - var textformatted_1 = [], textformatted_17 = []; - var clockformatted_1 = [], clockformatted_17 = []; + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; for (int i = 0; i < 4; i++) { final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( @@ -3048,7 +3079,6 @@ void main() { }); test('testDurFmt_fr_LU', () { // 1 16 - final List textformatted_1 = []; final List textformatted_16 = []; final List clockformatted_1 = []; @@ -3088,5 +3118,5739 @@ void main() { expect(clockformatted_16[2], '16h, 16min, 16s'); expect(clockformatted_16[3], '16h 16min 16s'); }); + + test('testDurFmt_ga_IE', () { + // 1 2 3 7 11 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_7 = []; + final List textformatted_11 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_7 = []; + final List clockformatted_11 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ga-IE', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_7.add( + fmt.format(ILibDateOptions(year: 7, month: 7, week: 7, day: 7))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_7 + .add(fmt.format(ILibDateOptions(hour: 7, minute: 7, second: 7))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + } + + expect(textformatted_1[0], '1 bhliain, 1 mhí, 1 scht agus 1 lá'); + expect(textformatted_1[1], '1 bl, 1 mí, 1 scht, 1 lá'); + expect(textformatted_1[2], '1 bl, 1m, 1 scht, 1 lá'); + expect(textformatted_1[3], '1 bl 1m 1 scht 1 lá'); + + expect(textformatted_2[0], '2 bhl, 2 mhí, 2 scht agus 2 lá'); + expect(textformatted_2[1], '2 bl, 2 mí, 2 scht, 2 lá'); + expect(textformatted_2[2], '2 bl, 2m, 2 scht, 2 lá'); + expect(textformatted_2[3], '2 bl 2m 2 scht 2 lá'); + + expect(textformatted_3[0], '3 bl, 3 mhí, 3 scht agus 3 lá'); + expect(textformatted_3[1], '3 bl, 3 mí, 3 scht, 3 lá'); + expect(textformatted_3[2], '3 bl, 3m, 3 scht, 3 lá'); + expect(textformatted_3[3], '3 bl 3m 3 scht 3 lá'); + + expect(textformatted_7[0], '7 mbl, 7 mí, 7 scht agus 7 lá'); + expect(textformatted_7[1], '7 bl, 7 mí, 7 scht, 7 lá'); + expect(textformatted_7[2], '7 bl, 7m, 7 scht, 7 lá'); + expect(textformatted_7[3], '7 bl 7m 7 scht 7 lá'); + + expect(textformatted_11[0], '11 bl, 11 mí, 11 scht agus 11 lá'); + expect(textformatted_11[1], '11 bl, 11 m, 11 scht, 11 lá'); + expect(textformatted_11[2], '11 bl, 11 m, 11 scht, 11 lá'); + expect(textformatted_11[3], '11 bl 11 m 11 scht 11 lá'); + + expect(clockformatted_1[0], '1 u, 1 nóim agus 1 soic'); + expect(clockformatted_1[1], '1 u, 1 nóim, 1 soic'); + expect(clockformatted_1[2], '1 u, 1 nóim, 1 soic'); + expect(clockformatted_1[3], '1 u 1 nóim 1 soic'); + + expect(clockformatted_2[0], '2 u, 2 nóim agus 2 shoic'); + expect(clockformatted_2[1], '2 u, 2 nóim, 2 soic'); + expect(clockformatted_2[2], '2 u, 2 nóim, 2 soic'); + expect(clockformatted_2[3], '2 u 2 nóim 2 soic'); + + expect(clockformatted_3[0], '3 u, 3 nóim agus 3 shoic'); + expect(clockformatted_3[1], '3 u, 3 nóim, 3 soic'); + expect(clockformatted_3[2], '3 u, 3 nóim, 3 soic'); + expect(clockformatted_3[3], '3 u 3 nóim 3 soic'); + + expect(clockformatted_7[0], '7 u, 7 nóim agus 7 soic'); + expect(clockformatted_7[1], '7 u, 7 nóim, 7 soic'); + expect(clockformatted_7[2], '7 u, 7n, 7 soic'); + expect(clockformatted_7[3], '7 u 7n 7 soic'); + + expect(clockformatted_11[0], '11 u, 11 nóim agus 11 soic'); + expect(clockformatted_11[1], '11 u, 11 nóim, 11 soic'); + expect(clockformatted_11[2], '11 u, 11 nóim, 11 soic'); + expect(clockformatted_11[3], '11 u 11 nóim 11 soic'); + }); + test('testDurFmt_gu_IN', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'gu-IN', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 વર્ષ, 1 મહિનો, 1 અઠવાડિયું, 1 દિવસ'); + expect(textformatted_1[1], '1 વર્ષ, 1 મહિનો, 1 અઠ., 1 દિવસ'); + expect(textformatted_1[2], '1 વ, 1 મ, 1 અઠ., 1 દિ'); + expect(textformatted_1[3], '1 વ, 1 મ, 1 અઠ., 1 દિ'); + + expect(textformatted_2[0], '2 વર્ષ, 2 મહિના, 2 અઠવાડિયા, 2 દિવસ'); + expect(textformatted_2[1], '2 વર્ષ, 2 મહિના, 2 અઠ., 2 દિવસ'); + expect(textformatted_2[2], '2 વ, 2 મ, 2 અઠ., 2 દિ'); + expect(textformatted_2[3], '2 વ, 2 મ, 2 અઠ., 2 દિ'); + + expect(clockformatted_1[0], '1 કલાક, 1 મિનિટ, 1 સેકંડ'); + expect(clockformatted_1[1], '1 કલાક, 1 મિનિટ, 1 સેકંડ'); + expect(clockformatted_1[2], '1 ક, 1 મિ, 1 સે'); + expect(clockformatted_1[3], '1 ક, 1 મિ, 1 સે'); + + expect(clockformatted_2[0], '2 કલાક, 2 મિનિટ, 2 સેકંડ'); + expect(clockformatted_2[1], '2 કલાક, 2 મિનિટ, 2 સેકંડ'); + expect(clockformatted_2[2], '2 ક, 2 મિ, 2 સે'); + expect(clockformatted_2[3], '2 ક, 2 મિ, 2 સે'); + }); + test('testDurFmt_he_IL', () { + // 1 2 20 19 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_20 = []; + final List textformatted_19 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_20 = []; + final List clockformatted_19 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'he-IL', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_20.add(fmt + .format(ILibDateOptions(year: 20, month: 20, week: 20, day: 20))); + textformatted_19.add(fmt + .format(ILibDateOptions(year: 19, month: 19, week: 19, day: 19))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_20 + .add(fmt.format(ILibDateOptions(hour: 20, minute: 20, second: 20))); + clockformatted_19 + .add(fmt.format(ILibDateOptions(hour: 19, minute: 19, second: 19))); + } + + expect(textformatted_1[0], '‏1 שנה, 1 חודש, 1 שבוע ו-1 יום'); + expect(textformatted_1[1], '‏1 שנה, 1 ח׳, 1 שבוע, 1 יום'); + expect(textformatted_1[2], '‏1 ש′ 1 ח׳ 1 ש′ 1 י׳'); + expect(textformatted_1[3], '‏1 ש′ 1 ח׳ 1 ש′ 1 י׳'); + + expect(textformatted_2[0], '‏2 שנים, חודשיים, שבועיים ו-יומיים'); + expect(textformatted_2[1], '‏2 שנים, 2 ח׳, שבועיים, יומיים'); + expect(textformatted_2[2], '‏2 ש′ 2 ח׳ 2 ש′ 2 י׳'); + expect(textformatted_2[3], '‏2 ש′ 2 ח׳ 2 ש′ 2 י׳'); + + expect(textformatted_19[0], '‏19 שנים, 19 חודשים, 19 שבועות ו-19 ימים'); + expect(textformatted_19[1], '‏19 שנים, 19 ח׳, 19 שבועות, 19 ימ׳'); + expect(textformatted_19[2], '‏19 ש′ 19 ח׳ 19 ש′ 19 י׳'); + expect(textformatted_19[3], '‏19 ש′ 19 ח׳ 19 ש′ 19 י׳'); + + expect(clockformatted_1[0], '‏1 שעה, 1 דקה ו-1 שניה'); + expect(clockformatted_1[1], '‏1 שעה, 1 דק׳, 1 שנ׳'); + expect(clockformatted_1[2], '‏1 שע׳ 1 דק׳ 1 שנ׳'); + expect(clockformatted_1[3], '‏1 שע׳ 1 דק׳ 1 שנ׳'); + + expect(clockformatted_2[0], '‏שעתיים, שתי דקות ו-שתי שניות'); + expect(clockformatted_2[1], '‏שעתיים, 2 דק׳, 2 שנ׳'); + expect(clockformatted_2[2], '‏2 שע׳ 2 דק׳ 2 שנ׳'); + expect(clockformatted_2[3], '‏2 שע׳ 2 דק׳ 2 שנ׳'); + + expect(clockformatted_19[0], '‏19 שעות, 19 דקות ו-19 שניות'); + expect(clockformatted_19[1], '‏19 שע׳, 19 דק׳, 19 שנ׳'); + expect(clockformatted_19[2], '‏19 שע׳ 19 דק׳ 19 שנ׳'); + expect(clockformatted_19[3], '‏19 שע׳ 19 דק׳ 19 שנ׳'); + + expect(textformatted_20[0], '‏20 שנים, 20 חודשים, 20 שבועות ו-20 ימים'); + expect(textformatted_20[2], '‏20 ש′ 20 ח׳ 20 ש′ 20 י׳'); + expect(textformatted_20[3], '‏20 ש′ 20 ח׳ 20 ש′ 20 י׳'); + expect(textformatted_20[1], '‏20 שנים, 20 ח׳, 20 שבועות, 20 ימ׳'); + + expect(clockformatted_20[0], '‏20 שעות, 20 דקות ו-20 שניות'); + expect(clockformatted_20[1], '‏20 שע׳, 20 דק׳, 20 שנ׳'); + expect(clockformatted_20[2], '‏20 שע׳ 20 דק׳ 20 שנ׳'); + expect(clockformatted_20[3], '‏20 שע׳ 20 דק׳ 20 שנ׳'); + }); + + test('testDurFmt_hi_IN', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'hi-IN', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 वर्ष, 1 महीना, 1 सप्ताह, और 1 दिन'); + expect(textformatted_1[1], '1 वर्ष, 1 माह, 1 सप्ताह, 1 दिन'); + expect(textformatted_1[2], '1 व, 1 माह, 1 सप्ताह, 1 दि'); + expect(textformatted_1[3], '1 व, 1 माह, 1 सप्ताह, 1 दि'); + + expect(textformatted_2[0], '2 वर्ष, 2 महीने, 2 सप्ताह, और 2 दिन'); + expect(textformatted_2[1], '2 वर्ष, 2 माह, 2 सप्ताह, 2 दिन'); + expect(textformatted_2[2], '2 व, 2 माह, 2 सप्ताह, 2 दि'); + expect(textformatted_2[3], '2 व, 2 माह, 2 सप्ताह, 2 दि'); + + expect(clockformatted_1[0], '1 घंटा, 1 मिनट, और 1 सेकंड'); + expect(clockformatted_1[1], '1 घं॰, 1 मि॰, 1 से॰'); + expect(clockformatted_1[2], '1 घं, 1 मि, 1 से'); + expect(clockformatted_1[3], '1 घं, 1 मि, 1 से'); + + expect(clockformatted_2[0], '2 घंटे, 2 मिनट, और 2 सेकंड'); + expect(clockformatted_2[1], '2 घं॰, 2 मि॰, 2 से॰'); + expect(clockformatted_2[2], '2 घं, 2 मि, 2 से'); + expect(clockformatted_2[3], '2 घं, 2 मि, 2 से'); + }); + test('testDurFmt_hr_HR', () { + // 1 2 5 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_5 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_5 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'hr-HR', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_5.add( + fmt.format(ILibDateOptions(year: 5, month: 5, week: 5, day: 5))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_5 + .add(fmt.format(ILibDateOptions(hour: 5, minute: 5, second: 5))); + } + + expect(textformatted_1[0], '1 godina, 1 mjesec, 1 tjedan i 1 dan'); + expect(textformatted_1[1], '1 g., 1 mj., 1 tj., 1 dan'); + expect(textformatted_1[2], '1 g., 1 mj., 1 tj., 1 d.'); + expect(textformatted_1[3], '1 g. 1 mj. 1 tj. 1 d.'); + + expect(textformatted_2[0], '2 godine, 2 mjeseca, 2 tjedna i 2 dana'); + expect(textformatted_2[1], '2 g., 2 mj., 2 tj., 2 dana'); + expect(textformatted_2[2], '2 g., 2 mj., 2 tj., 2 d.'); + expect(textformatted_2[3], '2 g. 2 mj. 2 tj. 2 d.'); + + expect(textformatted_5[0], '5 godina, 5 mjeseci, 5 tjedana i 5 dana'); + expect(textformatted_5[1], '5 g., 5 mj., 5 tj., 5 dana'); + expect(textformatted_5[2], '5 g., 5 mj., 5 tj., 5 d.'); + expect(textformatted_5[3], '5 g. 5 mj. 5 tj. 5 d.'); + + expect(clockformatted_1[0], '1 sat, 1 minuta i 1 sekunda'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1 h, 1 m, 1 s'); + expect(clockformatted_1[3], '1 h 1 m 1 s'); + + expect(clockformatted_2[0], '2 sata, 2 minute i 2 sekunde'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2 h, 2 m, 2 s'); + expect(clockformatted_2[3], '2 h 2 m 2 s'); + + expect(clockformatted_5[0], '5 sati, 5 minuta i 5 sekundi'); + expect(clockformatted_5[1], '5 h, 5 min, 5 s'); + expect(clockformatted_5[2], '5 h, 5 m, 5 s'); + expect(clockformatted_5[3], '5 h 5 m 5 s'); + }); + test('testDurFmt_hr_ME', () { + // 1 4 19 + final List textformatted_1 = []; + final List textformatted_4 = []; + final List textformatted_19 = []; + final List clockformatted_1 = []; + final List clockformatted_4 = []; + final List clockformatted_19 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'hr-ME', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_4.add( + fmt.format(ILibDateOptions(year: 4, month: 4, week: 4, day: 4))); + textformatted_19.add(fmt + .format(ILibDateOptions(year: 19, month: 19, week: 19, day: 19))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_4 + .add(fmt.format(ILibDateOptions(hour: 4, minute: 4, second: 4))); + clockformatted_19 + .add(fmt.format(ILibDateOptions(hour: 19, minute: 19, second: 19))); + } + + expect(textformatted_1[0], '1 godina, 1 mjesec, 1 tjedan i 1 dan'); + expect(textformatted_1[1], '1 g., 1 mj., 1 tj., 1 dan'); + expect(textformatted_1[2], '1 g., 1 mj., 1 tj., 1 d.'); + expect(textformatted_1[3], '1 g. 1 mj. 1 tj. 1 d.'); + + expect(textformatted_4[0], '4 godine, 4 mjeseca, 4 tjedna i 4 dana'); + expect(textformatted_4[1], '4 g., 4 mj., 4 tj., 4 dana'); + expect(textformatted_4[2], '4 g., 4 mj., 4 tj., 4 d.'); + expect(textformatted_4[3], '4 g. 4 mj. 4 tj. 4 d.'); + + expect( + textformatted_19[0], '19 godina, 19 mjeseci, 19 tjedana i 19 dana'); + expect(textformatted_19[1], '19 g., 19 mj., 19 tj., 19 dana'); + expect(textformatted_19[2], '19 g., 19 mj., 19 tj., 19 d.'); + expect(textformatted_19[3], '19 g. 19 mj. 19 tj. 19 d.'); + + expect(clockformatted_1[0], '1 sat, 1 minuta i 1 sekunda'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1 h, 1 m, 1 s'); + expect(clockformatted_1[3], '1 h 1 m 1 s'); + + expect(clockformatted_4[0], '4 sata, 4 minute i 4 sekunde'); + expect(clockformatted_4[1], '4 h, 4 min, 4 s'); + expect(clockformatted_4[2], '4 h, 4 m, 4 s'); + expect(clockformatted_4[3], '4 h 4 m 4 s'); + + expect(clockformatted_19[0], '19 sati, 19 minuta i 19 sekundi'); + expect(clockformatted_19[1], '19 h, 19 min, 19 s'); + expect(clockformatted_19[2], '19 h, 19 m, 19 s'); + expect(clockformatted_19[3], '19 h 19 m 19 s'); + }); + test('testDurFmt_hr_HU', () { + // 1 2 5 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_5 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_5 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'hr-HU', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_5.add( + fmt.format(ILibDateOptions(year: 5, month: 5, week: 5, day: 5))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_5 + .add(fmt.format(ILibDateOptions(hour: 5, minute: 5, second: 5))); + } + + expect(textformatted_1[0], '1 godina, 1 mjesec, 1 tjedan i 1 dan'); + expect(textformatted_1[1], '1 g., 1 mj., 1 tj., 1 dan'); + expect(textformatted_1[2], '1 g., 1 mj., 1 tj., 1 d.'); + expect(textformatted_1[3], '1 g. 1 mj. 1 tj. 1 d.'); + + expect(textformatted_2[0], '2 godine, 2 mjeseca, 2 tjedna i 2 dana'); + expect(textformatted_2[1], '2 g., 2 mj., 2 tj., 2 dana'); + expect(textformatted_2[2], '2 g., 2 mj., 2 tj., 2 d.'); + expect(textformatted_2[3], '2 g. 2 mj. 2 tj. 2 d.'); + + expect(textformatted_5[0], '5 godina, 5 mjeseci, 5 tjedana i 5 dana'); + expect(textformatted_5[1], '5 g., 5 mj., 5 tj., 5 dana'); + expect(textformatted_5[2], '5 g., 5 mj., 5 tj., 5 d.'); + expect(textformatted_5[3], '5 g. 5 mj. 5 tj. 5 d.'); + + expect(clockformatted_1[0], '1 sat, 1 minuta i 1 sekunda'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1 h, 1 m, 1 s'); + expect(clockformatted_1[3], '1 h 1 m 1 s'); + + expect(clockformatted_2[0], '2 sata, 2 minute i 2 sekunde'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2 h, 2 m, 2 s'); + expect(clockformatted_2[3], '2 h 2 m 2 s'); + + expect(clockformatted_5[0], '5 sati, 5 minuta i 5 sekundi'); + expect(clockformatted_5[1], '5 h, 5 min, 5 s'); + expect(clockformatted_5[2], '5 h, 5 m, 5 s'); + expect(clockformatted_5[3], '5 h 5 m 5 s'); + }); + test('testDurFmt_id_ID', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'id-ID', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 tahun, 1 bulan, 1 minggu, 1 hari'); + expect(textformatted_1[1], '1 thn, 1 bln, 1 mgg, 1 hr'); + expect(textformatted_1[2], '1 thn, 1 bln, 1 mgg, 1 hr'); + expect(textformatted_1[3], '1 thn, 1 bln, 1 mgg, 1 hr'); + + expect(textformatted_2[0], '2 tahun, 2 bulan, 2 minggu, 2 hari'); + expect(textformatted_2[1], '2 thn, 2 bln, 2 mgg, 2 hr'); + expect(textformatted_2[2], '2 thn, 2 bln, 2 mgg, 2 hr'); + expect(textformatted_2[3], '2 thn, 2 bln, 2 mgg, 2 hr'); + + expect(clockformatted_1[0], '1 jam, 1 menit, 1 detik'); + expect(clockformatted_1[1], '1 j, 1 mnt, 1 dtk'); + expect(clockformatted_1[2], '1 j, 1 mnt, 1 dtk'); + expect(clockformatted_1[3], '1 j, 1 mnt, 1 dtk'); + + expect(clockformatted_2[0], '2 jam, 2 menit, 2 detik'); + expect(clockformatted_2[1], '2 j, 2 mnt, 2 dtk'); + expect(clockformatted_2[2], '2 j, 2 mnt, 2 dtk'); + expect(clockformatted_2[3], '2 j, 2 mnt, 2 dtk'); + }); + test('testDurFmt_is_IS', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'is-IS', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 ár, 1 mánuður, 1 vika og 1 dagur'); + expect(textformatted_1[1], '1 ár, 1 mán., 1 vika, 1 dagur'); + expect(textformatted_1[2], '1á, 1 mán., 1 v., 1 d.'); + expect(textformatted_1[3], '1á 1 mán. 1 v. 1 d.'); + + expect(textformatted_17[0], '17 ár, 17 mánuðir, 17 vikur og 17 dagar'); + expect(textformatted_17[1], '17 ár, 17 mán., 17 vikur, 17 dagar'); + expect(textformatted_17[2], '17á, 17 mán., 17 v., 17 d.'); + expect(textformatted_17[3], '17á 17 mán. 17 v. 17 d.'); + + expect(clockformatted_1[0], '1 klukkustund, 1 mínúta og 1 sekúnda'); + expect(clockformatted_1[1], '1 klst., 1 mín., 1 sek.'); + expect(clockformatted_1[2], '1 klst., 1 mín., 1 sek.'); + expect(clockformatted_1[3], '1 klst. 1 mín. 1 sek.'); + + expect( + clockformatted_17[0], '17 klukkustundir, 17 mínútur og 17 sekúndur'); + expect(clockformatted_17[1], '17 klst., 17 mín., 17 sek.'); + expect(clockformatted_17[2], '17 klst., 17 mín., 17 sek.'); + expect(clockformatted_17[3], '17 klst. 17 mín. 17 sek.'); + }); + test('testDurFmt_it_CH', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'it-CH', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 anno, 1 mese, 1 settimana e 1 giorno'); + expect(textformatted_1[1], '1 anno, 1 mese, 1 sett., 1 giorno'); + expect(textformatted_1[2], '1anno, 1 mese, 1sett., 1g'); + expect(textformatted_1[3], '1anno 1 mese 1sett. 1g'); + + expect(textformatted_17[0], '17 anni, 17 mesi, 17 settimane e 17 giorni'); + expect(textformatted_17[1], '17 anni, 17 mesi, 17 sett., 17 giorni'); + expect(textformatted_17[2], '17anni, 17 mesi, 17sett., 17gg'); + expect(textformatted_17[3], '17anni 17 mesi 17sett. 17gg'); + + expect(clockformatted_1[0], '1 ora, 1 minuto e 1 secondo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_17[0], '17 ore, 17 minuti e 17 secondi'); + expect(clockformatted_17[1], '17 h, 17 min, 17 s'); + expect(clockformatted_17[2], '17h, 17min, 17s'); + expect(clockformatted_17[3], '17h 17min 17s'); + }); + test('testDurFmt_it_IT', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'it-IT', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 anno, 1 mese, 1 settimana e 1 giorno'); + expect(textformatted_1[1], '1 anno, 1 mese, 1 sett., 1 giorno'); + expect(textformatted_1[2], '1anno, 1 mese, 1sett., 1g'); + expect(textformatted_1[3], '1anno 1 mese 1sett. 1g'); + + expect(textformatted_2[0], '2 anni, 2 mesi, 2 settimane e 2 giorni'); + expect(textformatted_2[1], '2 anni, 2 mesi, 2 sett., 2 giorni'); + expect(textformatted_2[2], '2anni, 2 mesi, 2sett., 2gg'); + expect(textformatted_2[3], '2anni 2 mesi 2sett. 2gg'); + + expect(clockformatted_1[0], '1 ora, 1 minuto e 1 secondo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 ore, 2 minuti e 2 secondi'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_ja_JP', () { + // 1 16 + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ja-JP', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 年 1 か月 1 週間 1 日'); + expect(textformatted_1[1], '1 年 1 か月 1 週間 1 日'); + expect(textformatted_1[2], '1y1m1w1d'); + expect(textformatted_1[3], '1y1m1w1d'); + + expect(textformatted_16[0], '16 年 16 か月 16 週間 16 日'); + expect(textformatted_16[1], '16 年 16 か月 16 週間 16 日'); + expect(textformatted_16[2], '16y16m16w16d'); + expect(textformatted_16[3], '16y16m16w16d'); + + expect(clockformatted_1[0], '1 時間 1 分 1 秒'); + expect(clockformatted_1[1], '1 時間 1 分 1 秒'); + expect(clockformatted_1[2], '1h1m1s'); + expect(clockformatted_1[3], '1h1m1s'); + + expect(clockformatted_16[0], '16 時間 16 分 16 秒'); + expect(clockformatted_16[1], '16 時間 16 分 16 秒'); + expect(clockformatted_16[2], '16h16m16s'); + expect(clockformatted_16[3], '16h16m16s'); + }); + test('testDurFmt_kk_KZ', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'kk-KZ', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 жыл 1 ай 1 апта 1 күн'); + expect(textformatted_1[1], '1 ж. 1 ай 1 ап. 1 күн'); + expect(textformatted_1[2], '1 ж. 1 ай 1 ап. 1 к.'); + expect(textformatted_1[3], '1 ж. 1 ай 1 ап. 1 к.'); + + expect(textformatted_2[0], '2 жыл 2 ай 2 апта 2 күн'); + expect(textformatted_2[1], '2 ж. 2 ай 2 ап. 2 күн'); + expect(textformatted_2[2], '2 ж. 2 ай 2 ап. 2 к.'); + expect(textformatted_2[3], '2 ж. 2 ай 2 ап. 2 к.'); + + expect(clockformatted_1[0], '1 сағат 1 минут 1 секунд'); + expect(clockformatted_1[1], '1 сағ 1 мин 1 с'); + expect(clockformatted_1[2], '1 сағ 1 мин 1 с'); + expect(clockformatted_1[3], '1 сағ 1 мин 1 с'); + + expect(clockformatted_2[0], '2 сағат 2 минут 2 секунд'); + expect(clockformatted_2[1], '2 сағ 2 мин 2 с'); + expect(clockformatted_2[2], '2 сағ 2 мин 2 с'); + expect(clockformatted_2[3], '2 сағ 2 мин 2 с'); + }); + test('testDurFmt_kn_IN', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'kn-IN', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 ವರ್ಷವು, 1 ತಿಂಗಳು, 1 ವಾರವು, 1 ದಿನವು'); + expect(textformatted_1[1], '1 ವರ್ಷ, 1 ತಿಂ., 1 ವಾರ, 1 ದಿನ'); + expect(textformatted_1[2], '1ವ, 1ತಿಂ., 1ವಾ, 1ದಿ'); + expect(textformatted_1[3], '1ವ, 1ತಿಂ., 1ವಾ, 1ದಿ'); + + expect(textformatted_2[0], '2 ವರ್ಷಗಳು, 2 ತಿಂಗಳು, 2 ವಾರಗಳು, 2 ದಿನಗಳು'); + expect(textformatted_2[1], '2 ವರ್ಷಗಳು, 2 ತಿಂ.ಗಳು, 2 ವಾರಗಳು, 2 ದಿನಗಳು'); + expect(textformatted_2[2], '2ವ, 2ತಿಂ., 2ವಾ, 2ದಿ'); + expect(textformatted_2[3], '2ವ, 2ತಿಂ., 2ವಾ, 2ದಿ'); + + expect(clockformatted_1[0], '1 ಗಂಟೆಯು, 1 ನಿಮಿಷವು, 1 ಸೆಕೆಂಡ್'); + expect(clockformatted_1[1], '1 ಗಂ., 1 ನಿಮಿ, 1 ಸೆಕೆಂ'); + expect(clockformatted_1[2], '1ಗಂ., 1ನಿಮಿ, 1ಸೆಕೆಂ'); + expect(clockformatted_1[3], '1ಗಂ., 1ನಿಮಿ, 1ಸೆಕೆಂ'); + + expect(clockformatted_2[0], '2 ಗಂಟೆಗಳು, 2 ನಿಮಿಷಗಳು, 2 ಸೆಕೆಂಡುಗಳು'); + expect(clockformatted_2[1], '2 ಗಂ., 2 ನಿಮಿ, 2 ಸೆಕೆಂ'); + expect(clockformatted_2[2], '2ಗಂ., 2ನಿಮಿ, 2 ಸೆಕೆಂ'); + expect(clockformatted_2[3], '2ಗಂ., 2ನಿಮಿ, 2 ಸೆಕೆಂ'); + }); + test('testDurFmt_ko_KR', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ko-KR', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1년 1개월 1주 1일'); + expect(textformatted_1[1], '1년 1개월 1주 1일'); + expect(textformatted_1[2], '1년 1개월 1주 1일'); + expect(textformatted_1[3], '1년 1개월 1주 1일'); + + expect(textformatted_2[0], '2년 2개월 2주 2일'); + expect(textformatted_2[1], '2년 2개월 2주 2일'); + expect(textformatted_2[2], '2년 2개월 2주 2일'); + expect(textformatted_2[3], '2년 2개월 2주 2일'); + + expect(clockformatted_1[0], '1시간 1분 1초'); + expect(clockformatted_1[1], '1시간 1분 1초'); + expect(clockformatted_1[2], '1시간 1분 1초'); + expect(clockformatted_1[3], '1시간 1분 1초'); + + expect(clockformatted_2[0], '2시간 2분 2초'); + expect(clockformatted_2[1], '2시간 2분 2초'); + expect(clockformatted_2[2], '2시간 2분 2초'); + expect(clockformatted_2[3], '2시간 2분 2초'); + }); + test('testDurFmt_ku_IQ', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ku-IQ', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '‏1 ساڵ, 1 مانگ, 1 هەفتە, 1 رۆژ'); + expect(textformatted_1[1], '‏1 ساڵ 1 مانگ 1 هەفتە 1 رۆژ'); + expect(textformatted_1[2], '‏1س 1م 1ﻪـ 1ر'); + expect(textformatted_1[3], '‏1س 1م 1ﻪـ 1ر'); + + expect(textformatted_2[0], '‏2 ساڵ, 2 مانگ, 2 هەفتە, 2 رۆژ'); + expect(textformatted_2[1], '‏2 ساڵ 2 مانگ 2 هەفتە 2 رۆژ'); + expect(textformatted_2[2], '‏2س 2م 2ﻪـ 2ر'); + expect(textformatted_2[3], '‏2س 2م 2ﻪـ 2ر'); + + expect(clockformatted_1[0], '‏1 کاتژمێر, 1 خولەک, 1 چرکە'); + expect(clockformatted_1[1], '‏1 کاتژ 1 خول 1 چرک'); + expect(clockformatted_1[2], '‏1ک 1خ 1چ'); + expect(clockformatted_1[3], '‏1ک 1خ 1چ'); + + expect(clockformatted_2[0], '‏2 کاتژمێر, 2 خولەک, 2 چرکە'); + expect(clockformatted_2[1], '‏2 کاتژ 2 خول 2 چرک'); + expect(clockformatted_2[2], '‏2ک 2خ 2چ'); + expect(clockformatted_2[3], '‏2ک 2خ 2چ'); + }); + test('testDurFmt_lt_LT', () { + // 21 9 11 + final List textformatted_21 = []; + final List textformatted_9 = []; + final List textformatted_11 = []; + final List clockformatted_21 = []; + final List clockformatted_9 = []; + final List clockformatted_11 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'lt-LT', style: 'text', length: length[i])); + + textformatted_21.add(fmt + .format(ILibDateOptions(year: 21, month: 21, week: 21, day: 21))); + textformatted_9.add( + fmt.format(ILibDateOptions(year: 9, month: 9, week: 9, day: 9))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + + clockformatted_21 + .add(fmt.format(ILibDateOptions(hour: 21, minute: 21, second: 21))); + clockformatted_9 + .add(fmt.format(ILibDateOptions(hour: 9, minute: 9, second: 9))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + } + + expect(textformatted_21[0], '21 metai 21 mėnuo 21 savaitė ir 21 diena'); + expect(textformatted_21[1], '21 m. 21 mėn. 21 sav. 21 d.'); + expect(textformatted_21[2], '21 m. 21 mėn. 21 sav. 21 d.'); + expect(textformatted_21[3], '21 m. 21 mėn. 21 sav. 21 d.'); + + expect(textformatted_9[0], '9 metai 9 mėnesiai 9 savaitės ir 9 dienos'); + expect(textformatted_9[1], '9 m. 9 mėn. 9 sav. 9 d.'); + expect(textformatted_9[2], '9 m. 9 mėn. 9 sav. 9 d.'); + expect(textformatted_9[3], '9 m. 9 mėn. 9 sav. 9 d.'); + + expect(textformatted_11[0], '11 metų 11 mėnesių 11 savaičių ir 11 dienų'); + expect(textformatted_11[1], '11 m. 11 mėn. 11 sav. 11 d.'); + expect(textformatted_11[2], '11 m. 11 mėn. 11 sav. 11 d.'); + expect(textformatted_11[3], '11 m. 11 mėn. 11 sav. 11 d.'); + + expect(clockformatted_21[0], '21 valanda 21 minutė ir 21 sekundė'); + expect(clockformatted_21[1], '21 val. 21 min. 21 sek.'); + expect(clockformatted_21[2], '21 h 21 min. 21 s'); + expect(clockformatted_21[3], '21 h 21 min. 21 s'); + + expect(clockformatted_9[0], '9 valandos 9 minutės ir 9 sekundės'); + expect(clockformatted_9[1], '9 val. 9 min. 9 sek.'); + expect(clockformatted_9[2], '9 h 9 min. 9 s'); + expect(clockformatted_9[3], '9 h 9 min. 9 s'); + + expect(clockformatted_11[0], '11 valandų 11 minučių ir 11 sekundžių'); + expect(clockformatted_11[1], '11 val. 11 min. 11 sek.'); + expect(clockformatted_11[2], '11 h 11 min. 11 s'); + expect(clockformatted_11[3], '11 h 11 min. 11 s'); + }); + test('testDurFmt_lv_LV', () { + // 21 9 + final List textformatted_21 = []; + final List textformatted_9 = []; + final List clockformatted_21 = []; + final List clockformatted_9 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'lv-LV', style: 'text', length: length[i])); + + textformatted_21.add(fmt + .format(ILibDateOptions(year: 21, month: 21, week: 21, day: 21))); + textformatted_9.add( + fmt.format(ILibDateOptions(year: 9, month: 9, week: 9, day: 9))); + + clockformatted_21 + .add(fmt.format(ILibDateOptions(hour: 21, minute: 21, second: 21))); + clockformatted_9 + .add(fmt.format(ILibDateOptions(hour: 9, minute: 9, second: 9))); + } + + expect(textformatted_21[0], '21 gads, 21 mēnesis, 21 nedēļa un 21 diena'); + expect(textformatted_21[1], '21 g., 21 mēn., 21 ned., 21 d.'); + expect(textformatted_21[2], '21 g., 21 m., 21 n., 21 d.'); + expect(textformatted_21[3], '21 g. 21 m. 21 n. 21 d.'); + + expect(textformatted_9[0], '9 gadi, 9 mēneši, 9 nedēļas un 9 dienas'); + expect(textformatted_9[1], '9 g., 9 mēn., 9 ned., 9 d.'); + expect(textformatted_9[2], '9 g., 9 m., 9 n., 9 d.'); + expect(textformatted_9[3], '9 g. 9 m. 9 n. 9 d.'); + + expect(clockformatted_21[0], '21 stunda, 21 minūte un 21 sekunde'); + expect(clockformatted_21[1], '21 st., 21 min, 21 sek.'); + expect(clockformatted_21[2], '21 h, 21 min, 21 s'); + expect(clockformatted_21[3], '21 h 21 min 21 s'); + + expect(clockformatted_9[0], '9 stundas, 9 minūtes un 9 sekundes'); + expect(clockformatted_9[1], '9 st., 9 min, 9 sek.'); + expect(clockformatted_9[2], '9 h, 9 min, 9 s'); + expect(clockformatted_9[3], '9 h 9 min 9 s'); + }); + test('testDurFmt_mk_MK', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'mk-MK', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 година, 1 месец, 1 седмица и 1 ден'); + expect(textformatted_1[1], '1 год., 1 мес., 1 сед., 1 ден'); + expect(textformatted_1[2], '1 г., 1 м., 1 с., 1 д.'); + expect(textformatted_1[3], '1 г., 1 м., 1 с., 1 д.'); + + expect(textformatted_2[0], '2 години, 2 месеци, 2 седмици и 2 дена'); + expect(textformatted_2[1], '2 год., 2 мес., 2 сед., 2 дена'); + expect(textformatted_2[2], '2 г., 2 м., 2 с., 2 д.'); + expect(textformatted_2[3], '2 г., 2 м., 2 с., 2 д.'); + + expect(clockformatted_1[0], '1 час, 1 минута и 1 секунда'); + expect(clockformatted_1[1], '1 ч., 1 мин., 1 сек.'); + expect(clockformatted_1[2], '1 ч., 1 м., 1 с.'); + expect(clockformatted_1[3], '1 ч., 1 м., 1 с.'); + + expect(clockformatted_2[0], '2 часа, 2 минути и 2 секунди'); + expect(clockformatted_2[1], '2 ч., 2 мин., 2 сек.'); + expect(clockformatted_2[2], '2 ч., 2 м., 2 с.'); + expect(clockformatted_2[3], '2 ч., 2 м., 2 с.'); + }); + test('testDurFmt_ml_IN', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ml-IN', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 വർഷം, 1 മാസം, 1 ആഴ്ച, 1 ദിവസം'); + expect(textformatted_1[1], '1 വ, 1 മാസം, 1 ആ, 1 ദിവസം‌'); + expect(textformatted_1[2], '1 വ 1 മാ 1 ആ 1 ദി'); + expect(textformatted_1[3], '1 വ 1 മാ 1 ആ 1 ദി'); + + expect(textformatted_2[0], '2 വർഷം, 2 മാസം, 2 ആഴ്ച, 2 ദിവസം'); + expect(textformatted_2[1], '2 വ, 2 മാസം, 2 ആ, 2 ദിവസം‌'); + expect(textformatted_2[2], '2 വ 2 മാ 2 ആ 2 ദി'); + expect(textformatted_2[3], '2 വ 2 മാ 2 ആ 2 ദി'); + + expect(clockformatted_1[0], '1 മണിക്കൂർ, 1 മിനിറ്റ്, 1 സെക്കൻഡ്'); + expect(clockformatted_1[1], '1 മ, 1 മി., 1 സെ.'); + expect(clockformatted_1[2], '1 മ 1 മി. 1 സെ.'); + expect(clockformatted_1[3], '1 മ 1 മി. 1 സെ.'); + + expect(clockformatted_2[0], '2 മണിക്കൂർ, 2 മിനിറ്റ്, 2 സെക്കൻഡ്'); + expect(clockformatted_2[1], '2 മ, 2 മി., 2 സെ.'); + expect(clockformatted_2[2], '2 മ 2 മി. 2 സെ.'); + expect(clockformatted_2[3], '2 മ 2 മി. 2 സെ.'); + }); + test('testDurFmt_mr_IN', () { + // 1 18 + final List textformatted_1 = []; + final List textformatted_18 = []; + final List clockformatted_1 = []; + final List clockformatted_18 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'mr-IN', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_18.add(fmt + .format(ILibDateOptions(year: 18, month: 18, week: 18, day: 18))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_18 + .add(fmt.format(ILibDateOptions(hour: 18, minute: 18, second: 18))); + } + + expect(textformatted_1[0], '1 वर्ष, 1 महिना, 1 आठवडा, 1 दिवस'); + expect(textformatted_1[1], '1 वर्ष, 1 महिना, 1 आ, 1 दिवस'); + expect(textformatted_1[2], '1व 1म 1आ 1दि'); + expect(textformatted_1[3], '1व 1म 1आ 1दि'); + + expect(textformatted_18[0], '18 वर्षे, 18 महिने, 18 आठवडे, 18 दिवस'); + expect(textformatted_18[1], '18 वर्षे, 18 महिने, 18 आ, 18 दिवस'); + expect(textformatted_18[2], '18व 18म 18आ 18दि'); + expect(textformatted_18[3], '18व 18म 18आ 18दि'); + + expect(clockformatted_1[0], '1 तास, 1 मिनिट, 1 सेकंद'); + expect(clockformatted_1[1], '1 ता, 1 मिनि, 1 से'); + expect(clockformatted_1[2], '1ता 1मि 1से'); + expect(clockformatted_1[3], '1ता 1मि 1से'); + + expect(clockformatted_18[0], '18 तास, 18 मिनिटे, 18 सेकंद'); + expect(clockformatted_18[1], '18 ता, 18 मिनि, 18 से'); + expect(clockformatted_18[2], '18ता 18मि 18से'); + expect(clockformatted_18[3], '18ता 18मि 18से'); + }); + test('testDurFmt_ms_MY', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ms-MY', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 tahun, 1 bulan, 1 minggu, 1 hari'); + expect(textformatted_1[1], '1 thn, 1 bln, 1 mgu, 1 hari'); + expect(textformatted_1[2], '1 thn, 1 bln, 1 mgu, 1 h'); + expect(textformatted_1[3], '1 thn 1 bln 1 mgu 1 h'); + + expect(textformatted_2[0], '2 tahun, 2 bulan, 2 minggu, 2 hari'); + expect(textformatted_2[1], '2 thn, 2 bln, 2 mgu, 2 hari'); + expect(textformatted_2[2], '2 thn, 2 bln, 2 mgu, 2 h'); + expect(textformatted_2[3], '2 thn 2 bln 2 mgu 2 h'); + + expect(clockformatted_1[0], '1 jam, 1 minit, 1 saat'); + expect(clockformatted_1[1], '1 j, 1 min, 1 saat'); + expect(clockformatted_1[2], '1 j, 1 min, 1 s'); + expect(clockformatted_1[3], '1 j 1 min 1 s'); + + expect(clockformatted_2[0], '2 jam, 2 minit, 2 saat'); + expect(clockformatted_2[1], '2 j, 2 min, 2 saat'); + expect(clockformatted_2[2], '2 j, 2 min, 2 s'); + expect(clockformatted_2[3], '2 j 2 min 2 s'); + }); + test('testDurFmt_nb_NO', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'nb-NO', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 år, 1 måned, 1 uke og 1 døgn'); + expect(textformatted_1[1], '1 år, 1 md., 1 u, 1 d'); + expect(textformatted_1[2], '1å, 1 m, 1u, 1d'); + expect(textformatted_1[3], '1å, 1 m, 1u, 1d'); + + expect(textformatted_2[0], '2 år, 2 måneder, 2 uker og 2 døgn'); + expect(textformatted_2[1], '2 år, 2 md., 2 u, 2 d'); + expect(textformatted_2[2], '2å, 2 m, 2u, 2d'); + expect(textformatted_2[3], '2å, 2 m, 2u, 2d'); + + expect(clockformatted_1[0], '1 time, 1 minutt og 1 sekund'); + expect(clockformatted_1[1], '1 t, 1 min, 1 sek'); + expect(clockformatted_1[2], '1t, 1m, 1s'); + expect(clockformatted_1[3], '1t, 1m, 1s'); + + expect(clockformatted_2[0], '2 timer, 2 minutter og 2 sekunder'); + expect(clockformatted_2[1], '2 t, 2 min, 2 sek'); + expect(clockformatted_2[2], '2t, 2m, 2s'); + expect(clockformatted_2[3], '2t, 2m, 2s'); + }); + test('testDurFmt_nl_BE', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'nl-BE', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 jaar, 1 maand, 1 week en 1 dag'); + expect(textformatted_1[1], '1 jr, 1 mnd, 1 wk, 1 dag'); + expect(textformatted_1[2], '1 jr, 1 m, 1 w, 1 d'); + expect(textformatted_1[3], '1 jr, 1 m, 1 w, 1 d'); + + expect(textformatted_2[0], '2 jaar, 2 maanden, 2 weken en 2 dagen'); + expect(textformatted_2[1], '2 jr, 2 mnd, 2 wkn, 2 dagen'); + expect(textformatted_2[2], '2 jr, 2 m, 2 w, 2 d'); + expect(textformatted_2[3], '2 jr, 2 m, 2 w, 2 d'); + + expect(clockformatted_1[0], '1 uur, 1 minuut en 1 seconde'); + expect(clockformatted_1[1], '1 uur, 1 min, 1 sec'); + expect(clockformatted_1[2], '1 u, 1 m, 1 s'); + expect(clockformatted_1[3], '1 u, 1 m, 1 s'); + + expect(clockformatted_2[0], '2 uur, 2 minuten en 2 seconden'); + expect(clockformatted_2[1], '2 uur, 2 min, 2 sec'); + expect(clockformatted_2[2], '2 u, 2 m, 2 s'); + expect(clockformatted_2[3], '2 u, 2 m, 2 s'); + }); + test('testDurFmt_nl_NL', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'nl-NL', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 jaar, 1 maand, 1 week en 1 dag'); + expect(textformatted_1[1], '1 jr, 1 mnd, 1 wk, 1 dag'); + expect(textformatted_1[2], '1 jr, 1 m, 1 w, 1 d'); + expect(textformatted_1[3], '1 jr, 1 m, 1 w, 1 d'); + + expect(textformatted_2[0], '2 jaar, 2 maanden, 2 weken en 2 dagen'); + expect(textformatted_2[1], '2 jr, 2 mnd, 2 wkn, 2 dagen'); + expect(textformatted_2[2], '2 jr, 2 m, 2 w, 2 d'); + expect(textformatted_2[3], '2 jr, 2 m, 2 w, 2 d'); + + expect(clockformatted_1[0], '1 uur, 1 minuut en 1 seconde'); + expect(clockformatted_1[1], '1 uur, 1 min, 1 sec'); + expect(clockformatted_1[2], '1 u, 1 m, 1 s'); + expect(clockformatted_1[3], '1 u, 1 m, 1 s'); + + expect(clockformatted_2[0], '2 uur, 2 minuten en 2 seconden'); + expect(clockformatted_2[1], '2 uur, 2 min, 2 sec'); + expect(clockformatted_2[2], '2 u, 2 m, 2 s'); + expect(clockformatted_2[3], '2 u, 2 m, 2 s'); + }); + test('testDurFmt_pa_Guru_IN', () { + // 1 2 18 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_18 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_18 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'pa-Guru-IN', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_18.add(fmt + .format(ILibDateOptions(year: 18, month: 18, week: 18, day: 18))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_18 + .add(fmt.format(ILibDateOptions(hour: 18, minute: 18, second: 18))); + } + + expect(textformatted_1[0], '1 ਸਾਲ, 1 ਮਹੀਨਾ, 1 ਹਫ਼ਤਾ, 1 ਦਿਨ'); + expect(textformatted_1[1], '1 ਸਾਲ, 1 ਮਹੀਨਾ, 1 ਹਫ਼ਤਾ, 1 ਦਿਨ'); + expect(textformatted_1[2], '1 ਸਾਲ 1 ਮਹੀਨਾ 1 ਹਫ਼ਤਾ 1 ਦਿਨ'); + expect(textformatted_1[3], '1 ਸਾਲ 1 ਮਹੀਨਾ 1 ਹਫ਼ਤਾ 1 ਦਿਨ'); + + expect(textformatted_2[0], '2 ਸਾਲ, 2 ਮਹੀਨੇ, 2 ਹਫ਼ਤੇ, 2 ਦਿਨ'); + expect(textformatted_2[1], '2 ਸਾਲ, 2 ਮਹੀਨੇ, 2 ਹਫ਼ਤੇ, 2 ਦਿਨ'); + expect(textformatted_2[2], '2 ਸਾਲ 2 ਮਹੀਨੇ 2 ਹਫ਼ਤੇ 2 ਦਿਨ'); + expect(textformatted_2[3], '2 ਸਾਲ 2 ਮਹੀਨੇ 2 ਹਫ਼ਤੇ 2 ਦਿਨ'); + + expect(textformatted_18[0], '18 ਸਾਲ, 18 ਮਹੀਨੇ, 18 ਹਫ਼ਤੇ, 18 ਦਿਨ'); + expect(textformatted_18[1], '18 ਸਾਲ, 18 ਮਹੀਨੇ, 18 ਹਫ਼ਤੇ, 18 ਦਿਨ'); + expect(textformatted_18[2], '18 ਸਾਲ 18 ਮਹੀਨੇ 18 ਹਫ਼ਤੇ 18 ਦਿਨ'); + expect(textformatted_18[3], '18 ਸਾਲ 18 ਮਹੀਨੇ 18 ਹਫ਼ਤੇ 18 ਦਿਨ'); + + expect(clockformatted_1[0], '1 ਘੰਟਾ, 1 ਮਿੰਟ, 1 ਸਕਿੰਟ'); + expect(clockformatted_1[1], '1 ਘੰਟਾ, 1 ਮਿੰਟ, 1 ਸਕਿੰਟ'); + expect(clockformatted_1[2], '1 ਘੰਟਾ 1 ਮਿੰਟ 1 ਸਕਿੰਟ'); + expect(clockformatted_1[3], '1 ਘੰਟਾ 1 ਮਿੰਟ 1 ਸਕਿੰਟ'); + + expect(clockformatted_2[0], '2 ਘੰਟੇ, 2 ਮਿੰਟ, 2 ਸਕਿੰਟ'); + expect(clockformatted_2[1], '2 ਘੰਟੇ, 2 ਮਿੰਟ, 2 ਸਕਿੰਟ'); + expect(clockformatted_2[2], '2 ਘੰਟੇ 2 ਮਿੰਟ 2 ਸਕਿੰਟ'); + expect(clockformatted_2[3], '2 ਘੰਟੇ 2 ਮਿੰਟ 2 ਸਕਿੰਟ'); + + expect(clockformatted_18[0], '18 ਘੰਟੇ, 18 ਮਿੰਟ, 18 ਸਕਿੰਟ'); + expect(clockformatted_18[1], '18 ਘੰਟੇ, 18 ਮਿੰਟ, 18 ਸਕਿੰਟ'); + expect(clockformatted_18[2], '18 ਘੰਟੇ 18 ਮਿੰਟ 18 ਸਕਿੰਟ'); + expect(clockformatted_18[3], '18 ਘੰਟੇ 18 ਮਿੰਟ 18 ਸਕਿੰਟ'); + }); + test('testDurFmt_pl_PL', () { + // 1 2 5 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_5 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_5 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'pl-PL', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_5.add( + fmt.format(ILibDateOptions(year: 5, month: 5, week: 5, day: 5))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_5 + .add(fmt.format(ILibDateOptions(hour: 5, minute: 5, second: 5))); + } + + expect(textformatted_1[0], '1 rok, 1 miesiąc, 1 tydzień i 1 dzień'); + expect(textformatted_1[1], '1 rok, 1 mies., 1 tydz., 1 dzień'); + expect(textformatted_1[2], '1 r., 1 m-c, 1 t., 1 d.'); + expect(textformatted_1[3], '1 r., 1 m-c, 1 t., 1 d.'); + + expect(textformatted_2[0], '2 lata, 2 miesiące, 2 tygodnie i 2 dni'); + expect(textformatted_2[1], '2 lata, 2 mies., 2 tyg., 2 dni'); + expect(textformatted_2[2], '2 l., 2 m-ce, 2 t., 2 d.'); + expect(textformatted_2[3], '2 l., 2 m-ce, 2 t., 2 d.'); + + expect(textformatted_5[0], '5 lat, 5 miesięcy, 5 tygodni i 5 dni'); + expect(textformatted_5[1], '5 lat, 5 mies., 5 tyg., 5 dni'); + expect(textformatted_5[2], '5 l., 5 m-cy, 5 t., 5 d.'); + expect(textformatted_5[3], '5 l., 5 m-cy, 5 t., 5 d.'); + + expect(clockformatted_1[0], '1 godzina, 1 minuta i 1 sekunda'); + expect(clockformatted_1[1], '1 godz., 1 min, 1 sek.'); + expect(clockformatted_1[2], '1 h, 1 min, 1 s'); + expect(clockformatted_1[3], '1 h, 1 min, 1 s'); + + expect(clockformatted_2[0], '2 godziny, 2 minuty i 2 sekundy'); + expect(clockformatted_2[1], '2 godz., 2 min, 2 sek.'); + expect(clockformatted_2[2], '2 h, 2 min, 2 s'); + expect(clockformatted_2[3], '2 h, 2 min, 2 s'); + + expect(clockformatted_5[0], '5 godzin, 5 minut i 5 sekund'); + expect(clockformatted_5[1], '5 godz., 5 min, 5 sek.'); + expect(clockformatted_5[2], '5 h, 5 min, 5 s'); + expect(clockformatted_5[3], '5 h, 5 min, 5 s'); + }); + test('testDurFmt_pt_BR', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'pt-BR', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 ano, 1 mês, 1 semana e 1 dia'); + expect(textformatted_1[1], '1 ano, 1 mês, 1 sem., 1 dia'); + expect(textformatted_1[2], '1 ano, 1 mês, 1 sem., 1 dia'); + expect(textformatted_1[3], '1 ano 1 mês 1 sem. 1 dia'); + + expect(textformatted_2[0], '2 anos, 2 meses, 2 semanas e 2 dias'); + expect(textformatted_2[1], '2 anos, 2 meses, 2 sem., 2 dias'); + expect(textformatted_2[2], '2 anos, 2 meses, 2 sem., 2 dias'); + expect(textformatted_2[3], '2 anos 2 meses 2 sem. 2 dias'); + + expect(clockformatted_1[0], '1 hora, 1 minuto e 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1 h, 1 min, 1 s'); + expect(clockformatted_1[3], '1 h 1 min 1 s'); + + expect(clockformatted_2[0], '2 horas, 2 minutos e 2 segundos'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2 h, 2 min, 2 s'); + expect(clockformatted_2[3], '2 h 2 min 2 s'); + }); + test('testDurFmt_pt_PT', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'pt-PT', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 ano, 1 mês, 1 semana e 1 dia'); + expect(textformatted_1[1], '1 ano, 1 mês, 1 sem., 1 dia'); + expect(textformatted_1[2], '1 ano, 1 mês, 1 sem., 1 dia'); + expect(textformatted_1[3], '1 ano, 1 mês, 1 sem., 1 dia'); + + expect(textformatted_17[0], '17 anos, 17 meses, 17 semanas e 17 dias'); + expect(textformatted_17[1], '17 anos, 17 meses, 17 sem., 17 dias'); + expect(textformatted_17[2], '17 anos, 17 meses, 17 sem., 17 dias'); + expect(textformatted_17[3], '17 anos, 17 meses, 17 sem., 17 dias'); + + expect(clockformatted_1[0], '1 hora, 1 minuto e 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1 h, 1 min, 1 s'); + expect(clockformatted_1[3], '1 h, 1 min, 1 s'); + + expect(clockformatted_17[0], '17 horas, 17 minutos e 17 segundos'); + expect(clockformatted_17[1], '17 h, 17 min, 17 s'); + expect(clockformatted_17[2], '17 h, 17 min, 17 s'); + expect(clockformatted_17[3], '17 h, 17 min, 17 s'); + }); + test('testDurFmt_ro_RO', () { + // 1 2 20 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_20 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_20 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ro-RO', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_20.add(fmt + .format(ILibDateOptions(year: 20, month: 20, week: 20, day: 20))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_20 + .add(fmt.format(ILibDateOptions(hour: 20, minute: 20, second: 20))); + } + + expect(textformatted_1[0], '1 an, 1 lună, 1 săptămână, 1 zi'); + expect(textformatted_1[1], '1 an, 1 lună, 1 săpt., 1 zi'); + expect(textformatted_1[2], '1 a, 1 l, 1 săpt., 1 z'); + expect(textformatted_1[3], '1 a, 1 l, 1 săpt., 1 z'); + + expect(textformatted_2[0], '2 ani, 2 luni, 2 săptămâni, 2 zile'); + expect(textformatted_2[1], '2 ani, 2 luni, 2 săpt., 2 zile'); + expect(textformatted_2[2], '2 a, 2 l, 2 săpt., 2 z'); + expect(textformatted_2[3], '2 a, 2 l, 2 săpt., 2 z'); + + expect(textformatted_20[0], + '20 de ani, 20 de luni, 20 de săptămâni, 20 de zile'); + expect(textformatted_20[1], '20 ani, 20 luni, 20 săpt., 20 zile'); + expect(textformatted_20[2], '20 a, 20 l, 20 săpt., 20 z'); + expect(textformatted_20[3], '20 a, 20 l, 20 săpt., 20 z'); + + expect(clockformatted_1[0], '1 oră, 1 minut, 1 secundă'); + expect(clockformatted_1[1], '1 oră, 1 min., 1 s'); + expect(clockformatted_1[2], '1 h, 1 m, 1 s'); + expect(clockformatted_1[3], '1 h, 1 m, 1 s'); + + expect(clockformatted_2[0], '2 ore, 2 minute, 2 secunde'); + expect(clockformatted_2[1], '2 ore, 2 min., 2 s'); + expect(clockformatted_2[2], '2 h, 2 m, 2 s'); + expect(clockformatted_2[3], '2 h, 2 m, 2 s'); + + expect(clockformatted_20[0], '20 de ore, 20 de minute, 20 de secunde'); + expect(clockformatted_20[1], '20 ore, 20 min., 20 s'); + expect(clockformatted_20[2], '20 h, 20 m, 20 s'); + expect(clockformatted_20[3], '20 h, 20 m, 20 s'); + }); + test('testDurFmt_sr_Cyrl_RS', () { + // 1 4 20 + final List textformatted_1 = []; + final List textformatted_4 = []; + final List textformatted_20 = []; + final List clockformatted_1 = []; + final List clockformatted_4 = []; + final List clockformatted_20 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'sr-Cyrl-RS', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_4.add( + fmt.format(ILibDateOptions(year: 4, month: 4, week: 4, day: 4))); + textformatted_20.add(fmt + .format(ILibDateOptions(year: 20, month: 20, week: 20, day: 20))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_4 + .add(fmt.format(ILibDateOptions(hour: 4, minute: 4, second: 4))); + clockformatted_20 + .add(fmt.format(ILibDateOptions(hour: 20, minute: 20, second: 20))); + } + + expect(textformatted_1[0], '1 година, 1 месец, 1 недеља и 1 дан'); + expect(textformatted_1[1], '1 год, 1 мес., 1 нед., 1 дан'); + expect(textformatted_1[2], '1 г, 1 м, 1 н, 1 д'); + expect(textformatted_1[3], '1 г, 1 м, 1 н, 1 д'); + + expect(textformatted_4[0], '4 године, 4 месеца, 4 недеље и 4 дана'); + expect(textformatted_4[1], '4 год., 4 мес., 4 нед., 4 дана'); + expect(textformatted_4[2], '4 г, 4 м, 4 н, 4 д'); + expect(textformatted_4[3], '4 г, 4 м, 4 н, 4 д'); + + expect(textformatted_20[0], '20 година, 20 месеци, 20 недеља и 20 дана'); + expect(textformatted_20[1], '20 год., 20 мес., 20 нед., 20 дана'); + expect(textformatted_20[2], '20 г, 20 м, 20 н, 20 д'); + expect(textformatted_20[3], '20 г, 20 м, 20 н, 20 д'); + + expect(clockformatted_1[0], '1 сат, 1 минут и 1 секунда'); + expect(clockformatted_1[1], '1 сат, 1 мин, 1 сек'); + expect(clockformatted_1[2], '1 ч, 1 м, 1 с'); + expect(clockformatted_1[3], '1 ч, 1 м, 1 с'); + + expect(clockformatted_4[0], '4 сата, 4 минута и 4 секунде'); + expect(clockformatted_4[1], '4 сата, 4 мин, 4 сек'); + expect(clockformatted_4[2], '4 ч, 4 м, 4 с'); + expect(clockformatted_4[3], '4 ч, 4 м, 4 с'); + + expect(clockformatted_20[0], '20 сати, 20 минута и 20 секунди'); + expect(clockformatted_20[1], '20 сати, 20 мин, 20 сек'); + expect(clockformatted_20[2], '20 ч, 20 м, 20 с'); + expect(clockformatted_20[3], '20 ч, 20 м, 20 с'); + }); + test('testDurFmt_sr_Latn_RS', () { + // 1 2 5 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_5 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_5 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'sr-Latn-RS', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_5.add( + fmt.format(ILibDateOptions(year: 5, month: 5, week: 5, day: 5))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_5 + .add(fmt.format(ILibDateOptions(hour: 5, minute: 5, second: 5))); + } + + expect(textformatted_1[0], '1 godina, 1 mesec, 1 nedelja i 1 dan'); + expect(textformatted_1[1], '1 god, 1 mes., 1 ned., 1 dan'); + expect(textformatted_1[2], '1 g, 1 m, 1 n, 1 d'); + expect(textformatted_1[3], '1 g, 1 m, 1 n, 1 d'); + + expect(textformatted_2[0], '2 godine, 2 meseca, 2 nedelje i 2 dana'); + expect(textformatted_2[1], '2 god., 2 mes., 2 ned., 2 dana'); + expect(textformatted_2[2], '2 g, 2 m, 2 n, 2 d'); + expect(textformatted_2[3], '2 g, 2 m, 2 n, 2 d'); + + expect(textformatted_5[0], '5 godina, 5 meseci, 5 nedelja i 5 dana'); + expect(textformatted_5[1], '5 god., 5 mes., 5 ned., 5 dana'); + expect(textformatted_5[2], '5 g, 5 m, 5 n, 5 d'); + expect(textformatted_5[3], '5 g, 5 m, 5 n, 5 d'); + + expect(clockformatted_1[0], '1 sat, 1 minut i 1 sekunda'); + expect(clockformatted_1[1], '1 sat, 1 min, 1 sek'); + expect(clockformatted_1[2], '1 č, 1 m, 1 s'); + expect(clockformatted_1[3], '1 č, 1 m, 1 s'); + + expect(clockformatted_2[0], '2 sata, 2 minuta i 2 sekunde'); + expect(clockformatted_2[1], '2 sata, 2 min, 2 sek'); + expect(clockformatted_2[2], '2 č, 2 m, 2 s'); + expect(clockformatted_2[3], '2 č, 2 m, 2 s'); + + expect(clockformatted_5[0], '5 sati, 5 minuta i 5 sekundi'); + expect(clockformatted_5[1], '5 sati, 5 min, 5 sek'); + expect(clockformatted_5[2], '5 č, 5 m, 5 s'); + expect(clockformatted_5[3], '5 č, 5 m, 5 s'); + }); + test('testDurFmt_ru_BY', () { + // 1 2 5 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_5 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_5 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ru-BY', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_5.add( + fmt.format(ILibDateOptions(year: 5, month: 5, week: 5, day: 5))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_5 + .add(fmt.format(ILibDateOptions(hour: 5, minute: 5, second: 5))); + } + + expect(textformatted_1[0], '1 год 1 месяц 1 неделя 1 день'); + expect(textformatted_1[1], '1 г. 1 мес. 1 нед. 1 дн.'); + expect(textformatted_1[2], '1 г. 1 м. 1 н. 1 д.'); + expect(textformatted_1[3], '1 г. 1 м. 1 н. 1 д.'); + + expect(textformatted_2[0], '2 года 2 месяца 2 недели 2 дня'); + expect(textformatted_2[1], '2 г. 2 мес. 2 нед. 2 дн.'); + expect(textformatted_2[2], '2 г. 2 м. 2 н. 2 д.'); + expect(textformatted_2[3], '2 г. 2 м. 2 н. 2 д.'); + + expect(textformatted_5[0], '5 лет 5 месяцев 5 недель 5 дней'); + expect(textformatted_5[1], '5 л. 5 мес. 5 нед. 5 дн.'); + expect(textformatted_5[2], '5 л. 5 м. 5 н. 5 д.'); + expect(textformatted_5[3], '5 л. 5 м. 5 н. 5 д.'); + + expect(clockformatted_1[0], '1 час 1 минута 1 секунда'); + expect(clockformatted_1[1], '1 ч 1 мин 1 с'); + expect(clockformatted_1[2], '1 ч 1 мин 1 с'); + expect(clockformatted_1[3], '1 ч 1 мин 1 с'); + + expect(clockformatted_2[0], '2 часа 2 минуты 2 секунды'); + expect(clockformatted_2[1], '2 ч 2 мин 2 с'); + expect(clockformatted_2[2], '2 ч 2 мин 2 с'); + expect(clockformatted_2[3], '2 ч 2 мин 2 с'); + + expect(clockformatted_5[0], '5 часов 5 минут 5 секунд'); + expect(clockformatted_5[1], '5 ч 5 мин 5 с'); + expect(clockformatted_5[2], '5 ч 5 мин 5 с'); + expect(clockformatted_5[3], '5 ч 5 мин 5 с'); + }); + test('testDurFmt_ru_KG', () { + // 41 24 25 + final List textformatted_41 = []; + final List textformatted_24 = []; + final List textformatted_25 = []; + final List clockformatted_41 = []; + final List clockformatted_24 = []; + final List clockformatted_25 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ru-KG', style: 'text', length: length[i])); + + textformatted_41.add(fmt + .format(ILibDateOptions(year: 41, month: 41, week: 41, day: 41))); + textformatted_24.add(fmt + .format(ILibDateOptions(year: 24, month: 24, week: 24, day: 24))); + textformatted_25.add(fmt + .format(ILibDateOptions(year: 25, month: 25, week: 25, day: 25))); + + clockformatted_41 + .add(fmt.format(ILibDateOptions(hour: 41, minute: 41, second: 41))); + clockformatted_24 + .add(fmt.format(ILibDateOptions(hour: 24, minute: 24, second: 24))); + clockformatted_25 + .add(fmt.format(ILibDateOptions(hour: 25, minute: 25, second: 25))); + } + + expect(textformatted_41[0], '41 год 41 месяц 41 неделя 41 день'); + expect(textformatted_41[1], '41 г. 41 мес. 41 нед. 41 дн.'); + expect(textformatted_41[2], '41 г. 41 м. 41 н. 41 д.'); + expect(textformatted_41[3], '41 г. 41 м. 41 н. 41 д.'); + + expect(textformatted_24[0], '24 года 24 месяца 24 недели 24 дня'); + expect(textformatted_24[1], '24 г. 24 мес. 24 нед. 24 дн.'); + expect(textformatted_24[2], '24 г. 24 м. 24 н. 24 д.'); + expect(textformatted_24[3], '24 г. 24 м. 24 н. 24 д.'); + + expect(textformatted_25[0], '25 лет 25 месяцев 25 недель 25 дней'); + expect(textformatted_25[1], '25 л. 25 мес. 25 нед. 25 дн.'); + expect(textformatted_25[2], '25 л. 25 м. 25 н. 25 д.'); + expect(textformatted_25[3], '25 л. 25 м. 25 н. 25 д.'); + + expect(clockformatted_41[0], '41 час 41 минута 41 секунда'); + expect(clockformatted_41[1], '41 ч 41 мин 41 с'); + expect(clockformatted_41[2], '41 ч 41 мин 41 с'); + expect(clockformatted_41[3], '41 ч 41 мин 41 с'); + + expect(clockformatted_24[0], '24 часа 24 минуты 24 секунды'); + expect(clockformatted_24[1], '24 ч 24 мин 24 с'); + expect(clockformatted_24[2], '24 ч 24 мин 24 с'); + expect(clockformatted_24[3], '24 ч 24 мин 24 с'); + + expect(clockformatted_25[0], '25 часов 25 минут 25 секунд'); + expect(clockformatted_25[1], '25 ч 25 мин 25 с'); + expect(clockformatted_25[2], '25 ч 25 мин 25 с'); + expect(clockformatted_25[3], '25 ч 25 мин 25 с'); + }); + test('testDurFmt_ru_KZ', () { + // 31 22 20 + final List textformatted_31 = []; + final List textformatted_22 = []; + final List textformatted_20 = []; + final List clockformatted_31 = []; + final List clockformatted_22 = []; + final List clockformatted_20 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ru-KZ', style: 'text', length: length[i])); + + textformatted_31.add(fmt + .format(ILibDateOptions(year: 31, month: 31, week: 31, day: 31))); + textformatted_22.add(fmt + .format(ILibDateOptions(year: 22, month: 22, week: 22, day: 22))); + textformatted_20.add(fmt + .format(ILibDateOptions(year: 20, month: 20, week: 20, day: 20))); + + clockformatted_31 + .add(fmt.format(ILibDateOptions(hour: 31, minute: 31, second: 31))); + clockformatted_22 + .add(fmt.format(ILibDateOptions(hour: 22, minute: 22, second: 22))); + clockformatted_20 + .add(fmt.format(ILibDateOptions(hour: 20, minute: 20, second: 20))); + } + + expect(textformatted_31[0], '31 год 31 месяц 31 неделя 31 день'); + expect(textformatted_31[1], '31 г. 31 мес. 31 нед. 31 дн.'); + expect(textformatted_31[2], '31 г. 31 м. 31 н. 31 д.'); + expect(textformatted_31[3], '31 г. 31 м. 31 н. 31 д.'); + + expect(textformatted_22[0], '22 года 22 месяца 22 недели 22 дня'); + expect(textformatted_22[1], '22 г. 22 мес. 22 нед. 22 дн.'); + expect(textformatted_22[2], '22 г. 22 м. 22 н. 22 д.'); + expect(textformatted_22[3], '22 г. 22 м. 22 н. 22 д.'); + + expect(textformatted_20[0], '20 лет 20 месяцев 20 недель 20 дней'); + expect(textformatted_20[1], '20 л. 20 мес. 20 нед. 20 дн.'); + expect(textformatted_20[2], '20 л. 20 м. 20 н. 20 д.'); + expect(textformatted_20[3], '20 л. 20 м. 20 н. 20 д.'); + + expect(clockformatted_31[0], '31 час 31 минута 31 секунда'); + expect(clockformatted_31[1], '31 ч 31 мин 31 с'); + expect(clockformatted_31[2], '31 ч 31 мин 31 с'); + expect(clockformatted_31[3], '31 ч 31 мин 31 с'); + + expect(clockformatted_22[0], '22 часа 22 минуты 22 секунды'); + expect(clockformatted_22[1], '22 ч 22 мин 22 с'); + expect(clockformatted_22[2], '22 ч 22 мин 22 с'); + expect(clockformatted_22[3], '22 ч 22 мин 22 с'); + + expect(clockformatted_20[0], '20 часов 20 минут 20 секунд'); + expect(clockformatted_20[1], '20 ч 20 мин 20 с'); + expect(clockformatted_20[2], '20 ч 20 мин 20 с'); + expect(clockformatted_20[3], '20 ч 20 мин 20 с'); + }); + test('testDurFmt_ru_GE', () { + // 21 4 19 + final List textformatted_21 = []; + final List textformatted_4 = []; + final List textformatted_19 = []; + final List clockformatted_21 = []; + final List clockformatted_4 = []; + final List clockformatted_19 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ru-GE', style: 'text', length: length[i])); + + textformatted_21.add(fmt + .format(ILibDateOptions(year: 21, month: 21, week: 21, day: 21))); + textformatted_4.add( + fmt.format(ILibDateOptions(year: 4, month: 4, week: 4, day: 4))); + textformatted_19.add(fmt + .format(ILibDateOptions(year: 19, month: 19, week: 19, day: 19))); + + clockformatted_21 + .add(fmt.format(ILibDateOptions(hour: 21, minute: 21, second: 21))); + clockformatted_4 + .add(fmt.format(ILibDateOptions(hour: 4, minute: 4, second: 4))); + clockformatted_19 + .add(fmt.format(ILibDateOptions(hour: 19, minute: 19, second: 19))); + } + + expect(textformatted_21[0], '21 год 21 месяц 21 неделя 21 день'); + expect(textformatted_21[1], '21 г. 21 мес. 21 нед. 21 дн.'); + expect(textformatted_21[2], '21 г. 21 м. 21 н. 21 д.'); + expect(textformatted_21[3], '21 г. 21 м. 21 н. 21 д.'); + + expect(textformatted_4[0], '4 года 4 месяца 4 недели 4 дня'); + expect(textformatted_4[1], '4 г. 4 мес. 4 нед. 4 дн.'); + expect(textformatted_4[2], '4 г. 4 м. 4 н. 4 д.'); + expect(textformatted_4[3], '4 г. 4 м. 4 н. 4 д.'); + + expect(textformatted_19[0], '19 лет 19 месяцев 19 недель 19 дней'); + expect(textformatted_19[1], '19 л. 19 мес. 19 нед. 19 дн.'); + expect(textformatted_19[2], '19 л. 19 м. 19 н. 19 д.'); + expect(textformatted_19[3], '19 л. 19 м. 19 н. 19 д.'); + + expect(clockformatted_21[0], '21 час 21 минута 21 секунда'); + expect(clockformatted_21[1], '21 ч 21 мин 21 с'); + expect(clockformatted_21[2], '21 ч 21 мин 21 с'); + expect(clockformatted_21[3], '21 ч 21 мин 21 с'); + + expect(clockformatted_4[0], '4 часа 4 минуты 4 секунды'); + expect(clockformatted_4[1], '4 ч 4 мин 4 с'); + expect(clockformatted_4[2], '4 ч 4 мин 4 с'); + expect(clockformatted_4[3], '4 ч 4 мин 4 с'); + + expect(clockformatted_19[0], '19 часов 19 минут 19 секунд'); + expect(clockformatted_19[1], '19 ч 19 мин 19 с'); + expect(clockformatted_19[2], '19 ч 19 мин 19 с'); + expect(clockformatted_19[3], '19 ч 19 мин 19 с'); + }); + test('testDurFmt_ru_RU', () { + // 31 32 19 + final List textformatted_31 = []; + final List textformatted_32 = []; + final List textformatted_19 = []; + final List clockformatted_31 = []; + final List clockformatted_32 = []; + final List clockformatted_19 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ru-RU', style: 'text', length: length[i])); + + textformatted_31.add(fmt + .format(ILibDateOptions(year: 31, month: 31, week: 31, day: 31))); + textformatted_32.add(fmt + .format(ILibDateOptions(year: 32, month: 32, week: 32, day: 32))); + textformatted_19.add(fmt + .format(ILibDateOptions(year: 19, month: 19, week: 19, day: 19))); + + clockformatted_31 + .add(fmt.format(ILibDateOptions(hour: 31, minute: 31, second: 31))); + clockformatted_32 + .add(fmt.format(ILibDateOptions(hour: 32, minute: 32, second: 32))); + clockformatted_19 + .add(fmt.format(ILibDateOptions(hour: 19, minute: 19, second: 19))); + } + + expect(textformatted_31[0], '31 год 31 месяц 31 неделя 31 день'); + expect(textformatted_31[1], '31 г. 31 мес. 31 нед. 31 дн.'); + expect(textformatted_31[2], '31 г. 31 м. 31 н. 31 д.'); + expect(textformatted_31[3], '31 г. 31 м. 31 н. 31 д.'); + + expect(textformatted_32[0], '32 года 32 месяца 32 недели 32 дня'); + expect(textformatted_32[1], '32 г. 32 мес. 32 нед. 32 дн.'); + expect(textformatted_32[2], '32 г. 32 м. 32 н. 32 д.'); + expect(textformatted_32[3], '32 г. 32 м. 32 н. 32 д.'); + + expect(textformatted_19[0], '19 лет 19 месяцев 19 недель 19 дней'); + expect(textformatted_19[1], '19 л. 19 мес. 19 нед. 19 дн.'); + expect(textformatted_19[2], '19 л. 19 м. 19 н. 19 д.'); + expect(textformatted_19[3], '19 л. 19 м. 19 н. 19 д.'); + + expect(clockformatted_31[0], '31 час 31 минута 31 секунда'); + expect(clockformatted_31[1], '31 ч 31 мин 31 с'); + expect(clockformatted_31[2], '31 ч 31 мин 31 с'); + expect(clockformatted_31[3], '31 ч 31 мин 31 с'); + + expect(clockformatted_32[0], '32 часа 32 минуты 32 секунды'); + expect(clockformatted_32[1], '32 ч 32 мин 32 с'); + expect(clockformatted_32[2], '32 ч 32 мин 32 с'); + expect(clockformatted_32[3], '32 ч 32 мин 32 с'); + + expect(clockformatted_19[0], '19 часов 19 минут 19 секунд'); + expect(clockformatted_19[1], '19 ч 19 мин 19 с'); + expect(clockformatted_19[2], '19 ч 19 мин 19 с'); + expect(clockformatted_19[3], '19 ч 19 мин 19 с'); + }); + test('testDurFmt_ru_UA', () { + // 1 2 5 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_5 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_5 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ru-UA', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_5.add( + fmt.format(ILibDateOptions(year: 5, month: 5, week: 5, day: 5))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_5 + .add(fmt.format(ILibDateOptions(hour: 5, minute: 5, second: 5))); + } + + expect(textformatted_1[0], '1 год 1 месяц 1 неделя 1 день'); + expect(textformatted_1[1], '1 г. 1 мес. 1 нед. 1 дн.'); + expect(textformatted_1[2], '1 г. 1 м. 1 н. 1 д.'); + expect(textformatted_1[3], '1 г. 1 м. 1 н. 1 д.'); + + expect(textformatted_2[0], '2 года 2 месяца 2 недели 2 дня'); + expect(textformatted_2[1], '2 г. 2 мес. 2 нед. 2 дн.'); + expect(textformatted_2[2], '2 г. 2 м. 2 н. 2 д.'); + expect(textformatted_2[3], '2 г. 2 м. 2 н. 2 д.'); + + expect(textformatted_5[0], '5 лет 5 месяцев 5 недель 5 дней'); + expect(textformatted_5[1], '5 л. 5 мес. 5 нед. 5 дн.'); + expect(textformatted_5[2], '5 л. 5 м. 5 н. 5 д.'); + expect(textformatted_5[3], '5 л. 5 м. 5 н. 5 д.'); + + expect(clockformatted_1[0], '1 час 1 минута 1 секунда'); + expect(clockformatted_1[1], '1 ч 1 мин 1 с'); + expect(clockformatted_1[2], '1 ч 1 мин 1 с'); + expect(clockformatted_1[3], '1 ч 1 мин 1 с'); + + expect(clockformatted_2[0], '2 часа 2 минуты 2 секунды'); + expect(clockformatted_2[1], '2 ч 2 мин 2 с'); + expect(clockformatted_2[2], '2 ч 2 мин 2 с'); + expect(clockformatted_2[3], '2 ч 2 мин 2 с'); + + expect(clockformatted_5[0], '5 часов 5 минут 5 секунд'); + expect(clockformatted_5[1], '5 ч 5 мин 5 с'); + expect(clockformatted_5[2], '5 ч 5 мин 5 с'); + expect(clockformatted_5[3], '5 ч 5 мин 5 с'); + }); + test('testDurFmt_sk_SK', () { + // 1 2 5 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_5 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_5 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'sk-SK', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_5.add( + fmt.format(ILibDateOptions(year: 5, month: 5, week: 5, day: 5))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_5 + .add(fmt.format(ILibDateOptions(hour: 5, minute: 5, second: 5))); + } + + expect(textformatted_1[0], '1 rok, 1 mesiac, 1 týždeň, 1 deň'); + expect(textformatted_1[1], '1 r., 1 mes., 1 týž., 1 deň'); + expect(textformatted_1[2], '1 r., 1 m., 1 t., 1 d.'); + expect(textformatted_1[3], '1 r., 1 m., 1 t., 1 d.'); + + expect(textformatted_2[0], '2 roky, 2 mesiace, 2 týždne, 2 dni'); + expect(textformatted_2[1], '2 r., 2 mes., 2 týž., 2 dni'); + expect(textformatted_2[2], '2 r., 2 m., 2 t., 2 d.'); + expect(textformatted_2[3], '2 r., 2 m., 2 t., 2 d.'); + + expect(textformatted_5[0], '5 rokov, 5 mesiacov, 5 týždňov, 5 dní'); + expect(textformatted_5[1], '5 r., 5 mes., 5 týž., 5 dní'); + expect(textformatted_5[2], '5 r., 5 m., 5 t., 5 d.'); + expect(textformatted_5[3], '5 r., 5 m., 5 t., 5 d.'); + + expect(clockformatted_1[0], '1 hodina, 1 minúta, 1 sekunda'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1 h, 1 min, 1 s'); + expect(clockformatted_1[3], '1 h, 1 min, 1 s'); + + expect(clockformatted_2[0], '2 hodiny, 2 minúty, 2 sekundy'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2 h, 2 min, 2 s'); + expect(clockformatted_2[3], '2 h, 2 min, 2 s'); + + expect(clockformatted_5[0], '5 hodín, 5 minút, 5 sekúnd'); + expect(clockformatted_5[1], '5 h, 5 min, 5 s'); + expect(clockformatted_5[2], '5 h, 5 min, 5 s'); + expect(clockformatted_5[3], '5 h, 5 min, 5 s'); + }); + test('testDurFmt_sl_SI', () { + // 1 2 3 5 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_5 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_5 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'sl-SI', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_5.add( + fmt.format(ILibDateOptions(year: 5, month: 5, week: 5, day: 5))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_5 + .add(fmt.format(ILibDateOptions(hour: 5, minute: 5, second: 5))); + } + + expect(textformatted_1[0], '1 leto, 1 mesec, 1 teden in 1 dan'); + expect(textformatted_1[1], '1 l, 1 m, 1 t, 1 d'); + expect(textformatted_1[2], '1 l, 1 m, 1 t, 1 d'); + expect(textformatted_1[3], '1 l, 1 m, 1 t, 1 d'); + + expect(textformatted_2[0], '2 leti, 2 meseca, 2 tedna in 2 dneva'); + expect(textformatted_2[1], '2 l, 2 m, 2 t, 2 d'); + expect(textformatted_2[2], '2 l, 2 m, 2 t, 2 d'); + expect(textformatted_2[3], '2 l, 2 m, 2 t, 2 d'); + + expect(textformatted_3[0], '3 let, 3 meseci, 3 tedni in 3 dni'); + expect(textformatted_3[1], '3 l, 3 m, 3 t, 3 d'); + expect(textformatted_3[2], '3 l, 3 m, 3 t, 3 d'); + expect(textformatted_3[3], '3 l, 3 m, 3 t, 3 d'); + + expect(textformatted_5[0], '5 let, 5 mesecev, 5 tednov in 5 dni'); + expect(textformatted_5[1], '5 l, 5 m, 5 t, 5 d'); + expect(textformatted_5[2], '5 l, 5 m, 5 t, 5 d'); + expect(textformatted_5[3], '5 l, 5 m, 5 t, 5 d'); + + expect(clockformatted_1[0], '1 ura, 1 minuta in 1 sekunda'); + expect(clockformatted_1[1], '1 h, 1 min, 1 sek.'); + expect(clockformatted_1[2], '1 h, 1 min, 1 s'); + expect(clockformatted_1[3], '1 h, 1 min, 1 s'); + + expect(clockformatted_2[0], '2 uri, 2 minuti in 2 sekundi'); + expect(clockformatted_2[1], '2 h, 2 min, 2 sek.'); + expect(clockformatted_2[2], '2 h, 2 min, 2 s'); + expect(clockformatted_2[3], '2 h, 2 min, 2 s'); + + expect(clockformatted_3[0], '3 ure, 3 minute in 3 sekunde'); + expect(clockformatted_3[1], '3 h, 3 min, 3 sek.'); + expect(clockformatted_3[2], '3 h, 3 min, 3 s'); + expect(clockformatted_3[3], '3 h, 3 min, 3 s'); + + expect(clockformatted_5[0], '5 ur, 5 minut in 5 sekund'); + expect(clockformatted_5[1], '5 h, 5 min, 5 sek.'); + expect(clockformatted_5[2], '5 h, 5 min, 5 s'); + expect(clockformatted_5[3], '5 h, 5 min, 5 s'); + }); + test('testDurFmt_sq_AL', () { + // 1 16 + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'sq-AL', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 vit, 1 muaj, 1 javë e 1 ditë'); + expect(textformatted_1[1], '1 vit, 1 muaj, 1 javë, 1 ditë'); + expect(textformatted_1[2], '1 vit, 1 muaj, 1 javë, 1 ditë'); + expect(textformatted_1[3], '1 vit, 1 muaj, 1 javë, 1 ditë'); + + expect(textformatted_16[0], '16 vjet, 16 muaj, 16 javë e 16 ditë'); + expect(textformatted_16[1], '16 vjet, 16 muaj, 16 javë, 16 ditë'); + expect(textformatted_16[2], '16 vjet, 16 muaj, 16 javë, 16 ditë'); + expect(textformatted_16[3], '16 vjet, 16 muaj, 16 javë, 16 ditë'); + + expect(clockformatted_1[0], '1 orë, 1 minutë e 1 sekondë'); + expect(clockformatted_1[1], '1 orë, 1 min., 1 sek.'); + expect(clockformatted_1[2], '1 orë, 1 min., 1 sek.'); + expect(clockformatted_1[3], '1 orë, 1 min., 1 sek.'); + + expect(clockformatted_16[0], '16 orë, 16 minuta e 16 sekonda'); + expect(clockformatted_16[1], '16 orë, 16 min., 16 sek.'); + expect(clockformatted_16[2], '16 orë, 16 min., 16 sek.'); + expect(clockformatted_16[3], '16 orë, 16 min., 16 sek.'); + }); + test('testDurFmt_sq_ME', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'sq-ME', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 vit, 1 muaj, 1 javë e 1 ditë'); + expect(textformatted_1[1], '1 vit, 1 muaj, 1 javë, 1 ditë'); + expect(textformatted_1[2], '1 vit, 1 muaj, 1 javë, 1 ditë'); + expect(textformatted_1[3], '1 vit, 1 muaj, 1 javë, 1 ditë'); + + expect(textformatted_17[0], '17 vjet, 17 muaj, 17 javë e 17 ditë'); + expect(textformatted_17[1], '17 vjet, 17 muaj, 17 javë, 17 ditë'); + expect(textformatted_17[2], '17 vjet, 17 muaj, 17 javë, 17 ditë'); + expect(textformatted_17[3], '17 vjet, 17 muaj, 17 javë, 17 ditë'); + + expect(clockformatted_1[0], '1 orë, 1 minutë e 1 sekondë'); + expect(clockformatted_1[1], '1 orë, 1 min., 1 sek.'); + expect(clockformatted_1[2], '1 orë, 1 min., 1 sek.'); + expect(clockformatted_1[3], '1 orë, 1 min., 1 sek.'); + + expect(clockformatted_17[0], '17 orë, 17 minuta e 17 sekonda'); + expect(clockformatted_17[1], '17 orë, 17 min., 17 sek.'); + expect(clockformatted_17[2], '17 orë, 17 min., 17 sek.'); + expect(clockformatted_17[3], '17 orë, 17 min., 17 sek.'); + }); + test('testDurFmt_sv_FI', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'sv-FI', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 år, 1 månad, 1 vecka, 1 dygn'); + expect(textformatted_1[1], '1 år, 1 mån, 1 v, 1 d'); + expect(textformatted_1[2], '1å, 1m, 1v, 1d'); + expect(textformatted_1[3], '1å 1m 1v 1d'); + + expect(textformatted_2[0], '2 år, 2 månader, 2 veckor, 2 dygn'); + expect(textformatted_2[1], '2 år, 2 mån, 2 v, 2 d'); + expect(textformatted_2[2], '2å, 2m, 2v, 2d'); + expect(textformatted_2[3], '2å 2m 2v 2d'); + + expect(clockformatted_1[0], '1 timme, 1 minut, 1 sekund'); + expect(clockformatted_1[1], '1 tim, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 timmar, 2 minuter, 2 sekunder'); + expect(clockformatted_2[1], '2 tim, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_sv_SE', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'sv-SE', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 år, 1 månad, 1 vecka, 1 dygn'); + expect(textformatted_1[1], '1 år, 1 mån, 1 v, 1 d'); + expect(textformatted_1[2], '1å, 1m, 1v, 1d'); + expect(textformatted_1[3], '1å 1m 1v 1d'); + + expect(textformatted_17[0], '17 år, 17 månader, 17 veckor, 17 dygn'); + expect(textformatted_17[1], '17 år, 17 mån, 17 v, 17 d'); + expect(textformatted_17[2], '17å, 17m, 17v, 17d'); + expect(textformatted_17[3], '17å 17m 17v 17d'); + + expect(clockformatted_1[0], '1 timme, 1 minut, 1 sekund'); + expect(clockformatted_1[1], '1 tim, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_17[0], '17 timmar, 17 minuter, 17 sekunder'); + expect(clockformatted_17[1], '17 tim, 17 min, 17 s'); + expect(clockformatted_17[2], '17h, 17m, 17s'); + expect(clockformatted_17[3], '17h 17m 17s'); + }); + test('testDurFmt_ta_IN', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ta-IN', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 ஆண்டு, 1 மாதம், 1 வாரம், 1 நாள்'); + expect(textformatted_1[1], '1 ஆண்டு, 1 மாதம், 1 வாரம், 1 நாள்'); + expect(textformatted_1[2], '1 ஆ 1 மா 1 வா 1 நா'); + expect(textformatted_1[3], '1 ஆ 1 மா 1 வா 1 நா'); + + expect( + textformatted_2[0], '2 ஆண்டுகள், 2 மாதங்கள், 2 வாரங்கள், 2 நாட்கள்'); + expect(textformatted_2[1], '2 ஆண்டு., 2 மாத., 2 வார., 2 நாட்கள்'); + expect(textformatted_2[2], '2 ஆ 2 மா 2 வா 2 நா'); + expect(textformatted_2[3], '2 ஆ 2 மா 2 வா 2 நா'); + + expect(clockformatted_1[0], '1 மணிநேரம், 1 நிமிடம், 1 விநாடி'); + expect(clockformatted_1[1], '1 மணிநேரம், 1 நிமிடம், 1 விநாடி'); + expect(clockformatted_1[2], '1 ம.நே. 1 நிமி. 1 வி.'); + expect(clockformatted_1[3], '1 ம.நே. 1 நிமி. 1 வி.'); + + expect(clockformatted_2[0], '2 மணிநேரங்கள், 2 நிமிடங்கள், 2 விநாடிகள்'); + expect(clockformatted_2[1], '2 மணிநேரம், 2 நிமிட, 2 விநாடி'); + expect(clockformatted_2[2], '2 ம.நே. 2 நிமி. 2 வி.'); + expect(clockformatted_2[3], '2 ம.நே. 2 நிமி. 2 வி.'); + }); + test('testDurFmt_te_IN', () { + // 1 16 + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'te-IN', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 సంవత్సరం, 1 నెల, 1 వారం, 1 రోజు'); + expect(textformatted_1[1], '1 సం., 1 నె., 1 వా., 1 రోజు'); + expect(textformatted_1[2], '1సం, 1నె, 1వా, 1రో'); + expect(textformatted_1[3], '1సం, 1నె, 1వా, 1రో'); + + expect( + textformatted_16[0], '16 సంవత్సరాలు, 16 నెలలు, 16 వారాలు, 16 రోజులు'); + expect(textformatted_16[1], '16 సం., 16 నె., 16 వా., 16 రోజులు'); + expect(textformatted_16[2], '16సం, 16నె, 16వా, 16రో'); + expect(textformatted_16[3], '16సం, 16నె, 16వా, 16రో'); + + expect(clockformatted_1[0], '1 గంట, 1 నిమిషం, 1 సెకను'); + expect(clockformatted_1[1], '1 గం., 1 నిమి., 1 సె.'); + expect(clockformatted_1[2], '1గం, 1ని, 1సె'); + expect(clockformatted_1[3], '1గం, 1ని, 1సె'); + + expect(clockformatted_16[0], '16 గంటలు, 16 నిమిషాలు, 16 సెకన్లు'); + expect(clockformatted_16[1], '16 గం., 16 నిమి., 16 సెక.'); + expect(clockformatted_16[2], '16గం, 16ని, 16సె'); + expect(clockformatted_16[3], '16గం, 16ని, 16సె'); + }); + test('testDurFmt_th_TH', () { + // 1 16 + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'th-TH', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 ปี 1 เดือน 1 สัปดาห์ และ 1 วัน'); + expect(textformatted_1[1], '1 ปี 1 เดือน 1 สัปดาห์ 1 วัน'); + expect(textformatted_1[2], '1ปี 1เดือน 1สัปดาห์ 1วัน'); + expect(textformatted_1[3], '1ปี 1เดือน 1สัปดาห์ 1วัน'); + + expect(textformatted_16[0], '16 ปี 16 เดือน 16 สัปดาห์ และ 16 วัน'); + expect(textformatted_16[1], '16 ปี 16 เดือน 16 สัปดาห์ 16 วัน'); + expect(textformatted_16[2], '16ปี 16เดือน 16สัปดาห์ 16วัน'); + expect(textformatted_16[3], '16ปี 16เดือน 16สัปดาห์ 16วัน'); + + expect(clockformatted_1[0], '1 ชั่วโมง 1 นาที และ 1 วินาที'); + expect(clockformatted_1[1], '1 ชม. 1 นาที 1 วิ'); + expect(clockformatted_1[2], '1ชม. 1นาที 1วิ'); + expect(clockformatted_1[3], '1ชม. 1นาที 1วิ'); + + expect(clockformatted_16[0], '16 ชั่วโมง 16 นาที และ 16 วินาที'); + expect(clockformatted_16[1], '16 ชม. 16 นาที 16 วิ'); + expect(clockformatted_16[2], '16ชม. 16นาที 16วิ'); + expect(clockformatted_16[3], '16ชม. 16นาที 16วิ'); + }); + test('testDurFmt_tr_AM', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'tr-AM', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 yıl 1 ay 1 hafta 1 gün'); + expect(textformatted_1[1], '1 yıl 1 ay 1 hf. 1 gün'); + expect(textformatted_1[2], '1y 1a 1h 1g'); + expect(textformatted_1[3], '1y 1a 1h 1g'); + + expect(textformatted_2[0], '2 yıl 2 ay 2 hafta 2 gün'); + expect(textformatted_2[1], '2 yıl 2 ay 2 hf. 2 gün'); + expect(textformatted_2[2], '2y 2a 2h 2g'); + expect(textformatted_2[3], '2y 2a 2h 2g'); + + expect(clockformatted_1[0], '1 saat 1 dakika 1 saniye'); + expect(clockformatted_1[1], '1 sa. 1 dk. 1 sn.'); + expect(clockformatted_1[2], '1 sa 1d 1sn'); + expect(clockformatted_1[3], '1 sa 1d 1sn'); + + expect(clockformatted_2[0], '2 saat 2 dakika 2 saniye'); + expect(clockformatted_2[1], '2 sa. 2 dk. 2 sn.'); + expect(clockformatted_2[2], '2s 2d 2sn'); + expect(clockformatted_2[3], '2s 2d 2sn'); + }); + test('testDurFmt_tr_AZ', () { + // 1 16 + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'tr-AZ', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 yıl 1 ay 1 hafta 1 gün'); + expect(textformatted_1[1], '1 yıl 1 ay 1 hf. 1 gün'); + expect(textformatted_1[2], '1y 1a 1h 1g'); + expect(textformatted_1[3], '1y 1a 1h 1g'); + + expect(textformatted_16[0], '16 yıl 16 ay 16 hafta 16 gün'); + expect(textformatted_16[1], '16 yıl 16 ay 16 hf. 16 gün'); + expect(textformatted_16[2], '16y 16a 16h 16g'); + expect(textformatted_16[3], '16y 16a 16h 16g'); + + expect(clockformatted_1[0], '1 saat 1 dakika 1 saniye'); + expect(clockformatted_1[1], '1 sa. 1 dk. 1 sn.'); + expect(clockformatted_1[2], '1 sa 1d 1sn'); + expect(clockformatted_1[3], '1 sa 1d 1sn'); + + expect(clockformatted_16[0], '16 saat 16 dakika 16 saniye'); + expect(clockformatted_16[1], '16 sa. 16 dk. 16 sn.'); + expect(clockformatted_16[2], '16s 16d 16sn'); + expect(clockformatted_16[3], '16s 16d 16sn'); + }); + test('testDurFmt_tr_CY', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'tr-CY', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 yıl 1 ay 1 hafta 1 gün'); + expect(textformatted_1[1], '1 yıl 1 ay 1 hf. 1 gün'); + expect(textformatted_1[2], '1y 1a 1h 1g'); + expect(textformatted_1[3], '1y 1a 1h 1g'); + + expect(textformatted_17[0], '17 yıl 17 ay 17 hafta 17 gün'); + expect(textformatted_17[1], '17 yıl 17 ay 17 hf. 17 gün'); + expect(textformatted_17[2], '17y 17a 17h 17g'); + expect(textformatted_17[3], '17y 17a 17h 17g'); + + expect(clockformatted_1[0], '1 saat 1 dakika 1 saniye'); + expect(clockformatted_1[1], '1 sa. 1 dk. 1 sn.'); + expect(clockformatted_1[2], '1 sa 1d 1sn'); + expect(clockformatted_1[3], '1 sa 1d 1sn'); + + expect(clockformatted_17[0], '17 saat 17 dakika 17 saniye'); + expect(clockformatted_17[1], '17 sa. 17 dk. 17 sn.'); + expect(clockformatted_17[2], '17s 17d 17sn'); + expect(clockformatted_17[3], '17s 17d 17sn'); + }); + test('testDurFmt_tr_TR', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'tr-TR', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 yıl 1 ay 1 hafta 1 gün'); + expect(textformatted_1[1], '1 yıl 1 ay 1 hf. 1 gün'); + expect(textformatted_1[2], '1y 1a 1h 1g'); + expect(textformatted_1[3], '1y 1a 1h 1g'); + + expect(textformatted_2[0], '2 yıl 2 ay 2 hafta 2 gün'); + expect(textformatted_2[1], '2 yıl 2 ay 2 hf. 2 gün'); + expect(textformatted_2[2], '2y 2a 2h 2g'); + expect(textformatted_2[3], '2y 2a 2h 2g'); + + expect(clockformatted_1[0], '1 saat 1 dakika 1 saniye'); + expect(clockformatted_1[1], '1 sa. 1 dk. 1 sn.'); + expect(clockformatted_1[2], '1 sa 1d 1sn'); + expect(clockformatted_1[3], '1 sa 1d 1sn'); + + expect(clockformatted_2[0], '2 saat 2 dakika 2 saniye'); + expect(clockformatted_2[1], '2 sa. 2 dk. 2 sn.'); + expect(clockformatted_2[2], '2s 2d 2sn'); + expect(clockformatted_2[3], '2s 2d 2sn'); + }); + test('testDurFmt_uk_UA', () { + // 1 2 5 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_5 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_5 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'uk-UA', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_5.add( + fmt.format(ILibDateOptions(year: 5, month: 5, week: 5, day: 5))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_5 + .add(fmt.format(ILibDateOptions(hour: 5, minute: 5, second: 5))); + } + + expect(textformatted_1[0], '1 рік, 1 місяць, 1 тиждень і 1 день'); + expect(textformatted_1[1], '1 р., 1 міс., 1 тиж., 1 дн.'); + expect(textformatted_1[2], '1р, 1м, 1т, 1д'); + expect(textformatted_1[3], '1р, 1м, 1т, 1д'); + + expect(textformatted_2[0], '2 роки, 2 місяці, 2 тижні і 2 дні'); + expect(textformatted_2[1], '2 р., 2 міс., 2 тиж., 2 дн.'); + expect(textformatted_2[2], '2р, 2м, 2т, 2д'); + expect(textformatted_2[3], '2р, 2м, 2т, 2д'); + + expect(textformatted_5[0], '5 років, 5 місяців, 5 тижнів і 5 днів'); + expect(textformatted_5[1], '5 р., 5 міс., 5 тиж., 5 дн.'); + expect(textformatted_5[2], '5р, 5м, 5т, 5д'); + expect(textformatted_5[3], '5р, 5м, 5т, 5д'); + + expect(clockformatted_1[0], '1 година, 1 хвилина і 1 секунда'); + expect(clockformatted_1[1], '1 год, 1 хв, 1 с'); + expect(clockformatted_1[2], '1г, 1х, 1с'); + expect(clockformatted_1[3], '1г, 1х, 1с'); + + expect(clockformatted_2[0], '2 години, 2 хвилини і 2 секунди'); + expect(clockformatted_2[1], '2 год, 2 хв, 2 с'); + expect(clockformatted_2[2], '2г, 2х, 2с'); + expect(clockformatted_2[3], '2г, 2х, 2с'); + + expect(clockformatted_5[0], '5 годин, 5 хвилин і 5 секунд'); + expect(clockformatted_5[1], '5 год, 5 хв, 5 с'); + expect(clockformatted_5[2], '5г, 5х, 5с'); + expect(clockformatted_5[3], '5г, 5х, 5с'); + }); + test('testDurFmt_ur_IN', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ur-IN', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '‏1 سال, 1 مہینہ, 1 ہفتہ، اور 1 دن'); + expect(textformatted_1[1], '‏1 سال، 1 مہینہ، 1 ہفتہ، 1 دن'); + expect(textformatted_1[2], '‏1 سال، 1 مہینہ، 1 ہفتہ، 1 دن'); + expect(textformatted_1[3], '‏1 سال، 1 مہینہ، 1 ہفتہ، 1 دن'); + + expect(textformatted_2[0], '‏2 سال, 2 مہینے, 2 ہفتے، اور 2 دن'); + expect(textformatted_2[1], '‏2 سال، 2 مہینے، 2 ہفتے، 2 دن'); + expect(textformatted_2[2], '‏2 سال، 2 مہینے، 2 ہفتے، 2 دن'); + expect(textformatted_2[3], '‏2 سال، 2 مہینے، 2 ہفتے، 2 دن'); + + expect(clockformatted_1[0], '‏1 گھنٹہ, 1 منٹ، اور 1 سیکنڈ'); + expect(clockformatted_1[1], '‏1 گھنٹہ، 1 منٹ، 1 سیکنڈ'); + expect(clockformatted_1[2], '‏1 گھنٹہ، 1 منٹ، 1 سیکنڈ'); + expect(clockformatted_1[3], '‏1 گھنٹہ، 1 منٹ، 1 سیکنڈ'); + + expect(clockformatted_2[0], '‏2 گھنٹے, 2 منٹ، اور 2 سیکنڈ'); + expect(clockformatted_2[1], '‏2 گھنٹے، 2 منٹ، 2 سیکنڈ'); + expect(clockformatted_2[2], '‏2 گھنٹے، 2 منٹ، 2 سیکنڈ'); + expect(clockformatted_2[3], '‏2 گھنٹے، 2 منٹ، 2 سیکنڈ'); + }); + test('testDurFmt_uz_Latn_UZ', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'uz-Latn-UZ', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 yil 1 oy 1 hafta 1 kun'); + expect(textformatted_1[1], '1 yil 1 oy 1 hafta 1 kun'); + expect(textformatted_1[2], '1 yil 1 oy 1 hafta 1 kun'); + expect(textformatted_1[3], '1 yil 1 oy 1 hafta 1 kun'); + + expect(textformatted_2[0], '2 yil 2 oy 2 hafta 2 kun'); + expect(textformatted_2[1], '2 yil 2 oy 2 hafta 2 kun'); + expect(textformatted_2[2], '2 yil 2 oy 2 hafta 2 kun'); + expect(textformatted_2[3], '2 yil 2 oy 2 hafta 2 kun'); + + expect(clockformatted_1[0], '1 soat 1 daqiqa 1 soniya'); + expect(clockformatted_1[1], '1 soat 1 daq. 1 son.'); + expect(clockformatted_1[2], '1 soat 1 daq. 1 s'); + expect(clockformatted_1[3], '1 soat 1 daq. 1 s'); + + expect(clockformatted_2[0], '2 soat 2 daqiqa 2 soniya'); + expect(clockformatted_2[1], '2 soat 2 daq. 2 son.'); + expect(clockformatted_2[2], '2 soat 2 daq. 2 s'); + expect(clockformatted_2[3], '2 soat 2 daq. 2 s'); + }); + test('testDurFmt_testDurFmt_vi_VN', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'vi-VN', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 năm, 1 tháng, 1 tuần, 1 ngày'); + expect(textformatted_1[1], '1 năm, 1 tháng, 1 tuần, 1 ngày'); + expect(textformatted_1[2], '1 năm, 1 tháng, 1 tuần, 1 ngày'); + expect(textformatted_1[3], '1 năm 1 tháng 1 tuần 1 ngày'); + + expect(textformatted_2[0], '2 năm, 2 tháng, 2 tuần, 2 ngày'); + expect(textformatted_2[1], '2 năm, 2 tháng, 2 tuần, 2 ngày'); + expect(textformatted_2[2], '2 năm, 2 tháng, 2 tuần, 2 ngày'); + expect(textformatted_2[3], '2 năm 2 tháng 2 tuần 2 ngày'); + + expect(clockformatted_1[0], '1 giờ, 1 phút, 1 giây'); + expect(clockformatted_1[1], '1 giờ, 1 phút, 1 giây'); + expect(clockformatted_1[2], '1 giờ, 1 phút, 1 giây'); + expect(clockformatted_1[3], '1 giờ 1 phút 1 giây'); + + expect(clockformatted_2[0], '2 giờ, 2 phút, 2 giây'); + expect(clockformatted_2[1], '2 giờ, 2 phút, 2 giây'); + expect(clockformatted_2[2], '2 giờ, 2 phút, 2 giây'); + expect(clockformatted_2[3], '2 giờ 2 phút 2 giây'); + }); + test('testDurFmt_zh_Hans_CN', () { + // 1 + final List textformatted_1 = []; + final List clockformatted_1 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'zh-Hans-CN', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + } + + expect(textformatted_1[0], '1年1个月1周1天'); + expect(textformatted_1[1], '1年1个月1周1天'); + expect(textformatted_1[2], '1年1个月1周1天'); + expect(textformatted_1[3], '1年1个月1周1天'); + + expect(clockformatted_1[0], '1小时1分钟1秒钟'); + expect(clockformatted_1[1], '1小时1分钟1秒'); + expect(clockformatted_1[2], '1小时1分钟1秒'); + expect(clockformatted_1[3], '1小时1分钟1秒'); + }); + test('testDurFmt_zh_Hant_HK', () { + // 2 + final List textformatted_2 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'zh-Hant-HK', style: 'text', length: length[i])); + + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_2[0], '2 年 2 個月 2 星期 2 日'); + expect(textformatted_2[1], '2 年 2 個月 2 星期 2 日'); + expect(textformatted_2[2], '2年2個月2週2日'); + expect(textformatted_2[3], '2年2個月2週2日'); + + expect(clockformatted_2[0], '2 小時 2 分鐘 2 秒'); + expect(clockformatted_2[1], '2 小時 2 分鐘 2 秒'); + expect(clockformatted_2[2], '2小時2分2秒'); + expect(clockformatted_2[3], '2小時2分2秒'); + }); + test('testDurFmt_zh_Hant_TW', () { + // 1 + final List textformatted_1 = []; + final List clockformatted_1 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'zh-Hant-TW', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + } + + expect(textformatted_1[0], '1 年 1 個月 1 週 1 天'); + expect(textformatted_1[1], '1 年 1 個月 1 週 1 天'); + expect(textformatted_1[2], '1 年1 個月1 週1 天'); + expect(textformatted_1[3], '1 年1 個月1 週1 天'); + + expect(clockformatted_1[0], '1 小時 1 分鐘 1 秒'); + expect(clockformatted_1[1], '1 小時 1 分鐘 1 秒'); + expect(clockformatted_1[2], '1 小時1 分鐘1 秒'); + expect(clockformatted_1[3], '1 小時1 分鐘1 秒'); + }); + test('testDurFmt_en_GE', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-GE', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hr, 2 min, 2 sec'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_CN', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-CN', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hr, 2 min, 2 sec'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_MX', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-MX', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hr, 2 min, 2 sec'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_en_TW', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-TW', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hr, 2 min, 2 sec'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_mn_MN', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'mn-MN', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 жил 1 сар 1 долоо хоног 1 хоног'); + expect(textformatted_1[1], '1 жил 1 сар 1 д.х 1 хоног'); + expect(textformatted_1[2], '1ж 1с 1 д.х 1 хоног'); + expect(textformatted_1[3], '1ж 1с 1 д.х 1 хоног'); + + expect(textformatted_2[0], '2 жил 2 сар 2 долоо хоног 2 хоног'); + expect(textformatted_2[1], '2 жил 2 сар 2 д.х 2 хоног'); + expect(textformatted_2[2], '2ж 2с 2 д.х 2 хоног'); + expect(textformatted_2[3], '2ж 2с 2 д.х 2 хоног'); + + expect(clockformatted_1[0], '1 цаг 1 минут 1 секунд'); + expect(clockformatted_1[1], '1 цаг 1 мин 1 сек'); + expect(clockformatted_1[2], '1 ц 1 мин 1 сек'); + expect(clockformatted_1[3], '1 ц 1 мин 1 сек'); + + expect(clockformatted_2[0], '2 цаг 2 минут 2 секунд'); + expect(clockformatted_2[1], '2 цаг 2 мин 2 сек'); + expect(clockformatted_2[2], '2 ц 2 мин 2 сек'); + expect(clockformatted_2[3], '2 ц 2 мин 2 сек'); + }); + test('testDurFmt_es_CA', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-CA', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a, 1 m., 1 sem., 1 d'); + expect(textformatted_1[2], '1a, 1m, 1sem, 1d'); + expect(textformatted_1[3], '1a 1m 1sem 1d'); + + expect(textformatted_17[0], '17 años, 17 meses, 17 semanas y 17 días'); + expect(textformatted_17[1], '17 a, 17 m., 17 sem., 17 d'); + expect(textformatted_17[2], '17a, 17m, 17sem, 17d'); + expect(textformatted_17[3], '17a 17m 17sem 17d'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_17[0], '17 horas, 17 minutos y 17 segundos'); + expect(clockformatted_17[1], '17 h, 17 min, 17 s'); + expect(clockformatted_17[2], '17h, 17min, 17s'); + expect(clockformatted_17[3], '17h 17min 17s'); + }); + test('testDurFmt_af_ZA', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'af-ZA', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 jaar, 1 maand, 1 week, 1 dag'); + expect(textformatted_1[1], '1 j., 1 md., 1 w., 1 dag'); + expect(textformatted_1[2], '1 j., 1 md., 1 w., 1 d.'); + expect(textformatted_1[3], '1 j. 1 md. 1 w. 1 d.'); + + expect(textformatted_2[0], '2 jaar, 2 maande, 2 weke, 2 dae'); + expect(textformatted_2[1], '2 j., 2 md., 2 w., 2 dae'); + expect(textformatted_2[2], '2 j., 2 md., 2 w., 2 d.'); + expect(textformatted_2[3], '2 j. 2 md. 2 w. 2 d.'); + + expect(clockformatted_1[0], '1 uur, 1 minuut, 1 sekonde'); + expect(clockformatted_1[1], '1 u., 1 min., 1 s.'); + expect(clockformatted_1[2], '1 u., 1 min., 1 s.'); + expect(clockformatted_1[3], '1 u. 1 min. 1 s.'); + + expect(clockformatted_2[0], '2 uur, 2 minute, 2 sekondes'); + expect(clockformatted_2[1], '2 u., 2 min., 2 s.'); + expect(clockformatted_2[2], '2 u., 2 min., 2 s.'); + expect(clockformatted_2[3], '2 u. 2 min. 2 s.'); + }); + test('testDurFmt_am_ET', () { + // 1 18 + final List textformatted_1 = []; + final List textformatted_18 = []; + final List clockformatted_1 = []; + final List clockformatted_18 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'am-ET', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_18.add(fmt + .format(ILibDateOptions(year: 18, month: 18, week: 18, day: 18))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_18 + .add(fmt.format(ILibDateOptions(hour: 18, minute: 18, second: 18))); + } + + expect(textformatted_1[0], '1 ዓመት፣ 1 ወር፣ 1 ሳምንት እና 1 ቀናት'); + expect(textformatted_1[1], '1 ዓመት፣ 1 ወራት፣ 1 ሳምንት፣ 1 ቀናት'); + expect(textformatted_1[2], '1 ዓመት፣ 1 ወር፣ 1 ሳምንት፣ 1 ቀ'); + expect(textformatted_1[3], '1 ዓመት፣ 1 ወር፣ 1 ሳምንት፣ 1 ቀ'); + + expect(textformatted_18[0], '18 ዓመታት፣ 18 ወራት፣ 18 ሳምንታት እና 18 ቀናት'); + expect(textformatted_18[1], '18 ዓመታት፣ 18 ወራት፣ 18 ሳምንታት፣ 18 ቀናት'); + expect(textformatted_18[2], '18 ዓ፣ 18 ወር፣ 18 ሳምንት፣ 18 ቀ'); + expect(textformatted_18[3], '18 ዓ፣ 18 ወር፣ 18 ሳምንት፣ 18 ቀ'); + + expect(clockformatted_1[0], '1 ሰዓት፣ 1 ደቂቃ እና 1 ሰከንድ'); + expect(clockformatted_1[1], '1 ሰዓ፣ 1 ደቂ፣ 1 ሰከ'); + expect(clockformatted_1[2], '1 ሰ፣ 1 ደ፣ 1 ሰ'); + expect(clockformatted_1[3], '1 ሰ፣ 1 ደ፣ 1 ሰ'); + + expect(clockformatted_18[0], '18 ሰዓቶች፣ 18 ደቂቃዎች እና 18 ሰከንዶች'); + expect(clockformatted_18[1], '18 ሰዓ፣ 18 ደቂቃ፣ 18 ሰከ'); + expect(clockformatted_18[2], '18 ሰ፣ 18 ደ፣ 18 ሰ'); + expect(clockformatted_18[3], '18 ሰ፣ 18 ደ፣ 18 ሰ'); + }); + test('testDurFmt_ha_Latn_NG', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ha-Latn-NG', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], 'shekara 1, wata 1, mako 1, rana 1'); + expect(textformatted_1[1], 'shkr 1, wat 1, mk 1, rana 1'); + expect(textformatted_1[2], 'shkr 1, w1, m1, r1'); + expect(textformatted_1[3], 'shkr 1, w1, m1, r1'); + + expect(textformatted_2[0], 'shekaru 2, watanni 2, makonni 2, ranaku 2'); + expect(textformatted_2[1], 'shkru 2, wtnn 2, mkn 2, Rnk. 2'); + expect(textformatted_2[2], 's2, w2, m2, r2'); + expect(textformatted_2[3], 's2, w2, m2, r2'); + + expect(clockformatted_1[0], 'sa′a 1, minti 1, daƙiƙa 1'); + expect(clockformatted_1[1], 's 1, mnt 1, d 1'); + expect(clockformatted_1[2], 's1, minti1, d 1'); + expect(clockformatted_1[3], 's1, minti1, d 1'); + + expect(clockformatted_2[0], 'sa′o′i 2, mintoci 2, daƙiƙoƙi 2'); + expect(clockformatted_2[1], 's 2, mnt 2, d 2'); + expect(clockformatted_2[2], 's2, minti 2, d 2'); + expect(clockformatted_2[3], 's2, minti 2, d 2'); + }); + test('testDurFmt_or_IN', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'or-IN', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 ବର୍ଷ, 1 ମାସ, 1 ସପ୍ତାହ, 1 ଦିନ'); + expect(textformatted_1[1], '1 ବର୍ଷ, 1 ମାସ, 1 ସପ୍ତାହ, 1 ଦିନ'); + expect(textformatted_1[2], '1ବର୍ଷ 1ମାସ 1ସପ୍ 1ଦିନ'); + expect(textformatted_1[3], '1ବର୍ଷ 1ମାସ 1ସପ୍ 1ଦିନ'); + + expect(textformatted_17[0], '17 ବର୍ଷ, 17 ମାସ, 17 ସପ୍ତାହ, 17 ଦିନ'); + expect(textformatted_17[1], '17 ବର୍ଷ, 17 ମାସ, 17 ସପ୍ତାହ, 17 ଦିନ'); + expect(textformatted_17[2], '17ବର୍ଷ 17ମାସ 17 ସପ୍ 17ଦିନ'); + expect(textformatted_17[3], '17ବର୍ଷ 17ମାସ 17 ସପ୍ 17ଦିନ'); + + expect(clockformatted_1[0], '1 ଘଣ୍ଟା, 1 ମିନିଟ୍‌, 1 ସେକେଣ୍ଡ'); + expect(clockformatted_1[1], '1 ଘଣ୍ଟା, 1 ମିନିଟ୍‌, 1 ସେକେଣ୍ଡ'); + expect(clockformatted_1[2], '1ଘଣ୍ଟା 1ମିନିଟ୍‌ 1ସେକ୍'); + expect(clockformatted_1[3], '1ଘଣ୍ଟା 1ମିନିଟ୍‌ 1ସେକ୍'); + + expect(clockformatted_17[0], '17 ଘଣ୍ଟା, 17 ମିନିଟ୍, 17 ସେକେଣ୍ଡ'); + expect(clockformatted_17[1], '17 ଘଣ୍ଟା, 17 ମିନିଟ୍‌, 17 ସେକେଣ୍ଡ'); + expect(clockformatted_17[2], '17ଘଣ୍ଟା 17ମିନିଟ୍‌ 17ସେକ୍'); + expect(clockformatted_17[3], '17ଘଣ୍ଟା 17ମିନିଟ୍‌ 17ସେକ୍'); + }); + test('testDurFmt_az_Latn_AZ', () { + // 1 19 + final List textformatted_1 = []; + final List textformatted_19 = []; + final List clockformatted_1 = []; + final List clockformatted_19 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'az-Latn-AZ', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_19.add(fmt + .format(ILibDateOptions(year: 19, month: 19, week: 19, day: 19))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_19 + .add(fmt.format(ILibDateOptions(hour: 19, minute: 19, second: 19))); + } + + expect(textformatted_1[0], '1 il, 1 ay, 1 həftə, 1 gün'); + expect(textformatted_1[1], '1 il, 1 ay, 1 hft, 1 gün'); + expect(textformatted_1[2], '1 il, 1 ay, 1 hft, 1 gün'); + expect(textformatted_1[3], '1 il, 1 ay, 1 hft, 1 gün'); + + expect(textformatted_19[0], '19 il, 19 ay, 19 həftə, 19 gün'); + expect(textformatted_19[1], '19 il, 19 ay, 19 hft, 19 gün'); + expect(textformatted_19[2], '19 il, 19 ay, 19 hft, 19 gün'); + expect(textformatted_19[3], '19 il, 19 ay, 19 hft, 19 gün'); + + expect(clockformatted_1[0], '1 saat, 1 dəqiqə, 1 saniyə'); + expect(clockformatted_1[1], '1 saat, 1 dəq, 1 san'); + expect(clockformatted_1[2], '1 saat, 1 dəq, 1 san'); + expect(clockformatted_1[3], '1 saat, 1 dəq, 1 san'); + + expect(clockformatted_19[0], '19 saat, 19 dəqiqə, 19 saniyə'); + expect(clockformatted_19[1], '19 saat, 19 dəq, 19 san'); + expect(clockformatted_19[2], '19 saat, 19 dəq, 19 san'); + expect(clockformatted_19[3], '19 saat, 19 dəq, 19 san'); + }); + test('testDurFmt_km_KH', () { + // 1 23 + final List textformatted_1 = []; + final List textformatted_23 = []; + final List clockformatted_1 = []; + final List clockformatted_23 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'km-KH', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_23.add(fmt + .format(ILibDateOptions(year: 23, month: 23, week: 23, day: 23))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_23 + .add(fmt.format(ILibDateOptions(hour: 23, minute: 23, second: 23))); + } + + expect(textformatted_1[0], '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ'); + expect(textformatted_1[1], '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ'); + expect(textformatted_1[2], '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ'); + expect(textformatted_1[3], '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ'); + + expect(textformatted_23[0], '23 ឆ្នាំ 23 ខែ 23 សប្ដាហ៍ 23 ថ្ងៃ'); + expect(textformatted_23[1], '23 ឆ្នាំ 23 ខែ 23 សប្ដាហ៍ 23 ថ្ងៃ'); + expect(textformatted_23[2], '23 ឆ្នាំ 23 ខែ 23 សប្ដាហ៍ 23 ថ្ងៃ'); + expect(textformatted_23[3], '23 ឆ្នាំ 23 ខែ 23 សប្ដាហ៍ 23 ថ្ងៃ'); + + expect(clockformatted_1[0], '1 ម៉ោង 1 នាទី 1 វិនាទី'); + expect(clockformatted_1[1], '1 ម៉ោង 1 នាទី 1 វិនាទី'); + expect(clockformatted_1[2], '1 ម៉ោង 1 នាទី 1 វិនាទី'); + expect(clockformatted_1[3], '1 ម៉ោង 1 នាទី 1 វិនាទី'); + + expect(clockformatted_23[0], '23 ម៉ោង 23 នាទី 23 វិនាទី'); + expect(clockformatted_23[1], '23 ម៉ោង 23 នាទី 23 វិនាទី'); + expect(clockformatted_23[2], '23 ម៉ោង 23 នាទី 23 វិនាទី'); + expect(clockformatted_23[3], '23 ម៉ោង 23 នាទី 23 វិនាទី'); + }); + test('testDurFmt_si_LK', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'si-LK', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], 'වසර 1, මාස 1, සති 1, සහ දින 1'); + expect(textformatted_1[1], 'වසර 1, මාස 1, සති 1, දින 1'); + expect(textformatted_1[2], 'ව 1, මා 1, ස 1, දි 1'); + expect(textformatted_1[3], 'ව 1, මා 1, ස 1, දි 1'); + + expect(textformatted_2[0], 'වසර 2, මාස 2, සති 2, සහ දින 2'); + expect(textformatted_2[1], 'වසර 2, මාස 2, සති 2, දින 2'); + expect(textformatted_2[2], 'ව 2, මා 2, ස 2, දි 2'); + expect(textformatted_2[3], 'ව 2, මා 2, ස 2, දි 2'); + + expect(clockformatted_1[0], 'පැය 1, මිනිත්තු 1, සහ තත්පර 1'); + expect(clockformatted_1[1], 'පැය 1, මිනි 1, තත් 1'); + expect(clockformatted_1[2], 'පැය 1, මි 1, ත 1'); + expect(clockformatted_1[3], 'පැය 1, මි 1, ත 1'); + + expect(clockformatted_2[0], 'පැය 2, මිනිත්තු 2, සහ තත්පර 2'); + expect(clockformatted_2[1], 'පැය 2, මිනි 2, තත් 2'); + expect(clockformatted_2[2], 'පැය 2, මි 2, ත 2'); + expect(clockformatted_2[3], 'පැය 2, මි 2, ත 2'); + }); + test('testDurFmt_ar_AE', () { + // 1 2 3 11 100 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-AE', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_BH', () { + // 1 2 3 11 100 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-BH', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + + test('testDurFmt_ar_DJ', () { + // 1 2 3 11 100 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-DJ', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_DZ', () { + // 1 2 3 11 100 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-DZ', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_JO', () { + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-JO', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_KW', () { + // 1 2 3 11 100 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-KW', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_LB', () { + // 1 2 3 11 100 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-LB', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_LY', () { + // 1 2 3 11 100 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-LY', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_MR', () { + // 1 2 3 11 100 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-MR', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_OM', () { + // 1 2 3 11 100 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-OM', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_QA', () { + // 1 2 3 11 100 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-QA', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_SA', () { + // 1 2 3 11 100 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-SA', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏سنتان وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏سنتان وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنوات و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنوات و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوانٍ'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_SD', () { + // 1 2 3 11 100 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-SD', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_SY', () { + // 1 2 3 11 100 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-SY', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_TN', () { + // 1 2 3 11 100 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-TN', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_ar_YE', () { + // 1 2 3 11 100 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List textformatted_3 = []; + final List textformatted_11 = []; + final List textformatted_100 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + final List clockformatted_3 = []; + final List clockformatted_11 = []; + final List clockformatted_100 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ar-YE', + style: 'text', + length: length[i], + useNative: false)); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + textformatted_3.add( + fmt.format(ILibDateOptions(year: 3, month: 3, week: 3, day: 3))); + textformatted_11.add(fmt + .format(ILibDateOptions(year: 11, month: 11, week: 11, day: 11))); + textformatted_100.add(fmt.format( + ILibDateOptions(year: 100, month: 100, week: 100, day: 100))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + clockformatted_3 + .add(fmt.format(ILibDateOptions(hour: 3, minute: 3, second: 3))); + clockformatted_11 + .add(fmt.format(ILibDateOptions(hour: 11, minute: 11, second: 11))); + clockformatted_100.add( + fmt.format(ILibDateOptions(hour: 100, minute: 100, second: 100))); + } + + expect(textformatted_1[0], '‏سنة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[1], '‏سنة واحدة، وشهر، وأسبوع، ويوم'); + expect(textformatted_1[2], '‏1 سنة وشهر و1 أ و1 ي'); + expect(textformatted_1[3], '‏1 سنة وشهر و1 أ و1 ي'); + + expect(textformatted_2[0], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[1], '‏سنتان، وشهران، وأسبوعان، ويومان'); + expect(textformatted_2[2], '‏2 سنة وشهران و2 أ و2 ي'); + expect(textformatted_2[3], '‏2 سنة وشهران و2 أ و2 ي'); + + expect(textformatted_3[0], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[1], '‏3 سنوات، و3 أشهر، و3 أسابيع، و3 أيام'); + expect(textformatted_3[2], '‏3 سنة و3 أشهر و3 أ و3 ي'); + expect(textformatted_3[3], '‏3 سنة و3 أشهر و3 أ و3 ي'); + + expect(textformatted_11[0], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[1], '‏11 سنة، و11 شهرًا، و11 أسبوعًا، و11 يومًا'); + expect(textformatted_11[2], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + expect(textformatted_11[3], '‏11 سنة و11 شهرًا و11 أ و11 ي'); + + expect(textformatted_100[0], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[1], '‏100 سنة، و100 شهر، و100 أسبوع، و100 يوم'); + expect(textformatted_100[2], '‏100 سنة و100 شهر و100 أ و100 ي'); + expect(textformatted_100[3], '‏100 سنة و100 شهر و100 أ و100 ي'); + + expect(clockformatted_1[0], '‏ساعة، ودقيقة، وثانية'); + expect(clockformatted_1[1], '‏1 س، و1 د، و1 ث'); + expect(clockformatted_1[2], '‏1 س و1 د و1 ث'); + expect(clockformatted_1[3], '‏1 س و1 د و1 ث'); + + expect(clockformatted_2[0], '‏ساعتان، ودقيقتان، وثانيتان'); + expect(clockformatted_2[1], '‏2 س، و2 د، و2 ث'); + expect(clockformatted_2[2], '‏2 س و2 د و2 ث'); + expect(clockformatted_2[3], '‏2 س و2 د و2 ث'); + + expect(clockformatted_3[0], '‏3 ساعات، و3 دقائق، و3 ثوان'); + expect(clockformatted_3[1], '‏3 س، و3 د، و3 ث'); + expect(clockformatted_3[2], '‏3 س و3 د و3 ث'); + expect(clockformatted_3[3], '‏3 س و3 د و3 ث'); + + expect(clockformatted_11[0], '‏11 ساعة، و11 دقيقة، و11 ثانية'); + expect(clockformatted_11[1], '‏11 س، و11 د، و11 ث'); + expect(clockformatted_11[2], '‏11 س و11 د و11 ث'); + expect(clockformatted_11[3], '‏11 س و11 د و11 ث'); + + expect(clockformatted_100[0], '‏100 ساعة، و100 دقيقة، و100 ثانية'); + expect(clockformatted_100[1], '‏100 س، و100 د، و100 ث'); + expect(clockformatted_100[2], '‏100 س و100 د و100 ث'); + expect(clockformatted_100[3], '‏100 س و100 د و100 ث'); + }); + test('testDurFmt_en_ET', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'en-ET', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 year, 1 month, 1 week, 1 day'); + expect(textformatted_1[1], '1 yr, 1 mth, 1 wk, 1 day'); + expect(textformatted_1[2], '1y, 1m, 1w, 1d'); + expect(textformatted_1[3], '1y 1m 1w 1d'); + + expect(textformatted_2[0], '2 years, 2 months, 2 weeks, 2 days'); + expect(textformatted_2[1], '2 yrs, 2 mths, 2 wks, 2 days'); + expect(textformatted_2[2], '2y, 2m, 2w, 2d'); + expect(textformatted_2[3], '2y 2m 2w 2d'); + + expect(clockformatted_1[0], '1 hour, 1 minute, 1 second'); + expect(clockformatted_1[1], '1 hr, 1 min, 1 sec'); + expect(clockformatted_1[2], '1h, 1m, 1s'); + expect(clockformatted_1[3], '1h 1m 1s'); + + expect(clockformatted_2[0], '2 hours, 2 minutes, 2 seconds'); + expect(clockformatted_2[1], '2 hr, 2 min, 2 sec'); + expect(clockformatted_2[2], '2h, 2m, 2s'); + expect(clockformatted_2[3], '2h 2m 2s'); + }); + test('testDurFmt_es_GQ', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-GQ', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a, 1 m., 1 sem., 1 d'); + expect(textformatted_1[2], '1a, 1m, 1sem, 1d'); + expect(textformatted_1[3], '1a 1m 1sem 1d'); + + expect(textformatted_2[0], '2 años, 2 meses, 2 semanas y 2 días'); + expect(textformatted_2[1], '2 a, 2 m., 2 sem., 2 d'); + expect(textformatted_2[2], '2a, 2m, 2sem, 2d'); + expect(textformatted_2[3], '2a 2m 2sem 2d'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 horas, 2 minutos y 2 segundos'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_es_PH', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'es-PH', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 año, 1 mes, 1 semana y 1 día'); + expect(textformatted_1[1], '1 a, 1 m., 1 sem., 1 d'); + expect(textformatted_1[2], '1a, 1m, 1sem, 1d'); + expect(textformatted_1[3], '1a 1m 1sem 1d'); + + expect(textformatted_17[0], '17 años, 17 meses, 17 semanas y 17 días'); + expect(textformatted_17[1], '17 a, 17 m., 17 sem., 17 d'); + expect(textformatted_17[2], '17a, 17m, 17sem, 17d'); + expect(textformatted_17[3], '17a 17m 17sem 17d'); + + expect(clockformatted_1[0], '1 hora, 1 minuto y 1 segundo'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_17[0], '17 horas, 17 minutos y 17 segundos'); + expect(clockformatted_17[1], '17 h, 17 min, 17 s'); + expect(clockformatted_17[2], '17h, 17min, 17s'); + expect(clockformatted_17[3], '17h 17min 17s'); + }); + test('testDurFmt_fr_BF', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-BF', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_2[0], '2 ans, 2 mois, 2 semaines et 2 jours'); + expect(textformatted_2[1], '2 ans, 2 m., 2 sem., 2 j'); + expect(textformatted_2[2], '2a, 2m., 2sem., 2j'); + expect(textformatted_2[3], '2a 2m. 2sem. 2j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 heures, 2 minutes et 2 secondes'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_fr_BJ', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-BJ', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_17[0], '17 ans, 17 mois, 17 semaines et 17 jours'); + expect(textformatted_17[1], '17 ans, 17 m., 17 sem., 17 j'); + expect(textformatted_17[2], '17a, 17m., 17sem., 17j'); + expect(textformatted_17[3], '17a 17m. 17sem. 17j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_17[0], '17 heures, 17 minutes et 17 secondes'); + expect(clockformatted_17[1], '17 h, 17 min, 17 s'); + expect(clockformatted_17[2], '17h, 17min, 17s'); + expect(clockformatted_17[3], '17h 17min 17s'); + }); + test('testDurFmt_fr_CD', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-CD', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_17[0], '17 ans, 17 mois, 17 semaines et 17 jours'); + expect(textformatted_17[1], '17 ans, 17 m., 17 sem., 17 j'); + expect(textformatted_17[2], '17a, 17m., 17sem., 17j'); + expect(textformatted_17[3], '17a 17m. 17sem. 17j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_17[0], '17 heures, 17 minutes et 17 secondes'); + expect(clockformatted_17[1], '17 h, 17 min, 17 s'); + expect(clockformatted_17[2], '17h, 17min, 17s'); + expect(clockformatted_17[3], '17h 17min 17s'); + }); + test('testDurFmt_fr_CF', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-CF', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_2[0], '2 ans, 2 mois, 2 semaines et 2 jours'); + expect(textformatted_2[1], '2 ans, 2 m., 2 sem., 2 j'); + expect(textformatted_2[2], '2a, 2m., 2sem., 2j'); + expect(textformatted_2[3], '2a 2m. 2sem. 2j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 heures, 2 minutes et 2 secondes'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_fr_CG', () { + // 1 16 + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-CG', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_16[0], '16 ans, 16 mois, 16 semaines et 16 jours'); + expect(textformatted_16[1], '16 ans, 16 m., 16 sem., 16 j'); + expect(textformatted_16[2], '16a, 16m., 16sem., 16j'); + expect(textformatted_16[3], '16a 16m. 16sem. 16j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_16[0], '16 heures, 16 minutes et 16 secondes'); + expect(clockformatted_16[1], '16 h, 16 min, 16 s'); + expect(clockformatted_16[2], '16h, 16min, 16s'); + expect(clockformatted_16[3], '16h 16min 16s'); + }); + test('testDurFmt_fr_CI', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-CI', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_17[0], '17 ans, 17 mois, 17 semaines et 17 jours'); + expect(textformatted_17[1], '17 ans, 17 m., 17 sem., 17 j'); + expect(textformatted_17[2], '17a, 17m., 17sem., 17j'); + expect(textformatted_17[3], '17a 17m. 17sem. 17j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_17[0], '17 heures, 17 minutes et 17 secondes'); + expect(clockformatted_17[1], '17 h, 17 min, 17 s'); + expect(clockformatted_17[2], '17h, 17min, 17s'); + expect(clockformatted_17[3], '17h 17min 17s'); + }); + test('testDurFmt_fr_CM', () { + // 1 16 + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-CM', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_16[0], '16 ans, 16 mois, 16 semaines et 16 jours'); + expect(textformatted_16[1], '16 ans, 16 m., 16 sem., 16 j'); + expect(textformatted_16[2], '16a, 16m., 16sem., 16j'); + expect(textformatted_16[3], '16a 16m. 16sem. 16j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_16[0], '16 heures, 16 minutes et 16 secondes'); + expect(clockformatted_16[1], '16 h, 16 min, 16 s'); + expect(clockformatted_16[2], '16h, 16min, 16s'); + expect(clockformatted_16[3], '16h 16min 16s'); + }); + test('testDurFmt_fr_GQ', () { + // 1 16 + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-GQ', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_16[0], '16 ans, 16 mois, 16 semaines et 16 jours'); + expect(textformatted_16[1], '16 ans, 16 m., 16 sem., 16 j'); + expect(textformatted_16[2], '16a, 16m., 16sem., 16j'); + expect(textformatted_16[3], '16a 16m. 16sem. 16j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_16[0], '16 heures, 16 minutes et 16 secondes'); + expect(clockformatted_16[1], '16 h, 16 min, 16 s'); + expect(clockformatted_16[2], '16h, 16min, 16s'); + expect(clockformatted_16[3], '16h 16min 16s'); + }); + test('testDurFmt_fr_DJ', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-DJ', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_2[0], '2 ans, 2 mois, 2 semaines et 2 jours'); + expect(textformatted_2[1], '2 ans, 2 m., 2 sem., 2 j'); + expect(textformatted_2[2], '2a, 2m., 2sem., 2j'); + expect(textformatted_2[3], '2a 2m. 2sem. 2j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 heures, 2 minutes et 2 secondes'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_fr_DZ', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-DZ', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_2[0], '2 ans, 2 mois, 2 semaines et 2 jours'); + expect(textformatted_2[1], '2 ans, 2 m., 2 sem., 2 j'); + expect(textformatted_2[2], '2a, 2m., 2sem., 2j'); + expect(textformatted_2[3], '2a 2m. 2sem. 2j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 heures, 2 minutes et 2 secondes'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_fr_GA', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-GA', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_2[0], '2 ans, 2 mois, 2 semaines et 2 jours'); + expect(textformatted_2[1], '2 ans, 2 m., 2 sem., 2 j'); + expect(textformatted_2[2], '2a, 2m., 2sem., 2j'); + expect(textformatted_2[3], '2a 2m. 2sem. 2j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 heures, 2 minutes et 2 secondes'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_fr_GN', () { + // 1 16 + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-GN', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_16[0], '16 ans, 16 mois, 16 semaines et 16 jours'); + expect(textformatted_16[1], '16 ans, 16 m., 16 sem., 16 j'); + expect(textformatted_16[2], '16a, 16m., 16sem., 16j'); + expect(textformatted_16[3], '16a 16m. 16sem. 16j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_16[0], '16 heures, 16 minutes et 16 secondes'); + expect(clockformatted_16[1], '16 h, 16 min, 16 s'); + expect(clockformatted_16[2], '16h, 16min, 16s'); + expect(clockformatted_16[3], '16h 16min 16s'); + }); + test('testDurFmt_fr_LB', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-LB', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_2[0], '2 ans, 2 mois, 2 semaines et 2 jours'); + expect(textformatted_2[1], '2 ans, 2 m., 2 sem., 2 j'); + expect(textformatted_2[2], '2a, 2m., 2sem., 2j'); + expect(textformatted_2[3], '2a 2m. 2sem. 2j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 heures, 2 minutes et 2 secondes'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_fr_ML', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-ML', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_17[0], '17 ans, 17 mois, 17 semaines et 17 jours'); + expect(textformatted_17[1], '17 ans, 17 m., 17 sem., 17 j'); + expect(textformatted_17[2], '17a, 17m., 17sem., 17j'); + expect(textformatted_17[3], '17a 17m. 17sem. 17j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_17[0], '17 heures, 17 minutes et 17 secondes'); + expect(clockformatted_17[1], '17 h, 17 min, 17 s'); + expect(clockformatted_17[2], '17h, 17min, 17s'); + expect(clockformatted_17[3], '17h 17min 17s'); + }); + test('testDurFmt_fr_RW', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-RW', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_2[0], '2 ans, 2 mois, 2 semaines et 2 jours'); + expect(textformatted_2[1], '2 ans, 2 m., 2 sem., 2 j'); + expect(textformatted_2[2], '2a, 2m., 2sem., 2j'); + expect(textformatted_2[3], '2a 2m. 2sem. 2j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 heures, 2 minutes et 2 secondes'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_fr_SN', () { + // 1 16 + final List textformatted_1 = []; + final List textformatted_16 = []; + final List clockformatted_1 = []; + final List clockformatted_16 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-SN', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_16.add(fmt + .format(ILibDateOptions(year: 16, month: 16, week: 16, day: 16))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_16 + .add(fmt.format(ILibDateOptions(hour: 16, minute: 16, second: 16))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_16[0], '16 ans, 16 mois, 16 semaines et 16 jours'); + expect(textformatted_16[1], '16 ans, 16 m., 16 sem., 16 j'); + expect(textformatted_16[2], '16a, 16m., 16sem., 16j'); + expect(textformatted_16[3], '16a 16m. 16sem. 16j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_16[0], '16 heures, 16 minutes et 16 secondes'); + expect(clockformatted_16[1], '16 h, 16 min, 16 s'); + expect(clockformatted_16[2], '16h, 16min, 16s'); + expect(clockformatted_16[3], '16h 16min 16s'); + }); + test('testDurFmt_fr_TG', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'fr-TG', style: 'text', length: length[i])); + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 an, 1 mois, 1 semaine et 1 jour'); + expect(textformatted_1[1], '1 an, 1 m., 1 sem., 1 j'); + expect(textformatted_1[2], '1a, 1m., 1sem., 1j'); + expect(textformatted_1[3], '1a 1m. 1sem. 1j'); + + expect(textformatted_2[0], '2 ans, 2 mois, 2 semaines et 2 jours'); + expect(textformatted_2[1], '2 ans, 2 m., 2 sem., 2 j'); + expect(textformatted_2[2], '2a, 2m., 2sem., 2j'); + expect(textformatted_2[3], '2a 2m. 2sem. 2j'); + + expect(clockformatted_1[0], '1 heure, 1 minute et 1 seconde'); + expect(clockformatted_1[1], '1 h, 1 min, 1 s'); + expect(clockformatted_1[2], '1h, 1min, 1s'); + expect(clockformatted_1[3], '1h 1min 1s'); + + expect(clockformatted_2[0], '2 heures, 2 minutes et 2 secondes'); + expect(clockformatted_2[1], '2 h, 2 min, 2 s'); + expect(clockformatted_2[2], '2h, 2min, 2s'); + expect(clockformatted_2[3], '2h 2min 2s'); + }); + test('testDurFmt_ms_SG', () { + // 1 2 + final List textformatted_1 = []; + final List textformatted_2 = []; + final List clockformatted_1 = []; + final List clockformatted_2 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ms-SG', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_2.add( + fmt.format(ILibDateOptions(year: 2, month: 2, week: 2, day: 2))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_2 + .add(fmt.format(ILibDateOptions(hour: 2, minute: 2, second: 2))); + } + + expect(textformatted_1[0], '1 tahun, 1 bulan, 1 minggu, 1 hari'); + expect(textformatted_1[1], '1 thn, 1 bln, 1 mgu, 1 hari'); + expect(textformatted_1[2], '1 thn, 1 bln, 1 mgu, 1 h'); + expect(textformatted_1[3], '1 thn 1 bln 1 mgu 1 h'); + + expect(textformatted_2[0], '2 tahun, 2 bulan, 2 minggu, 2 hari'); + expect(textformatted_2[1], '2 thn, 2 bln, 2 mgu, 2 hari'); + expect(textformatted_2[2], '2 thn, 2 bln, 2 mgu, 2 h'); + expect(textformatted_2[3], '2 thn 2 bln 2 mgu 2 h'); + + expect(clockformatted_1[0], '1 jam, 1 minit, 1 saat'); + expect(clockformatted_1[1], '1 j, 1 min, 1 saat'); + expect(clockformatted_1[2], '1 j, 1 min, 1 s'); + expect(clockformatted_1[3], '1 j 1 min 1 s'); + + expect(clockformatted_2[0], '2 jam, 2 minit, 2 saat'); + expect(clockformatted_2[1], '2 j, 2 min, 2 saat'); + expect(clockformatted_2[2], '2 j, 2 min, 2 s'); + expect(clockformatted_2[3], '2 j 2 min 2 s'); + }); + + test('testDurFmt_ur_PK', () { + // 1 17 + final List textformatted_1 = []; + final List textformatted_17 = []; + final List clockformatted_1 = []; + final List clockformatted_17 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'ur-PK', style: 'text', length: length[i])); + + textformatted_1.add( + fmt.format(ILibDateOptions(year: 1, month: 1, week: 1, day: 1))); + textformatted_17.add(fmt + .format(ILibDateOptions(year: 17, month: 17, week: 17, day: 17))); + + clockformatted_1 + .add(fmt.format(ILibDateOptions(hour: 1, minute: 1, second: 1))); + clockformatted_17 + .add(fmt.format(ILibDateOptions(hour: 17, minute: 17, second: 17))); + } + + expect(textformatted_1[0], '‏1 سال, 1 مہینہ, 1 ہفتہ، اور 1 دن'); + expect(textformatted_1[1], '‏1 سال، 1 مہینہ، 1 ہفتہ، 1 دن'); + expect(textformatted_1[2], '‏1 سال، 1 مہینہ، 1 ہفتہ، 1 دن'); + expect(textformatted_1[3], '‏1 سال، 1 مہینہ، 1 ہفتہ، 1 دن'); + + expect(textformatted_17[0], '‏17 سال, 17 مہینے, 17 ہفتے، اور 17 دن'); + expect(textformatted_17[1], '‏17 سال، 17 مہینے، 17 ہفتے، 17 دن'); + expect(textformatted_17[2], '‏17 سال، 17 مہینے، 17 ہفتے، 17 دن'); + expect(textformatted_17[3], '‏17 سال، 17 مہینے، 17 ہفتے، 17 دن'); + + expect(clockformatted_1[0], '‏1 گھنٹہ, 1 منٹ، اور 1 سیکنڈ'); + expect(clockformatted_1[1], '‏1 گھنٹہ، 1 منٹ، 1 سیکنڈ'); + expect(clockformatted_1[2], '‏1 گھنٹہ، 1 منٹ، 1 سیکنڈ'); + expect(clockformatted_1[3], '‏1 گھنٹہ، 1 منٹ، 1 سیکنڈ'); + + expect(clockformatted_17[0], '‏17 گھنٹے, 17 منٹ، اور 17 سیکنڈ'); + expect(clockformatted_17[1], '‏17 گھنٹے، 17 منٹ، 17 سیکنڈ'); + expect(clockformatted_17[2], '‏17 گھنٹے، 17 منٹ، 17 سیکنڈ'); + expect(clockformatted_17[3], '‏17 گھنٹے، 17 منٹ، 17 سیکنڈ'); + }); + + test('testDurFmt_zh_Hans_MY', () { + // 15 + + final List textformatted_15 = []; + final List clockformatted_15 = []; + + for (int i = 0; i < 4; i++) { + final ILibDurationFmt fmt = ILibDurationFmt(ILibDurationFmtOptions( + locale: 'zh-Hans-MY', style: 'text', length: length[i])); + + textformatted_15.add(fmt + .format(ILibDateOptions(year: 15, month: 15, week: 15, day: 15))); + clockformatted_15 + .add(fmt.format(ILibDateOptions(hour: 15, minute: 15, second: 15))); + } + + expect(textformatted_15[0], '15年15个月15周15天'); + expect(textformatted_15[1], '15年15个月15周15天'); + expect(textformatted_15[2], '15年15个月15周15天'); + expect(textformatted_15[3], '15年15个月15周15天'); + + expect(clockformatted_15[0], '15小时15分钟15秒钟'); + expect(clockformatted_15[1], '15小时15分钟15秒'); + expect(clockformatted_15[2], '15小时15分钟15秒'); + expect(clockformatted_15[3], '15小时15分钟15秒'); + }); }); } diff --git a/test/durfmt/durfmt_am_ET_test.dart b/test/durfmt/durfmt_am_ET_test.dart index 109c88a..cf1ee8d 100644 --- a/test/durfmt/durfmt_am_ET_test.dart +++ b/test/durfmt/durfmt_am_ET_test.dart @@ -13,7 +13,7 @@ void main() { final ILibJS ilibjsinstance = ILibJS.instance; await ilibjsinstance.loadJS(); ilibjsinstance.initILib(); - await ilibjsinstance.loadILibLocaleDataAll(); + await ILibJS.instance.loadILibLocaleData('am-ET'); }); group('ILibDurationFmt am-ET', () { @@ -23,13 +23,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect( fmt.format(dateOptions), '1 ዓመት፣ 1 ወር፣ 1 ሳምንት፣ 1 ቀ፣ 1 ሰ፣ 1 ደ፣ 1 ሰ'); }); @@ -40,13 +34,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect( fmt.format(dateOptions), '1 ዓመት፣ 1 ወር፣ 1 ሳምንት፣ 1 ቀ፣ 1 ሰ፣ 1 ደ፣ 1 ሰ'); }); @@ -58,13 +46,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 ዓመት፣ 1 ወር፣ 1 ሳምንት፣ 1 ቀ፣ 1:01:01'); }); @@ -74,13 +56,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect( fmt.format(dateOptions), '1 ዓመት፣ 1 ወር፣ 1 ሳምንት፣ 1 ቀ፣ 1 ሰ፣ 1 ደ፣ 1 ሰ'); }); @@ -91,13 +67,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 ዓመት፣ 1 ወራት፣ 1 ሳምንት፣ 1 ቀናት፣ 1 ሰዓ፣ 1 ደቂ፣ 1 ሰከ'); }); @@ -108,13 +78,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 ዓመት፣ 1 ወር፣ 1 ሳምንት፣ 1 ቀናት፣ 1 ሰዓት፣ 1 ደቂቃ እና 1 ሰከንድ'); }); @@ -125,13 +89,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 2, - month: 2, - week: 2, - day: 2, - hour: 2, - minute: 2, - second: 2); + year: 2, month: 2, week: 2, day: 2, hour: 2, minute: 2, second: 2); expect(fmt.format(dateOptions), '2 ዓ፣ 2 ወር፣ 2 ሳምንት፣ 2 ቀ፣ 2 ሰ፣ 2 ደ፣ 2 ሰ'); }); @@ -141,13 +99,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 2, - month: 2, - week: 2, - day: 2, - hour: 2, - minute: 2, - second: 2); + year: 2, month: 2, week: 2, day: 2, hour: 2, minute: 2, second: 2); expect(fmt.format(dateOptions), '2 ዓ፣ 2 ወር፣ 2 ሳምንት፣ 2 ቀ፣ 2 ሰ፣ 2 ደ፣ 2 ሰ'); }); @@ -158,13 +110,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 2, - month: 2, - week: 2, - day: 2, - hour: 2, - minute: 2, - second: 2); + year: 2, month: 2, week: 2, day: 2, hour: 2, minute: 2, second: 2); expect(fmt.format(dateOptions), '2 ዓ፣ 2 ወር፣ 2 ሳምንት፣ 2 ቀ፣ 2:02:02'); }); @@ -174,13 +120,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 2, - month: 2, - week: 2, - day: 2, - hour: 2, - minute: 2, - second: 2); + year: 2, month: 2, week: 2, day: 2, hour: 2, minute: 2, second: 2); expect(fmt.format(dateOptions), '2 ዓ፣ 2 ወር፣ 2 ሳምንት፣ 2 ቀ፣ 2 ሰ፣ 2 ደ፣ 2 ሰ'); }); @@ -190,13 +130,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 2, - month: 2, - week: 2, - day: 2, - hour: 2, - minute: 2, - second: 2); + year: 2, month: 2, week: 2, day: 2, hour: 2, minute: 2, second: 2); expect(fmt.format(dateOptions), '2 ዓመታት፣ 2 ወራት፣ 2 ሳምንታት፣ 2 ቀናት፣ 2 ሰዓ፣ 2 ደቂቃ፣ 2 ሰከ'); }); @@ -207,13 +141,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 2, - month: 2, - week: 2, - day: 2, - hour: 2, - minute: 2, - second: 2); + year: 2, month: 2, week: 2, day: 2, hour: 2, minute: 2, second: 2); expect(fmt.format(dateOptions), '2 ዓመታት፣ 2 ወራት፣ 2 ሳምንታት፣ 2 ቀናት፣ 2 ሰዓቶች፣ 2 ደቂቃዎች እና 2 ሰከንዶች'); }); diff --git a/test/durfmt/durfmt_ar_SA_test.dart b/test/durfmt/durfmt_ar_SA_test.dart index 8b080f2..66b03ab 100644 --- a/test/durfmt/durfmt_ar_SA_test.dart +++ b/test/durfmt/durfmt_ar_SA_test.dart @@ -13,7 +13,7 @@ void main() { final ILibJS ilibjsinstance = ILibJS.instance; await ilibjsinstance.loadJS(); ilibjsinstance.initILib(); - await ilibjsinstance.loadILibLocaleDataAll(); + await ILibJS.instance.loadILibLocaleData('ar-SA'); }); group('ILibDurationFmt ar-SA', () { @@ -23,13 +23,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '‏سنة وشهر و١ أ و١ ي و١ س و١ د و١ ث'); }); @@ -39,13 +33,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '‏سنة وشهر و١ أ و١ ي و١ س و١ د و١ ث'); }); @@ -56,13 +44,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '‏سنة وشهر و١ أ و١ ي و‏١:٠١:٠١'); }); @@ -72,13 +54,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '‏سنة وشهر و١ أ و١ ي و١ س و١ د و١ ث'); }); @@ -88,13 +64,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '‏سنة، وشهر، وأسبوع، ويوم، و١ س، و١ د، و١ ث'); }); @@ -105,13 +75,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '‏سنة، وشهر، وأسبوع، ويوم، وساعة، ودقيقة، وثانية'); }); @@ -355,13 +319,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '‏سنة وشهر و1 أ و1 ي و1 س و1 د و1 ث'); }); @@ -372,13 +330,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '‏سنة وشهر و1 أ و1 ي و1 س و1 د و1 ث'); }); @@ -389,13 +341,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '‏سنة وشهر و1 أ و1 ي و‏1:01:01'); }); @@ -406,13 +352,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '‏سنة وشهر و1 أ و1 ي و1 س و1 د و1 ث'); }); @@ -423,13 +363,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '‏سنة، وشهر، وأسبوع، ويوم، و1 س، و1 د، و1 ث'); }); @@ -441,13 +375,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '‏سنة، وشهر، وأسبوع، ويوم، وساعة، ودقيقة، وثانية'); }); diff --git a/test/durfmt/durfmt_az_Latn_AZ_test.dart b/test/durfmt/durfmt_az_Latn_AZ_test.dart index 081cc41..d511040 100644 --- a/test/durfmt/durfmt_az_Latn_AZ_test.dart +++ b/test/durfmt/durfmt_az_Latn_AZ_test.dart @@ -13,7 +13,7 @@ void main() { final ILibJS ilibjsinstance = ILibJS.instance; await ilibjsinstance.loadJS(); ilibjsinstance.initILib(); - await ilibjsinstance.loadILibLocaleDataAll(); + await ILibJS.instance.loadILibLocaleData('az-LAtn-AZ'); }); group('ILibDurationFmt az-Latn-AZ', () { @@ -23,13 +23,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 il, 1 ay, 1 hft, 1 gün, 1 saat, 1 dəq, 1 san'); }); @@ -41,13 +35,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 il, 1 ay, 1 hft, 1 gün, 1 saat, 1 dəq, 1 san'); }); @@ -59,13 +47,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 il, 1 ay, 1 hft, 1 gün, 01:01:01'); }); @@ -75,13 +57,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 il, 1 ay, 1 hft, 1 gün, 1 saat, 1 dəq, 1 san'); }); @@ -92,13 +68,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 il, 1 ay, 1 hft, 1 gün, 1 saat, 1 dəq, 1 san'); }); @@ -109,13 +79,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 il, 1 ay, 1 həftə, 1 gün, 1 saat, 1 dəqiqə, 1 saniyə'); }); diff --git a/test/durfmt/durfmt_ha_Latn_NG_test.dart b/test/durfmt/durfmt_ha_Latn_NG_test.dart index 517cb5c..2ff10cf 100644 --- a/test/durfmt/durfmt_ha_Latn_NG_test.dart +++ b/test/durfmt/durfmt_ha_Latn_NG_test.dart @@ -13,7 +13,7 @@ void main() { final ILibJS ilibjsinstance = ILibJS.instance; await ilibjsinstance.loadJS(); ilibjsinstance.initILib(); - await ilibjsinstance.loadILibLocaleDataAll(); + await ILibJS.instance.loadILibLocaleData('ha-Latn-NG'); }); group('ILibDurationFmt ha-Latn-NG', () { @@ -23,13 +23,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'shkr 1, w1, m1, r1, s1, minti1, d 1'); }); @@ -40,13 +34,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'shkr 1, w1, m1, r1, s1, minti1, d 1'); }); @@ -57,13 +45,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'shkr 1, w1, m1, r1, 01:01:01'); }); @@ -73,13 +55,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'shkr 1, w1, m1, r1, s1, minti1, d 1'); }); @@ -89,13 +65,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'shkr 1, wat 1, mk 1, rana 1, s 1, mnt 1, d 1'); }); @@ -106,13 +76,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'shekara 1, wata 1, mako 1, rana 1, sa′a 1, minti 1, daƙiƙa 1'); }); diff --git a/test/durfmt/durfmt_km_KH_test.dart b/test/durfmt/durfmt_km_KH_test.dart index 25305e5..23af253 100644 --- a/test/durfmt/durfmt_km_KH_test.dart +++ b/test/durfmt/durfmt_km_KH_test.dart @@ -13,7 +13,7 @@ void main() { final ILibJS ilibjsinstance = ILibJS.instance; await ilibjsinstance.loadJS(); ilibjsinstance.initILib(); - await ilibjsinstance.loadILibLocaleDataAll(); + await ILibJS.instance.loadILibLocaleData('km-KH'); }); group('ILibDurationFmt km-KH', () { @@ -23,13 +23,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ 1 ម៉ោង 1 នាទី 1 វិនាទី'); }); @@ -40,13 +34,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ 1 ម៉ោង 1 នាទី 1 វិនាទី'); }); @@ -58,13 +46,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ 1:01:01'); }); @@ -74,13 +56,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ 1 ម៉ោង 1 នាទី 1 វិនាទី'); }); @@ -91,13 +67,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ 1 ម៉ោង 1 នាទី 1 វិនាទី'); }); @@ -108,13 +78,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 ឆ្នាំ 1 ខែ 1 សប្ដាហ៍ 1 ថ្ងៃ 1 ម៉ោង 1 នាទី 1 វិនាទី'); }); diff --git a/test/durfmt/durfmt_or_IN_test.dart b/test/durfmt/durfmt_or_IN_test.dart index e64cc2f..cfeb3d8 100644 --- a/test/durfmt/durfmt_or_IN_test.dart +++ b/test/durfmt/durfmt_or_IN_test.dart @@ -13,7 +13,7 @@ void main() { final ILibJS ilibjsinstance = ILibJS.instance; await ilibjsinstance.loadJS(); ilibjsinstance.initILib(); - await ilibjsinstance.loadILibLocaleDataAll(); + await ILibJS.instance.loadILibLocaleData('or-IN'); }); group('ILibDurationFmt or-IN', () { @@ -23,13 +23,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1ବର୍ଷ 1ମାସ 1ସପ୍ 1ଦିନ 1ଘଣ୍ଟା 1ମିନିଟ୍‌ 1ସେକ୍'); }); @@ -40,13 +34,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1ବର୍ଷ 1ମାସ 1ସପ୍ 1ଦିନ 1ଘଣ୍ଟା 1ମିନିଟ୍‌ 1ସେକ୍'); }); @@ -58,13 +46,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1ବର୍ଷ 1ମାସ 1ସପ୍ 1ଦିନ 1:01:01'); }); @@ -74,13 +56,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1ବର୍ଷ 1ମାସ 1ସପ୍ 1ଦିନ 1ଘଣ୍ଟା 1ମିନିଟ୍‌ 1ସେକ୍'); }); @@ -91,13 +67,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 ବର୍ଷ, 1 ମାସ, 1 ସପ୍ତାହ, 1 ଦିନ, 1 ଘଣ୍ଟା, 1 ମିନିଟ୍‌, 1 ସେକେଣ୍ଡ'); }); @@ -108,13 +78,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), '1 ବର୍ଷ, 1 ମାସ, 1 ସପ୍ତାହ, 1 ଦିନ, 1 ଘଣ୍ଟା, 1 ମିନିଟ୍‌, 1 ସେକେଣ୍ଡ'); }); diff --git a/test/durfmt/durfmt_si_LK_test.dart b/test/durfmt/durfmt_si_LK_test.dart index 4e5357c..230d7aa 100644 --- a/test/durfmt/durfmt_si_LK_test.dart +++ b/test/durfmt/durfmt_si_LK_test.dart @@ -13,7 +13,7 @@ void main() { final ILibJS ilibjsinstance = ILibJS.instance; await ilibjsinstance.loadJS(); ilibjsinstance.initILib(); - await ilibjsinstance.loadILibLocaleDataAll(); + await ILibJS.instance.loadILibLocaleData('si-LK'); }); group('ILibDurationFmt si-LK', () { @@ -23,13 +23,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'ව 1, මා 1, ස 1, දි 1, පැය 1, මි 1, ත 1'); }); @@ -39,13 +33,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'ව 1, මා 1, ස 1, දි 1, පැය 1, මි 1, ත 1'); }); @@ -56,13 +44,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'ව 1, මා 1, ස 1, දි 1, 01.01.01'); }); @@ -72,13 +54,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'ව 1, මා 1, ස 1, දි 1, පැය 1, මි 1, ත 1'); }); @@ -88,13 +64,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'වසර 1, මාස 1, සති 1, දින 1, පැය 1, මිනි 1, තත් 1'); }); @@ -105,13 +75,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'වසර 1, මාස 1, සති 1, දින 1, පැය 1, මිනිත්තු 1, සහ තත්පර 1'); }); diff --git a/test/durfmt/durfmt_sw_KE_test.dart b/test/durfmt/durfmt_sw_KE_test.dart index c09b7ea..878d13b 100644 --- a/test/durfmt/durfmt_sw_KE_test.dart +++ b/test/durfmt/durfmt_sw_KE_test.dart @@ -13,7 +13,7 @@ void main() { final ILibJS ilibjsinstance = ILibJS.instance; await ilibjsinstance.loadJS(); ilibjsinstance.initILib(); - await ilibjsinstance.loadILibLocaleDataAll(); + await ILibJS.instance.loadILibLocaleData('sw-KE'); }); group('ILibDurationFmt sw-KE', () { @@ -23,13 +23,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'mwaka 1, mwezi 1, wiki 1, siku 1, saa 1, dak 1, sek 1'); }); @@ -41,13 +35,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'mwaka 1, mwezi 1, wiki 1, siku 1, saa 1, dak 1, sek 1'); }); @@ -59,13 +47,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'mwaka 1, mwezi 1, wiki 1, siku 1, 01:01:01'); }); @@ -76,13 +58,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'mwaka 1, mwezi 1, wiki 1, siku 1, saa 1, dak 1, sek 1'); }); @@ -93,13 +69,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'mwaka 1, mwezi 1, wiki 1, siku 1, saa 1, dakika 1, sekunde 1'); }); @@ -110,13 +80,7 @@ void main() { ); expect(fmt, isNotNull); final ILibDateOptions dateOptions = ILibDateOptions( - year: 1, - month: 1, - week: 1, - day: 1, - hour: 1, - minute: 1, - second: 1); + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1, second: 1); expect(fmt.format(dateOptions), 'mwaka 1, mwezi 1, wiki 1, siku 1, saa 1, dakika 1 na sekunde 1'); }); diff --git a/test/durfmt/durfmt_test.dart b/test/durfmt/durfmt_test.dart index 00c9e14..d6f72ed 100644 --- a/test/durfmt/durfmt_test.dart +++ b/test/durfmt/durfmt_test.dart @@ -1516,49 +1516,23 @@ void main() { expect(fmt.format(dateOptions), '‏20 שנים, 20 ח׳, 20 שבועות, 20 ימ׳, 20 שע׳, 20 דק׳, 20 שנ׳'); }); - /*test('testDurFmtHEFormatFullManyNumber', () { - final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( - locale: 'he-IL', - length: 'full' - ); - final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); - expect(fmt, isNotNull); - - final ILibDateOptions dateOptions = ILibDateOptions( - year: 20, - month: 20, - week: 20, - day: 20, - hour: 20, - minute: 20, - second: 20 - }); - - // The `many` category has been removed since CLDR 42. - var platform = ilib._getPlatform(); - if (platform === 'nodejs') { - var cldrVersion = Number(process.versions['cldr']); - if (Number(cldrVersion) < 36) { // Intl.PluralRules doesn't support this locale until this version. - expect(fmt.format(dateOptions),, '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'); - } else if(Number(cldrVersion) <= 41) { - expect(fmt.format(dateOptions),, '‏20 שנים, 20 חודשים, 20 שבועות, 20 יום, 20 שעות, 20 דקות ו-20 שניות'); - } else if (Number(cldrVersion) < 43) { // The `many` category has been removed since CLDR 42. - expect(fmt.format(dateOptions),, '‏20 שנים, 20 חודשים, 20 שבועות, 20 יום, 20 שעות, 20 דקות ו-‏20 שניות'); - } else { - expect(fmt.format(dateOptions),, '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'); - } - } else if (platform === 'browser') { - var browser = ilib._getBrowser(); - var expected = '‏20 שנים, 20 חודשים, 20 שבועות, 20 יום, 20 שעות, 20 דקות ו-‏20 שניות'; - if (browser === 'chrome' && getChromeVersion() >= 110) { - expected = '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'; - } - expect(fmt.format(dateOptions),, expected); - } else { - expect(fmt.format(dateOptions),, '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'); - } - test.done(); - },*/ + test('testDurFmtHEFormatFullManyNumber', () { + final ILibDurationFmtOptions fmtOptions = + ILibDurationFmtOptions(locale: 'he-IL', length: 'full'); + final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); + expect(fmt, isNotNull); + + final ILibDateOptions dateOptions = ILibDateOptions( + year: 20, + month: 20, + week: 20, + day: 20, + hour: 20, + minute: 20, + second: 20); + expect(fmt.format(dateOptions), + '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות'); + }); test('testDurFmtHEFormatShortOtherNumber', () { final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions(locale: 'he-IL', length: 'short'); From d96c1de5c11e5d3d161ef2cb9196a76e399fdc0a Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Tue, 27 Jan 2026 12:12:43 +0900 Subject: [PATCH 06/11] Update assets/js/ilib-init.js to include scripts.json located in the iLib json root directory --- assets/js/ilib-init.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/ilib-init.js b/assets/js/ilib-init.js index db92a99..9c03ced 100644 --- a/assets/js/ilib-init.js +++ b/assets/js/ilib-init.js @@ -1 +1 @@ -var ilib=ilib||{};function parseLocale(a){var t,n;return a&&("C"===(a=-1<(n=a.indexOf("."))?a.substring(0,n):a)?"en-US":(n=[],0<(t=a.replace(/_/g,"-").split(/-/g)).length&&(2!==t[0].length&&3!==t[0].length||(n.push(t[0].toLowerCase()),1>10)+String.fromCharCode(56320|1023&a))},IString.toCodePoint=function(a,t){var n,L;return a&&0!==a.length?(n=-1,55296<=(L=a.charCodeAt(t))&&L<=56319?a.length>t+1&&56320<=(a=a.charCodeAt(t+1))&&a<=57343&&(n=1+((960&L)>>6)<<16|(63&L)<<10|1023&a):n=L,n):-1},IString.loadPlurals=function(a,t,n,L){t=t?"string"==typeof t?new Locale(t):t:new Locale(ilib.getLocale());t.getLanguage();Utils.loadData({name:"plurals.json",object:"IString",locale:t,sync:a,loadParams:n,callback:ilib.bind(this,function(a){a=a||IString.plurals_default,L&&"function"==typeof L&&L(a)})})},IString._fncs={firstProp:function(a){for(var t in a)if(t&&a[t])return t},firstPropRule:function(a){if("[object Array]"===Object.prototype.toString.call(a))return"inrange";if("[object Object]"===Object.prototype.toString.call(a))for(var t in a)if(t&&a[t])return t},getValue:function(a,t){var n;return"object"==typeof a?"inrange"===(n=IString._fncs.firstPropRule(a))?IString._fncs[n](a,t):IString._fncs[n](a[n],t):"string"==typeof a?"object"==typeof t?t[a]:t:a},matchRangeContinuous:function(a,t){for(var n in t)if(void 0!==n&&void 0!==t[n]){var L=t[n];if("number"==typeof L){if(a===t[n])return!0;if(a>=t[0]&&a<=t[1])return!0}else if("[object Array]"===Object.prototype.toString.call(L)&&a>=L[0]&&a<=L[1])return!0}return!1},calculateNumberDigits:function(a){var t=a.toString(),n={},L={},e=a.toExponential(),i=e.indexOf("e");return-1!==i?(L.c=parseInt(e[i+2]),L.e=parseInt(e[i+2])):(L.c=0,L.e=0),-1!==t.indexOf(".")?(e=t.split(".",2),n.integerPart=parseInt(e[0],10),n.decimalPartLength=e[1].length,n.decimalPart=parseInt(e[1],10),L.n=parseFloat(a),L.i=n.integerPart,L.v=n.decimalPartLength,L.w=n.decimalPartLength,L.f=n.decimalPart,L.t=n.decimalPart):(n.integerPart=a,n.decimalPartLength=0,n.decimalPart=0,L.n=parseInt(a,10),L.i=n.integerPart,L.v=0,L.w=0,L.f=0,L.t=0),L},matchRange:function(a,t){return IString._fncs.matchRangeContinuous(a,t)},is:function(a,t){return IString._fncs.getValue(a[0],t)===IString._fncs.getValue(a[1],t)},isnot:function(a,t){return IString._fncs.getValue(a[0],t)!==IString._fncs.getValue(a[1],t)},inrange:function(a,t){var n;return"number"==typeof a[0]?"object"==typeof t?IString._fncs.matchRange(t.n,a):IString._fncs.matchRange(t,a):void 0===a[0]?(n=IString._fncs.firstPropRule(a),IString._fncs[n](a[n],t)):IString._fncs.matchRange(IString._fncs.getValue(a[0],t),a[1])},notin:function(a,t){return!IString._fncs.matchRange(IString._fncs.getValue(a[0],t),a[1])},within:function(a,t){return IString._fncs.matchRangeContinuous(IString._fncs.getValue(a[0],t),a[1])},mod:function(a,t){return MathUtils.mod(IString._fncs.getValue(a[0],t),IString._fncs.getValue(a[1],t))},n:function(a,t){return t},or:function(a,t){for(var n=a.length,L=0;L="===t.substring(0,2))return t=parseFloat(t.substring(2)),n.n>=t;if("<"===t.charAt(0))return t=parseFloat(t.substring(1)),n.n"===t.charAt(0))return t=parseFloat(t.substring(1)),n.n>t;switch(this.locale=this.locale||new Locale(this.localeSpec),t){case"zero":case"one":case"two":case"few":case"many":var L=ilib.data["plurals_"+this.locale.getLanguage()+"_"+this.locale.getRegion()]||ilib.data["plurals_"+this.locale.getLanguage()]||IString.plurals_default;if(L)return L=L[t],IString._fncs.getValue(L,n);break;case"":case"other":return!0;default:var e,L=t.indexOf("-");return-1!==L?(e=t.substring(0,L),L=t.substring(L+1),n.n>=parseInt(e,10)&&n.n<=parseInt(L,10)):n.n===parseInt(t,10)}break;case"boolean":return"true"===t&&!0===a||"false"===t&&!1===a;case"string":return new RegExp(t,"i").test(a);case"object":throw"syntax error: formatChoice parameter for the argument index cannot be an object"}return!1},_isIntlPluralAvailable:function(a){var t;return void 0===a.getVariant()&&"undefined"!=typeof Intl&&void 0!==Intl.PluralRules&&void 0!==Intl.PluralRules.supportedLocalesOf&&("nodejs"!==ilib._getPlatform()||!!(t=process.versions.node)&&(t=t.split(".")[0],10<=Number(t)))&&0=t+L?a:n?a+JSUtils.pad.zeros.substring(0,t-a.length+L):a.substring(0,L)+JSUtils.pad.zeros.substring(0,t-a.length+L)+a.substring(L)},JSUtils.pad.zeros="00000000000000000000000000000000",JSUtils.toHexString=function(a,t){var n,L="",e=t&&t<9?t:4;if(!a)return"";for(n=0;na[1]?a[1]-t:0}))=t[a+1][0];)a++;this.month=t[a][1],L-=t[a][0],this.day=Math.floor(L),L-=this.day,this.day++,L=Math.round(864e5*L),this.hour=Math.floor(L/36e5),L-=36e5*this.hour,6<=this.hour?this.hour-=6:this.hour+=18,this.minute=Math.floor(L/6e4),L-=6e4*this.minute,this.second=Math.floor(L/1e3),L-=1e3*this.second,this.millisecond=Math.floor(L)},HebrewDate.prototype.getDayOfWeek=function(){var a=Math.floor(this.rd.getRataDie()+(this.offset||0));return MathUtils.mod(a+1,7)},HebrewDate.prototype.getHalaqim=function(){var a;return this.parts<0&&(a=6e4*this.minute+1e3*this.second+this.millisecond,this.parts=3e-4*a),this.parts},HebrewDate.prototype.firstSunday=function(a){a=this.newRd({year:a,month:7,day:1,hour:18,minute:0,second:0,millisecond:0,cal:this.cal});return this.newRd({rd:a.onOrAfter(4),cal:this.cal}).before(0)},HebrewDate.prototype.getDayOfYear=function(){var a=(this.cal.isLeapYear(this.year)?HebrewRataDie.cumMonthLengthsLeap:HebrewRataDie.cumMonthLengths)[this.month-1];return(this.month<7||8=o.from&&L"):L)?(e=a.r.charAt(L),i=parseInt(a.r.substring(0,L),10),parseInt(a.r.substring(L+1),10)):parseInt(a.r,10),a.t&&(n=a.t.split(":"),r=parseInt(n[0],10),1":l=m.onOrAfter(i)}return l},TimeZone.prototype._calcDSTSavings=function(){var a=this.getDSTSavings();this.dstSavings=(60*Math.abs(a.h||0)+(a.m||0))*MathUtils.signum(a.h||0)},TimeZone.prototype._getDSTStartRule=function(a){return this.zone.s},TimeZone.prototype._getDSTEndRule=function(a){return this.zone.e},TimeZone.prototype.inDaylightTime=function(a,t){var n,L,e,i;return a=a&&DateFactory._dateToIlib(a,this.id,this.locale),this.isLocal?(e=6e4*this.offset,void 0===a.dst||a.dst||(e+=6e4*this.dstSavings),e=new Date(a?a.getTimeExtended()-e:void 0),L=Math.max(this.offsetJan1,this.offsetJun1),-e.getTimezoneOffset()===L):(L=a&&a.cal&&"gregorian"===a.cal.type?(n=a.rd.getRataDie(),a.year):(e=a&&"function"==typeof a.getTimeExtended?a.getTimeExtended():void 0,n=new GregRataDie({unixtime:e}).getRataDie(),new Date(e).getUTCFullYear()),!!this.useDaylightTime(L)&&(e=this._getDSTStartRule(L),i=this._getDSTEndRule(L),e=this._calcRuleStart(e,L),i=this._calcRuleStart(i,L),t?e+=this.dstSavings/1440:(e-=this.offset/1440,i-=(this.offset+this.dstSavings)/1440),n"!==a.charAt(e);)n+=a.charAt(e++);else if("&"===a.charAt(e))for(n+=a.charAt(e++);e"!==a.charAt(e)||"%"!==a.charAt(e-1));)n+=a.charAt(e++);else if("&"===a.charAt(e))for(n+=a.charAt(e++);e/g,">")},_unescapeXml:function(a){return a=(a=(a=a.replace(/&/g,"&")).replace(/</g,"<")).replace(/>/g,">")},_makeKey:function(a){if(a)return a=a.replace(/\s+/gm," "),"xml"===this.type||"html"===this.type?this._unescapeXml(a):a},_getStringSingle:function(a,t,n){var L;return a||t?(L=this.locale.isPseudo()?(L=a||this.map[t],this._pseudo(L||t)):(L=t||this._makeKey(a),void 0!==this.map[L]?this.map[L]:"pseudo"===this.missing?this._pseudo(a||t):"empty"===this.missing?"":a),n&&"none"!==n&&("xml"===(n="default"===n?this.type:n)||"html"===n?L=this._escapeXml(L):"js"!==n&&"attribute"!==n||(L=L.replace(/'/g,"\\'").replace(/"/g,'\\"'))),void 0!==L?((t=new IString(L)).setLocale(this.locale.getSpec(),!0,this.loadParams),t):void 0):new IString("")},getString:function(a,t,n){return a||t?ilib.isArray(a)?a.map(ilib.bind(this,function(a){return"string"==typeof a?this._getStringSingle(a,t,n):a})):this._getStringSingle(a,t,n):new IString("")},getStringJS:function(a,t,n){if(void 0!==a||void 0!==t)return ilib.isArray(a)?this.getString(a,t,n).map(function(a){return a&&a instanceof IString?a.toString():a}):(a=this.getString(a,t,n))?a.toString():void 0},containsKey:function(a,t){return(void 0!==a||void 0!==t)&&(t=t||this._makeKey(a),void 0!==this.map[t])},getResObj:function(){return this.map}},function(n){var L=!0,e=void 0;this.locale=new Locale,this.length="short",this.style="text",n&&(n.locale&&(this.locale="string"==typeof n.locale?new Locale(n.locale):n.locale),!n.length||"short"!==n.length&&"medium"!==n.length&&"long"!==n.length&&"full"!==n.length||(this.length=n.length),!n.style||"text"!==n.style&&"clock"!==n.style||(this.style=n.style),void 0!==n.sync&&(L=!!n.sync),"boolean"==typeof n.useNative&&(this.useNative=n.useNative),e=n.loadParams),n=n||{sync:!0},new LocaleInfo(this.locale,{sync:L,loadParams:e,onLoad:ilib.bind(this,function(t){this.script=t.getScript(),new ResBundle({locale:this.locale,name:"sysres",sync:L,loadParams:e,onLoad:ilib.bind(this,function(a){IString.loadPlurals(L,this.locale,e,ilib.bind(this,function(){switch("medium"===this.length&&"Latn"!==this.script&&"Grek"!==this.script&&"Cyrl"!==this.script&&(this.length="short"),this.length){case"short":this.components={year:a.getString("#{num}y"),month:a.getString("#{num}m","durationShortMonths"),week:a.getString("#{num}w"),day:a.getString("#{num}d"),hour:a.getString("#{num}h"),minute:a.getString("#{num}m","durationShortMinutes"),second:a.getString("#{num}s"),millisecond:a.getString("#{num}m","durationShortMillis"),separator:a.getString(" ","separatorShort"),finalSeparator:""};break;case"medium":this.components={year:a.getString("1#1 yr|#{num} yrs","durationMediumYears"),month:a.getString("1#1 mo|#{num} mos"),week:a.getString("1#1 wk|#{num} wks","durationMediumWeeks"),day:a.getString("1#1 dy|#{num} dys"),hour:a.getString("1#1 hr|#{num} hrs","durationMediumHours"),minute:a.getString("1#1 mi|#{num} min"),second:a.getString("1#1 se|#{num} sec"),millisecond:a.getString("#{num} ms","durationMediumMillis"),separator:a.getString(" ","separatorMedium"),finalSeparator:""};break;case"long":this.components={year:a.getString("1#1 yr|#{num} yrs"),month:a.getString("1#1 mon|#{num} mons"),week:a.getString("1#1 wk|#{num} wks"),day:a.getString("1#1 day|#{num} days","durationLongDays"),hour:a.getString("1#1 hr|#{num} hrs"),minute:a.getString("1#1 min|#{num} min"),second:a.getString("1#1 sec|#{num} sec"),millisecond:a.getString("#{num} ms"),separator:a.getString(", ","separatorLong"),finalSeparator:""};break;case"full":this.components={year:a.getString("1#1 year|#{num} years"),month:a.getString("1#1 month|#{num} months"),week:a.getString("1#1 week|#{num} weeks"),day:a.getString("1#1 day|#{num} days"),hour:a.getString("1#1 hour|#{num} hours"),minute:a.getString("1#1 minute|#{num} minutes"),second:a.getString("1#1 second|#{num} seconds"),millisecond:a.getString("1#1 millisecond|#{num} milliseconds"),separator:a.getString(", ","separatorFull"),finalSeparator:a.getString(" and ","finalSeparatorFull")}}"clock"===this.style?new DateFmt({locale:this.locale,calendar:"gregorian",type:"time",time:"ms",sync:L,loadParams:e,useNative:this.useNative,onLoad:ilib.bind(this,function(a){this.timeFmtMS=a,new DateFmt({locale:this.locale,calendar:"gregorian",type:"time",time:"hm",sync:L,loadParams:e,useNative:this.useNative,onLoad:ilib.bind(this,function(a){this.timeFmtHM=a,new DateFmt({locale:this.locale,calendar:"gregorian",type:"time",time:"hms",sync:L,loadParams:e,useNative:this.useNative,onLoad:ilib.bind(this,function(a){this.timeFmtHMS=a,this.timeFmtHM.template=this.timeFmtHM.template.replace(/hh?/,"H"),this.timeFmtHM.templateArr=this.timeFmtHM._tokenize(this.timeFmtHM.template),this.timeFmtHMS.template=this.timeFmtHMS.template.replace(/hh?/,"H"),this.timeFmtHMS.templateArr=this.timeFmtHMS._tokenize(this.timeFmtHMS.template),this._init(this.timeFmtHM.locinfo,n)})})})})})}):this._init(t,n)}))})})})})});DurationFmt.complist={text:["year","month","week","day","hour","minute","second","millisecond"],clock:["year","month","week","day"]},DurationFmt.prototype._mapDigits=function(a){return this.useNative&&this.digits?JSUtils.mapString(a.toString(),this.digits):a},DurationFmt.prototype._init=function(t,n){var L;new ScriptInfo(t.getScript(),{sync:n.sync,loadParams:n.loadParams,onLoad:ilib.bind(this,function(a){this.scriptDirection=a.getScriptDirection(),"boolean"==typeof this.useNative?this.useNative&&(L=t.getNativeDigits())&&(this.digits=L):"native"===t.getDigitsStyle()&&(L=t.getNativeDigits())&&(this.useNative=!0,this.digits=L),"function"==typeof n.onLoad&&n.onLoad(this)})})},DurationFmt.prototype.format=function(a){for(var t,n=!0,L="",e=DurationFmt.complist[this.style],i=e.length-1;0<=i;i--)void 0!==a[e[i]]&&0!==a[e[i]]&&(01",t:"2:0"},f:"H{c}T",n:"Aleutian {c} Time",o:"-10:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Anchorage"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"AK{c}T",n:"Alaskan {c} Time",o:"-9:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Anguilla"]={c:"AI",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Antigua"]={c:"AG",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Araguaina"]={c:"BR",f:"-03",n:"Tocantins {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Buenos_Aires"]={c:"AR",f:"-03/-02",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Catamarca"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/ComodRivadavia"]={c:"AR",f:"-03",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Cordoba"]={c:"AR",f:"-03/-02",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Jujuy"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/La_Rioja"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Mendoza"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Rio_Gallegos"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Salta"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/San_Juan"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/San_Luis"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Tucuman"]={c:"AR",f:"-03/-02",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Ushuaia"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Aruba"]={c:"AW",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Asuncion"]={c:"PY",e:{m:3,r:"0>22",t:"0:0"},f:"-04/-03",n:"Paraguay {c} Time",o:"-4:0",s:{m:10,r:"0>1",t:"0:0",v:"1:0"}},ilib.data.zoneinfo["America/Atikokan"]={c:"CA",f:"EST",o:"-5:0"},ilib.data.zoneinfo["America/Bahia"]={c:"BR",f:"-03",n:"Bahia {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Bahia_Banderas"]={c:"MX",f:"CST",n:"Central {c} Time (Mexico)",o:"-6:0"},ilib.data.zoneinfo["America/Barbados"]={c:"BB",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Belem"]={c:"BR",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Belize"]={c:"BZ",f:"CST",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Blanc-Sablon"]={c:"CA",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Boa_Vista"]={c:"BR",f:"-04",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Bogota"]={c:"CO",f:"-05/-04",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Boise"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Buenos_Aires"]={c:"AR",f:"-03/-02",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Cambridge_Bay"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Campo_Grande"]={c:"BR",f:"-04/-03",n:"Central Brazilian {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Cancun"]={c:"MX",f:"EST",n:"Eastern {c} Time (Mexico)",o:"-5:0"},ilib.data.zoneinfo["America/Caracas"]={c:"VE",f:"-04",n:"Venezuela {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Catamarca"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Cayenne"]={c:"GF",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Cayman"]={c:"KY",f:"EST",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Chicago"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Chihuahua"]={c:"MX",f:"CST",n:"Central {c} Time (Mexico)",o:"-6:0"},ilib.data.zoneinfo["America/Ciudad_Juarez"]={c:"MX",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Coral_Harbour"]={c:"CA",f:"EST",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Cordoba"]={c:"AR",f:"-03/-02",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Costa_Rica"]={c:"CR",f:"CST",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Creston"]={c:"CA",f:"MST",n:"US Mountain {c} Time",o:"-7:0"},ilib.data.zoneinfo["America/Cuiaba"]={c:"BR",f:"-04/-03",n:"Central Brazilian {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Curacao"]={c:"CW",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Danmarkshavn"]={c:"GL",f:"GMT",n:"Greenwich {c} Time",o:"0:0"},ilib.data.zoneinfo["America/Dawson"]={c:"CA",f:"MST",n:"Yukon {c} Time",o:"-7:0"},ilib.data.zoneinfo["America/Dawson_Creek"]={c:"CA",f:"MST",n:"US Mountain {c} Time",o:"-7:0"},ilib.data.zoneinfo["America/Denver"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Detroit"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Dominica"]={c:"DM",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Edmonton"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Eirunepe"]={c:"BR",f:"-05",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/El_Salvador"]={c:"SV",f:"CST",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Ensenada"]={c:"MX",f:"PST",o:"-8:0"},ilib.data.zoneinfo["America/Fort_Nelson"]={c:"CA",f:"MST",n:"US Mountain {c} Time",o:"-7:0"},ilib.data.zoneinfo["America/Fort_Wayne"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Fortaleza"]={c:"BR",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Glace_Bay"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"A{c}T",n:"Atlantic {c} Time",o:"-4:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Godthab"]={e:{m:10,r:"l6",t:"23:0"},f:"-03/-02",o:"-3:0",s:{c:"S",m:3,r:"l6",t:"22:0",v:"1:0"},c:"GL",n:"Greenland {c} Time"},ilib.data.zoneinfo["America/Goose_Bay"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"A{c}T",n:"Atlantic {c} Time",o:"-4:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Grand_Turk"]={c:"TC",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Turks And Caicos {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Grenada"]={c:"GD",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Guadeloupe"]={c:"GP",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Guatemala"]={c:"GT",f:"CST",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Guayaquil"]={c:"EC",f:"-05/-04",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Guyana"]={c:"GY",f:"-04",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Halifax"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"A{c}T",n:"Atlantic {c} Time",o:"-4:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Havana"]={c:"CU",e:{c:"S",m:11,r:"0>1",t:"1:0"},f:"C{c}T",n:"Cuba {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"0:0",v:"1:0"}},ilib.data.zoneinfo["America/Hermosillo"]={c:"MX",f:"MST",n:"US Mountain {c} Time",o:"-7:0"},ilib.data.zoneinfo["America/Indiana/Indianapolis"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"US Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indiana/Knox"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indiana/Marengo"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"US Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indiana/Petersburg"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indiana/Tell_City"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indiana/Vevay"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"US Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indiana/Vincennes"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indiana/Winamac"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indianapolis"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"US Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Inuvik"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Iqaluit"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Jamaica"]={c:"JM",f:"EST",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Jujuy"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Juneau"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"AK{c}T",n:"Alaskan {c} Time",o:"-9:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Kentucky/Louisville"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Kentucky/Monticello"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Knox_IN"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Kralendijk"]={c:"BQ",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/La_Paz"]={c:"BO",f:"-04",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Lima"]={c:"PE",f:"-05/-04",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Los_Angeles"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"P{c}T",n:"Pacific {c} Time",o:"-8:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Louisville"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Lower_Princes"]={c:"SX",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Maceio"]={c:"BR",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Managua"]={c:"NI",f:"CST",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Manaus"]={c:"BR",f:"-04",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Marigot"]={c:"MF",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Martinique"]={c:"MQ",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Matamoros"]={c:"MX",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Mazatlan"]={c:"MX",f:"MST",n:"Mountain {c} Time (Mexico)",o:"-7:0"},ilib.data.zoneinfo["America/Mendoza"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Menominee"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Merida"]={c:"MX",f:"CST",n:"Central {c} Time (Mexico)",o:"-6:0"},ilib.data.zoneinfo["America/Metlakatla"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"AK{c}T",n:"Alaskan {c} Time",o:"-9:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Mexico_City"]={c:"MX",f:"CST",n:"Central {c} Time (Mexico)",o:"-6:0"},ilib.data.zoneinfo["America/Miquelon"]={c:"PM",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"-03/-02",n:"Saint Pierre {c} Time",o:"-3:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Moncton"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"A{c}T",n:"Atlantic {c} Time",o:"-4:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Monterrey"]={c:"MX",f:"CST",n:"Central {c} Time (Mexico)",o:"-6:0"},ilib.data.zoneinfo["America/Montevideo"]={c:"UY",f:"-03/-02",n:"Montevideo {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Montreal"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Montserrat"]={c:"MS",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Nassau"]={c:"BS",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/New_York"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Nipigon"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Nome"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"AK{c}T",n:"Alaskan {c} Time",o:"-9:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Noronha"]={c:"BR",f:"-02",n:"UTC-02",o:"-2:0"},ilib.data.zoneinfo["America/North_Dakota/Beulah"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/North_Dakota/Center"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/North_Dakota/New_Salem"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Nuuk"]={c:"GL",e:{m:10,r:"l0",t:"0:0"},f:"-02/-01",n:"Greenland {c} Time",o:"-2:0",s:{c:"S",m:3,r:"l6",t:"23:0",v:"1:0"}},ilib.data.zoneinfo["America/Ojinaga"]={c:"MX",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Panama"]={c:"PA",f:"EST",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Pangnirtung"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Paramaribo"]={c:"SR",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Phoenix"]={c:"US",f:"MST",n:"US Mountain {c} Time",o:"-7:0"},ilib.data.zoneinfo["America/Port-au-Prince"]={c:"HT",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Haiti {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Port_of_Spain"]={c:"TT",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Porto_Acre"]={c:"BR",f:"-05",o:"-5:0"},ilib.data.zoneinfo["America/Porto_Velho"]={c:"BR",f:"-04",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Puerto_Rico"]={c:"PR",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Punta_Arenas"]={c:"CL",f:"-03",n:"Magallanes {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Rainy_River"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Rankin_Inlet"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Recife"]={c:"BR",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Regina"]={c:"CA",f:"CST",n:"Canada Central {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Resolute"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Rio_Branco"]={c:"BR",f:"-05",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Rosario"]={c:"AR",f:"-03/-02",o:"-3:0"},ilib.data.zoneinfo["America/Santarem"]={c:"BR",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Santiago"]={c:"CL",e:{m:4,r:"0>2",t:"0:0"},f:"-04/-03",n:"Pacific SA {c} Time",o:"-4:0",s:{m:9,r:"0>2",t:"0:0",v:"1:0"}},ilib.data.zoneinfo["America/Santo_Domingo"]={c:"DO",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Sao_Paulo"]={c:"BR",f:"-03/-02",n:"E. South America {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Scoresbysund"]={c:"GL",e:{m:10,r:"l0",t:"0:0"},f:"-02/-01",n:"Azores {c} Time",o:"-2:0",s:{c:"S",m:3,r:"l6",t:"23:0",v:"1:0"}},ilib.data.zoneinfo["America/Sitka"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"AK{c}T",n:"Alaskan {c} Time",o:"-9:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/St_Barthelemy"]={c:"BL",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/St_Johns"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"N{c}T",n:"Newfoundland {c} Time",o:"-3:30",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/St_Kitts"]={c:"KN",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/St_Lucia"]={c:"LC",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/St_Thomas"]={c:"VI",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/St_Vincent"]={c:"VC",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Swift_Current"]={c:"CA",f:"CST",n:"Canada Central {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Tegucigalpa"]={c:"HN",f:"CST",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Thule"]={c:"GL",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"A{c}T",n:"Atlantic {c} Time",o:"-4:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Thunder_Bay"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Tijuana"]={c:"MX",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"P{c}T",n:"Pacific {c} Time (Mexico)",o:"-8:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Toronto"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Tortola"]={c:"VG",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Vancouver"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"P{c}T",n:"Pacific {c} Time",o:"-8:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Virgin"]={c:"TT",f:"AST",o:"-4:0"},ilib.data.zoneinfo["America/Whitehorse"]={c:"CA",f:"MST",n:"Yukon {c} Time",o:"-7:0"},ilib.data.zoneinfo["America/Winnipeg"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Yakutat"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"AK{c}T",n:"Alaskan {c} Time",o:"-9:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Yellowknife"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Antarctica/Casey"]={c:"AQ",f:"+08",n:"Central Pacific {c} Time",o:"8:0"},ilib.data.zoneinfo["Antarctica/Davis"]={c:"AQ",f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Antarctica/DumontDUrville"]={c:"AQ",f:"+10",n:"West Pacific {c} Time",o:"10:0"},ilib.data.zoneinfo["Antarctica/Macquarie"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",n:"Tasmania {c} Time",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Antarctica/Mawson"]={c:"AQ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Antarctica/McMurdo"]={c:"AQ",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"NZ{c}T",n:"New Zealand {c} Time",o:"12:0",s:{c:"D",m:9,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Antarctica/Palmer"]={c:"AQ",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["Antarctica/Rothera"]={c:"AQ",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["Antarctica/South_Pole"]={c:"NZ",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"NZ{c}T",o:"12:0",s:{c:"D",m:9,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Antarctica/Syowa"]={c:"AQ",f:"+03",n:"E. Africa {c} Time",o:"3:0"},ilib.data.zoneinfo["Antarctica/Troll"]={c:"AQ",e:{c:"+00",m:10,r:"l0",t:"3:0"},f:"+00",o:"0:0",s:{c:"+02",m:3,r:"l0",t:"1:0",v:"2:0"}},ilib.data.zoneinfo["Antarctica/Vostok"]={c:"AQ",f:"+05",n:"Central Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Arctic/Longyearbyen"]={c:"SJ",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Aden"]={c:"YE",f:"+03",n:"Arab {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Almaty"]={c:"KZ",f:"+05",n:"Central Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Amman"]={c:"JO",f:"+03",n:"Jordan {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Anadyr"]={c:"RU",f:"+12",n:"Russia Time Zone 11",o:"12:0"},ilib.data.zoneinfo["Asia/Aqtau"]={c:"KZ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Aqtobe"]={c:"KZ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Ashgabat"]={c:"TM",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Atyrau"]={c:"KZ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Baghdad"]={c:"IQ",f:"+03/+04",n:"Arabic {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Bahrain"]={c:"BH",f:"+03",n:"Arab {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Baku"]={c:"AZ",f:"+04/+05",n:"Azerbaijan {c} Time",o:"4:0"},ilib.data.zoneinfo["Asia/Bangkok"]={c:"TH",f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Barnaul"]={c:"RU",f:"+07",n:"Altai {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Beirut"]={c:"LB",e:{m:10,r:"l0",t:"0:0"},f:"EE{c}T",n:"Middle East {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"0:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Bishkek"]={c:"KG",f:"+06",n:"Central Asia {c} Time",o:"6:0"},ilib.data.zoneinfo["Asia/Brunei"]={c:"BN",f:"+08",n:"Singapore {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Chita"]={c:"RU",f:"+09",n:"Transbaikal {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Choibalsan"]={c:"MN",f:"+08/+09",n:"Ulaanbaatar {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Chongqing"]={c:"CN",f:"CST",o:"8:0"},ilib.data.zoneinfo["Asia/Chungking"]={c:"CN",f:"CST",o:"8:0"},ilib.data.zoneinfo["Asia/Colombo"]={c:"LK",f:"+0530",n:"Sri Lanka {c} Time",o:"5:30"},ilib.data.zoneinfo["Asia/Damascus"]={c:"SY",f:"+03",n:"Syria {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Dhaka"]={c:"BD",f:"+06/+07",n:"Bangladesh {c} Time",o:"6:0"},ilib.data.zoneinfo["Asia/Dili"]={c:"TL",f:"+09",n:"Tokyo {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Dubai"]={c:"AE",f:"+04",n:"Mauritius {c} Time",o:"4:0"},ilib.data.zoneinfo["Asia/Dushanbe"]={c:"TJ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Famagusta"]={c:"CY",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"GTB {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Gaza"]={c:"PS",e:{m:10,r:"6<30",t:"2:0"},f:"EE{c}T",n:"West Bank {c} Time",o:"2:0",s:{c:"S",m:4,r:"20",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Hanoi"]={f:"+07",o:"7:0"},ilib.data.zoneinfo["Asia/Harbin"]={c:"CN",f:"CST",o:"8:0"},ilib.data.zoneinfo["Asia/Hebron"]={c:"PS",e:{m:10,r:"6<30",t:"2:0"},f:"EE{c}T",n:"West Bank {c} Time",o:"2:0",s:{c:"S",m:4,r:"20",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Ho_Chi_Minh"]={c:"VN",f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Hong_Kong"]={c:"HK",f:"HKST",n:"China {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Hovd"]={c:"MN",f:"+07/+08",n:"W. Mongolia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Irkutsk"]={c:"RU",f:"+08",n:"North Asia East {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Istanbul"]={f:"+03",o:"3:0"},ilib.data.zoneinfo["Asia/Jakarta"]={c:"ID",f:"WIB",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Jayapura"]={c:"ID",f:"WIT",n:"Tokyo {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Jerusalem"]={c:"IL",e:{c:"S",m:10,r:"l0",t:"2:0"},f:"I{c}T",n:"Israel {c} Time",o:"2:0",s:{c:"D",m:3,r:"5>23",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Kabul"]={c:"AF",f:"+0430",n:"Afghanistan {c} Time",o:"4:30"},ilib.data.zoneinfo["Asia/Kamchatka"]={c:"RU",f:"+12",n:"Russia Time Zone 11",o:"12:0"},ilib.data.zoneinfo["Asia/Karachi"]={c:"PK",f:"PKST",n:"Pakistan {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Kashgar"]={c:"CN",f:"CST",o:"8:0"},ilib.data.zoneinfo["Asia/Kathmandu"]={c:"NP",f:"+0545",n:"Nepal {c} Time",o:"5:45"},ilib.data.zoneinfo["Asia/Khandyga"]={c:"RU",f:"+09",n:"Yakutsk {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Kolkata"]={c:"IN",f:"IST",n:"India {c} Time",o:"5:30"},ilib.data.zoneinfo["Asia/Krasnoyarsk"]={c:"RU",f:"+07",n:"North Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Kuala_Lumpur"]={c:"MY",f:"+08",n:"Singapore {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Kuching"]={c:"MY",f:"+08",n:"Singapore {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Kuwait"]={c:"KW",f:"+03",n:"Arab {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Macau"]={c:"MO",f:"CST",n:"China {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Magadan"]={c:"RU",f:"+11",n:"Magadan {c} Time",o:"11:0"},ilib.data.zoneinfo["Asia/Makassar"]={c:"ID",f:"WITA",n:"Singapore {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Manila"]={c:"PH",f:"PST",n:"Singapore {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Muscat"]={c:"OM",f:"+04",n:"Arabian {c} Time",o:"4:0"},ilib.data.zoneinfo["Asia/Nicosia"]={c:"CY",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"GTB {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Novokuznetsk"]={c:"RU",f:"+07",n:"North Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Novosibirsk"]={c:"RU",f:"+07",n:"N. Central Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Omsk"]={c:"RU",f:"+06",n:"Omsk {c} Time",o:"6:0"},ilib.data.zoneinfo["Asia/Oral"]={c:"KZ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Phnom_Penh"]={c:"KH",f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Pontianak"]={c:"ID",f:"WIB",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Pyongyang"]={c:"KP",f:"KST",n:"North Korea {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Qatar"]={c:"QA",f:"+03",n:"Arab {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Qostanay"]={c:"KZ",f:"+05",n:"Central Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Qyzylorda"]={c:"KZ",f:"+05",n:"Qyzylorda {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Riyadh"]={c:"SA",f:"+03",n:"E. Africa {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Saigon"]={c:"VN",f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Sakhalin"]={c:"RU",f:"+11",n:"Sakhalin {c} Time",o:"11:0"},ilib.data.zoneinfo["Asia/Samarkand"]={c:"UZ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Seoul"]={c:"KR",f:"KST",n:"Korea {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Shanghai"]={c:"CN",f:"CST",n:"China {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Singapore"]={c:"SG",f:"+08",n:"Singapore {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Srednekolymsk"]={c:"RU",f:"+11",n:"Russia Time Zone 10",o:"11:0"},ilib.data.zoneinfo["Asia/Taipei"]={c:"TW",f:"CST",n:"Taipei {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Tashkent"]={c:"UZ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Tbilisi"]={c:"GE",f:"+04",n:"Georgian {c} Time",o:"4:0"},ilib.data.zoneinfo["Asia/Tehran"]={c:"IR",f:"+0330/+0430",n:"Iran {c} Time",o:"3:30"},ilib.data.zoneinfo["Asia/Tel_Aviv"]={c:"IL",e:{c:"S",m:10,r:"l0",t:"2:0"},f:"I{c}T",o:"2:0",s:{c:"D",m:3,r:"5>23",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Thimphu"]={c:"BT",f:"+06",n:"Bangladesh {c} Time",o:"6:0"},ilib.data.zoneinfo["Asia/Tokyo"]={c:"JP",f:"JST",n:"Tokyo {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Tomsk"]={c:"RU",f:"+07",n:"Tomsk {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Ulaanbaatar"]={c:"MN",f:"+08/+09",n:"Ulaanbaatar {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Ulan_Bator"]={c:"MN",f:"+08/+09",o:"8:0"},ilib.data.zoneinfo["Asia/Urumqi"]={c:"CN",f:"+06",n:"Central Asia {c} Time",o:"6:0"},ilib.data.zoneinfo["Asia/Ust-Nera"]={c:"RU",f:"+10",n:"Vladivostok {c} Time",o:"10:0"},ilib.data.zoneinfo["Asia/Vientiane"]={c:"LA",f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Vladivostok"]={c:"RU",f:"+10",n:"Vladivostok {c} Time",o:"10:0"},ilib.data.zoneinfo["Asia/Yakutsk"]={c:"RU",f:"+09",n:"Yakutsk {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Yangon"]={c:"MM",f:"+0630",n:"Myanmar {c} Time",o:"6:30"},ilib.data.zoneinfo["Asia/Yekaterinburg"]={c:"RU",f:"+05",n:"Ekaterinburg {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Yerevan"]={c:"AM",f:"+04/+05",n:"Caucasus {c} Time",o:"4:0"},ilib.data.zoneinfo["Atlantic/Azores"]={c:"PT",e:{m:10,r:"l0",t:"1:0"},f:"-01/+00",n:"Azores {c} Time",o:"-1:0",s:{c:"S",m:3,r:"l0",t:"0:0",v:"1:0"}},ilib.data.zoneinfo["Atlantic/Bermuda"]={c:"BM",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"A{c}T",n:"Atlantic {c} Time",o:"-4:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Atlantic/Canary"]={c:"ES",e:{m:10,r:"l0",t:"2:0"},f:"WE{c}T",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Atlantic/Cape_Verde"]={c:"CV",f:"-01",n:"Cape Verde {c} Time",o:"-1:0"},ilib.data.zoneinfo["Atlantic/Faroe"]={c:"FO",e:{m:10,r:"l0",t:"2:0"},f:"WE{c}T",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Atlantic/Jan_Mayen"]={c:"NO",f:"-01",o:"-1:0"},ilib.data.zoneinfo["Atlantic/Madeira"]={c:"PT",e:{m:10,r:"l0",t:"2:0"},f:"WE{c}T",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Atlantic/Reykjavik"]={c:"IS",f:"GMT",n:"Greenwich {c} Time",o:"0:0"},ilib.data.zoneinfo["Atlantic/South_Georgia"]={c:"GS",f:"-02",n:"UTC-02",o:"-2:0"},ilib.data.zoneinfo["Atlantic/St_Helena"]={c:"SH",f:"GMT",n:"Greenwich {c} Time",o:"0:0"},ilib.data.zoneinfo["Atlantic/Stanley"]={c:"FK",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["Australia/ACT"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Adelaide"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AC{c}T",n:"Cen. Australia {c} Time",o:"9:30",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Brisbane"]={c:"AU",f:"AEST",n:"E. Australia {c} Time",o:"10:0"},ilib.data.zoneinfo["Australia/Broken_Hill"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AC{c}T",n:"Cen. Australia {c} Time",o:"9:30",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Canberra"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Currie"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",n:"Tasmania {c} Time",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Darwin"]={c:"AU",f:"ACST",n:"AUS Central {c} Time",o:"9:30"},ilib.data.zoneinfo["Australia/Eucla"]={c:"AU",f:"+0845/+0945",n:"Aus Central W. {c} Time",o:"8:45"},ilib.data.zoneinfo["Australia/Hobart"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",n:"Tasmania {c} Time",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/LHI"]={c:"AU",e:{m:4,r:"0>1",t:"2:0"},f:"+1030/+11",o:"10:30",s:{m:10,r:"0>1",t:"2:0",v:"0:30"}},ilib.data.zoneinfo["Australia/Lindeman"]={c:"AU",f:"AEST",n:"E. Australia {c} Time",o:"10:0"},ilib.data.zoneinfo["Australia/Lord_Howe"]={c:"AU",e:{m:4,r:"0>1",t:"2:0"},f:"+1030/+11",n:"Lord Howe {c} Time",o:"10:30",s:{m:10,r:"0>1",t:"2:0",v:"0:30"}},ilib.data.zoneinfo["Australia/Melbourne"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",n:"AUS Eastern {c} Time",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/NSW"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/North"]={c:"AU",f:"ACST",o:"9:30"},ilib.data.zoneinfo["Australia/Perth"]={c:"AU",f:"AWST",n:"W. Australia {c} Time",o:"8:0"},ilib.data.zoneinfo["Australia/Queensland"]={c:"AU",f:"AEST",o:"10:0"},ilib.data.zoneinfo["Australia/South"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AC{c}T",o:"9:30",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Sydney"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",n:"AUS Eastern {c} Time",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Tasmania"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Victoria"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Yancowinna"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AC{c}T",o:"9:30",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Brazil/Acre"]={c:"BR",f:"-05",o:"-5:0"},ilib.data.zoneinfo["Brazil/East"]={c:"BR",f:"-03/-02",o:"-3:0"},ilib.data.zoneinfo.CET={e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo.CST6CDT={e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Canada/Central"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Canada/Mountain"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Canada/Newfoundland"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"N{c}T",o:"-3:30",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Canada/Pacific"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"P{c}T",o:"-8:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Canada/Yukon"]={c:"CA",f:"MST",o:"-7:0"},ilib.data.zoneinfo["Chile/Continental"]={c:"CL",e:{m:4,r:"0>2",t:"0:0"},f:"-04/-03",o:"-4:0",s:{m:9,r:"0>2",t:"0:0",v:"1:0"}},ilib.data.zoneinfo.EET={e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo.EST={f:"EST",o:"-5:0"},ilib.data.zoneinfo.EST5EDT={e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Etc/GMT+1"]={f:"-01",n:"Cape Verde {c} Time",o:"-1:0"},ilib.data.zoneinfo["Etc/GMT+10"]={f:"-10",n:"Hawaiian {c} Time",o:"-10:0"},ilib.data.zoneinfo["Etc/GMT+11"]={f:"-11",n:"UTC-11",o:"-11:0"},ilib.data.zoneinfo["Etc/GMT+12"]={f:"-12",n:"Dateline {c} Time",o:"-12:0"},ilib.data.zoneinfo["Etc/GMT+2"]={f:"-02",n:"UTC-02",o:"-2:0"},ilib.data.zoneinfo["Etc/GMT+3"]={f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["Etc/GMT+4"]={f:"-04",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["Etc/GMT+5"]={f:"-05",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["Etc/GMT+6"]={f:"-06",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["Etc/GMT+7"]={f:"-07",n:"US Mountain {c} Time",o:"-7:0"},ilib.data.zoneinfo["Etc/GMT+8"]={f:"-08",n:"UTC-08",o:"-8:0"},ilib.data.zoneinfo["Etc/GMT+9"]={f:"-09",n:"UTC-09",o:"-9:0"},ilib.data.zoneinfo["Etc/GMT-1"]={f:"+01",n:"W. Central Africa {c} Time",o:"1:0"},ilib.data.zoneinfo["Etc/GMT-10"]={f:"+10",n:"West Pacific {c} Time",o:"10:0"},ilib.data.zoneinfo["Etc/GMT-11"]={f:"+11",n:"Central Pacific {c} Time",o:"11:0"},ilib.data.zoneinfo["Etc/GMT-12"]={f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Etc/GMT-13"]={f:"+13",n:"UTC+13",o:"13:0"},ilib.data.zoneinfo["Etc/GMT-14"]={f:"+14",n:"Line Islands {c} Time",o:"14:0"},ilib.data.zoneinfo["Etc/GMT-2"]={f:"+02",n:"South Africa {c} Time",o:"2:0"},ilib.data.zoneinfo["Etc/GMT-3"]={f:"+03",n:"E. Africa {c} Time",o:"3:0"},ilib.data.zoneinfo["Etc/GMT-4"]={f:"+04",n:"Arabian {c} Time",o:"4:0"},ilib.data.zoneinfo["Etc/GMT-5"]={f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Etc/GMT-6"]={f:"+06",n:"Central Asia {c} Time",o:"6:0"},ilib.data.zoneinfo["Etc/GMT-7"]={f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Etc/GMT-8"]={f:"+08",n:"Singapore {c} Time",o:"8:0"},ilib.data.zoneinfo["Etc/GMT-9"]={f:"+09",n:"Tokyo {c} Time",o:"9:0"},ilib.data.zoneinfo["Etc/GMT"]={f:"GMT",n:"UTC",o:"0:0"},ilib.data.zoneinfo["Etc/UTC"]={f:"UTC",n:"UTC",o:"0:0"},ilib.data.zoneinfo["Europe/Amsterdam"]={c:"NL",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Andorra"]={c:"AD",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Astrakhan"]={c:"RU",f:"+04",n:"Astrakhan {c} Time",o:"4:0"},ilib.data.zoneinfo["Europe/Athens"]={c:"GR",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"GTB {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Belfast"]={c:"GB",e:{m:10,r:"l0",t:"2:0"},f:"GMT/BST",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Belgrade"]={c:"RS",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central European {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Berlin"]={c:"DE",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Bratislava"]={c:"SK",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Brussels"]={c:"BE",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Bucharest"]={c:"RO",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"GTB {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Budapest"]={c:"HU",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Busingen"]={c:"DE",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Chisinau"]={c:"MD",e:{m:10,r:"l0",t:"3:0"},f:"EE{c}T",n:"E. Europe {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Copenhagen"]={c:"DK",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Romance {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Dublin"]={c:"IE",e:{m:10,r:"l0",t:"1:0",z:"u"},f:"IST/GMT",n:"GMT {c} Time",o:"1:0"},ilib.data.zoneinfo["Europe/Gibraltar"]={c:"GI",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Guernsey"]={c:"GG",e:{m:10,r:"l0",t:"2:0"},f:"GMT/BST",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Helsinki"]={c:"FI",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Isle_of_Man"]={c:"IM",e:{m:10,r:"l0",t:"2:0"},f:"GMT/BST",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Istanbul"]={c:"TR",f:"+03",n:"Turkey {c} Time",o:"3:0"},ilib.data.zoneinfo["Europe/Jersey"]={c:"JE",e:{m:10,r:"l0",t:"2:0"},f:"GMT/BST",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Kaliningrad"]={c:"RU",f:"EET",n:"Kaliningrad {c} Time",o:"2:0"},ilib.data.zoneinfo["Europe/Kiev"]={e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"},c:"UA",n:"FLE {c} Time"},ilib.data.zoneinfo["Europe/Kirov"]={c:"RU",f:"MSK",n:"Russian {c} Time",o:"3:0"},ilib.data.zoneinfo["Europe/Kyiv"]={c:"UA",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Lisbon"]={c:"PT",e:{m:10,r:"l0",t:"2:0"},f:"WE{c}T",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Ljubljana"]={c:"SI",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/London"]={c:"GB",e:{m:10,r:"l0",t:"2:0"},f:"GMT/BST",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Luxembourg"]={c:"LU",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Madrid"]={c:"ES",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Romance {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Malta"]={c:"MT",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Mariehamn"]={c:"AX",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Minsk"]={c:"BY",f:"+03",n:"Belarus {c} Time",o:"3:0"},ilib.data.zoneinfo["Europe/Monaco"]={c:"MC",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Moscow"]={c:"RU",f:"MSK",n:"Russian {c} Time",o:"3:0"},ilib.data.zoneinfo["Europe/Nicosia"]={e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Oslo"]={c:"NO",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Paris"]={c:"FR",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Podgorica"]={c:"ME",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Prague"]={c:"CZ",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Riga"]={c:"LV",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Rome"]={c:"IT",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Samara"]={c:"RU",f:"+04",n:"Russia Time Zone 3",o:"4:0"},ilib.data.zoneinfo["Europe/San_Marino"]={c:"SM",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Sarajevo"]={c:"BA",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central European {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Saratov"]={c:"RU",f:"+04",n:"Saratov {c} Time",o:"4:0"},ilib.data.zoneinfo["Europe/Simferopol"]={c:"UA",f:"MSK",n:"Russian {c} Time",o:"3:0"},ilib.data.zoneinfo["Europe/Skopje"]={c:"MK",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central European {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Sofia"]={c:"BG",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Stockholm"]={c:"SE",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Tallinn"]={c:"EE",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Tirane"]={c:"AL",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Tiraspol"]={c:"MD",f:"MSK/MSD",o:"3:0"},ilib.data.zoneinfo["Europe/Ulyanovsk"]={c:"RU",f:"+04",n:"Astrakhan {c} Time",o:"4:0"},ilib.data.zoneinfo["Europe/Uzhgorod"]={c:"UA",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Vaduz"]={c:"LI",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Vatican"]={c:"VA",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Vienna"]={c:"AT",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Vilnius"]={c:"LT",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Volgograd"]={c:"RU",f:"MSK",n:"Volgograd {c} Time",o:"3:0"},ilib.data.zoneinfo["Europe/Warsaw"]={c:"PL",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central European {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Zagreb"]={c:"HR",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central European {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Zaporozhye"]={c:"UA",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Zurich"]={c:"CH",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo.Factory={f:"-00",o:"0:0"},ilib.data.zoneinfo.HST={f:"HST",o:"-10:0"},ilib.data.zoneinfo.Iceland={c:"CI",f:"GMT",o:"0:0"},ilib.data.zoneinfo["Indian/Antananarivo"]={c:"MG",f:"EAT",n:"E. Africa {c} Time",o:"3:0"},ilib.data.zoneinfo["Indian/Chagos"]={c:"IO",f:"+06",n:"Central Asia {c} Time",o:"6:0"},ilib.data.zoneinfo["Indian/Christmas"]={c:"CX",f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Indian/Cocos"]={c:"CC",f:"+0630",n:"Myanmar {c} Time",o:"6:30"},ilib.data.zoneinfo["Indian/Comoro"]={c:"KM",f:"EAT",n:"E. Africa {c} Time",o:"3:0"},ilib.data.zoneinfo["Indian/Kerguelen"]={c:"TF",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Indian/Mahe"]={c:"SC",f:"+04",n:"Mauritius {c} Time",o:"4:0"},ilib.data.zoneinfo["Indian/Maldives"]={c:"MV",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Indian/Mauritius"]={c:"MU",f:"+04/+05",n:"Mauritius {c} Time",o:"4:0"},ilib.data.zoneinfo["Indian/Mayotte"]={c:"YT",f:"EAT",n:"E. Africa {c} Time",o:"3:0"},ilib.data.zoneinfo["Indian/Reunion"]={c:"RE",f:"+04",n:"Mauritius {c} Time",o:"4:0"},ilib.data.zoneinfo.Kwajalein={c:"MH",f:"+12",o:"12:0"},ilib.data.zoneinfo.MET={e:{m:10,r:"l0",t:"3:0"},f:"ME{c}T",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo.MST={f:"MST",o:"-7:0"},ilib.data.zoneinfo.MST7MDT={e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Mexico/BajaSur"]={c:"MX",f:"MST",o:"-7:0"},ilib.data.zoneinfo["Mexico/General"]={c:"MX",f:"CST",o:"-6:0"},ilib.data.zoneinfo.NZ={c:"NZ",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"NZ{c}T",o:"12:0",s:{c:"D",m:9,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo.PST8PDT={e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"P{c}T",n:"Pacific {c} Time",o:"-8:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Pacific/Apia"]={c:"WS",f:"+13/+14",n:"Samoa {c} Time",o:"13:0"},ilib.data.zoneinfo["Pacific/Auckland"]={c:"NZ",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"NZ{c}T",n:"New Zealand {c} Time",o:"12:0",s:{c:"D",m:9,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Pacific/Bougainville"]={c:"PG",f:"+11",n:"Bougainville {c} Time",o:"11:0"},ilib.data.zoneinfo["Pacific/Chatham"]={c:"NZ",e:{m:4,r:"0>1",t:"3:45"},f:"+1245/+1345",n:"Chatham Islands {c} Time",o:"12:45",s:{m:9,r:"l0",t:"2:45",v:"1:0"}},ilib.data.zoneinfo["Pacific/Chuuk"]={c:"FM",f:"+10",o:"10:0"},ilib.data.zoneinfo["Pacific/Easter"]={c:"CL",e:{m:4,r:"0>1",t:"22:0"},f:"-06/-05",n:"Easter Island {c} Time",o:"-6:0",s:{m:9,r:"0>1",t:"22:0",v:"1:0"}},ilib.data.zoneinfo["Pacific/Efate"]={c:"VU",f:"+11/+12",n:"Central Pacific {c} Time",o:"11:0"},ilib.data.zoneinfo["Pacific/Enderbury"]={c:"KI",f:"-00",n:"UTC+13",o:"0:0"},ilib.data.zoneinfo["Pacific/Fakaofo"]={c:"TK",f:"+13",n:"UTC+13",o:"13:0"},ilib.data.zoneinfo["Pacific/Fiji"]={c:"FJ",f:"+12/+13",n:"Fiji {c} Time",o:"12:0"},ilib.data.zoneinfo["Pacific/Funafuti"]={c:"TV",f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Pacific/Galapagos"]={c:"EC",f:"-06/-05",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["Pacific/Gambier"]={c:"PF",f:"-09",n:"UTC-09",o:"-9:0"},ilib.data.zoneinfo["Pacific/Guadalcanal"]={c:"SB",f:"+11",n:"Central Pacific {c} Time",o:"11:0"},ilib.data.zoneinfo["Pacific/Guam"]={c:"GU",f:"ChST",n:"West Pacific {c} Time",o:"10:0"},ilib.data.zoneinfo["Pacific/Honolulu"]={c:"US",f:"HST",n:"Hawaiian {c} Time",o:"-10:0"},ilib.data.zoneinfo["Pacific/Johnston"]={c:"US",f:"HST",n:"Hawaiian {c} Time",o:"-10:0"},ilib.data.zoneinfo["Pacific/Kanton"]={c:"KI",f:"+13",n:"UTC+13",o:"13:0"},ilib.data.zoneinfo["Pacific/Kiritimati"]={c:"KI",f:"+14",n:"Line Islands {c} Time",o:"14:0"},ilib.data.zoneinfo["Pacific/Kosrae"]={c:"FM",f:"+11",n:"Central Pacific {c} Time",o:"11:0"},ilib.data.zoneinfo["Pacific/Kwajalein"]={c:"MH",f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Pacific/Majuro"]={c:"MH",f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Pacific/Marquesas"]={c:"PF",f:"-0930",n:"Marquesas {c} Time",o:"-9:30"},ilib.data.zoneinfo["Pacific/Midway"]={c:"UM",f:"SST",n:"UTC-11",o:"-11:0"},ilib.data.zoneinfo["Pacific/Nauru"]={c:"NR",f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Pacific/Niue"]={c:"NU",f:"-11",n:"UTC-11",o:"-11:0"},ilib.data.zoneinfo["Pacific/Norfolk"]={c:"NF",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"+11/+12",n:"Norfolk {c} Time",o:"11:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Pacific/Noumea"]={c:"NC",f:"+11/+12",n:"Central Pacific {c} Time",o:"11:0"},ilib.data.zoneinfo["Pacific/Pago_Pago"]={c:"AS",f:"SST",n:"UTC-11",o:"-11:0"},ilib.data.zoneinfo["Pacific/Palau"]={c:"PW",f:"+09",n:"Tokyo {c} Time",o:"9:0"},ilib.data.zoneinfo["Pacific/Pitcairn"]={c:"PN",f:"-08",n:"UTC-08",o:"-8:0"},ilib.data.zoneinfo["Pacific/Pohnpei"]={c:"FM",f:"+11",o:"11:0"},ilib.data.zoneinfo["Pacific/Ponape"]={c:"SB",f:"+11",n:"Central Pacific {c} Time",o:"11:0"},ilib.data.zoneinfo["Pacific/Port_Moresby"]={c:"PG",f:"+10",n:"West Pacific {c} Time",o:"10:0"},ilib.data.zoneinfo["Pacific/Rarotonga"]={c:"CK",f:"-10/-0930",n:"Hawaiian {c} Time",o:"-10:0"},ilib.data.zoneinfo["Pacific/Saipan"]={c:"MP",f:"ChST",n:"West Pacific {c} Time",o:"10:0"},ilib.data.zoneinfo["Pacific/Samoa"]={c:"AS",f:"SST",o:"-11:0"},ilib.data.zoneinfo["Pacific/Tahiti"]={c:"PF",f:"-10",n:"Hawaiian {c} Time",o:"-10:0"},ilib.data.zoneinfo["Pacific/Tarawa"]={c:"KI",f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Pacific/Tongatapu"]={c:"TO",f:"+13/+14",n:"Tonga {c} Time",o:"13:0"},ilib.data.zoneinfo["Pacific/Truk"]={c:"PG",f:"+10",n:"West Pacific {c} Time",o:"10:0"},ilib.data.zoneinfo["Pacific/Wake"]={c:"UM",f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Pacific/Wallis"]={c:"WF",f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Pacific/Yap"]={c:"PG",f:"+10",o:"10:0"},ilib.data.zoneinfo["US/Alaska"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"AK{c}T",o:"-9:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["US/East-Indiana"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["US/Eastern"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["US/Hawaii"]={c:"US",f:"HST",o:"-10:0"},ilib.data.zoneinfo["US/Indiana-Starke"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["US/Pacific"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"P{c}T",o:"-8:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["US/Samoa"]={c:"AS",f:"SST",o:"-11:0"},ilib.data.zoneinfo.WET={e:{m:10,r:"l0",t:"2:0"},f:"WE{c}T",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo.zonetab={AD:["Europe/Andorra"],AE:["Asia/Dubai"],AF:["Asia/Kabul"],AG:["America/Antigua"],AI:["America/Anguilla"],AL:["Europe/Tirane"],AM:["Asia/Yerevan"],AO:["Africa/Luanda"],AQ:["Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok"],AR:["America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/ComodRivadavia","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Buenos_Aires","America/Catamarca","America/Cordoba","America/Jujuy","America/Mendoza","America/Rosario"],AS:["Pacific/Pago_Pago","Pacific/Samoa","US/Samoa"],AT:["Europe/Vienna"],AU:["Antarctica/Macquarie","Australia/ACT","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/LHI","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/NSW","Australia/North","Australia/Perth","Australia/Queensland","Australia/South","Australia/Sydney","Australia/Tasmania","Australia/Victoria","Australia/West","Australia/Yancowinna"],AW:["America/Aruba"],AX:["Europe/Mariehamn"],AZ:["Asia/Baku"],BA:["Europe/Sarajevo"],BB:["America/Barbados"],BD:["Asia/Dacca","Asia/Dhaka"],BE:["Europe/Brussels"],BF:["Africa/Ouagadougou"],BG:["Europe/Sofia"],BH:["Asia/Bahrain"],BI:["Africa/Bujumbura"],BJ:["Africa/Porto-Novo"],BL:["America/St_Barthelemy"],BM:["Atlantic/Bermuda"],BN:["Asia/Brunei"],BO:["America/La_Paz"],BQ:["America/Kralendijk"],BR:["America/Araguaina","America/Bahia","America/Belem","America/Boa_Vista","America/Campo_Grande","America/Cuiaba","America/Eirunepe","America/Fortaleza","America/Maceio","America/Manaus","America/Noronha","America/Porto_Acre","America/Porto_Velho","America/Recife","America/Rio_Branco","America/Santarem","America/Sao_Paulo","Brazil/Acre","Brazil/DeNoronha","Brazil/East","Brazil/West"],BS:["America/Nassau"],BT:["Asia/Thimbu","Asia/Thimphu"],BW:["Africa/Gaborone"],BY:["Europe/Minsk"],BZ:["America/Belize"],CA:["America/Atikokan","America/Blanc-Sablon","America/Cambridge_Bay","America/Coral_Harbour","America/Creston","America/Dawson","America/Dawson_Creek","America/Edmonton","America/Fort_Nelson","America/Glace_Bay","America/Goose_Bay","America/Halifax","America/Inuvik","America/Iqaluit","America/Moncton","America/Montreal","America/Nipigon","America/Pangnirtung","America/Rainy_River","America/Rankin_Inlet","America/Regina","America/Resolute","America/St_Johns","America/Swift_Current","America/Thunder_Bay","America/Toronto","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yellowknife","Canada/Atlantic","Canada/Central","Canada/Eastern","Canada/Mountain","Canada/Newfoundland","Canada/Pacific","Canada/Saskatchewan","Canada/Yukon"],CC:["Indian/Cocos"],CD:["Africa/Kinshasa","Africa/Lubumbashi"],CF:["Africa/Bangui"],CG:["Africa/Brazzaville"],CH:["Europe/Zurich"],CI:["Africa/Abidjan","Africa/Timbuktu"],CK:["Pacific/Rarotonga"],CL:["America/Punta_Arenas","America/Santiago","Chile/Continental","Chile/EasterIsland","Pacific/Easter"],CM:["Africa/Douala"],CN:["Asia/Chongqing","Asia/Chungking","Asia/Harbin","Asia/Kashgar","Asia/Shanghai","Asia/Urumqi","PRC"],CO:["America/Bogota"],CR:["America/Costa_Rica"],CU:["America/Havana","Cuba"],CV:["Atlantic/Cape_Verde"],CW:["America/Curacao"],CX:["Indian/Christmas"],CY:["Asia/Famagusta","Asia/Nicosia","Europe/Nicosia"],CZ:["Europe/Prague"],DE:["Europe/Berlin","Europe/Busingen"],DJ:["Africa/Djibouti"],DK:["Europe/Copenhagen"],DM:["America/Dominica"],DO:["America/Santo_Domingo"],DZ:["Africa/Algiers"],EC:["America/Guayaquil","Pacific/Galapagos"],EE:["Europe/Tallinn"],EG:["Africa/Cairo","Egypt"],EH:["Africa/El_Aaiun"],ER:["Africa/Asmara"],ES:["Africa/Ceuta","Atlantic/Canary","Europe/Madrid"],ET:["Africa/Addis_Ababa"],FI:["Europe/Helsinki"],FJ:["Pacific/Fiji"],FK:["Atlantic/Stanley"],FM:["Pacific/Chuuk","Pacific/Kosrae","Pacific/Pohnpei","Pacific/Ponape","Pacific/Truk","Pacific/Yap"],FO:["Atlantic/Faeroe","Atlantic/Faroe"],FR:["Europe/Paris"],GA:["Africa/Libreville"],GB:["Europe/Belfast","Europe/London","GB","GB-Eire"],GD:["America/Grenada"],GE:["Asia/Tbilisi"],GF:["America/Cayenne"],GG:["Europe/Guernsey"],GH:["Africa/Accra"],GI:["Europe/Gibraltar"],GL:["America/Danmarkshavn","America/Godthab","America/Nuuk","America/Scoresbysund","America/Thule"],GM:["Africa/Banjul"],GN:["Africa/Conakry"],GP:["America/Guadeloupe"],GQ:["Africa/Malabo"],GR:["Europe/Athens"],GS:["Atlantic/South_Georgia"],GT:["America/Guatemala"],GU:["Pacific/Guam"],GW:["Africa/Bissau"],GY:["America/Guyana"],HK:["Asia/Hong_Kong","Hongkong"],HN:["America/Tegucigalpa"],HR:["Europe/Zagreb"],HT:["America/Port-au-Prince"],HU:["Europe/Budapest"],ID:["Asia/Jakarta","Asia/Jayapura","Asia/Makassar","Asia/Pontianak","Asia/Ujung_Pandang"],IE:["Eire","Europe/Dublin"],IL:["Asia/Jerusalem","Asia/Tel_Aviv","Israel"],IM:["Europe/Isle_of_Man"],IN:["Asia/Calcutta","Asia/Kolkata"],IO:["Indian/Chagos"],IQ:["Asia/Baghdad"],IR:["Asia/Tehran","Iran"],IS:["Atlantic/Reykjavik","Iceland"],IT:["Europe/Rome"],JE:["Europe/Jersey"],JM:["America/Jamaica","Jamaica"],JO:["Asia/Amman"],JP:["Asia/Tokyo","Japan"],KE:["Africa/Asmera","Africa/Nairobi"],KG:["Asia/Bishkek"],KH:["Asia/Phnom_Penh"],KI:["Pacific/Enderbury","Pacific/Kanton","Pacific/Kiritimati","Pacific/Tarawa"],KM:["Indian/Comoro"],KN:["America/St_Kitts"],KP:["Asia/Pyongyang"],KR:["Asia/Seoul","ROK"],KW:["Asia/Kuwait"],KY:["America/Cayman"],KZ:["Asia/Almaty","Asia/Aqtau","Asia/Aqtobe","Asia/Atyrau","Asia/Oral","Asia/Qostanay","Asia/Qyzylorda"],LA:["Asia/Vientiane"],LB:["Asia/Beirut"],LC:["America/St_Lucia"],LI:["Europe/Vaduz"],LK:["Asia/Colombo"],LR:["Africa/Monrovia"],LS:["Africa/Maseru"],LT:["Europe/Vilnius"],LU:["Europe/Luxembourg"],LV:["Europe/Riga"],LY:["Africa/Tripoli","Libya"],MA:["Africa/Casablanca"],MC:["Europe/Monaco"],MD:["Europe/Chisinau","Europe/Tiraspol"],ME:["Europe/Podgorica"],MF:["America/Marigot"],MG:["Indian/Antananarivo"],MH:["Kwajalein","Pacific/Kwajalein","Pacific/Majuro"],MK:["Europe/Skopje"],ML:["Africa/Bamako"],MM:["Asia/Rangoon","Asia/Yangon"],MN:["Asia/Choibalsan","Asia/Hovd","Asia/Ulaanbaatar","Asia/Ulan_Bator"],MO:["Asia/Macao","Asia/Macau"],MP:["Pacific/Saipan"],MQ:["America/Martinique"],MR:["Africa/Nouakchott"],MS:["America/Montserrat"],MT:["Europe/Malta"],MU:["Indian/Mauritius"],MV:["Indian/Maldives"],MW:["Africa/Blantyre"],MX:["America/Bahia_Banderas","America/Cancun","America/Chihuahua","America/Ciudad_Juarez","America/Ensenada","America/Hermosillo","America/Matamoros","America/Mazatlan","America/Merida","America/Mexico_City","America/Monterrey","America/Ojinaga","America/Santa_Isabel","America/Tijuana","Mexico/BajaNorte","Mexico/BajaSur","Mexico/General"],MY:["Asia/Kuala_Lumpur","Asia/Kuching"],MZ:["Africa/Maputo"],NA:["Africa/Windhoek"],NC:["Pacific/Noumea"],NE:["Africa/Niamey"],NF:["Pacific/Norfolk"],NG:["Africa/Lagos"],NI:["America/Managua"],NL:["Europe/Amsterdam"],NO:["Atlantic/Jan_Mayen","Europe/Oslo"],NP:["Asia/Kathmandu","Asia/Katmandu"],NR:["Pacific/Nauru"],NU:["Pacific/Niue"],NZ:["Antarctica/South_Pole","NZ","NZ-CHAT","Pacific/Auckland","Pacific/Chatham"],OM:["Asia/Muscat"],PA:["America/Panama"],PE:["America/Lima"],PF:["Pacific/Gambier","Pacific/Marquesas","Pacific/Tahiti"],PG:["Pacific/Bougainville","Pacific/Port_Moresby"],PH:["Asia/Manila"],PK:["Asia/Karachi"],PL:["Europe/Warsaw","Poland"],PM:["America/Miquelon"],PN:["Pacific/Pitcairn"],PR:["America/Puerto_Rico"],PS:["Asia/Gaza","Asia/Hebron"],PT:["Atlantic/Azores","Atlantic/Madeira","Europe/Lisbon","Portugal"],PW:["Pacific/Palau"],PY:["America/Asuncion"],QA:["Asia/Qatar"],RE:["Indian/Reunion"],RO:["Europe/Bucharest"],RS:["Europe/Belgrade"],RU:["Asia/Anadyr","Asia/Barnaul","Asia/Chita","Asia/Irkutsk","Asia/Kamchatka","Asia/Khandyga","Asia/Krasnoyarsk","Asia/Magadan","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Sakhalin","Asia/Srednekolymsk","Asia/Tomsk","Asia/Ust-Nera","Asia/Vladivostok","Asia/Yakutsk","Asia/Yekaterinburg","Europe/Astrakhan","Europe/Kaliningrad","Europe/Kirov","Europe/Moscow","Europe/Samara","Europe/Saratov","Europe/Ulyanovsk","Europe/Volgograd","W-SU"],RW:["Africa/Kigali"],SA:["Asia/Riyadh"],SB:["Pacific/Guadalcanal"],SC:["Indian/Mahe"],SD:["Africa/Khartoum"],SE:["Europe/Stockholm"],SG:["Asia/Singapore","Singapore"],SH:["Atlantic/St_Helena"],SI:["Europe/Ljubljana"],SJ:["Arctic/Longyearbyen"],SK:["Europe/Bratislava"],SL:["Africa/Freetown"],SM:["Europe/San_Marino"],SN:["Africa/Dakar"],SO:["Africa/Mogadishu"],SR:["America/Paramaribo"],SS:["Africa/Juba"],ST:["Africa/Sao_Tome"],SV:["America/El_Salvador"],SX:["America/Lower_Princes"],SY:["Asia/Damascus"],SZ:["Africa/Mbabane"],TC:["America/Grand_Turk"],TD:["Africa/Ndjamena"],TF:["Indian/Kerguelen"],TG:["Africa/Lome"],TH:["Asia/Bangkok"],TJ:["Asia/Dushanbe"],TK:["Pacific/Fakaofo"],TL:["Asia/Dili"],TM:["Asia/Ashgabat","Asia/Ashkhabad"],TN:["Africa/Tunis"],TO:["Pacific/Tongatapu"],TR:["Asia/Istanbul","Europe/Istanbul","Turkey"],TT:["America/Port_of_Spain","America/Virgin"],TV:["Pacific/Funafuti"],TW:["Asia/Taipei","ROC"],TZ:["Africa/Dar_es_Salaam"],UA:["Europe/Kiev","Europe/Kyiv","Europe/Simferopol","Europe/Uzhgorod","Europe/Zaporozhye"],UG:["Africa/Kampala"],UM:["Pacific/Midway","Pacific/Wake"],US:["America/Adak","America/Anchorage","America/Atka","America/Boise","America/Chicago","America/Denver","America/Detroit","America/Fort_Wayne","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Indianapolis","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Knox_IN","America/Los_Angeles","America/Louisville","America/Menominee","America/Metlakatla","America/New_York","America/Nome","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Phoenix","America/Shiprock","America/Sitka","America/Yakutat","Navajo","Pacific/Honolulu","Pacific/Johnston","US/Alaska","US/Aleutian","US/Arizona","US/Central","US/East-Indiana","US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan","US/Mountain","US/Pacific"],UY:["America/Montevideo"],UZ:["Asia/Samarkand","Asia/Tashkent"],VA:["Europe/Vatican"],VC:["America/St_Vincent"],VE:["America/Caracas"],VG:["America/Tortola"],VI:["America/St_Thomas"],VN:["Asia/Ho_Chi_Minh","Asia/Saigon"],VU:["Pacific/Efate"],WF:["Pacific/Wallis"],WS:["Pacific/Apia"],YE:["Asia/Aden"],YT:["Indian/Mayotte"],ZA:["Africa/Johannesburg"],ZM:["Africa/Lusaka"],ZW:["Africa/Harare"]}; \ No newline at end of file +var ilib=ilib||{};function parseLocale(a){var n,t;return a&&("C"===(a=-1<(t=a.indexOf("."))?a.substring(0,t):a)?"en-US":(t=[],0<(n=a.replace(/_/g,"-").split(/-/g)).length&&(2!==n[0].length&&3!==n[0].length||(t.push(n[0].toLowerCase()),1>10)+String.fromCharCode(56320|1023&a))},IString.toCodePoint=function(a,n){var t,L;return a&&0!==a.length?(t=-1,55296<=(L=a.charCodeAt(n))&&L<=56319?a.length>n+1&&56320<=(a=a.charCodeAt(n+1))&&a<=57343&&(t=1+((960&L)>>6)<<16|(63&L)<<10|1023&a):t=L,t):-1},IString.loadPlurals=function(a,n,t,L){n=n?"string"==typeof n?new Locale(n):n:new Locale(ilib.getLocale());n.getLanguage();Utils.loadData({name:"plurals.json",object:"IString",locale:n,sync:a,loadParams:t,callback:ilib.bind(this,function(a){a=a||IString.plurals_default,L&&"function"==typeof L&&L(a)})})},IString._fncs={firstProp:function(a){for(var n in a)if(n&&a[n])return n},firstPropRule:function(a){if("[object Array]"===Object.prototype.toString.call(a))return"inrange";if("[object Object]"===Object.prototype.toString.call(a))for(var n in a)if(n&&a[n])return n},getValue:function(a,n){var t;return"object"==typeof a?"inrange"===(t=IString._fncs.firstPropRule(a))?IString._fncs[t](a,n):IString._fncs[t](a[t],n):"string"==typeof a?"object"==typeof n?n[a]:n:a},matchRangeContinuous:function(a,n){for(var t in n)if(void 0!==t&&void 0!==n[t]){var L=n[t];if("number"==typeof L){if(a===n[t])return!0;if(a>=n[0]&&a<=n[1])return!0}else if("[object Array]"===Object.prototype.toString.call(L)&&a>=L[0]&&a<=L[1])return!0}return!1},calculateNumberDigits:function(a){var n=a.toString(),t={},L={},i=a.toExponential(),e=i.indexOf("e");return-1!==e?(L.c=parseInt(i[e+2]),L.e=parseInt(i[e+2])):(L.c=0,L.e=0),-1!==n.indexOf(".")?(i=n.split(".",2),t.integerPart=parseInt(i[0],10),t.decimalPartLength=i[1].length,t.decimalPart=parseInt(i[1],10),L.n=parseFloat(a),L.i=t.integerPart,L.v=t.decimalPartLength,L.w=t.decimalPartLength,L.f=t.decimalPart,L.t=t.decimalPart):(t.integerPart=a,t.decimalPartLength=0,t.decimalPart=0,L.n=parseInt(a,10),L.i=t.integerPart,L.v=0,L.w=0,L.f=0,L.t=0),L},matchRange:function(a,n){return IString._fncs.matchRangeContinuous(a,n)},is:function(a,n){return IString._fncs.getValue(a[0],n)===IString._fncs.getValue(a[1],n)},isnot:function(a,n){return IString._fncs.getValue(a[0],n)!==IString._fncs.getValue(a[1],n)},inrange:function(a,n){var t;return"number"==typeof a[0]?"object"==typeof n?IString._fncs.matchRange(n.n,a):IString._fncs.matchRange(n,a):void 0===a[0]?(t=IString._fncs.firstPropRule(a),IString._fncs[t](a[t],n)):IString._fncs.matchRange(IString._fncs.getValue(a[0],n),a[1])},notin:function(a,n){return!IString._fncs.matchRange(IString._fncs.getValue(a[0],n),a[1])},within:function(a,n){return IString._fncs.matchRangeContinuous(IString._fncs.getValue(a[0],n),a[1])},mod:function(a,n){return MathUtils.mod(IString._fncs.getValue(a[0],n),IString._fncs.getValue(a[1],n))},n:function(a,n){return n},or:function(a,n){for(var t=a.length,L=0;L="===n.substring(0,2))return n=parseFloat(n.substring(2)),t.n>=n;if("<"===n.charAt(0))return n=parseFloat(n.substring(1)),t.n"===n.charAt(0))return n=parseFloat(n.substring(1)),t.n>n;switch(this.locale=this.locale||new Locale(this.localeSpec),n){case"zero":case"one":case"two":case"few":case"many":var L=ilib.data["plurals_"+this.locale.getLanguage()+"_"+this.locale.getRegion()]||ilib.data["plurals_"+this.locale.getLanguage()]||IString.plurals_default;if(L)return L=L[n],IString._fncs.getValue(L,t);break;case"":case"other":return!0;default:var i,L=n.indexOf("-");return-1!==L?(i=n.substring(0,L),L=n.substring(L+1),t.n>=parseInt(i,10)&&t.n<=parseInt(L,10)):t.n===parseInt(n,10)}break;case"boolean":return"true"===n&&!0===a||"false"===n&&!1===a;case"string":return new RegExp(n,"i").test(a);case"object":throw"syntax error: formatChoice parameter for the argument index cannot be an object"}return!1},_isIntlPluralAvailable:function(a){var n;return void 0===a.getVariant()&&"undefined"!=typeof Intl&&void 0!==Intl.PluralRules&&void 0!==Intl.PluralRules.supportedLocalesOf&&("nodejs"!==ilib._getPlatform()||!!(n=process.versions.node)&&(n=n.split(".")[0],10<=Number(n)))&&0=n+L?a:t?a+JSUtils.pad.zeros.substring(0,n-a.length+L):a.substring(0,L)+JSUtils.pad.zeros.substring(0,n-a.length+L)+a.substring(L)},JSUtils.pad.zeros="00000000000000000000000000000000",JSUtils.toHexString=function(a,n){var t,L="",i=n&&n<9?n:4;if(!a)return"";for(t=0;ta[1]?a[1]-n:0}))=n[a+1][0];)a++;this.month=n[a][1],L-=n[a][0],this.day=Math.floor(L),L-=this.day,this.day++,L=Math.round(864e5*L),this.hour=Math.floor(L/36e5),L-=36e5*this.hour,6<=this.hour?this.hour-=6:this.hour+=18,this.minute=Math.floor(L/6e4),L-=6e4*this.minute,this.second=Math.floor(L/1e3),L-=1e3*this.second,this.millisecond=Math.floor(L)},HebrewDate.prototype.getDayOfWeek=function(){var a=Math.floor(this.rd.getRataDie()+(this.offset||0));return MathUtils.mod(a+1,7)},HebrewDate.prototype.getHalaqim=function(){var a;return this.parts<0&&(a=6e4*this.minute+1e3*this.second+this.millisecond,this.parts=3e-4*a),this.parts},HebrewDate.prototype.firstSunday=function(a){a=this.newRd({year:a,month:7,day:1,hour:18,minute:0,second:0,millisecond:0,cal:this.cal});return this.newRd({rd:a.onOrAfter(4),cal:this.cal}).before(0)},HebrewDate.prototype.getDayOfYear=function(){var a=(this.cal.isLeapYear(this.year)?HebrewRataDie.cumMonthLengthsLeap:HebrewRataDie.cumMonthLengths)[this.month-1];return(this.month<7||8=o.from&&L"):L)?(i=a.r.charAt(L),e=parseInt(a.r.substring(0,L),10),parseInt(a.r.substring(L+1),10)):parseInt(a.r,10),a.t&&(t=a.t.split(":"),r=parseInt(t[0],10),1":l=m.onOrAfter(e)}return l},TimeZone.prototype._calcDSTSavings=function(){var a=this.getDSTSavings();this.dstSavings=(60*Math.abs(a.h||0)+(a.m||0))*MathUtils.signum(a.h||0)},TimeZone.prototype._getDSTStartRule=function(a){return this.zone.s},TimeZone.prototype._getDSTEndRule=function(a){return this.zone.e},TimeZone.prototype.inDaylightTime=function(a,n){var t,L,i,e;return a=a&&DateFactory._dateToIlib(a,this.id,this.locale),this.isLocal?(i=6e4*this.offset,void 0===a.dst||a.dst||(i+=6e4*this.dstSavings),i=new Date(a?a.getTimeExtended()-i:void 0),L=Math.max(this.offsetJan1,this.offsetJun1),-i.getTimezoneOffset()===L):(L=a&&a.cal&&"gregorian"===a.cal.type?(t=a.rd.getRataDie(),a.year):(i=a&&"function"==typeof a.getTimeExtended?a.getTimeExtended():void 0,t=new GregRataDie({unixtime:i}).getRataDie(),new Date(i).getUTCFullYear()),!!this.useDaylightTime(L)&&(i=this._getDSTStartRule(L),e=this._getDSTEndRule(L),i=this._calcRuleStart(i,L),e=this._calcRuleStart(e,L),n?i+=this.dstSavings/1440:(i-=this.offset/1440,e-=(this.offset+this.dstSavings)/1440),t"!==a.charAt(i);)t+=a.charAt(i++);else if("&"===a.charAt(i))for(t+=a.charAt(i++);i"!==a.charAt(i)||"%"!==a.charAt(i-1));)t+=a.charAt(i++);else if("&"===a.charAt(i))for(t+=a.charAt(i++);i/g,">")},_unescapeXml:function(a){return a=(a=(a=a.replace(/&/g,"&")).replace(/</g,"<")).replace(/>/g,">")},_makeKey:function(a){if(a)return a=a.replace(/\s+/gm," "),"xml"===this.type||"html"===this.type?this._unescapeXml(a):a},_getStringSingle:function(a,n,t){var L;return a||n?(L=this.locale.isPseudo()?(L=a||this.map[n],this._pseudo(L||n)):(L=n||this._makeKey(a),void 0!==this.map[L]?this.map[L]:"pseudo"===this.missing?this._pseudo(a||n):"empty"===this.missing?"":a),t&&"none"!==t&&("xml"===(t="default"===t?this.type:t)||"html"===t?L=this._escapeXml(L):"js"!==t&&"attribute"!==t||(L=L.replace(/'/g,"\\'").replace(/"/g,'\\"'))),void 0!==L?((n=new IString(L)).setLocale(this.locale.getSpec(),!0,this.loadParams),n):void 0):new IString("")},getString:function(a,n,t){return a||n?ilib.isArray(a)?a.map(ilib.bind(this,function(a){return"string"==typeof a?this._getStringSingle(a,n,t):a})):this._getStringSingle(a,n,t):new IString("")},getStringJS:function(a,n,t){if(void 0!==a||void 0!==n)return ilib.isArray(a)?this.getString(a,n,t).map(function(a){return a&&a instanceof IString?a.toString():a}):(a=this.getString(a,n,t))?a.toString():void 0},containsKey:function(a,n){return(void 0!==a||void 0!==n)&&(n=n||this._makeKey(a),void 0!==this.map[n])},getResObj:function(){return this.map}},function(t){var L=!0,i=void 0;this.locale=new Locale,this.length="short",this.style="text",t&&(t.locale&&(this.locale="string"==typeof t.locale?new Locale(t.locale):t.locale),!t.length||"short"!==t.length&&"medium"!==t.length&&"long"!==t.length&&"full"!==t.length||(this.length=t.length),!t.style||"text"!==t.style&&"clock"!==t.style||(this.style=t.style),void 0!==t.sync&&(L=!!t.sync),"boolean"==typeof t.useNative&&(this.useNative=t.useNative),i=t.loadParams),t=t||{sync:!0},new LocaleInfo(this.locale,{sync:L,loadParams:i,onLoad:ilib.bind(this,function(n){this.script=n.getScript(),new ResBundle({locale:this.locale,name:"sysres",sync:L,loadParams:i,onLoad:ilib.bind(this,function(a){IString.loadPlurals(L,this.locale,i,ilib.bind(this,function(){switch("medium"===this.length&&"Latn"!==this.script&&"Grek"!==this.script&&"Cyrl"!==this.script&&(this.length="short"),this.length){case"short":this.components={year:a.getString("#{num}y"),month:a.getString("#{num}m","durationShortMonths"),week:a.getString("#{num}w"),day:a.getString("#{num}d"),hour:a.getString("#{num}h"),minute:a.getString("#{num}m","durationShortMinutes"),second:a.getString("#{num}s"),millisecond:a.getString("#{num}m","durationShortMillis"),separator:a.getString(" ","separatorShort"),finalSeparator:""};break;case"medium":this.components={year:a.getString("1#1 yr|#{num} yrs","durationMediumYears"),month:a.getString("1#1 mo|#{num} mos"),week:a.getString("1#1 wk|#{num} wks","durationMediumWeeks"),day:a.getString("1#1 dy|#{num} dys"),hour:a.getString("1#1 hr|#{num} hrs","durationMediumHours"),minute:a.getString("1#1 mi|#{num} min"),second:a.getString("1#1 se|#{num} sec"),millisecond:a.getString("#{num} ms","durationMediumMillis"),separator:a.getString(" ","separatorMedium"),finalSeparator:""};break;case"long":this.components={year:a.getString("1#1 yr|#{num} yrs"),month:a.getString("1#1 mon|#{num} mons"),week:a.getString("1#1 wk|#{num} wks"),day:a.getString("1#1 day|#{num} days","durationLongDays"),hour:a.getString("1#1 hr|#{num} hrs"),minute:a.getString("1#1 min|#{num} min"),second:a.getString("1#1 sec|#{num} sec"),millisecond:a.getString("#{num} ms"),separator:a.getString(", ","separatorLong"),finalSeparator:""};break;case"full":this.components={year:a.getString("1#1 year|#{num} years"),month:a.getString("1#1 month|#{num} months"),week:a.getString("1#1 week|#{num} weeks"),day:a.getString("1#1 day|#{num} days"),hour:a.getString("1#1 hour|#{num} hours"),minute:a.getString("1#1 minute|#{num} minutes"),second:a.getString("1#1 second|#{num} seconds"),millisecond:a.getString("1#1 millisecond|#{num} milliseconds"),separator:a.getString(", ","separatorFull"),finalSeparator:a.getString(" and ","finalSeparatorFull")}}"clock"===this.style?new DateFmt({locale:this.locale,calendar:"gregorian",type:"time",time:"ms",sync:L,loadParams:i,useNative:this.useNative,onLoad:ilib.bind(this,function(a){this.timeFmtMS=a,new DateFmt({locale:this.locale,calendar:"gregorian",type:"time",time:"hm",sync:L,loadParams:i,useNative:this.useNative,onLoad:ilib.bind(this,function(a){this.timeFmtHM=a,new DateFmt({locale:this.locale,calendar:"gregorian",type:"time",time:"hms",sync:L,loadParams:i,useNative:this.useNative,onLoad:ilib.bind(this,function(a){this.timeFmtHMS=a,this.timeFmtHM.template=this.timeFmtHM.template.replace(/hh?/,"H"),this.timeFmtHM.templateArr=this.timeFmtHM._tokenize(this.timeFmtHM.template),this.timeFmtHMS.template=this.timeFmtHMS.template.replace(/hh?/,"H"),this.timeFmtHMS.templateArr=this.timeFmtHMS._tokenize(this.timeFmtHMS.template),this._init(this.timeFmtHM.locinfo,t)})})})})})}):this._init(n,t)}))})})})})});DurationFmt.complist={text:["year","month","week","day","hour","minute","second","millisecond"],clock:["year","month","week","day"]},DurationFmt.prototype._mapDigits=function(a){return this.useNative&&this.digits?JSUtils.mapString(a.toString(),this.digits):a},DurationFmt.prototype._init=function(n,t){var L;new ScriptInfo(n.getScript(),{sync:t.sync,loadParams:t.loadParams,onLoad:ilib.bind(this,function(a){this.scriptDirection=a.getScriptDirection(),"boolean"==typeof this.useNative?this.useNative&&(L=n.getNativeDigits())&&(this.digits=L):"native"===n.getDigitsStyle()&&(L=n.getNativeDigits())&&(this.useNative=!0,this.digits=L),"function"==typeof t.onLoad&&t.onLoad(this)})})},DurationFmt.prototype.format=function(a){for(var n,t=!0,L="",i=DurationFmt.complist[this.style],e=i.length-1;0<=e;e--)void 0!==a[i[e]]&&0!==a[i[e]]&&(01",t:"2:0"},f:"H{c}T",n:"Aleutian {c} Time",o:"-10:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Anchorage"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"AK{c}T",n:"Alaskan {c} Time",o:"-9:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Anguilla"]={c:"AI",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Antigua"]={c:"AG",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Araguaina"]={c:"BR",f:"-03",n:"Tocantins {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Buenos_Aires"]={c:"AR",f:"-03/-02",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Catamarca"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/ComodRivadavia"]={c:"AR",f:"-03",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Cordoba"]={c:"AR",f:"-03/-02",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Jujuy"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/La_Rioja"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Mendoza"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Rio_Gallegos"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Salta"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/San_Juan"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/San_Luis"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Tucuman"]={c:"AR",f:"-03/-02",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Argentina/Ushuaia"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Aruba"]={c:"AW",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Asuncion"]={c:"PY",e:{m:3,r:"0>22",t:"0:0"},f:"-04/-03",n:"Paraguay {c} Time",o:"-4:0",s:{m:10,r:"0>1",t:"0:0",v:"1:0"}},ilib.data.zoneinfo["America/Atikokan"]={c:"CA",f:"EST",o:"-5:0"},ilib.data.zoneinfo["America/Bahia"]={c:"BR",f:"-03",n:"Bahia {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Bahia_Banderas"]={c:"MX",f:"CST",n:"Central {c} Time (Mexico)",o:"-6:0"},ilib.data.zoneinfo["America/Barbados"]={c:"BB",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Belem"]={c:"BR",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Belize"]={c:"BZ",f:"CST",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Blanc-Sablon"]={c:"CA",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Boa_Vista"]={c:"BR",f:"-04",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Bogota"]={c:"CO",f:"-05/-04",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Boise"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Buenos_Aires"]={c:"AR",f:"-03/-02",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Cambridge_Bay"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Campo_Grande"]={c:"BR",f:"-04/-03",n:"Central Brazilian {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Cancun"]={c:"MX",f:"EST",n:"Eastern {c} Time (Mexico)",o:"-5:0"},ilib.data.zoneinfo["America/Caracas"]={c:"VE",f:"-04",n:"Venezuela {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Catamarca"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Cayenne"]={c:"GF",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Cayman"]={c:"KY",f:"EST",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Chicago"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Chihuahua"]={c:"MX",f:"CST",n:"Central {c} Time (Mexico)",o:"-6:0"},ilib.data.zoneinfo["America/Ciudad_Juarez"]={c:"MX",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Coral_Harbour"]={c:"CA",f:"EST",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Cordoba"]={c:"AR",f:"-03/-02",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Costa_Rica"]={c:"CR",f:"CST",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Creston"]={c:"CA",f:"MST",n:"US Mountain {c} Time",o:"-7:0"},ilib.data.zoneinfo["America/Cuiaba"]={c:"BR",f:"-04/-03",n:"Central Brazilian {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Curacao"]={c:"CW",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Danmarkshavn"]={c:"GL",f:"GMT",n:"Greenwich {c} Time",o:"0:0"},ilib.data.zoneinfo["America/Dawson"]={c:"CA",f:"MST",n:"Yukon {c} Time",o:"-7:0"},ilib.data.zoneinfo["America/Dawson_Creek"]={c:"CA",f:"MST",n:"US Mountain {c} Time",o:"-7:0"},ilib.data.zoneinfo["America/Denver"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Detroit"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Dominica"]={c:"DM",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Edmonton"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Eirunepe"]={c:"BR",f:"-05",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/El_Salvador"]={c:"SV",f:"CST",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Ensenada"]={c:"MX",f:"PST",o:"-8:0"},ilib.data.zoneinfo["America/Fort_Nelson"]={c:"CA",f:"MST",n:"US Mountain {c} Time",o:"-7:0"},ilib.data.zoneinfo["America/Fort_Wayne"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Fortaleza"]={c:"BR",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Glace_Bay"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"A{c}T",n:"Atlantic {c} Time",o:"-4:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Godthab"]={e:{m:10,r:"l6",t:"23:0"},f:"-03/-02",o:"-3:0",s:{c:"S",m:3,r:"l6",t:"22:0",v:"1:0"},c:"GL",n:"Greenland {c} Time"},ilib.data.zoneinfo["America/Goose_Bay"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"A{c}T",n:"Atlantic {c} Time",o:"-4:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Grand_Turk"]={c:"TC",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Turks And Caicos {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Grenada"]={c:"GD",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Guadeloupe"]={c:"GP",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Guatemala"]={c:"GT",f:"CST",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Guayaquil"]={c:"EC",f:"-05/-04",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Guyana"]={c:"GY",f:"-04",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Halifax"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"A{c}T",n:"Atlantic {c} Time",o:"-4:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Havana"]={c:"CU",e:{c:"S",m:11,r:"0>1",t:"1:0"},f:"C{c}T",n:"Cuba {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"0:0",v:"1:0"}},ilib.data.zoneinfo["America/Hermosillo"]={c:"MX",f:"MST",n:"US Mountain {c} Time",o:"-7:0"},ilib.data.zoneinfo["America/Indiana/Indianapolis"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"US Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indiana/Knox"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indiana/Marengo"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"US Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indiana/Petersburg"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indiana/Tell_City"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indiana/Vevay"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"US Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indiana/Vincennes"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indiana/Winamac"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Indianapolis"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"US Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Inuvik"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Iqaluit"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Jamaica"]={c:"JM",f:"EST",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Jujuy"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Juneau"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"AK{c}T",n:"Alaskan {c} Time",o:"-9:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Kentucky/Louisville"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Kentucky/Monticello"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Knox_IN"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Kralendijk"]={c:"BQ",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/La_Paz"]={c:"BO",f:"-04",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Lima"]={c:"PE",f:"-05/-04",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Los_Angeles"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"P{c}T",n:"Pacific {c} Time",o:"-8:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Louisville"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Lower_Princes"]={c:"SX",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Maceio"]={c:"BR",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Managua"]={c:"NI",f:"CST",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Manaus"]={c:"BR",f:"-04",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Marigot"]={c:"MF",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Martinique"]={c:"MQ",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Matamoros"]={c:"MX",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Mazatlan"]={c:"MX",f:"MST",n:"Mountain {c} Time (Mexico)",o:"-7:0"},ilib.data.zoneinfo["America/Mendoza"]={c:"AR",f:"-03",n:"Argentina {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Menominee"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Merida"]={c:"MX",f:"CST",n:"Central {c} Time (Mexico)",o:"-6:0"},ilib.data.zoneinfo["America/Metlakatla"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"AK{c}T",n:"Alaskan {c} Time",o:"-9:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Mexico_City"]={c:"MX",f:"CST",n:"Central {c} Time (Mexico)",o:"-6:0"},ilib.data.zoneinfo["America/Miquelon"]={c:"PM",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"-03/-02",n:"Saint Pierre {c} Time",o:"-3:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Moncton"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"A{c}T",n:"Atlantic {c} Time",o:"-4:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Monterrey"]={c:"MX",f:"CST",n:"Central {c} Time (Mexico)",o:"-6:0"},ilib.data.zoneinfo["America/Montevideo"]={c:"UY",f:"-03/-02",n:"Montevideo {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Montreal"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Montserrat"]={c:"MS",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Nassau"]={c:"BS",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/New_York"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Nipigon"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Nome"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"AK{c}T",n:"Alaskan {c} Time",o:"-9:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Noronha"]={c:"BR",f:"-02",n:"UTC-02",o:"-2:0"},ilib.data.zoneinfo["America/North_Dakota/Beulah"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/North_Dakota/Center"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/North_Dakota/New_Salem"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Nuuk"]={c:"GL",e:{m:10,r:"l0",t:"0:0"},f:"-02/-01",n:"Greenland {c} Time",o:"-2:0",s:{c:"S",m:3,r:"l6",t:"23:0",v:"1:0"}},ilib.data.zoneinfo["America/Ojinaga"]={c:"MX",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Panama"]={c:"PA",f:"EST",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Pangnirtung"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Paramaribo"]={c:"SR",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Phoenix"]={c:"US",f:"MST",n:"US Mountain {c} Time",o:"-7:0"},ilib.data.zoneinfo["America/Port-au-Prince"]={c:"HT",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Haiti {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Port_of_Spain"]={c:"TT",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Porto_Acre"]={c:"BR",f:"-05",o:"-5:0"},ilib.data.zoneinfo["America/Porto_Velho"]={c:"BR",f:"-04",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Puerto_Rico"]={c:"PR",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Punta_Arenas"]={c:"CL",f:"-03",n:"Magallanes {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Rainy_River"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Rankin_Inlet"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Recife"]={c:"BR",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Regina"]={c:"CA",f:"CST",n:"Canada Central {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Resolute"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Rio_Branco"]={c:"BR",f:"-05",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["America/Rosario"]={c:"AR",f:"-03/-02",o:"-3:0"},ilib.data.zoneinfo["America/Santarem"]={c:"BR",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Santiago"]={c:"CL",e:{m:4,r:"0>2",t:"0:0"},f:"-04/-03",n:"Pacific SA {c} Time",o:"-4:0",s:{m:9,r:"0>2",t:"0:0",v:"1:0"}},ilib.data.zoneinfo["America/Santo_Domingo"]={c:"DO",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Sao_Paulo"]={c:"BR",f:"-03/-02",n:"E. South America {c} Time",o:"-3:0"},ilib.data.zoneinfo["America/Scoresbysund"]={c:"GL",e:{m:10,r:"l0",t:"0:0"},f:"-02/-01",n:"Azores {c} Time",o:"-2:0",s:{c:"S",m:3,r:"l6",t:"23:0",v:"1:0"}},ilib.data.zoneinfo["America/Sitka"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"AK{c}T",n:"Alaskan {c} Time",o:"-9:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/St_Barthelemy"]={c:"BL",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/St_Johns"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"N{c}T",n:"Newfoundland {c} Time",o:"-3:30",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/St_Kitts"]={c:"KN",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/St_Lucia"]={c:"LC",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/St_Thomas"]={c:"VI",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/St_Vincent"]={c:"VC",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Swift_Current"]={c:"CA",f:"CST",n:"Canada Central {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Tegucigalpa"]={c:"HN",f:"CST",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["America/Thule"]={c:"GL",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"A{c}T",n:"Atlantic {c} Time",o:"-4:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Thunder_Bay"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Tijuana"]={c:"MX",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"P{c}T",n:"Pacific {c} Time (Mexico)",o:"-8:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Toronto"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Tortola"]={c:"VG",f:"AST",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["America/Vancouver"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"P{c}T",n:"Pacific {c} Time",o:"-8:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Virgin"]={c:"TT",f:"AST",o:"-4:0"},ilib.data.zoneinfo["America/Whitehorse"]={c:"CA",f:"MST",n:"Yukon {c} Time",o:"-7:0"},ilib.data.zoneinfo["America/Winnipeg"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Yakutat"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"AK{c}T",n:"Alaskan {c} Time",o:"-9:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["America/Yellowknife"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Antarctica/Casey"]={c:"AQ",f:"+08",n:"Central Pacific {c} Time",o:"8:0"},ilib.data.zoneinfo["Antarctica/Davis"]={c:"AQ",f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Antarctica/DumontDUrville"]={c:"AQ",f:"+10",n:"West Pacific {c} Time",o:"10:0"},ilib.data.zoneinfo["Antarctica/Macquarie"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",n:"Tasmania {c} Time",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Antarctica/Mawson"]={c:"AQ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Antarctica/McMurdo"]={c:"AQ",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"NZ{c}T",n:"New Zealand {c} Time",o:"12:0",s:{c:"D",m:9,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Antarctica/Palmer"]={c:"AQ",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["Antarctica/Rothera"]={c:"AQ",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["Antarctica/South_Pole"]={c:"NZ",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"NZ{c}T",o:"12:0",s:{c:"D",m:9,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Antarctica/Syowa"]={c:"AQ",f:"+03",n:"E. Africa {c} Time",o:"3:0"},ilib.data.zoneinfo["Antarctica/Troll"]={c:"AQ",e:{c:"+00",m:10,r:"l0",t:"3:0"},f:"+00",o:"0:0",s:{c:"+02",m:3,r:"l0",t:"1:0",v:"2:0"}},ilib.data.zoneinfo["Antarctica/Vostok"]={c:"AQ",f:"+05",n:"Central Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Arctic/Longyearbyen"]={c:"SJ",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Aden"]={c:"YE",f:"+03",n:"Arab {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Almaty"]={c:"KZ",f:"+05",n:"Central Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Amman"]={c:"JO",f:"+03",n:"Jordan {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Anadyr"]={c:"RU",f:"+12",n:"Russia Time Zone 11",o:"12:0"},ilib.data.zoneinfo["Asia/Aqtau"]={c:"KZ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Aqtobe"]={c:"KZ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Ashgabat"]={c:"TM",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Atyrau"]={c:"KZ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Baghdad"]={c:"IQ",f:"+03/+04",n:"Arabic {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Bahrain"]={c:"BH",f:"+03",n:"Arab {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Baku"]={c:"AZ",f:"+04/+05",n:"Azerbaijan {c} Time",o:"4:0"},ilib.data.zoneinfo["Asia/Bangkok"]={c:"TH",f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Barnaul"]={c:"RU",f:"+07",n:"Altai {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Beirut"]={c:"LB",e:{m:10,r:"l0",t:"0:0"},f:"EE{c}T",n:"Middle East {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"0:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Bishkek"]={c:"KG",f:"+06",n:"Central Asia {c} Time",o:"6:0"},ilib.data.zoneinfo["Asia/Brunei"]={c:"BN",f:"+08",n:"Singapore {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Chita"]={c:"RU",f:"+09",n:"Transbaikal {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Choibalsan"]={c:"MN",f:"+08/+09",n:"Ulaanbaatar {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Chongqing"]={c:"CN",f:"CST",o:"8:0"},ilib.data.zoneinfo["Asia/Chungking"]={c:"CN",f:"CST",o:"8:0"},ilib.data.zoneinfo["Asia/Colombo"]={c:"LK",f:"+0530",n:"Sri Lanka {c} Time",o:"5:30"},ilib.data.zoneinfo["Asia/Damascus"]={c:"SY",f:"+03",n:"Syria {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Dhaka"]={c:"BD",f:"+06/+07",n:"Bangladesh {c} Time",o:"6:0"},ilib.data.zoneinfo["Asia/Dili"]={c:"TL",f:"+09",n:"Tokyo {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Dubai"]={c:"AE",f:"+04",n:"Mauritius {c} Time",o:"4:0"},ilib.data.zoneinfo["Asia/Dushanbe"]={c:"TJ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Famagusta"]={c:"CY",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"GTB {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Gaza"]={c:"PS",e:{m:10,r:"6<30",t:"2:0"},f:"EE{c}T",n:"West Bank {c} Time",o:"2:0",s:{c:"S",m:4,r:"20",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Hanoi"]={f:"+07",o:"7:0"},ilib.data.zoneinfo["Asia/Harbin"]={c:"CN",f:"CST",o:"8:0"},ilib.data.zoneinfo["Asia/Hebron"]={c:"PS",e:{m:10,r:"6<30",t:"2:0"},f:"EE{c}T",n:"West Bank {c} Time",o:"2:0",s:{c:"S",m:4,r:"20",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Ho_Chi_Minh"]={c:"VN",f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Hong_Kong"]={c:"HK",f:"HKST",n:"China {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Hovd"]={c:"MN",f:"+07/+08",n:"W. Mongolia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Irkutsk"]={c:"RU",f:"+08",n:"North Asia East {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Istanbul"]={f:"+03",o:"3:0"},ilib.data.zoneinfo["Asia/Jakarta"]={c:"ID",f:"WIB",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Jayapura"]={c:"ID",f:"WIT",n:"Tokyo {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Jerusalem"]={c:"IL",e:{c:"S",m:10,r:"l0",t:"2:0"},f:"I{c}T",n:"Israel {c} Time",o:"2:0",s:{c:"D",m:3,r:"5>23",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Kabul"]={c:"AF",f:"+0430",n:"Afghanistan {c} Time",o:"4:30"},ilib.data.zoneinfo["Asia/Kamchatka"]={c:"RU",f:"+12",n:"Russia Time Zone 11",o:"12:0"},ilib.data.zoneinfo["Asia/Karachi"]={c:"PK",f:"PKST",n:"Pakistan {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Kashgar"]={c:"CN",f:"CST",o:"8:0"},ilib.data.zoneinfo["Asia/Kathmandu"]={c:"NP",f:"+0545",n:"Nepal {c} Time",o:"5:45"},ilib.data.zoneinfo["Asia/Khandyga"]={c:"RU",f:"+09",n:"Yakutsk {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Kolkata"]={c:"IN",f:"IST",n:"India {c} Time",o:"5:30"},ilib.data.zoneinfo["Asia/Krasnoyarsk"]={c:"RU",f:"+07",n:"North Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Kuala_Lumpur"]={c:"MY",f:"+08",n:"Singapore {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Kuching"]={c:"MY",f:"+08",n:"Singapore {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Kuwait"]={c:"KW",f:"+03",n:"Arab {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Macau"]={c:"MO",f:"CST",n:"China {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Magadan"]={c:"RU",f:"+11",n:"Magadan {c} Time",o:"11:0"},ilib.data.zoneinfo["Asia/Makassar"]={c:"ID",f:"WITA",n:"Singapore {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Manila"]={c:"PH",f:"PST",n:"Singapore {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Muscat"]={c:"OM",f:"+04",n:"Arabian {c} Time",o:"4:0"},ilib.data.zoneinfo["Asia/Nicosia"]={c:"CY",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"GTB {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Novokuznetsk"]={c:"RU",f:"+07",n:"North Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Novosibirsk"]={c:"RU",f:"+07",n:"N. Central Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Omsk"]={c:"RU",f:"+06",n:"Omsk {c} Time",o:"6:0"},ilib.data.zoneinfo["Asia/Oral"]={c:"KZ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Phnom_Penh"]={c:"KH",f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Pontianak"]={c:"ID",f:"WIB",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Pyongyang"]={c:"KP",f:"KST",n:"North Korea {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Qatar"]={c:"QA",f:"+03",n:"Arab {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Qostanay"]={c:"KZ",f:"+05",n:"Central Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Qyzylorda"]={c:"KZ",f:"+05",n:"Qyzylorda {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Riyadh"]={c:"SA",f:"+03",n:"E. Africa {c} Time",o:"3:0"},ilib.data.zoneinfo["Asia/Saigon"]={c:"VN",f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Sakhalin"]={c:"RU",f:"+11",n:"Sakhalin {c} Time",o:"11:0"},ilib.data.zoneinfo["Asia/Samarkand"]={c:"UZ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Seoul"]={c:"KR",f:"KST",n:"Korea {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Shanghai"]={c:"CN",f:"CST",n:"China {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Singapore"]={c:"SG",f:"+08",n:"Singapore {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Srednekolymsk"]={c:"RU",f:"+11",n:"Russia Time Zone 10",o:"11:0"},ilib.data.zoneinfo["Asia/Taipei"]={c:"TW",f:"CST",n:"Taipei {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Tashkent"]={c:"UZ",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Tbilisi"]={c:"GE",f:"+04",n:"Georgian {c} Time",o:"4:0"},ilib.data.zoneinfo["Asia/Tehran"]={c:"IR",f:"+0330/+0430",n:"Iran {c} Time",o:"3:30"},ilib.data.zoneinfo["Asia/Tel_Aviv"]={c:"IL",e:{c:"S",m:10,r:"l0",t:"2:0"},f:"I{c}T",o:"2:0",s:{c:"D",m:3,r:"5>23",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Asia/Thimphu"]={c:"BT",f:"+06",n:"Bangladesh {c} Time",o:"6:0"},ilib.data.zoneinfo["Asia/Tokyo"]={c:"JP",f:"JST",n:"Tokyo {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Tomsk"]={c:"RU",f:"+07",n:"Tomsk {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Ulaanbaatar"]={c:"MN",f:"+08/+09",n:"Ulaanbaatar {c} Time",o:"8:0"},ilib.data.zoneinfo["Asia/Ulan_Bator"]={c:"MN",f:"+08/+09",o:"8:0"},ilib.data.zoneinfo["Asia/Urumqi"]={c:"CN",f:"+06",n:"Central Asia {c} Time",o:"6:0"},ilib.data.zoneinfo["Asia/Ust-Nera"]={c:"RU",f:"+10",n:"Vladivostok {c} Time",o:"10:0"},ilib.data.zoneinfo["Asia/Vientiane"]={c:"LA",f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Asia/Vladivostok"]={c:"RU",f:"+10",n:"Vladivostok {c} Time",o:"10:0"},ilib.data.zoneinfo["Asia/Yakutsk"]={c:"RU",f:"+09",n:"Yakutsk {c} Time",o:"9:0"},ilib.data.zoneinfo["Asia/Yangon"]={c:"MM",f:"+0630",n:"Myanmar {c} Time",o:"6:30"},ilib.data.zoneinfo["Asia/Yekaterinburg"]={c:"RU",f:"+05",n:"Ekaterinburg {c} Time",o:"5:0"},ilib.data.zoneinfo["Asia/Yerevan"]={c:"AM",f:"+04/+05",n:"Caucasus {c} Time",o:"4:0"},ilib.data.zoneinfo["Atlantic/Azores"]={c:"PT",e:{m:10,r:"l0",t:"1:0"},f:"-01/+00",n:"Azores {c} Time",o:"-1:0",s:{c:"S",m:3,r:"l0",t:"0:0",v:"1:0"}},ilib.data.zoneinfo["Atlantic/Bermuda"]={c:"BM",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"A{c}T",n:"Atlantic {c} Time",o:"-4:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Atlantic/Canary"]={c:"ES",e:{m:10,r:"l0",t:"2:0"},f:"WE{c}T",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Atlantic/Cape_Verde"]={c:"CV",f:"-01",n:"Cape Verde {c} Time",o:"-1:0"},ilib.data.zoneinfo["Atlantic/Faroe"]={c:"FO",e:{m:10,r:"l0",t:"2:0"},f:"WE{c}T",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Atlantic/Jan_Mayen"]={c:"NO",f:"-01",o:"-1:0"},ilib.data.zoneinfo["Atlantic/Madeira"]={c:"PT",e:{m:10,r:"l0",t:"2:0"},f:"WE{c}T",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Atlantic/Reykjavik"]={c:"IS",f:"GMT",n:"Greenwich {c} Time",o:"0:0"},ilib.data.zoneinfo["Atlantic/South_Georgia"]={c:"GS",f:"-02",n:"UTC-02",o:"-2:0"},ilib.data.zoneinfo["Atlantic/St_Helena"]={c:"SH",f:"GMT",n:"Greenwich {c} Time",o:"0:0"},ilib.data.zoneinfo["Atlantic/Stanley"]={c:"FK",f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["Australia/ACT"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Adelaide"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AC{c}T",n:"Cen. Australia {c} Time",o:"9:30",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Brisbane"]={c:"AU",f:"AEST",n:"E. Australia {c} Time",o:"10:0"},ilib.data.zoneinfo["Australia/Broken_Hill"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AC{c}T",n:"Cen. Australia {c} Time",o:"9:30",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Canberra"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Currie"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",n:"Tasmania {c} Time",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Darwin"]={c:"AU",f:"ACST",n:"AUS Central {c} Time",o:"9:30"},ilib.data.zoneinfo["Australia/Eucla"]={c:"AU",f:"+0845/+0945",n:"Aus Central W. {c} Time",o:"8:45"},ilib.data.zoneinfo["Australia/Hobart"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",n:"Tasmania {c} Time",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/LHI"]={c:"AU",e:{m:4,r:"0>1",t:"2:0"},f:"+1030/+11",o:"10:30",s:{m:10,r:"0>1",t:"2:0",v:"0:30"}},ilib.data.zoneinfo["Australia/Lindeman"]={c:"AU",f:"AEST",n:"E. Australia {c} Time",o:"10:0"},ilib.data.zoneinfo["Australia/Lord_Howe"]={c:"AU",e:{m:4,r:"0>1",t:"2:0"},f:"+1030/+11",n:"Lord Howe {c} Time",o:"10:30",s:{m:10,r:"0>1",t:"2:0",v:"0:30"}},ilib.data.zoneinfo["Australia/Melbourne"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",n:"AUS Eastern {c} Time",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/NSW"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/North"]={c:"AU",f:"ACST",o:"9:30"},ilib.data.zoneinfo["Australia/Perth"]={c:"AU",f:"AWST",n:"W. Australia {c} Time",o:"8:0"},ilib.data.zoneinfo["Australia/Queensland"]={c:"AU",f:"AEST",o:"10:0"},ilib.data.zoneinfo["Australia/South"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AC{c}T",o:"9:30",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Sydney"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",n:"AUS Eastern {c} Time",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Tasmania"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Victoria"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AE{c}T",o:"10:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Australia/Yancowinna"]={c:"AU",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"AC{c}T",o:"9:30",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Brazil/Acre"]={c:"BR",f:"-05",o:"-5:0"},ilib.data.zoneinfo["Brazil/East"]={c:"BR",f:"-03/-02",o:"-3:0"},ilib.data.zoneinfo.CET={e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo.CST6CDT={e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",n:"Central {c} Time",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Canada/Central"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Canada/Mountain"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Canada/Newfoundland"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"N{c}T",o:"-3:30",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Canada/Pacific"]={c:"CA",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"P{c}T",o:"-8:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Canada/Yukon"]={c:"CA",f:"MST",o:"-7:0"},ilib.data.zoneinfo["Chile/Continental"]={c:"CL",e:{m:4,r:"0>2",t:"0:0"},f:"-04/-03",o:"-4:0",s:{m:9,r:"0>2",t:"0:0",v:"1:0"}},ilib.data.zoneinfo.EET={e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo.EST={f:"EST",o:"-5:0"},ilib.data.zoneinfo.EST5EDT={e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",n:"Eastern {c} Time",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Etc/GMT+1"]={f:"-01",n:"Cape Verde {c} Time",o:"-1:0"},ilib.data.zoneinfo["Etc/GMT+10"]={f:"-10",n:"Hawaiian {c} Time",o:"-10:0"},ilib.data.zoneinfo["Etc/GMT+11"]={f:"-11",n:"UTC-11",o:"-11:0"},ilib.data.zoneinfo["Etc/GMT+12"]={f:"-12",n:"Dateline {c} Time",o:"-12:0"},ilib.data.zoneinfo["Etc/GMT+2"]={f:"-02",n:"UTC-02",o:"-2:0"},ilib.data.zoneinfo["Etc/GMT+3"]={f:"-03",n:"SA Eastern {c} Time",o:"-3:0"},ilib.data.zoneinfo["Etc/GMT+4"]={f:"-04",n:"SA Western {c} Time",o:"-4:0"},ilib.data.zoneinfo["Etc/GMT+5"]={f:"-05",n:"SA Pacific {c} Time",o:"-5:0"},ilib.data.zoneinfo["Etc/GMT+6"]={f:"-06",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["Etc/GMT+7"]={f:"-07",n:"US Mountain {c} Time",o:"-7:0"},ilib.data.zoneinfo["Etc/GMT+8"]={f:"-08",n:"UTC-08",o:"-8:0"},ilib.data.zoneinfo["Etc/GMT+9"]={f:"-09",n:"UTC-09",o:"-9:0"},ilib.data.zoneinfo["Etc/GMT-1"]={f:"+01",n:"W. Central Africa {c} Time",o:"1:0"},ilib.data.zoneinfo["Etc/GMT-10"]={f:"+10",n:"West Pacific {c} Time",o:"10:0"},ilib.data.zoneinfo["Etc/GMT-11"]={f:"+11",n:"Central Pacific {c} Time",o:"11:0"},ilib.data.zoneinfo["Etc/GMT-12"]={f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Etc/GMT-13"]={f:"+13",n:"UTC+13",o:"13:0"},ilib.data.zoneinfo["Etc/GMT-14"]={f:"+14",n:"Line Islands {c} Time",o:"14:0"},ilib.data.zoneinfo["Etc/GMT-2"]={f:"+02",n:"South Africa {c} Time",o:"2:0"},ilib.data.zoneinfo["Etc/GMT-3"]={f:"+03",n:"E. Africa {c} Time",o:"3:0"},ilib.data.zoneinfo["Etc/GMT-4"]={f:"+04",n:"Arabian {c} Time",o:"4:0"},ilib.data.zoneinfo["Etc/GMT-5"]={f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Etc/GMT-6"]={f:"+06",n:"Central Asia {c} Time",o:"6:0"},ilib.data.zoneinfo["Etc/GMT-7"]={f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Etc/GMT-8"]={f:"+08",n:"Singapore {c} Time",o:"8:0"},ilib.data.zoneinfo["Etc/GMT-9"]={f:"+09",n:"Tokyo {c} Time",o:"9:0"},ilib.data.zoneinfo["Etc/GMT"]={f:"GMT",n:"UTC",o:"0:0"},ilib.data.zoneinfo["Etc/UTC"]={f:"UTC",n:"UTC",o:"0:0"},ilib.data.zoneinfo["Europe/Amsterdam"]={c:"NL",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Andorra"]={c:"AD",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Astrakhan"]={c:"RU",f:"+04",n:"Astrakhan {c} Time",o:"4:0"},ilib.data.zoneinfo["Europe/Athens"]={c:"GR",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"GTB {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Belfast"]={c:"GB",e:{m:10,r:"l0",t:"2:0"},f:"GMT/BST",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Belgrade"]={c:"RS",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central European {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Berlin"]={c:"DE",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Bratislava"]={c:"SK",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Brussels"]={c:"BE",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Bucharest"]={c:"RO",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"GTB {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Budapest"]={c:"HU",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Busingen"]={c:"DE",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Chisinau"]={c:"MD",e:{m:10,r:"l0",t:"3:0"},f:"EE{c}T",n:"E. Europe {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Copenhagen"]={c:"DK",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Romance {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Dublin"]={c:"IE",e:{m:10,r:"l0",t:"1:0",z:"u"},f:"IST/GMT",n:"GMT {c} Time",o:"1:0"},ilib.data.zoneinfo["Europe/Gibraltar"]={c:"GI",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Guernsey"]={c:"GG",e:{m:10,r:"l0",t:"2:0"},f:"GMT/BST",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Helsinki"]={c:"FI",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Isle_of_Man"]={c:"IM",e:{m:10,r:"l0",t:"2:0"},f:"GMT/BST",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Istanbul"]={c:"TR",f:"+03",n:"Turkey {c} Time",o:"3:0"},ilib.data.zoneinfo["Europe/Jersey"]={c:"JE",e:{m:10,r:"l0",t:"2:0"},f:"GMT/BST",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Kaliningrad"]={c:"RU",f:"EET",n:"Kaliningrad {c} Time",o:"2:0"},ilib.data.zoneinfo["Europe/Kiev"]={e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"},c:"UA",n:"FLE {c} Time"},ilib.data.zoneinfo["Europe/Kirov"]={c:"RU",f:"MSK",n:"Russian {c} Time",o:"3:0"},ilib.data.zoneinfo["Europe/Kyiv"]={c:"UA",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Lisbon"]={c:"PT",e:{m:10,r:"l0",t:"2:0"},f:"WE{c}T",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Ljubljana"]={c:"SI",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/London"]={c:"GB",e:{m:10,r:"l0",t:"2:0"},f:"GMT/BST",n:"GMT {c} Time",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Luxembourg"]={c:"LU",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Madrid"]={c:"ES",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Romance {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Malta"]={c:"MT",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Mariehamn"]={c:"AX",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Minsk"]={c:"BY",f:"+03",n:"Belarus {c} Time",o:"3:0"},ilib.data.zoneinfo["Europe/Monaco"]={c:"MC",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Moscow"]={c:"RU",f:"MSK",n:"Russian {c} Time",o:"3:0"},ilib.data.zoneinfo["Europe/Nicosia"]={e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Oslo"]={c:"NO",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Paris"]={c:"FR",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Podgorica"]={c:"ME",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Prague"]={c:"CZ",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Riga"]={c:"LV",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Rome"]={c:"IT",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Samara"]={c:"RU",f:"+04",n:"Russia Time Zone 3",o:"4:0"},ilib.data.zoneinfo["Europe/San_Marino"]={c:"SM",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Sarajevo"]={c:"BA",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central European {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Saratov"]={c:"RU",f:"+04",n:"Saratov {c} Time",o:"4:0"},ilib.data.zoneinfo["Europe/Simferopol"]={c:"UA",f:"MSK",n:"Russian {c} Time",o:"3:0"},ilib.data.zoneinfo["Europe/Skopje"]={c:"MK",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central European {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Sofia"]={c:"BG",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Stockholm"]={c:"SE",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Tallinn"]={c:"EE",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Tirane"]={c:"AL",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Tiraspol"]={c:"MD",f:"MSK/MSD",o:"3:0"},ilib.data.zoneinfo["Europe/Ulyanovsk"]={c:"RU",f:"+04",n:"Astrakhan {c} Time",o:"4:0"},ilib.data.zoneinfo["Europe/Uzhgorod"]={c:"UA",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Vaduz"]={c:"LI",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Vatican"]={c:"VA",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Vienna"]={c:"AT",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Vilnius"]={c:"LT",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Volgograd"]={c:"RU",f:"MSK",n:"Volgograd {c} Time",o:"3:0"},ilib.data.zoneinfo["Europe/Warsaw"]={c:"PL",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central European {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Zagreb"]={c:"HR",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"Central European {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Zaporozhye"]={c:"UA",e:{m:10,r:"l0",t:"4:0"},f:"EE{c}T",n:"FLE {c} Time",o:"2:0",s:{c:"S",m:3,r:"l0",t:"3:0",v:"1:0"}},ilib.data.zoneinfo["Europe/Zurich"]={c:"CH",e:{m:10,r:"l0",t:"3:0"},f:"CE{c}T",n:"W. Europe {c} Time",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo.Factory={f:"-00",o:"0:0"},ilib.data.zoneinfo.HST={f:"HST",o:"-10:0"},ilib.data.zoneinfo.Iceland={c:"CI",f:"GMT",o:"0:0"},ilib.data.zoneinfo["Indian/Antananarivo"]={c:"MG",f:"EAT",n:"E. Africa {c} Time",o:"3:0"},ilib.data.zoneinfo["Indian/Chagos"]={c:"IO",f:"+06",n:"Central Asia {c} Time",o:"6:0"},ilib.data.zoneinfo["Indian/Christmas"]={c:"CX",f:"+07",n:"SE Asia {c} Time",o:"7:0"},ilib.data.zoneinfo["Indian/Cocos"]={c:"CC",f:"+0630",n:"Myanmar {c} Time",o:"6:30"},ilib.data.zoneinfo["Indian/Comoro"]={c:"KM",f:"EAT",n:"E. Africa {c} Time",o:"3:0"},ilib.data.zoneinfo["Indian/Kerguelen"]={c:"TF",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Indian/Mahe"]={c:"SC",f:"+04",n:"Mauritius {c} Time",o:"4:0"},ilib.data.zoneinfo["Indian/Maldives"]={c:"MV",f:"+05",n:"West Asia {c} Time",o:"5:0"},ilib.data.zoneinfo["Indian/Mauritius"]={c:"MU",f:"+04/+05",n:"Mauritius {c} Time",o:"4:0"},ilib.data.zoneinfo["Indian/Mayotte"]={c:"YT",f:"EAT",n:"E. Africa {c} Time",o:"3:0"},ilib.data.zoneinfo["Indian/Reunion"]={c:"RE",f:"+04",n:"Mauritius {c} Time",o:"4:0"},ilib.data.zoneinfo.Kwajalein={c:"MH",f:"+12",o:"12:0"},ilib.data.zoneinfo.MET={e:{m:10,r:"l0",t:"3:0"},f:"ME{c}T",o:"1:0",s:{c:"S",m:3,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo.MST={f:"MST",o:"-7:0"},ilib.data.zoneinfo.MST7MDT={e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"M{c}T",n:"Mountain {c} Time",o:"-7:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Mexico/BajaSur"]={c:"MX",f:"MST",o:"-7:0"},ilib.data.zoneinfo["Mexico/General"]={c:"MX",f:"CST",o:"-6:0"},ilib.data.zoneinfo.NZ={c:"NZ",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"NZ{c}T",o:"12:0",s:{c:"D",m:9,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo.PST8PDT={e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"P{c}T",n:"Pacific {c} Time",o:"-8:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Pacific/Apia"]={c:"WS",f:"+13/+14",n:"Samoa {c} Time",o:"13:0"},ilib.data.zoneinfo["Pacific/Auckland"]={c:"NZ",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"NZ{c}T",n:"New Zealand {c} Time",o:"12:0",s:{c:"D",m:9,r:"l0",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Pacific/Bougainville"]={c:"PG",f:"+11",n:"Bougainville {c} Time",o:"11:0"},ilib.data.zoneinfo["Pacific/Chatham"]={c:"NZ",e:{m:4,r:"0>1",t:"3:45"},f:"+1245/+1345",n:"Chatham Islands {c} Time",o:"12:45",s:{m:9,r:"l0",t:"2:45",v:"1:0"}},ilib.data.zoneinfo["Pacific/Chuuk"]={c:"FM",f:"+10",o:"10:0"},ilib.data.zoneinfo["Pacific/Easter"]={c:"CL",e:{m:4,r:"0>1",t:"22:0"},f:"-06/-05",n:"Easter Island {c} Time",o:"-6:0",s:{m:9,r:"0>1",t:"22:0",v:"1:0"}},ilib.data.zoneinfo["Pacific/Efate"]={c:"VU",f:"+11/+12",n:"Central Pacific {c} Time",o:"11:0"},ilib.data.zoneinfo["Pacific/Enderbury"]={c:"KI",f:"-00",n:"UTC+13",o:"0:0"},ilib.data.zoneinfo["Pacific/Fakaofo"]={c:"TK",f:"+13",n:"UTC+13",o:"13:0"},ilib.data.zoneinfo["Pacific/Fiji"]={c:"FJ",f:"+12/+13",n:"Fiji {c} Time",o:"12:0"},ilib.data.zoneinfo["Pacific/Funafuti"]={c:"TV",f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Pacific/Galapagos"]={c:"EC",f:"-06/-05",n:"Central America {c} Time",o:"-6:0"},ilib.data.zoneinfo["Pacific/Gambier"]={c:"PF",f:"-09",n:"UTC-09",o:"-9:0"},ilib.data.zoneinfo["Pacific/Guadalcanal"]={c:"SB",f:"+11",n:"Central Pacific {c} Time",o:"11:0"},ilib.data.zoneinfo["Pacific/Guam"]={c:"GU",f:"ChST",n:"West Pacific {c} Time",o:"10:0"},ilib.data.zoneinfo["Pacific/Honolulu"]={c:"US",f:"HST",n:"Hawaiian {c} Time",o:"-10:0"},ilib.data.zoneinfo["Pacific/Johnston"]={c:"US",f:"HST",n:"Hawaiian {c} Time",o:"-10:0"},ilib.data.zoneinfo["Pacific/Kanton"]={c:"KI",f:"+13",n:"UTC+13",o:"13:0"},ilib.data.zoneinfo["Pacific/Kiritimati"]={c:"KI",f:"+14",n:"Line Islands {c} Time",o:"14:0"},ilib.data.zoneinfo["Pacific/Kosrae"]={c:"FM",f:"+11",n:"Central Pacific {c} Time",o:"11:0"},ilib.data.zoneinfo["Pacific/Kwajalein"]={c:"MH",f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Pacific/Majuro"]={c:"MH",f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Pacific/Marquesas"]={c:"PF",f:"-0930",n:"Marquesas {c} Time",o:"-9:30"},ilib.data.zoneinfo["Pacific/Midway"]={c:"UM",f:"SST",n:"UTC-11",o:"-11:0"},ilib.data.zoneinfo["Pacific/Nauru"]={c:"NR",f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Pacific/Niue"]={c:"NU",f:"-11",n:"UTC-11",o:"-11:0"},ilib.data.zoneinfo["Pacific/Norfolk"]={c:"NF",e:{c:"S",m:4,r:"0>1",t:"3:0"},f:"+11/+12",n:"Norfolk {c} Time",o:"11:0",s:{c:"D",m:10,r:"0>1",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["Pacific/Noumea"]={c:"NC",f:"+11/+12",n:"Central Pacific {c} Time",o:"11:0"},ilib.data.zoneinfo["Pacific/Pago_Pago"]={c:"AS",f:"SST",n:"UTC-11",o:"-11:0"},ilib.data.zoneinfo["Pacific/Palau"]={c:"PW",f:"+09",n:"Tokyo {c} Time",o:"9:0"},ilib.data.zoneinfo["Pacific/Pitcairn"]={c:"PN",f:"-08",n:"UTC-08",o:"-8:0"},ilib.data.zoneinfo["Pacific/Pohnpei"]={c:"FM",f:"+11",o:"11:0"},ilib.data.zoneinfo["Pacific/Ponape"]={c:"SB",f:"+11",n:"Central Pacific {c} Time",o:"11:0"},ilib.data.zoneinfo["Pacific/Port_Moresby"]={c:"PG",f:"+10",n:"West Pacific {c} Time",o:"10:0"},ilib.data.zoneinfo["Pacific/Rarotonga"]={c:"CK",f:"-10/-0930",n:"Hawaiian {c} Time",o:"-10:0"},ilib.data.zoneinfo["Pacific/Saipan"]={c:"MP",f:"ChST",n:"West Pacific {c} Time",o:"10:0"},ilib.data.zoneinfo["Pacific/Samoa"]={c:"AS",f:"SST",o:"-11:0"},ilib.data.zoneinfo["Pacific/Tahiti"]={c:"PF",f:"-10",n:"Hawaiian {c} Time",o:"-10:0"},ilib.data.zoneinfo["Pacific/Tarawa"]={c:"KI",f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Pacific/Tongatapu"]={c:"TO",f:"+13/+14",n:"Tonga {c} Time",o:"13:0"},ilib.data.zoneinfo["Pacific/Truk"]={c:"PG",f:"+10",n:"West Pacific {c} Time",o:"10:0"},ilib.data.zoneinfo["Pacific/Wake"]={c:"UM",f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Pacific/Wallis"]={c:"WF",f:"+12",n:"UTC+12",o:"12:0"},ilib.data.zoneinfo["Pacific/Yap"]={c:"PG",f:"+10",o:"10:0"},ilib.data.zoneinfo["US/Alaska"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"AK{c}T",o:"-9:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["US/East-Indiana"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["US/Eastern"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"E{c}T",o:"-5:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["US/Hawaii"]={c:"US",f:"HST",o:"-10:0"},ilib.data.zoneinfo["US/Indiana-Starke"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"C{c}T",o:"-6:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["US/Pacific"]={c:"US",e:{c:"S",m:11,r:"0>1",t:"2:0"},f:"P{c}T",o:"-8:0",s:{c:"D",m:3,r:"0>8",t:"2:0",v:"1:0"}},ilib.data.zoneinfo["US/Samoa"]={c:"AS",f:"SST",o:"-11:0"},ilib.data.zoneinfo.WET={e:{m:10,r:"l0",t:"2:0"},f:"WE{c}T",o:"0:0",s:{c:"S",m:3,r:"l0",t:"1:0",v:"1:0"}},ilib.data.zoneinfo.zonetab={AD:["Europe/Andorra"],AE:["Asia/Dubai"],AF:["Asia/Kabul"],AG:["America/Antigua"],AI:["America/Anguilla"],AL:["Europe/Tirane"],AM:["Asia/Yerevan"],AO:["Africa/Luanda"],AQ:["Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok"],AR:["America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/ComodRivadavia","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Buenos_Aires","America/Catamarca","America/Cordoba","America/Jujuy","America/Mendoza","America/Rosario"],AS:["Pacific/Pago_Pago","Pacific/Samoa","US/Samoa"],AT:["Europe/Vienna"],AU:["Antarctica/Macquarie","Australia/ACT","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/LHI","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/NSW","Australia/North","Australia/Perth","Australia/Queensland","Australia/South","Australia/Sydney","Australia/Tasmania","Australia/Victoria","Australia/West","Australia/Yancowinna"],AW:["America/Aruba"],AX:["Europe/Mariehamn"],AZ:["Asia/Baku"],BA:["Europe/Sarajevo"],BB:["America/Barbados"],BD:["Asia/Dacca","Asia/Dhaka"],BE:["Europe/Brussels"],BF:["Africa/Ouagadougou"],BG:["Europe/Sofia"],BH:["Asia/Bahrain"],BI:["Africa/Bujumbura"],BJ:["Africa/Porto-Novo"],BL:["America/St_Barthelemy"],BM:["Atlantic/Bermuda"],BN:["Asia/Brunei"],BO:["America/La_Paz"],BQ:["America/Kralendijk"],BR:["America/Araguaina","America/Bahia","America/Belem","America/Boa_Vista","America/Campo_Grande","America/Cuiaba","America/Eirunepe","America/Fortaleza","America/Maceio","America/Manaus","America/Noronha","America/Porto_Acre","America/Porto_Velho","America/Recife","America/Rio_Branco","America/Santarem","America/Sao_Paulo","Brazil/Acre","Brazil/DeNoronha","Brazil/East","Brazil/West"],BS:["America/Nassau"],BT:["Asia/Thimbu","Asia/Thimphu"],BW:["Africa/Gaborone"],BY:["Europe/Minsk"],BZ:["America/Belize"],CA:["America/Atikokan","America/Blanc-Sablon","America/Cambridge_Bay","America/Coral_Harbour","America/Creston","America/Dawson","America/Dawson_Creek","America/Edmonton","America/Fort_Nelson","America/Glace_Bay","America/Goose_Bay","America/Halifax","America/Inuvik","America/Iqaluit","America/Moncton","America/Montreal","America/Nipigon","America/Pangnirtung","America/Rainy_River","America/Rankin_Inlet","America/Regina","America/Resolute","America/St_Johns","America/Swift_Current","America/Thunder_Bay","America/Toronto","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yellowknife","Canada/Atlantic","Canada/Central","Canada/Eastern","Canada/Mountain","Canada/Newfoundland","Canada/Pacific","Canada/Saskatchewan","Canada/Yukon"],CC:["Indian/Cocos"],CD:["Africa/Kinshasa","Africa/Lubumbashi"],CF:["Africa/Bangui"],CG:["Africa/Brazzaville"],CH:["Europe/Zurich"],CI:["Africa/Abidjan","Africa/Timbuktu"],CK:["Pacific/Rarotonga"],CL:["America/Punta_Arenas","America/Santiago","Chile/Continental","Chile/EasterIsland","Pacific/Easter"],CM:["Africa/Douala"],CN:["Asia/Chongqing","Asia/Chungking","Asia/Harbin","Asia/Kashgar","Asia/Shanghai","Asia/Urumqi","PRC"],CO:["America/Bogota"],CR:["America/Costa_Rica"],CU:["America/Havana","Cuba"],CV:["Atlantic/Cape_Verde"],CW:["America/Curacao"],CX:["Indian/Christmas"],CY:["Asia/Famagusta","Asia/Nicosia","Europe/Nicosia"],CZ:["Europe/Prague"],DE:["Europe/Berlin","Europe/Busingen"],DJ:["Africa/Djibouti"],DK:["Europe/Copenhagen"],DM:["America/Dominica"],DO:["America/Santo_Domingo"],DZ:["Africa/Algiers"],EC:["America/Guayaquil","Pacific/Galapagos"],EE:["Europe/Tallinn"],EG:["Africa/Cairo","Egypt"],EH:["Africa/El_Aaiun"],ER:["Africa/Asmara"],ES:["Africa/Ceuta","Atlantic/Canary","Europe/Madrid"],ET:["Africa/Addis_Ababa"],FI:["Europe/Helsinki"],FJ:["Pacific/Fiji"],FK:["Atlantic/Stanley"],FM:["Pacific/Chuuk","Pacific/Kosrae","Pacific/Pohnpei","Pacific/Ponape","Pacific/Truk","Pacific/Yap"],FO:["Atlantic/Faeroe","Atlantic/Faroe"],FR:["Europe/Paris"],GA:["Africa/Libreville"],GB:["Europe/Belfast","Europe/London","GB","GB-Eire"],GD:["America/Grenada"],GE:["Asia/Tbilisi"],GF:["America/Cayenne"],GG:["Europe/Guernsey"],GH:["Africa/Accra"],GI:["Europe/Gibraltar"],GL:["America/Danmarkshavn","America/Godthab","America/Nuuk","America/Scoresbysund","America/Thule"],GM:["Africa/Banjul"],GN:["Africa/Conakry"],GP:["America/Guadeloupe"],GQ:["Africa/Malabo"],GR:["Europe/Athens"],GS:["Atlantic/South_Georgia"],GT:["America/Guatemala"],GU:["Pacific/Guam"],GW:["Africa/Bissau"],GY:["America/Guyana"],HK:["Asia/Hong_Kong","Hongkong"],HN:["America/Tegucigalpa"],HR:["Europe/Zagreb"],HT:["America/Port-au-Prince"],HU:["Europe/Budapest"],ID:["Asia/Jakarta","Asia/Jayapura","Asia/Makassar","Asia/Pontianak","Asia/Ujung_Pandang"],IE:["Eire","Europe/Dublin"],IL:["Asia/Jerusalem","Asia/Tel_Aviv","Israel"],IM:["Europe/Isle_of_Man"],IN:["Asia/Calcutta","Asia/Kolkata"],IO:["Indian/Chagos"],IQ:["Asia/Baghdad"],IR:["Asia/Tehran","Iran"],IS:["Atlantic/Reykjavik","Iceland"],IT:["Europe/Rome"],JE:["Europe/Jersey"],JM:["America/Jamaica","Jamaica"],JO:["Asia/Amman"],JP:["Asia/Tokyo","Japan"],KE:["Africa/Asmera","Africa/Nairobi"],KG:["Asia/Bishkek"],KH:["Asia/Phnom_Penh"],KI:["Pacific/Enderbury","Pacific/Kanton","Pacific/Kiritimati","Pacific/Tarawa"],KM:["Indian/Comoro"],KN:["America/St_Kitts"],KP:["Asia/Pyongyang"],KR:["Asia/Seoul","ROK"],KW:["Asia/Kuwait"],KY:["America/Cayman"],KZ:["Asia/Almaty","Asia/Aqtau","Asia/Aqtobe","Asia/Atyrau","Asia/Oral","Asia/Qostanay","Asia/Qyzylorda"],LA:["Asia/Vientiane"],LB:["Asia/Beirut"],LC:["America/St_Lucia"],LI:["Europe/Vaduz"],LK:["Asia/Colombo"],LR:["Africa/Monrovia"],LS:["Africa/Maseru"],LT:["Europe/Vilnius"],LU:["Europe/Luxembourg"],LV:["Europe/Riga"],LY:["Africa/Tripoli","Libya"],MA:["Africa/Casablanca"],MC:["Europe/Monaco"],MD:["Europe/Chisinau","Europe/Tiraspol"],ME:["Europe/Podgorica"],MF:["America/Marigot"],MG:["Indian/Antananarivo"],MH:["Kwajalein","Pacific/Kwajalein","Pacific/Majuro"],MK:["Europe/Skopje"],ML:["Africa/Bamako"],MM:["Asia/Rangoon","Asia/Yangon"],MN:["Asia/Choibalsan","Asia/Hovd","Asia/Ulaanbaatar","Asia/Ulan_Bator"],MO:["Asia/Macao","Asia/Macau"],MP:["Pacific/Saipan"],MQ:["America/Martinique"],MR:["Africa/Nouakchott"],MS:["America/Montserrat"],MT:["Europe/Malta"],MU:["Indian/Mauritius"],MV:["Indian/Maldives"],MW:["Africa/Blantyre"],MX:["America/Bahia_Banderas","America/Cancun","America/Chihuahua","America/Ciudad_Juarez","America/Ensenada","America/Hermosillo","America/Matamoros","America/Mazatlan","America/Merida","America/Mexico_City","America/Monterrey","America/Ojinaga","America/Santa_Isabel","America/Tijuana","Mexico/BajaNorte","Mexico/BajaSur","Mexico/General"],MY:["Asia/Kuala_Lumpur","Asia/Kuching"],MZ:["Africa/Maputo"],NA:["Africa/Windhoek"],NC:["Pacific/Noumea"],NE:["Africa/Niamey"],NF:["Pacific/Norfolk"],NG:["Africa/Lagos"],NI:["America/Managua"],NL:["Europe/Amsterdam"],NO:["Atlantic/Jan_Mayen","Europe/Oslo"],NP:["Asia/Kathmandu","Asia/Katmandu"],NR:["Pacific/Nauru"],NU:["Pacific/Niue"],NZ:["Antarctica/South_Pole","NZ","NZ-CHAT","Pacific/Auckland","Pacific/Chatham"],OM:["Asia/Muscat"],PA:["America/Panama"],PE:["America/Lima"],PF:["Pacific/Gambier","Pacific/Marquesas","Pacific/Tahiti"],PG:["Pacific/Bougainville","Pacific/Port_Moresby"],PH:["Asia/Manila"],PK:["Asia/Karachi"],PL:["Europe/Warsaw","Poland"],PM:["America/Miquelon"],PN:["Pacific/Pitcairn"],PR:["America/Puerto_Rico"],PS:["Asia/Gaza","Asia/Hebron"],PT:["Atlantic/Azores","Atlantic/Madeira","Europe/Lisbon","Portugal"],PW:["Pacific/Palau"],PY:["America/Asuncion"],QA:["Asia/Qatar"],RE:["Indian/Reunion"],RO:["Europe/Bucharest"],RS:["Europe/Belgrade"],RU:["Asia/Anadyr","Asia/Barnaul","Asia/Chita","Asia/Irkutsk","Asia/Kamchatka","Asia/Khandyga","Asia/Krasnoyarsk","Asia/Magadan","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Sakhalin","Asia/Srednekolymsk","Asia/Tomsk","Asia/Ust-Nera","Asia/Vladivostok","Asia/Yakutsk","Asia/Yekaterinburg","Europe/Astrakhan","Europe/Kaliningrad","Europe/Kirov","Europe/Moscow","Europe/Samara","Europe/Saratov","Europe/Ulyanovsk","Europe/Volgograd","W-SU"],RW:["Africa/Kigali"],SA:["Asia/Riyadh"],SB:["Pacific/Guadalcanal"],SC:["Indian/Mahe"],SD:["Africa/Khartoum"],SE:["Europe/Stockholm"],SG:["Asia/Singapore","Singapore"],SH:["Atlantic/St_Helena"],SI:["Europe/Ljubljana"],SJ:["Arctic/Longyearbyen"],SK:["Europe/Bratislava"],SL:["Africa/Freetown"],SM:["Europe/San_Marino"],SN:["Africa/Dakar"],SO:["Africa/Mogadishu"],SR:["America/Paramaribo"],SS:["Africa/Juba"],ST:["Africa/Sao_Tome"],SV:["America/El_Salvador"],SX:["America/Lower_Princes"],SY:["Asia/Damascus"],SZ:["Africa/Mbabane"],TC:["America/Grand_Turk"],TD:["Africa/Ndjamena"],TF:["Indian/Kerguelen"],TG:["Africa/Lome"],TH:["Asia/Bangkok"],TJ:["Asia/Dushanbe"],TK:["Pacific/Fakaofo"],TL:["Asia/Dili"],TM:["Asia/Ashgabat","Asia/Ashkhabad"],TN:["Africa/Tunis"],TO:["Pacific/Tongatapu"],TR:["Asia/Istanbul","Europe/Istanbul","Turkey"],TT:["America/Port_of_Spain","America/Virgin"],TV:["Pacific/Funafuti"],TW:["Asia/Taipei","ROC"],TZ:["Africa/Dar_es_Salaam"],UA:["Europe/Kiev","Europe/Kyiv","Europe/Simferopol","Europe/Uzhgorod","Europe/Zaporozhye"],UG:["Africa/Kampala"],UM:["Pacific/Midway","Pacific/Wake"],US:["America/Adak","America/Anchorage","America/Atka","America/Boise","America/Chicago","America/Denver","America/Detroit","America/Fort_Wayne","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Indianapolis","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Knox_IN","America/Los_Angeles","America/Louisville","America/Menominee","America/Metlakatla","America/New_York","America/Nome","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Phoenix","America/Shiprock","America/Sitka","America/Yakutat","Navajo","Pacific/Honolulu","Pacific/Johnston","US/Alaska","US/Aleutian","US/Arizona","US/Central","US/East-Indiana","US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan","US/Mountain","US/Pacific"],UY:["America/Montevideo"],UZ:["Asia/Samarkand","Asia/Tashkent"],VA:["Europe/Vatican"],VC:["America/St_Vincent"],VE:["America/Caracas"],VG:["America/Tortola"],VI:["America/St_Thomas"],VN:["Asia/Ho_Chi_Minh","Asia/Saigon"],VU:["Pacific/Efate"],WF:["Pacific/Wallis"],WS:["Pacific/Apia"],YE:["Asia/Aden"],YT:["Indian/Mayotte"],ZA:["Africa/Johannesburg"],ZM:["Africa/Lusaka"],ZW:["Africa/Harare"]}; \ No newline at end of file From 1e074e2df7edfb2dfecf03e30497330360e00328 Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Tue, 27 Jan 2026 14:56:57 +0900 Subject: [PATCH 07/11] Update the documentation --- CHANGELOG.md | 47 +- Docs.md | 49 +- README.md | 32 +- assets/js/ilib-init_uncompiled.js | 93265 ---------------------------- lib/ilib_durationfmt.dart | 16 +- 5 files changed, 112 insertions(+), 93297 deletions(-) delete mode 100644 assets/js/ilib-init_uncompiled.js diff --git a/CHANGELOG.md b/CHANGELOG.md index d1976fc..521103f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,27 +1,30 @@ +## 1.5.0 +* Implement the `ILibDurationFmt` class to enable DurationFormatting. + ## 1.4.0 * Include the `DurationFmt.js` file from iLib in the `ilib-init.js` file within the assets. The developer can use `evaluate()` to obtain the result of Duration formatting until the DurationFmt class is properly implemented. ## 1.3.0 -* Added `clock` field to ILibDateFmtOptions for specifying time format (e.g., 12-hour or 24-hour). -* Added `template` field to ILibDateFmtOptions for defining custom date/time display patterns. -* Fixed proper handling of `meridiems` field in ILibDateFmtOptions, which was previously ignored. +* Add `clock` field to ILibDateFmtOptions for specifying time format (e.g., 12-hour or 24-hour). +* Add `template` field to ILibDateFmtOptions for defining custom date/time display patterns. +* Fix proper handling of `meridiems` field in ILibDateFmtOptions, which was previously ignored. ## 1.2.1 -* Fixed incorrect timezone handling when [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html) where UTC-based times were being misinterpreted as local time during formatting and parsing. +* Fix incorrect timezone handling when [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html) where UTC-based times were being misinterpreted as local time during formatting and parsing. ## 1.2.0 -* Added `isILibReady` getter to `ILibJS` class to expose internal `_iLibPrepared` state. -* Added `isILibReady` getter to `FlutterILib` class for external access to ILibJS initialization status. +* Add `isILibReady` getter to `ILibJS` class to expose internal `_iLibPrepared` state. +* Add `isILibReady` getter to `FlutterILib` class for external access to ILibJS initialization status. * Updated logging system to use the logging package with support for multiple log levels ## 1.1.0 -* Updated the iLib files to version 14.21.0 since the new version of iLib has been released. +* Update the iLib files to version 14.21.0 since the new version of iLib has been released. * iLib version 14.21.0 incorporates CLDR 46 -* Updated the test cases where expectations have aligned between webOS versions and upstream since the CLDR update to 46 +* Update the test cases where expectations have aligned between webOS versions and upstream since the CLDR update to 46 ## 1.0.0 -* Updated the structure to load separate locale data files. +* Update the structure to load separate locale data files. Previously, the dependent ilib was a fully assembled JS file. Now, the ilib files are divided into the js and locale files. The JS code is assembled as `ilib-init.js`, and the locale files are generated with names like [language].js, e.g. `en.js`, `ko.js`. The iLib files are generated using the [ilib-assemble](https://github.com/iLib-js/ilib-assemble) tool. This change brings memory savings over previous versions of flutter_ilib. Initially, when the app is launched, the package automatically loads the locale data by detecting the system's locale. To load the updated locale data file when the locale changes, I suggest adding the following method at the appropriate time when the locale chanages. @@ -30,31 +33,31 @@ ``` ## 0.4.0 -* Added `libquickjs_c_bridge_plugin.so` for aarch64-webos -* Updated `CMakeLists.txt` for webos to support both arm and aarch64 +* Add `libquickjs_c_bridge_plugin.so` for aarch64-webos +* Update `CMakeLists.txt` for webos to support both arm and aarch64 ## 0.3.0 -* Added the method `getMeridiemsRange()` in the class ILibDateFmt. -* Updated test files to use ILib's `loadJS()` instead of `loadJSwithPath()`. -* Updated the test files to share them between flutter_ilib and another flutter_ilib for webOS. The webOS overrides some of the locale data, so some test cases return different results. +* Add the method `getMeridiemsRange()` in the class ILibDateFmt. +* Update test files to use ILib's `loadJS()` instead of `loadJSwithPath()`. +* Update the test files to share them between flutter_ilib and another flutter_ilib for webOS. The webOS overrides some of the locale data, so some test cases return different results. ## 0.2.0 -* Added the method `getTemplate()` in the class ILibDateFmt. -* Regenerated the assemble ilib file to return the correct released version number. -* Changed the name of the assemble ilib file to `ilib-all.js`. +* Add the method `getTemplate()` in the class ILibDateFmt. +* Re-generate the assemble ilib file to return the correct released version number. +* Change the name of the assemble ilib file to `ilib-all.js`. ## 0.1.0 -* Updated the `README.md` file. -* Updated the minor version up for release. +* Update the `README.md` file. +* Update the minor version up for release. ## 0.0.4 -* Added more of the API comments in codes. +* Add more of the API comments in codes. ## 0.0.3 -* Updated to show a sample screenshot image in the published package. +* Update to show a sample screenshot image in the published package. ## 0.0.2 -* Updated structure by using `ChangeNotifier` so that APIs can be used synchronously. +* Updat structure by using `ChangeNotifier` so that APIs can be used synchronously. * First, the app must add a listener to receive a callback message that the iLib is ready for use. then the APIs can be used synchronously. * Added the linter file (`analysis_options.yaml`) and fixed warnings. diff --git a/Docs.md b/Docs.md index 8320dfc..3bc1782 100644 --- a/Docs.md +++ b/Docs.md @@ -1,3 +1,4 @@ +# Date ## ILibDateOptions ### Properties @@ -7,6 +8,7 @@ |_\_ locale | Locales are specified either with a specifier string that follows the BCP-47 convention,
(roughly: "language-script-region").| |_\_ year | The year| |_\_ month | The month| +|_\_ week | The week| |_\_ day | The day of the month| |_\_ hour | The hour of the day| |_\_ minute | The minute [0..59]| @@ -20,7 +22,7 @@ ### Constructors ```dart -ILibDateOptions (String? locale, int? year, int? month, int? day, int? hour, int? minute, int? second, int? millisecond, int? unixtime, String? type, String? calendar, DateTime? dateTime) +ILibDateOptions (String? locale, int? year, int? month, int? week, int? day, int? hour, int? minute, int? second, int? millisecond, int? unixtime, String? type, String? calendar, DateTime? dateTime) ``` ### Methods @@ -29,6 +31,7 @@ ILibDateOptions (String? locale, int? year, int? month, int? day, int? hour, int |_String_ toJsonString() | A string representation of parameters to call functions of iLib library properly| +# Date Formatting ## ILibDateFmtOptions ### Properties @@ -70,8 +73,45 @@ ILibDateFmt(ILibDateFmtOptions options) |_String_ getTemplate()| Return the template string that is used to format date/times for this formatter instance| |_List\_ getMeridiemsRange()| Return the range of possible meridiems (times of day like "AM" or "PM") in this date formatter.| -## ILibLocaleInfo + +# Duration Formatting +## ILibDurationFmtOptions +### Properties +|name|description| +|------|---| +|_\_ locale| locale to use when formatting the duration. If the locale is not specified, then the default locale of the app will be used | +|_\_ length| Specify the length of the format to use. The length is the approximate size of the formatted string.

  • short - use a short representation of the duration. This is the most compact format possible for the locale. eg. 1y 1m 1w 1d 1:01:01
  • medium - use a medium length representation of the duration. This is a slightly longer format. eg. 1 yr 1 mo 1 wk 1 dy 1 hr 1 mi 1 se
  • long - use a long representation of the duration. This is a fully specified format, but some of the textual
  • full - use a full representation of the duration. This is a fully specified format where all the textual parts are spelled out completely. eg. 1 year, 1 month, 1 week, 1 day, 1 hour, 1 minute and 1 second parts may still be abbreviated. eg. 1 yr 1 mo 1 wk 1 day 1 hr 1 min 1 sec| +|_\_ style| whether hours, minutes, and seconds should be formatted as a text string or as a regular time as on a clock. eg. text is "1 hour, 15 minutes", whereas clock is "1:15:00". Valid values for this property are "text" or "clock". Default if this property is not specified is "text". | +|_\_ useNative| the flag used to determaine whether to use the native script settings for formatting the numbers | + + ### Constructors +```dart +ILibDurationFmtOptions (String? locale, String? length, String? style, bool? useNative) +``` + +## ILibDurationFmt +### Properties +|name|description| +|------|---| +| _\_ options | Options for the DurationFormating| + + ### Constructors +```dart +ILibDurationFmt(ILibDurationFmtOptions options) +``` + ### Methods +|name|description| +|------|---| +|_String_ toJsonString() | A string representation of parameters to call functions of iLib library properly| +|_String_ format()| Formats a particular date instance according to the settings of this formatter object| +|_String_ getLocale()| Return the locale that was used to construct this duration formatter object.| +|_String_ getLength()| Return the length that was used to construct this duration formatter object.| +|_String_ getStyle()| Return the style that was used to construct this duration formatter object.| + + +# LocaleInfo +## ILibLocaleInfo ### Properties |name|description| |------|---| @@ -87,4 +127,7 @@ ILibLocaleInfo(String locale) |------|---| |_int_ getFirstDayOfWeek() | Returns the day of week that starts weeks in the current locale.
    Days are still numbered the standard way with 0 for Sunday through 6 for Saturday,
    but calendars should be displayed and weeks calculated with the day of week returned from this function as the first day of the week.| |_int_ getWeekEndStart() | Returns the day of week that starts weekend in the current locale.
    Days are still numbered the standard way with 0 for Sunday through 6 for Saturday.| -|_int_ getWeekEndEnd() | Returns the day of week that ends weekend in the current locale.
    Days are still numbered the standard way with 0 for Sunday through 6 for Saturday.| \ No newline at end of file +|_int_ getWeekEndEnd() | Returns the day of week that ends weekend in the current locale.
    Days are still numbered the standard way with 0 for Sunday through 6 for Saturday.| + + + diff --git a/README.md b/README.md index 02becaa..495c910 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,27 @@ fmt.format(dateOptions); // '2024년 6월 27일 오전 10:42' ``` +```dart +final ILibDurationFmtOptions fmtOptions = + ILibDurationOptions(locale: 'en-GB', length: 'full'); +final ILibDurationFmt fmt = ILibDuration(fmtOptions); +final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1); +fmt.format(dateOptions); +// '1 year, 1 month, 1 week, 1 day, 1 hour, 1 minute' + +final ILibDurationFmtOptions fmtOptions = ILibDurationOptions( + locale: 'en-GB', + length: 'full', + style: 'clock', + ); +final ILibDurationFmt fmt = ILibDuration(fmtOptions); +final ILibDateOptions dateOptions = ILibDateOptions( + year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1); +fmt.format(dateOptions); +// '2 years, 2 months, 2 weeks, 2 days, 02:02' +``` + ```dart // 0:sun, 1:mon, 2:tue, 3:wed, 4:thu, 5:fri, 6:sat final ILibLocaleInfo locInfo = ILibLocaleInfo('ko-KR'); @@ -111,15 +132,22 @@ To give a more efficient way, we provide some classes that can be easily used in Currently, We have a `ILibDateFmt` and `ILibLocaleInfo` classes. We have a plan to provide more classes and methods. -### ILibDateFmt +### ILibDate - Class: [ILibDateOptions](./Docs.md/#ilibdateoptions) + +### ILibDateFmt - Class: [ILibDateFmtOptions](./Docs.md/#ilibdatefmtoptions) - Class: [ILibDateFmt](./Docs.md#ilibdatefmt) - Methods: `format()`, `getClock()`, `getTemplate()`, `getMeridiemsRange()` ### ILibLocaleInfo - Class: [ILibLocaleInfo](./Docs.md/#iliblocaleinfo) - - Methods: `getFirstDayOfWeek()`, `getWeekEndStart()`, `getWeekEndStart()` + - Methods: `getFirstDayOfWeek()`, `getWeekEndStart()`, `getWeekEndStart()` + +### ILibDurationFmt +- Class: [ILibDurationFmtOptions](./Docs.md/#ilibdurationfmteoptions) +- Class: [ILibDurationFmt](./Docs.md/#ilibdurationfmt) + - Methods: `format()`, `getLocale()`, `getStyle()`, , `getLength()` ## Supported Locales The results of the following locales are checked by unit tests. diff --git a/assets/js/ilib-init_uncompiled.js b/assets/js/ilib-init_uncompiled.js deleted file mode 100644 index be8e848..0000000 --- a/assets/js/ilib-init_uncompiled.js +++ /dev/null @@ -1,93265 +0,0 @@ -/* - * ilib.js - define the ilib name space - * - * Copyright © 2012-2021, 2024 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * The global namespace that contains general ilib functions useful - * to all of ilib - * @namespace - */ -var ilib = ilib || {}; - -/** - * @version "14.21.0" - */ -/** @private */ -ilib._ver = function() { - return "14.21.0" - ; -}; - -/** - * Return the current version of ilib. - * - * @static - * @return {string} a version string for this instance of ilib - */ -ilib.getVersion = function () { - if (ilib._dyncode) { - try { - var pkg; - pkg = require("../package.json"); - return pkg.version; - } catch (e) { - // ignore - } - } - return ilib._ver() || "14.0"; -}; - -/** - * the cldr version that currently adopted on. - * - * @static - * @return {string} the adopted cldr version for ilib - */ -ilib.getCLDRVersion = function () { - return "46.0"; -}; - -/** - * Place where resources and such are eventually assigned. - */ -ilib.data = { - /** @type {{ccc:Object.,nfd:Object.,nfc:Object.,nfkd:Object.,nfkc:Object.}} */ - norm: { - ccc: {}, - nfd: {}, - nfc: {}, - nfkd: {}, - nfkc: {} - }, - zoneinfo: { - "Etc/UTC":{"o":"0:0","f":"UTC"}, - "local":{"f":"local"} - }, - /** @type {Object.,from:Object.}>} */ charmaps: {}, - /** @type {null|Object.>>} */ ctype: null, - /** @type {null|Object.>>} */ ctype_c: null, - /** @type {null|Object.>>} */ ctype_l: null, - /** @type {null|Object.>>} */ ctype_m: null, - /** @type {null|Object.>>} */ ctype_p: null, - /** @type {null|Object.>>} */ ctype_z: null, - /** @type {null|Object.>>} */ scriptToRange: null, - /** @type {null|Object.>>} */ dateformats: null, - /** @type {null|Array.} */ timezones: [], - cache: {} -}; - -/* -if (typeof(window) !== 'undefined') { - window["ilib"] = ilib; -} -*/ - -// export ilib for use as a module in nodejs -if (typeof(module) !== 'undefined') { - module.exports = ilib; - module.exports.ilib = ilib; // for backwards compatibility with older versions of ilib -} - -/** - * Sets the pseudo locale. Pseudolocalization (or pseudo-localization) is used for testing - * internationalization aspects of software. Instead of translating the text of the software - * into a foreign language, as in the process of localization, the textual elements of an application - * are replaced with an altered version of the original language.These specific alterations make - * the original words appear readable, but include the most problematic characteristics of - * the world's languages: varying length of text or characters, language direction, and so on. - * Regular Latin pseudo locale: eu-ES and RTL pseudo locale: ps-AF - * - * @param {string|undefined|null} localename the locale specifier for the pseudo locale - */ -ilib.setAsPseudoLocale = function (localename) { - if (localename) { - ilib.pseudoLocales.push(localename) - } -}; - -/** - * Reset the list of pseudo locales back to the default single locale of zxx-XX. - * @static - */ -ilib.clearPseudoLocales = function() { - ilib.pseudoLocales = [ - "zxx-XX", - "zxx-Cyrl-XX", - "zxx-Hans-XX", - "zxx-Hebr-XX" - ]; -}; - -ilib.clearPseudoLocales(); - -/** - * Return the name of the platform - * @private - * @static - * @return {string} string naming the platform - */ -ilib._getPlatform = function () { - if (!ilib._platform) { - try { - if (typeof(java.lang.Object) !== 'undefined') { - ilib._platform = (typeof(process) !== 'undefined') ? "trireme" : "rhino"; - return ilib._platform; - } - } catch (e) {} - - if (typeof(global) !== 'undefined' && global.process && - ((global.process.versions && global.process.versions.node && typeof(module) !== 'undefined') || - (typeof(global.process.iotjs) !== "undefined"))) { - ilib._platform = "nodejs"; - } else if (typeof(Qt) !== 'undefined') { - ilib._platform = "qt"; - ilib._cacheMerged = true; // qt is too slow, so we need to cache the already-merged locale data - } else if ((typeof(PalmSystem) !== 'undefined') || (typeof(webOSSystem) !== 'undefined')) { - ilib._platform = (typeof(window) !== 'undefined') ? "webos-webapp" : "webos"; - } else if (typeof(window) !== 'undefined') { - ilib._platform = "browser"; - } else { - ilib._platform = "unknown"; - } - } - return ilib._platform; -}; - -/** - * If this ilib is running in a browser, return the name of that browser. - * @private - * @static - * @return {string|undefined} the name of the browser that this is running in ("firefox", "chrome", "ie", - * "safari", or "opera"), or undefined if this is not running in a browser or if - * the browser name could not be determined - */ -ilib._getBrowser = function () { - var browser = undefined; - if (ilib._getPlatform() === "browser") { - if (navigator && navigator.userAgent) { - if (navigator.userAgent.indexOf("Firefox") > -1) { - return "firefox"; - } - if (navigator.userAgent.search(/Opera|OPR/) > -1 ) { - return "opera"; - } - if (navigator.userAgent.indexOf("Chrome") > -1) { - return "chrome"; - } - if (navigator.userAgent.indexOf(" .NET") > -1) { - return "ie"; - } - if (navigator.userAgent.indexOf("Safari") > -1) { - // chrome also has the string Safari in its userAgent, but the chrome case is - // already taken care of above - return "safari"; - } - if (navigator.userAgent.indexOf("Edge") > -1) { - return "Edge"; - } - if (navigator.userAgent.search(/iPad|iPhone|iPod/) > -1) { - // Due to constraints of the iOS platform, - // all browser must be built on top of the WebKit rendering engine - return "iOS"; - } - } - } - return "unknown"; -}; - -/** - * Return the value of the top object in the system. This could be global - * for node, or window for browsers, etc. - * @private - * @static - * @return {Object|undefined} the top variable, or undefined if there is none on this - * platform - */ -ilib._top = function() { - if (typeof(this.top) === 'undefined') { - this.top = null; - switch (ilib._getPlatform()) { - case "rhino": - this.top = (function() { - return (typeof global === 'object') ? global : this; - })(); - break; - case "nodejs": - case "trireme": - this.top = typeof(global) !== 'undefined' ? global : this; - //console.log("ilib._top: top is " + (typeof(global) !== 'undefined' ? "global" : "this")); - break; - default: - this.top = window; - break; - } - } - - return this.top || undefined; -}; - -/** - * Return the value of a global variable given its name in a way that works - * correctly for the current platform. - * @private - * @static - * @param {string} name the name of the variable to return - * @return {*} the global variable, or undefined if it does not exist - */ -ilib._global = function(name) { - var top = this._top(); - try { - return top[name]; - } catch (e) { - return undefined; - } -}; - -/** - * Return true if the global variable is defined on this platform. - * @private - * @static - * @param {string} name the name of the variable to check - * @return {boolean} true if the global variable is defined on this platform, false otherwise - */ -ilib._isGlobal = function(name) { - return typeof(ilib._global(name)) !== 'undefined'; -}; - -/** - * Clear the file load cache. This is mainly used by the unit tests, - * but could be used by regular callers if you want to free up memory - * for garbage collecting. - */ -ilib.clearCache = function() { - ilib.data.cache = {}; -}; - -/** - * Sets the default locale for all of ilib. This locale will be used - * when no explicit locale is passed to any ilib class. If the default - * locale is not set, ilib will attempt to use the locale of the - * environment it is running in, if it can find that. If not, it will - * default to the locale "en-US". If a type of parameter is string, - * ilib will take only well-formed BCP-47 tag

    - * - * - * @static - * @param {string|undefined|null} spec the locale specifier for the default locale - */ -ilib.setLocale = function (spec) { - if (typeof(spec) === 'string' || !spec) { - ilib.locale = spec; - } - // else ignore other data types, as we don't have the dependencies - // to look into them to find a locale -}; - -/** - * @private - */ -function parseLocale(str) { - if (!str) return str; - - // take care of the libc style locale with a dot + script at the end - var dot = str.indexOf('.') - if (dot > -1) { - str = str.substring(0, dot); - } - - // handle the posix default locale - if (str === "C") return "en-US"; - - var parts = str.replace(/_/g, '-').split(/-/g); - var localeParts = []; - - if (parts.length > 0) { - if (parts[0].length === 2 || parts[0].length === 3) { - // language - localeParts.push(parts[0].toLowerCase()); - - if (parts.length > 1) { - if (parts[1].length === 4) { - // script - localeParts.push(parts[1][0].toUpperCase() + parts[1].substring(1).toLowerCase()); - } else if (parts[1].length === 2 || parts[1].length == 3) { - // region - localeParts.push(parts[1].toUpperCase()); - } - - if (parts.length > 2) { - if (parts[2].length === 2 || parts[2].length == 3) { - // region - localeParts.push(parts[2].toUpperCase()); - } - } - } - } - } - - return localeParts.join('-'); -} - -/** - * Return the default locale for all of ilib if one has been set. This - * locale will be used when no explicit locale is passed to any ilib - * class. If the default - * locale is not set, ilib will attempt to use the locale of the - * environment it is running in, if it can find that. If not, it will - * default to the locale "en-US".

    - * - * - * @static - * @return {string} the locale specifier for the default locale - */ -ilib.getLocale = function () { - var lang, dot; - if (typeof(ilib.locale) !== 'string') { - var plat = ilib._getPlatform(); - switch (plat) { - case 'browser': - // running in a browser - if(typeof(navigator.language) !== 'undefined') { - ilib.locale = parseLocale(navigator.language); // FF/Opera/Chrome/Webkit - } - if (!ilib.locale) { - // IE on Windows - lang = typeof(navigator.browserLanguage) !== 'undefined' ? - navigator.browserLanguage : - (typeof(navigator.userLanguage) !== 'undefined' ? - navigator.userLanguage : - (typeof(navigator.systemLanguage) !== 'undefined' ? - navigator.systemLanguage : - undefined)); - if (typeof(lang) !== 'undefined' && lang) { - // for some reason, MS uses lower case region tags - ilib.locale = parseLocale(lang); - } else { - ilib.locale = undefined; - } - } - break; - case 'webos-webapp': - case 'webos': - // webOS - if (typeof(PalmSystem.locales) !== 'undefined' && - typeof(PalmSystem.locales.UI) != 'undefined' && - PalmSystem.locales.UI.length > 0) { - ilib.locale = parseLocale(PalmSystem.locales.UI); - } else if (typeof(PalmSystem.locale) !== 'undefined') { - ilib.locale = parseLocale(PalmSystem.locale); - } else if (typeof(webOSSystem.locale) !== 'undefined') { - ilib.locale = parseLocale(webOSSystem.locale); - } else { - ilib.locale = undefined; - } - break; - case 'rhino': - if (typeof(environment) !== 'undefined' && environment.user && typeof(environment.user.language) === 'string' && environment.user.language.length > 0) { - // running under plain rhino - var l = [environment.user.language]; - if (typeof(environment.user.country) === 'string' && environment.user.country.length > 0) { - l.push(environment.user.country); - } - ilib.locale = l.join("-"); - } - break; - case "trireme": - // under trireme on rhino emulating nodejs - lang = process.env.LANG || process.env.LANGUAGE || process.env.LC_ALL; - // the LANG variable on unix is in the form "lang_REGION.CHARSET" - // where language and region are the correct ISO codes separated by - // an underscore. This translate it back to the BCP-47 form. - ilib.locale = parseLocale(lang); - break; - case 'nodejs': - // running under nodejs - lang = global.process.env.LANG || global.process.env.LC_ALL; - // the LANG variable on unix is in the form "lang_REGION.CHARSET" - // where language and region are the correct ISO codes separated by - // an underscore. This translate it back to the BCP-47 form. - ilib.locale = parseLocale(lang); - break; - case 'qt': - // running in the Javascript engine under Qt/QML - var locobj = Qt.locale(); - ilib.locale = parseLocale(locobj.name || "en-US"); - break; - } - // test for posix "C" locale - ilib.locale = typeof(ilib.locale) === 'string' && ilib.locale.length && ilib.locale !== "C" ? ilib.locale : 'en-US'; - if (ilib.locale === "en") { - ilib.locale = "en-US"; // hack to get various platforms working correctly - } - } - return ilib.locale; -}; - -/** - * Sets the default time zone for all of ilib. This time zone will be used when - * no explicit time zone is passed to any ilib class. If the default time zone - * is not set, ilib will attempt to use the time zone of the - * environment it is running in, if it can find that. If not, it will - * default to the the UTC zone "Etc/UTC".

    - * - * - * @static - * @param {string} tz the name of the time zone to set as the default time zone - */ -ilib.setTimeZone = function (tz) { - ilib.tz = tz || ilib.tz; -}; - -/** - * Return the default time zone for all of ilib if one has been set. This - * time zone will be used when no explicit time zone is passed to any ilib - * class. If the default time zone - * is not set, ilib will attempt to use the locale of the - * environment it is running in, if it can find that. If not, it will - * default to the the zone "local".

    - * - * - * @static - * @return {string} the default time zone for ilib - */ -ilib.getTimeZone = function() { - if (typeof(ilib.tz) === 'undefined') { - if (typeof(Intl) !== 'undefined' && typeof(Intl.DateTimeFormat) !== 'undefined') { - var ro = new Intl.DateTimeFormat().resolvedOptions(); - ilib.tz = ro && ro.timeZone; - return ilib.tz; - } - - switch (ilib._getPlatform()) { - case 'browser': - // running in a browser - if (navigator.timezone && navigator.timezone.length > 0) { - ilib.tz = navigator.timezone; - } - break; - case 'webos-webapp': - case 'webos': - // running in webkit on webOS - if ((PalmSystem.timezone && PalmSystem.timezone.length > 0) || - (webOSSystem.timeZone && PalmSystem.timeZone.length > 0)) { - ilib.tz = PalmSystem.timezone; - } - break; - case 'rhino': - // running under rhino - if (typeof(environment.user.timezone) !== 'undefined' && environment.user.timezone.length > 0) { - ilib.tz = environment.user.timezone; - } - break; - case 'nodejs': - if (global.process.env && typeof(global.process.env.TZ) !== "undefined") { - ilib.tz = global.process.env.TZ; - } - break; - } - - ilib.tz = ilib.tz || "local"; - } - - return ilib.tz; -}; - -/** - * @class - * Defines the interface for the loader class for ilib. The main method of the - * loader object is loadFiles(), which loads a set of requested locale data files - * from where-ever it is stored. - * @interface - */ -ilib.Loader = function() {}; - -/** - * Load a set of files from where-ever it is stored.

    - * - * This is the main function define a callback function for loading missing locale - * data or resources. - * If this copy of ilib is assembled without including the required locale data - * or resources, then that data can be lazy loaded dynamically when it is - * needed by calling this method. Each ilib class will first - * check for the existence of data under ilib.data, and if it is not there, - * it will attempt to load it by calling this method of the loader, and then place - * it there.

    - * - * Suggested implementations of this method might load files - * directly from disk under nodejs or rhino, or within web pages, to load - * files from the server with XHR calls.

    - * - * The first parameter to this method, paths, is an array of relative paths within - * the ilib dir structure for the - * requested data. These paths will already have the locale spec integrated - * into them, so no further tweaking needs to happen to load the data. Simply - * load the named files. The second - * parameter tells the loader whether to load the files synchronously or asynchronously. - * If the sync parameters is false, then the onLoad function must also be specified. - * The third parameter gives extra parameters to the loader passed from the calling - * code. This may contain any property/value pairs. The last parameter, callback, - * is a callback function to call when all of the data is finishing loading. Make - * sure to call the callback with the context of "this" so that the caller has their - * context back again.

    - * - * The loader function must be able to operate either synchronously or asychronously. - * If the loader function is called with an undefined callback function, it is - * expected to load the data synchronously, convert it to javascript - * objects, and return the array of json objects as the return value of the - * function. If the loader - * function is called with a callback function, it may load the data - * synchronously or asynchronously (doesn't matter which) as long as it calls - * the callback function with the data converted to a javascript objects - * when it becomes available. If a particular file could not be loaded, the - * loader function should put undefined into the corresponding entry in the - * results array. - * Note that it is important that all the data is loaded before the callback - * is called.

    - * - * An example implementation for nodejs might be: - * - *

    - * 
    - *
    - * var myLoader = function() {};
    - * myLoader.prototype = new Loader();
    - * myLoader.prototype.constructor = myLoader;
    - * myLoader.prototype.loadFiles = function(paths, sync, params, callback) {
    - *    if (sync) {
    - *        var ret = [];
    - *        // synchronous load -- just return the result
    - *        paths.forEach(function (path) {
    - *            var json = fs.readFileSync(path, "utf-8");
    - *            ret.push(json ? JSON.parse(json) : undefined);
    - *        });
    - *
    - *        return ret;
    - *    }
    - *    this.callback = callback;
    - *
    - *    // asynchronous
    - *    this.results = [];
    - *    this._loadFilesAsync(paths);
    - * }
    - * myLoader.prototype._loadFilesAsync = function (paths) {
    - *    if (paths.length > 0) {
    - *        var file = paths.shift();
    - *        fs.readFile(file, "utf-8", function(err, json) {
    - *            this.results.push(err ? undefined : JSON.parse(json));
    - *            // call self recursively so that the callback is only called at the end
    - *            // when all the files are loaded sequentially
    - *            if (paths.length > 0) {
    - *                this._loadFilesAsync(paths);
    - *            } else {
    - *                this.callback(this.results);
    - *            }
    - *        });
    - *     }
    - * }
    - *
    - * // bind to "this" so that "this" is relative to your own instance
    - * ilib.setLoaderCallback(new myLoader());
    - * 
    - - * @param {Array.} paths An array of paths to load from wherever the files are stored - * @param {Boolean} sync if true, load the files synchronously, and false means asynchronously - * @param {Object} params an object with any extra parameters for the loader. These can be - * anything. The caller of the ilib class passes these parameters in. Presumably, the code that - * calls ilib and the code that provides the loader are together and can have a private - * agreement between them about what the parameters should contain. - * @param {function(Object)} callback function to call when the files are all loaded. The - * parameter of the callback function is the contents of the files. - */ -ilib.Loader.prototype.loadFiles = function (paths, sync, params, callback) {}; - -/** - * Return all files available for loading using this loader instance. - * This method returns an object where the properties are the paths to - * directories where files are loaded from and the values are an array - * of strings containing the relative paths under the directory of each - * file that can be loaded.

    - * - * Example: - *

    - *  {
    - *      "/usr/share/javascript/ilib/locale": [
    - *          "dateformats.json",
    - *          "aa/dateformats.json",
    - *          "af/dateformats.json",
    - *          "agq/dateformats.json",
    - *          "ak/dateformats.json",
    - *          ...
    - *          "zxx/dateformats.json"
    - *      ]
    - *  }
    - *  
    - * @returns {Object} a hash containing directory names and - * paths to file that can be loaded by this loader - */ -ilib.Loader.prototype.listAvailableFiles = function() {}; - -/** - * Return true if the file in the named path is available for loading using - * this loader. The path may be given as an absolute path, in which case - * only that file is checked, or as a relative path, in which case, the - * relative path may appear underneath any of the directories that the loader - * knows about. - * @returns {boolean} true if the file in the named path is available for loading, and - * false otherwise - */ -ilib.Loader.prototype.isAvailable = function(path) {}; - -/** - * Set the custom loader used to load ilib's locale data in your environment. - * The instance passed in must implement the Loader interface. See the - * Loader class documentation for more information about loaders. - * - * @static - * @param {ilib.Loader} loader class to call to access the requested data. - * @return {boolean} true if the loader was installed correctly, or false - * if not - */ -ilib.setLoaderCallback = function(loader) { - // only a basic check - if ((typeof(loader) === 'object' && typeof(loader.loadFiles) === 'function') || - typeof(loader) === 'function' || typeof(loader) === 'undefined') { - //console.log("setting callback loader to " + (loader ? loader.name : "undefined")); - ilib._load = loader; - return true; - } - return false; -}; - -/** - * Return the custom Loader instance currently in use with this instance - * of ilib. If there is no loader, this method returns undefined. - * - * @protected - * @static - * @return {ilib.Loader|undefined} the loader instance currently in use, or - * undefined if there is no such loader - */ -ilib.getLoader = function() { - return ilib._load; -}; - -/** - * Test whether an object is an javascript array. - * - * @static - * @param {*} object The object to test - * @return {boolean} return true if the object is an array - * and false otherwise - */ -ilib.isArray = function(object) { - if (typeof(object) === 'object') { - return Object.prototype.toString.call(object) === '[object Array]'; - } - return false; -}; - -/** - * Extend object1 by mixing in everything from object2 into it. The objects - * are deeply extended, meaning that this method recursively descends the - * tree in the objects and mixes them in at each level. Arrays are extended - * by concatenating the elements of object2 onto those of object1. - * - * @static - * @param {Object} object1 the target object to extend - * @param {Object=} object2 the object to mix in to object1 - * @return {Object} returns object1 - */ -ilib.extend = function (object1, object2) { - var prop = undefined; - if (object2) { - for (prop in object2) { - // don't extend object with undefined or functions - if (prop && typeof(object2[prop]) !== 'undefined' && typeof(object2[prop]) !== "function") { - if (ilib.isArray(object1[prop]) && ilib.isArray(object2[prop])) { - //console.log("Merging array prop " + prop); - object1[prop] = object1[prop].concat(object2[prop]); - } else if (typeof(object1[prop]) === 'object' && typeof(object2[prop]) === 'object') { - //console.log("Merging object prop " + prop); - if (prop !== "ilib") { - object1[prop] = ilib.extend(object1[prop], object2[prop]); - } - } else { - //console.log("Copying prop " + prop); - // for debugging. Used to determine whether or not json files are overriding their parents unnecessarily - object1[prop] = object2[prop]; - } - } - } - } - return object1; -}; - -ilib.extend2 = function (object1, object2) { - var prop = undefined; - if (object2) { - for (prop in object2) { - // don't extend object with undefined or functions - if (prop && typeof(object2[prop]) !== 'undefined') { - if (ilib.isArray(object1[prop]) && ilib.isArray(object2[prop])) { - //console.log("Merging array prop " + prop); - object1[prop] = object1[prop].concat(object2[prop]); - } else if (typeof(object1[prop]) === 'object' && typeof(object2[prop]) === 'object') { - //console.log("Merging object prop " + prop); - if (prop !== "ilib") { - object1[prop] = ilib.extend2(object1[prop], object2[prop]); - } - } else { - //console.log("Copying prop " + prop); - // for debugging. Used to determine whether or not json files are overriding their parents unnecessarily - object1[prop] = object2[prop]; - } - } - } - } - return object1; -}; - -/** - * If Function.prototype.bind does not exist in this JS engine, this - * function reimplements it in terms of older JS functions. - * bind() doesn't exist in many older browsers. - * - * @static - * @param {Object} scope object that the method should operate on - * @param {function(...)} method method to call - * @return {function(...)|undefined} function that calls the given method - * in the given scope with all of its arguments properly attached, or - * undefined if there was a problem with the arguments - */ -ilib.bind = function(scope, method/*, bound arguments*/){ - if (!scope || !method) { - return undefined; - } - - /** @protected - * @param {Arguments} inArrayLike - * @param {number=} inOffset - */ - function cloneArray(inArrayLike, inOffset) { - var arr = []; - for(var i = inOffset || 0, l = inArrayLike.length; i - * - * For example, if the ilib locale is "fr-CA", the final locale data is assembled from the - * following locale parts: - * - *
      - *
    • root - the root/default locale data shared by every locale - *
    • fr - the locale data shared by every flavour of French (eg. translations or date formats) - *
    • und/CA - the language-independent locale data for Canada (eg. time zone or official currency) - *
    • fr/CA - the locale data that is unique to French for Canada (eg. date or currency formats) - *
    - * - * On some platforms, the data loaded from disk is cached and then merged each time it is - * needed to create the whole locale data for the current locale. In other platforms, the - * merging is too slow, so the already-merged data is cached as well after the first time it - * is requested. In this way, we sacrifice the memory footprint for the sake of speed. - */ - -ilib._cacheMerged = false; - -ilib._loadtime = new Date().getTime(); -/* - * IDate.js - Represent a date in any calendar. This class is subclassed for each - * calendar and includes some shared functionality. - * - * Copyright © 2012-2015, 2018, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -/** - * @class - * Superclass for all the calendar date classes that contains shared - * functionality. This class is never instantiated on its own. Instead, - * you should use the {@link DateFactory} function to manufacture a new - * instance of a subclass of IDate. This class is called IDate for "ilib - * date" so that it does not conflict with the built-in Javascript Date - * class. - * - * @protected - * @constructor - * @param {Object=} options The date components to initialize this date with - */ -var IDate = function(options) { -}; - -/* place for the subclasses to put their constructors so that the factory method - * can find them. Do this to add your date after it's defined: - * IDate._constructors["mytype"] = IDate.MyTypeConstructor; - */ -IDate._constructors = {}; - -IDate.prototype = { - getType: function() { - return "date"; - }, - - /** - * Return the unix time equivalent to this date instance. Unix time is - * the number of milliseconds since midnight on Jan 1, 1970 UTC (Gregorian). This - * method only returns a valid number for dates between midnight, - * Jan 1, 1970 UTC (Gregorian) and Jan 19, 2038 at 3:14:07am UTC (Gregorian) when - * the unix time runs out. If this instance encodes a date outside of that range, - * this method will return -1. For date types that are not Gregorian, the point - * in time represented by this date object will only give a return value if it - * is in the correct range in the Gregorian calendar as given previously. - * - * @return {number} a number giving the unix time, or -1 if the date is outside the - * valid unix time range - */ - getTime: function() { - return this.rd.getTime(); - }, - - /** - * Return the extended unix time equivalent to this Gregorian date instance. Unix time is - * the number of milliseconds since midnight on Jan 1, 1970 UTC. Traditionally unix time - * (or the type "time_t" in C/C++) is only encoded with an unsigned 32 bit integer, and thus - * runs out on Jan 19, 2038. However, most Javascript engines encode numbers well above - * 32 bits and the Date object allows you to encode up to 100 million days worth of time - * after Jan 1, 1970, and even more interestingly, 100 million days worth of time before - * Jan 1, 1970 as well. This method returns the number of milliseconds in that extended - * range. If this instance encodes a date outside of that range, this method will return - * NaN. - * - * @return {number} a number giving the extended unix time, or Nan if the date is outside - * the valid extended unix time range - */ - getTimeExtended: function() { - return this.rd.getTimeExtended(); - }, - - /** - * Set the time of this instance according to the given unix time. Unix time is - * the number of milliseconds since midnight on Jan 1, 1970. - * - * @param {number} millis the unix time to set this date to in milliseconds - */ - setTime: function(millis) { - this.rd = this.newRd({ - unixtime: millis, - cal: this.cal - }); - this._calcDateComponents(); - }, - - getDays: function() { - return this.day; - }, - getMonths: function() { - return this.month; - }, - getYears: function() { - return this.year; - }, - getHours: function() { - return this.hour; - }, - getMinutes: function() { - return this.minute; - }, - getSeconds: function() { - return this.second; - }, - getMilliseconds: function() { - return this.millisecond; - }, - getEra: function() { - return (this.year < 1) ? -1 : 1; - }, - - setDays: function(day) { - this.day = parseInt(day, 10) || 1; - this.rd._setDateComponents(this); - }, - setMonths: function(month) { - this.month = parseInt(month, 10) || 1; - this.rd._setDateComponents(this); - }, - setYears: function(year) { - this.year = parseInt(year, 10) || 0; - this.rd._setDateComponents(this); - }, - - setHours: function(hour) { - this.hour = parseInt(hour, 10) || 0; - this.rd._setDateComponents(this); - }, - setMinutes: function(minute) { - this.minute = parseInt(minute, 10) || 0; - this.rd._setDateComponents(this); - }, - setSeconds: function(second) { - this.second = parseInt(second, 10) || 0; - this.rd._setDateComponents(this); - }, - setMilliseconds: function(milli) { - this.millisecond = parseInt(milli, 10) || 0; - this.rd._setDateComponents(this); - }, - - /** - * Return a new date instance in the current calendar that represents the first instance - * of the given day of the week before the current date. The day of the week is encoded - * as a number where 0 = Sunday, 1 = Monday, etc. - * - * @param {number} dow the day of the week before the current date that is being sought - * @return {IDate} the date being sought - */ - before: function (dow) { - return new this.constructor({ - rd: this.rd.before(dow, this.offset), - timezone: this.timezone - }); - }, - - /** - * Return a new date instance in the current calendar that represents the first instance - * of the given day of the week after the current date. The day of the week is encoded - * as a number where 0 = Sunday, 1 = Monday, etc. - * - * @param {number} dow the day of the week after the current date that is being sought - * @return {IDate} the date being sought - */ - after: function (dow) { - return new this.constructor({ - rd: this.rd.after(dow, this.offset), - timezone: this.timezone - }); - }, - - /** - * Return a new Gregorian date instance that represents the first instance of the - * given day of the week on or before the current date. The day of the week is encoded - * as a number where 0 = Sunday, 1 = Monday, etc. - * - * @param {number} dow the day of the week on or before the current date that is being sought - * @return {IDate} the date being sought - */ - onOrBefore: function (dow) { - return new this.constructor({ - rd: this.rd.onOrBefore(dow, this.offset), - timezone: this.timezone - }); - }, - - /** - * Return a new Gregorian date instance that represents the first instance of the - * given day of the week on or after the current date. The day of the week is encoded - * as a number where 0 = Sunday, 1 = Monday, etc. - * - * @param {number} dow the day of the week on or after the current date that is being sought - * @return {IDate} the date being sought - */ - onOrAfter: function (dow) { - return new this.constructor({ - rd: this.rd.onOrAfter(dow, this.offset), - timezone: this.timezone - }); - }, - - /** - * Return a Javascript Date object that is equivalent to this date - * object. - * - * @return {Date|undefined} a javascript Date object - */ - getJSDate: function() { - var unix = this.rd.getTimeExtended(); - return isNaN(unix) ? undefined : new Date(unix); - }, - - /** - * Return the Rata Die (fixed day) number of this date. - * - * @protected - * @return {number} the rd date as a number - */ - getRataDie: function() { - return this.rd.getRataDie(); - }, - - /** - * Set the date components of this instance based on the given rd. - * @protected - * @param {number} rd the rata die date to set - */ - setRd: function (rd) { - this.rd = this.newRd({ - rd: rd, - cal: this.cal - }); - this._calcDateComponents(); - }, - - /** - * Return the Julian Day equivalent to this calendar date as a number. - * - * @return {number} the julian date equivalent of this date - */ - getJulianDay: function() { - return this.rd.getJulianDay(); - }, - - /** - * Set the date of this instance using a Julian Day. - * @param {number|JulianDay} date the Julian Day to use to set this date - */ - setJulianDay: function (date) { - this.rd = this.newRd({ - julianday: (typeof(date) === 'object') ? date.getDate() : date, - cal: this.cal - }); - this._calcDateComponents(); - }, - - /** - * Return the time zone associated with this date, or - * undefined if none was specified in the constructor. - * - * @return {string|undefined} the name of the time zone for this date instance - */ - getTimeZone: function() { - return this.timezone || "local"; - }, - - /** - * Set the time zone associated with this date. - * @param {string=} tzName the name of the time zone to set into this date instance, - * or "undefined" to unset the time zone - */ - setTimeZone: function (tzName) { - if (!tzName || tzName === "") { - // same as undefining it - this.timezone = undefined; - this.tz = undefined; - } else if (typeof(tzName) === 'string') { - this.timezone = tzName; - this.tz = undefined; - // assuming the same UTC time, but a new time zone, now we have to - // recalculate what the date components are - this._calcDateComponents(); - } - }, - - /** - * Return the rd number of the first Sunday of the given ISO year. - * @protected - * @param {number} year the year for which the first Sunday is being sought - * @return {number} the rd of the first Sunday of the ISO year - */ - firstSunday: function (year) { - var firstDay = this.newRd({ - year: year, - month: 1, - day: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0, - cal: this.cal - }); - var firstThu = this.newRd({ - rd: firstDay.onOrAfter(4), - cal: this.cal - }); - return firstThu.before(0); - }, - - /** - * Return the ISO 8601 week number in the current year for the current date. The week - * number ranges from 0 to 55, as some years have 55 weeks assigned to them in some - * calendars. - * - * @return {number} the week number for the current date - */ - getWeekOfYear: function() { - var rd = Math.floor(this.rd.getRataDie()); - var year = this._calcYear(rd + this.offset); - var yearStart = this.firstSunday(year); - var nextYear; - - // if we have a January date, it may be in this ISO year or the previous year - if (rd < yearStart) { - yearStart = this.firstSunday(year-1); - } else { - // if we have a late December date, it may be in this ISO year, or the next year - nextYear = this.firstSunday(year+1); - if (rd >= nextYear) { - yearStart = nextYear; - } - } - - return Math.floor((rd-yearStart)/7) + 1; - }, - - /** - * Return the ordinal number of the week within the month. The first week of a month is - * the first one that contains 4 or more days in that month. If any days precede this - * first week, they are marked as being in week 0. This function returns values from 0 - * through 6.

    - * - * The locale is a required parameter because different locales that use the same - * Gregorian calendar consider different days of the week to be the beginning of - * the week. This can affect the week of the month in which some days are located. - * - * @param {Locale|string} locale the locale or locale spec to use when figuring out - * the first day of the week - * @return {number} the ordinal number of the week within the current month - */ - getWeekOfMonth: function(locale) { - var li = new LocaleInfo(locale); - - var first = this.newRd({ - year: this._calcYear(this.rd.getRataDie()+this.offset), - month: this.getMonths(), - day: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0, - cal: this.cal - }); - var weekStart = first.onOrAfter(li.getFirstDayOfWeek()); - - if (weekStart - first.getRataDie() > 3) { - // if the first week has 4 or more days in it of the current month, then consider - // that week 1. Otherwise, it is week 0. To make it week 1, move the week start - // one week earlier. - weekStart -= 7; - } - return Math.floor((this.rd.getRataDie() - weekStart) / 7) + 1; - } -}; - -/* - * IString.js - ilib string subclass definition - * - * Copyright © 2012-2015, 2018, 2021-2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data plurals - - - - - - -/** - * @class - * Create a new ilib string instance. This string inherits from and - * extends the Javascript String class. It can be - * used almost anywhere that a normal Javascript string is used, though in - * some instances you will need to call the [toString]{@link IString#toString} method when - * a built-in Javascript string is needed. The formatting methods are - * methods that are not in the intrinsic String class and are most useful - * when localizing strings in an app or web site in combination with - * the ResBundle class.

    - * - * This class is named IString ("ilib string") so as not to conflict with the - * built-in Javascript String class. - * - * @constructor - * @param {string|IString=} string initialize this instance with this string - */ -var IString = function (string) { - if (typeof(string) === 'object') { - if (string instanceof IString) { - this.str = string.str; - } else { - this.str = string.toString(); - } - } else if (typeof(string) === 'string') { - this.str = String(string); // copy it - } else { - this.str = ""; - } - this.length = this.str.length; - this.cpLength = -1; - this.localeSpec = ilib.getLocale(); -}; - -/** - * Return true if the given character is a Unicode surrogate character, - * either high or low. - * - * @private - * @static - * @param {string} ch character to check - * @return {boolean} true if the character is a surrogate - */ -IString._isSurrogate = function (ch) { - var n = ch.charCodeAt(0); - return ((n >= 0xDC00 && n <= 0xDFFF) || (n >= 0xD800 && n <= 0xDBFF)); -}; - -// build in the English rule -IString.plurals_default = { - "one": { - "and": [ - { - "eq": [ - "i", - 1 - ] - }, - { - "eq": [ - "v", - 0 - ] - } - ] - } -}; - -/** - * Convert a UCS-4 code point to a Javascript string. The codepoint can be any valid - * UCS-4 Unicode character, including supplementary characters. Standard Javascript - * only supports supplementary characters using the UTF-16 encoding, which has - * values in the range 0x0000-0xFFFF. String.fromCharCode() will only - * give you a string containing 16-bit characters, and will not properly convert - * the code point for a supplementary character (which has a value > 0xFFFF) into - * two UTF-16 surrogate characters. Instead, it will just just give you whatever - * single character happens to be the same as your code point modulo 0x10000, which - * is almost never what you want.

    - * - * Similarly, that means if you use String.charCodeAt() - * you will only retrieve a 16-bit value, which may possibly be a single - * surrogate character that is part of a surrogate pair representing a character - * in the supplementary plane. It will not give you a code point. Use - * IString.codePointAt() to access code points in a string, or use - * an iterator to walk through the code points in a string. - * - * @static - * @param {number} codepoint UCS-4 code point to convert to a character - * @return {string} a string containing the character represented by the codepoint - */ -IString.fromCodePoint = function (codepoint) { - if (codepoint < 0x10000) { - return String.fromCharCode(codepoint); - } else { - var high = Math.floor(codepoint / 0x10000) - 1; - var low = codepoint & 0xFFFF; - - return String.fromCharCode(0xD800 | ((high & 0x000F) << 6) | ((low & 0xFC00) >> 10)) + - String.fromCharCode(0xDC00 | (low & 0x3FF)); - } -}; - -/** - * Convert the character or the surrogate pair at the given - * index into the intrinsic Javascript string to a Unicode - * UCS-4 code point. - * - * @static - * @param {string} str string to get the code point from - * @param {number} index index into the string - * @return {number} code point of the character at the - * given index into the string - */ -IString.toCodePoint = function(str, index) { - if (!str || str.length === 0) { - return -1; - } - var code = -1, high = str.charCodeAt(index); - if (high >= 0xD800 && high <= 0xDBFF) { - if (str.length > index+1) { - var low = str.charCodeAt(index+1); - if (low >= 0xDC00 && low <= 0xDFFF) { - code = (((high & 0x3C0) >> 6) + 1) << 16 | - (((high & 0x3F) << 10) | (low & 0x3FF)); - } - } - } else { - code = high; - } - - return code; -}; - -/** - * Load the plural the definitions of plurals for the locale. - * @param {boolean=} sync - * @param {Locale|string=} locale - * @param {Object=} loadParams - * @param {function(*)=} onLoad - */ -IString.loadPlurals = function (sync, locale, loadParams, onLoad) { - var loc; - if (locale) { - loc = (typeof(locale) === 'string') ? new Locale(locale) : locale; - } else { - loc = new Locale(ilib.getLocale()); - } - var spec = loc.getLanguage(); - Utils.loadData({ - name: "plurals.json", - object: "IString", - locale: loc, - sync: sync, - loadParams: loadParams, - callback: ilib.bind(this, function(plurals) { - plurals = plurals || IString.plurals_default; - if (onLoad && typeof(onLoad) === 'function') { - onLoad(plurals); - } - }) - }); -}; - -/** - * @private - * @static - */ -IString._fncs = { - /** - * @private - * @param {Object} obj - * @return {string|undefined} - */ - firstProp: function (obj) { - for (var p in obj) { - if (p && obj[p]) { - return p; - } - } - return undefined; // should never get here - }, - - /** - * @private - * @param {Object} obj - * @return {string|undefined} - */ - firstPropRule: function (obj) { - if (Object.prototype.toString.call(obj) === '[object Array]') { - return "inrange"; - } else if (Object.prototype.toString.call(obj) === '[object Object]') { - for (var p in obj) { - if (p && obj[p]) { - return p; - } - } - - } - return undefined; // should never get here - }, - - /** - * @private - * @param {Object} obj - * @param {number|Object} n - * @return {?} - */ - getValue: function (obj, n) { - if (typeof(obj) === 'object') { - var subrule = IString._fncs.firstPropRule(obj); - if (subrule === "inrange") { - return IString._fncs[subrule](obj, n); - } - return IString._fncs[subrule](obj[subrule], n); - } else if (typeof(obj) === 'string') { - if (typeof(n) === 'object'){ - return n[obj]; - } - return n; - } else { - return obj; - } - }, - - /** - * @private - * @param {number|Object} n - * @param {Array.>|Object} range - * @return {boolean} - */ - matchRangeContinuous: function(n, range) { - - for (var num in range) { - if (typeof(num) !== 'undefined' && typeof(range[num]) !== 'undefined') { - var obj = range[num]; - if (typeof(obj) === 'number') { - if (n === range[num]) { - return true; - } else if (n >= range[0] && n <= range[1]) { - return true; - } - } else if (Object.prototype.toString.call(obj) === '[object Array]') { - if (n >= obj[0] && n <= obj[1]) { - return true; - } - } - } - } - return false; - }, - - /** - * @private - * @param {*} number - * @return {Object} - */ - calculateNumberDigits: function(number) { - var numberToString = number.toString(); - var parts = []; - var numberDigits = {}; - var operandSymbol = {}; - - var exponentialNum = number.toExponential(); - var exponentialIndex = exponentialNum.indexOf("e"); - if (exponentialIndex !== -1) { - operandSymbol.c = parseInt(exponentialNum[exponentialIndex+2]); - operandSymbol.e = parseInt(exponentialNum[exponentialIndex+2]); - } else { - operandSymbol.c = 0; - operandSymbol.e = 0; - } - - if (numberToString.indexOf('.') !== -1) { //decimal - parts = numberToString.split('.', 2); - numberDigits.integerPart = parseInt(parts[0], 10); - numberDigits.decimalPartLength = parts[1].length; - numberDigits.decimalPart = parseInt(parts[1], 10); - - operandSymbol.n = parseFloat(number); - operandSymbol.i = numberDigits.integerPart; - operandSymbol.v = numberDigits.decimalPartLength; - operandSymbol.w = numberDigits.decimalPartLength; - operandSymbol.f = numberDigits.decimalPart; - operandSymbol.t = numberDigits.decimalPart; - - } else { - numberDigits.integerPart = number; - numberDigits.decimalPartLength = 0; - numberDigits.decimalPart = 0; - - operandSymbol.n = parseInt(number, 10); - operandSymbol.i = numberDigits.integerPart; - operandSymbol.v = 0; - operandSymbol.w = 0; - operandSymbol.f = 0; - operandSymbol.t = 0; - - } - return operandSymbol - }, - - /** - * @private - * @param {number|Object} n - * @param {Array.>|Object} range - * @return {boolean} - */ - matchRange: function(n, range) { - return IString._fncs.matchRangeContinuous(n, range); - }, - - /** - * @private - * @param {Object} rule - * @param {number} n - * @return {boolean} - */ - is: function(rule, n) { - var left = IString._fncs.getValue(rule[0], n); - var right = IString._fncs.getValue(rule[1], n); - return left === right; - }, - - /** - * @private - * @param {Object} rule - * @param {number} n - * @return {boolean} - */ - isnot: function(rule, n) { - return IString._fncs.getValue(rule[0], n) !== IString._fncs.getValue(rule[1], n); - }, - - /** - * @private - * @param {Object} rule - * @param {number|Object} n - * @return {boolean} - */ - inrange: function(rule, n) { - if (typeof(rule[0]) === 'number') { - if(typeof(n) === 'object') { - return IString._fncs.matchRange(n.n,rule); - } - return IString._fncs.matchRange(n,rule); - } else if (typeof(rule[0]) === 'undefined') { - var subrule = IString._fncs.firstPropRule(rule); - return IString._fncs[subrule](rule[subrule], n); - } else { - return IString._fncs.matchRange(IString._fncs.getValue(rule[0], n), rule[1]); - } - }, - /** - * @private - * @param {Object} rule - * @param {number} n - * @return {boolean} - */ - notin: function(rule, n) { - return !IString._fncs.matchRange(IString._fncs.getValue(rule[0], n), rule[1]); - }, - - /** - * @private - * @param {Object} rule - * @param {number} n - * @return {boolean} - */ - within: function(rule, n) { - return IString._fncs.matchRangeContinuous(IString._fncs.getValue(rule[0], n), rule[1]); - }, - - /** - * @private - * @param {Object} rule - * @param {number} n - * @return {number} - */ - mod: function(rule, n) { - return MathUtils.mod(IString._fncs.getValue(rule[0], n), IString._fncs.getValue(rule[1], n)); - }, - - /** - * @private - * @param {Object} rule - * @param {number} n - * @return {number} - */ - n: function(rule, n) { - return n; - }, - - /** - * @private - * @param {Object} rule - * @param {number|Object} n - * @return {boolean} - */ - or: function(rule, n) { - var ruleLength = rule.length; - var result, i; - for (i=0; i < ruleLength; i++) { - result = IString._fncs.getValue(rule[i], n); - if (result) { - return true; - } - } - return false; - }, - /** - * @private - * @param {Object} rule - * @param {number|Object} n - * @return {boolean} - */ - and: function(rule, n) { - var ruleLength = rule.length; - var result, i; - for (i=0; i < ruleLength; i++) { - result= IString._fncs.getValue(rule[i], n); - if (!result) { - return false; - } - } - return true; - }, - /** - * @private - * @param {Object} rule - * @param {number|Object} n - * @return {boolean} - */ - eq: function(rule, n) { - var valueLeft = IString._fncs.getValue(rule[0], n); - var valueRight; - - if (typeof(rule[0]) === 'string') { - if (typeof(n) === 'object'){ - valueRight = n[rule[0]]; - if (typeof(rule[1])=== 'number'){ - valueRight = IString._fncs.getValue(rule[1], n); - } else if (typeof(rule[1])=== 'object' && (IString._fncs.firstPropRule(rule[1]) === "inrange" )){ - valueRight = IString._fncs.getValue(rule[1], n); - } - } - } else { - if (IString._fncs.firstPropRule(rule[1]) === "inrange") { // mod - valueRight = IString._fncs.getValue(rule[1], valueLeft); - } else { - valueRight = IString._fncs.getValue(rule[1], n); - } - } - if(typeof(valueRight) === 'boolean') { - return (valueRight ? true : false); - } else { - return (valueLeft === valueRight ? true :false); - } - }, - /** - * @private - * @param {Object} rule - * @param {number|Object} n - * @return {boolean} - */ - neq: function(rule, n) { - var valueLeft = IString._fncs.getValue(rule[0], n); - var valueRight; - var leftRange; - var rightRange; - - if (typeof(rule[0]) === 'string') { - valueRight = n[rule[0]]; - if (typeof(rule[1])=== 'number'){ - valueRight = IString._fncs.getValue(rule[1], n); - } else if (typeof(rule[1]) === 'object') { - leftRange = rule[1][0]; - rightRange = rule[1][1]; - if (typeof(leftRange) === 'number' && - typeof(rightRange) === 'number'){ - - if (valueLeft >= leftRange && valueRight <= rightRange) { - return false - } else { - return true; - } - } - } - } else { - if (IString._fncs.firstPropRule(rule[1]) === "inrange") { // mod - valueRight = IString._fncs.getValue(rule[1], valueLeft); - } else { - valueRight = IString._fncs.getValue(rule[1], n); - } - } - - if(typeof(valueRight) === 'boolean') {//mod - return (valueRight? false : true); - } else { - return (valueLeft !== valueRight ? true :false); - } - - } -}; - -IString.prototype = { - /** - * Return the length of this string in characters. This function defers to the regular - * Javascript string class in order to perform the length function. Please note that this - * method is a real method, whereas the length property of Javascript strings is - * implemented by native code and appears as a property.

    - * - * Example: - * - *

    -     * var str = new IString("this is a string");
    -     * console.log("String is " + str._length() + " characters long.");
    -     * 
    - * @private - * @deprecated - */ - _length: function () { - return this.str.length; - }, - - /** - * Format this string instance as a message, replacing the parameters with - * the given values.

    - * - * The string can contain any text that a regular Javascript string can - * contain. Replacement parameters have the syntax: - * - *

    -     * {name}
    -     * 
    - * - * Where "name" can be any string surrounded by curly brackets. The value of - * "name" is taken from the parameters argument.

    - * - * Example: - * - *

    -     * var str = new IString("There are {num} objects.");
    -     * console.log(str.format({
    -     *   num: 12
    -     * });
    -     * 
    - * - * Would give the output: - * - *
    -     * There are 12 objects.
    -     * 
    - * - * If a property is missing from the parameter block, the replacement - * parameter substring is left untouched in the string, and a different - * set of parameters may be applied a second time. This way, different - * parts of the code may format different parts of the message that they - * happen to know about.

    - * - * Example: - * - *

    -     * var str = new IString("There are {num} objects in the {container}.");
    -     * console.log(str.format({
    -     *   num: 12
    -     * });
    -     * 
    - * - * Would give the output:

    - * - *

    -     * There are 12 objects in the {container}.
    -     * 
    - * - * The result can then be formatted again with a different parameter block that - * specifies a value for the container property. - * - * @param params a Javascript object containing values for the replacement - * parameters in the current string - * @return a new IString instance with as many replacement parameters filled - * out as possible with real values. - */ - format: function (params) { - var formatted = this.str; - if (params) { - var regex; - for (var p in params) { - if (typeof(params[p]) !== 'undefined') { - regex = new RegExp("\{"+p+"\}", "g"); - formatted = formatted.replace(regex, params[p]); - } - } - } - return formatted.toString(); - }, - - /** @private */ - _testChoice: function(index, limit) { - var operandValue = {}; - - switch (typeof(index)) { - case 'number': - operandValue = IString._fncs.calculateNumberDigits(index); - - if (limit.substring(0,2) === "<=") { - limit = parseFloat(limit.substring(2)); - return operandValue.n <= limit; - } else if (limit.substring(0,2) === ">=") { - limit = parseFloat(limit.substring(2)); - return operandValue.n >= limit; - } else if (limit.charAt(0) === "<") { - limit = parseFloat(limit.substring(1)); - return operandValue.n < limit; - } else if (limit.charAt(0) === ">") { - limit = parseFloat(limit.substring(1)); - return operandValue.n > limit; - } else { - this.locale = this.locale || new Locale(this.localeSpec); - switch (limit) { - case "zero": - case "one": - case "two": - case "few": - case "many": - // CLDR locale-dependent number classes - var ruleset = ilib.data["plurals_" + this.locale.getLanguage()+ "_" + this.locale.getRegion()] || ilib.data["plurals_" + this.locale.getLanguage()]|| IString.plurals_default; - if (ruleset) { - var rule = ruleset[limit]; - return IString._fncs.getValue(rule, operandValue); - } - break; - case "": - case "other": - // matches anything - return true; - default: - var dash = limit.indexOf("-"); - if (dash !== -1) { - // range - var start = limit.substring(0, dash); - var end = limit.substring(dash+1); - return operandValue.n >= parseInt(start, 10) && operandValue.n <= parseInt(end, 10); - } else { - return operandValue.n === parseInt(limit, 10); - } - } - } - break; - case 'boolean': - return (limit === "true" && index === true) || (limit === "false" && index === false); - - case 'string': - var regexp = new RegExp(limit, "i"); - return regexp.test(index); - - case 'object': - throw "syntax error: formatChoice parameter for the argument index cannot be an object"; - } - - return false; - }, - /** @private */ - _isIntlPluralAvailable: function(locale) { - if (typeof (locale.getVariant()) !== 'undefined'){ - return false; - } - - if (typeof(Intl) !== 'undefined' && - typeof(Intl.PluralRules) !== 'undefined' && - typeof(Intl.PluralRules.supportedLocalesOf) !== 'undefined') { - if (ilib._getPlatform() === 'nodejs') { - var version = process.versions["node"]; - if (!version) return false; - var majorVersion = version.split(".")[0]; - if (Number(majorVersion) >= 10 && (Intl.PluralRules.supportedLocalesOf(locale.getSpec()).length > 0)) { - return true; - } - return false; - } else if (Intl.PluralRules.supportedLocalesOf(locale.getSpec()).length > 0) { - return true; - } else { - return false; - } - } - return false; - }, - - /** - * Format a string as one of a choice of strings dependent on the value of - * a particular argument index or array of indices.

    - * - * The syntax of the choice string is as follows. The string contains a - * series of choices separated by a vertical bar character "|". Each choice - * has a value or range of values to match followed by a hash character "#" - * followed by the string to use if the variable matches the criteria.

    - * - * Example string: - * - *

    -     * var num = 2;
    -     * var str = new IString("0#There are no objects.|1#There is one object.|2#There are {number} objects.");
    -     * console.log(str.formatChoice(num, {
    -     *   number: num
    -     * }));
    -     * 
    - * - * Gives the output: - * - *
    -     * "There are 2 objects."
    -     * 
    - * - * The strings to format may contain replacement variables that will be formatted - * using the format() method above and the params argument as a source of values - * to use while formatting those variables.

    - * - * If the criterion for a particular choice is empty, that choice will be used - * as the default one for use when none of the other choice's criteria match.

    - * - * Example string: - * - *

    -     * var num = 22;
    -     * var str = new IString("0#There are no objects.|1#There is one object.|#There are {number} objects.");
    -     * console.log(str.formatChoice(num, {
    -     *   number: num
    -     * }));
    -     * 
    - * - * Gives the output: - * - *
    -     * "There are 22 objects."
    -     * 
    - * - * If multiple choice patterns can match a given argument index, the first one - * encountered in the string will be used. If no choice patterns match the - * argument index, then the default choice will be used. If there is no default - * choice defined, then this method will return an empty string.

    - * - * Special Syntax

    - * - * For any choice format string, all of the patterns in the string should be - * of a single type: numeric, boolean, or string/regexp. The type of the - * patterns is determined by the type of the argument index parameter.

    - * - * If the argument index is numeric, then some special syntax can be used - * in the patterns to match numeric ranges.

    - * - *

      - *
    • >x - match any number that is greater than x - *
    • >=x - match any number that is greater than or equal to x - *
    • <x - match any number that is less than x - *
    • <=x - match any number that is less than or equal to x - *
    • start-end - match any number in the range [start,end) - *
    • zero - match any number in the class "zero". (See below for - * a description of number classes.) - *
    • one - match any number in the class "one" - *
    • two - match any number in the class "two" - *
    • few - match any number in the class "few" - *
    • many - match any number in the class "many" - *
    • other - match any number in the other or default class - *
    - * - * A number class defines a set of numbers that receive a particular syntax - * in the strings. For example, in Slovenian, integers ending in the digit - * "1" are in the "one" class, including 1, 21, 31, ... 101, 111, etc. - * Similarly, integers ending in the digit "2" are in the "two" class. - * Integers ending in the digits "3" or "4" are in the "few" class, and - * every other integer is handled by the default string.

    - * - * The definition of what numbers are included in a class is locale-dependent. - * They are defined in the data file plurals.json. If your string is in a - * different locale than the default for ilib, you should call the setLocale() - * method of the string instance before calling this method.

    - * - * Other Pattern Types

    - * - * If the argument index is a boolean, the string values "true" and "false" - * may appear as the choice patterns.

    - * - * If the argument index is of type string, then the choice patterns may contain - * regular expressions, or static strings as degenerate regexps.

    - * - * Multiple Indexes

    - * - * If you have 2 or more indexes to format into a string, you can pass them as - * an array. When you do that, the patterns to match should be a comma-separate - * list of patterns as per the rules above.

    - * - * Example string: - * - *

    -     * var str = new IString("zero,zero#There are no objects on zero pages.|one,one#There is 1 object on 1 page.|other,one#There are {number} objects on 1 page.|#There are {number} objects on {pages} pages.");
    -     * var num = 4, pages = 1;
    -     * console.log(str.formatChoice([num, pages], {
    -     *   number: num,
    -     *   pages: pages
    -     * }));
    -     * 
    - * - * Gives the output:

    - * - *

    -     * "There are 4 objects on 1 page."
    -     * 
    - * - * Note that when there is a single index, you would typically leave the pattern blank to - * indicate the default choice. When there are multiple indices, sometimes one of the - * patterns has to be the default case when the other is not. Rather than leaving one or - * more of the patterns blank with commas that look out-of-place in the middle of it, you - * can use the word "other" to indicate a match with the default or other choice. The above example - * shows the use of the "other" pattern. That said, you are allowed to leave the pattern - * blank if you so choose. In the example above, the pattern for the third string could - * easily have been written as ",one" instead of "other,one" and the result will be the same. - * - * @param {*|Array.<*>} argIndex The index into the choice array of the current parameter, - * or an array of indices - * @param {Object} params The hash of parameter values that replace the replacement - * variables in the string - * * @param {boolean} useIntlPlural [optional] true if you are willing to use Intl.PluralRules object - * If it is omitted, the default value is true - * @throws "syntax error in choice format pattern: " if there is a syntax error - * @return {string} the formatted string - */ - formatChoice: function(argIndex, params, useIntlPlural) { - var choices = this.str.split("|"); - var limits = []; - var strings = []; - var limitsArr = []; - var i; - var parts; - var result = undefined; - var defaultCase = ""; - var checkArgsType; - var useIntl = typeof(useIntlPlural) !== 'undefined' ? useIntlPlural : true; - if (this.str.length === 0) { - // nothing to do - return ""; - } - - // first parse all the choices - for (i = 0; i < choices.length; i++) { - parts = choices[i].split("#"); - if (parts.length > 2) { - limits[i] = parts[0]; - parts = parts.shift(); - strings[i] = parts.join("#"); - } else if (parts.length === 2) { - limits[i] = parts[0]; - strings[i] = parts[1]; - } else { - // syntax error - throw "syntax error in choice format pattern: " + choices[i]; - } - } - - var args = (ilib.isArray(argIndex)) ? argIndex : [argIndex]; - - checkArgsType = args.filter(ilib.bind(this, function(item){ - if (typeof(item) !== "number") { - return false; - } - return true; - })); - - if (useIntl && this.intlPlural && (args.length === checkArgsType.length)){ - this.cateArr = []; - for(i = 0; i < args.length;i++) { - var r = this.intlPlural.select(args[i]); - this.cateArr.push(r); - } - if (args.length === 1) { - var idx = limits.indexOf(this.cateArr[0]); - if (idx == -1) { - idx = limits.indexOf(""); - } - result = new IString(strings[idx]); - } else { - if (limits.length === 0) { - defaultCase = new IString(strings[i]); - } else { - this.findOne = false; - - for(i = 0; !this.findOne && i < limits.length; i++){ - limitsArr = (limits[i].indexOf(",") > -1) ? limits[i].split(",") : [limits[i]]; - - if (limitsArr.length > 1 && (limitsArr.length < this.cateArr.length)){ - this.cateArr = this.cateArr.slice(0,limitsArr.length); - } - limitsArr = limitsArr.map(function(item){ - return item.trim(); - }) - limitsArr.filter(ilib.bind(this, function(element, idx, arr){ - if (JSON.stringify(arr) === JSON.stringify(this.cateArr)){ - this.number = i; - this.fineOne = true; - } - })); - } - if (this.number === -1){ - this.number = limits.indexOf(""); - } - result = new IString(strings[this.number]); - } - } - } else { - // then apply the argument index (or indices) - for (i = 0; i < limits.length; i++) { - if (limits[i].length === 0) { - // this is default case - defaultCase = new IString(strings[i]); - } else { - limitsArr = (limits[i].indexOf(",") > -1) ? limits[i].split(",") : [limits[i]]; - - var applicable = true; - for (var j = 0; applicable && j < args.length && j < limitsArr.length; j++) { - applicable = this._testChoice(args[j], limitsArr[j]); - } - - if (applicable) { - result = new IString(strings[i]); - i = limits.length; - } - } - } - } - if (!result) { - result = defaultCase || new IString(""); - } - - result = result.format(params); - - return result.toString(); - }, - - // delegates - /** - * Same as String.toString() - * @return {string} this instance as regular Javascript string - */ - toString: function () { - return this.str.toString(); - }, - - /** - * Same as String.valueOf() - * @return {string} this instance as a regular Javascript string - */ - valueOf: function () { - return this.str.valueOf(); - }, - - /** - * Same as String.charAt() - * @param {number} index the index of the character being sought - * @return {IString} the character at the given index - */ - charAt: function(index) { - return new IString(this.str.charAt(index)); - }, - - /** - * Same as String.charCodeAt(). This only reports on - * 2-byte UCS-2 Unicode values, and does not take into - * account supplementary characters encoded in UTF-16. - * If you would like to take account of those characters, - * use codePointAt() instead. - * @param {number} index the index of the character being sought - * @return {number} the character code of the character at the - * given index in the string - */ - charCodeAt: function(index) { - return this.str.charCodeAt(index); - }, - - /** - * Same as String.concat() - * @param {string} strings strings to concatenate to the current one - * @return {IString} a concatenation of the given strings - */ - concat: function(strings) { - return new IString(this.str.concat(strings)); - }, - - /** - * Same as String.indexOf() - * @param {string} searchValue string to search for - * @param {number} start index into the string to start searching, or - * undefined to search the entire string - * @return {number} index into the string of the string being sought, - * or -1 if the string is not found - */ - indexOf: function(searchValue, start) { - return this.str.indexOf(searchValue, start); - }, - - /** - * Same as String.lastIndexOf() - * @param {string} searchValue string to search for - * @param {number} start index into the string to start searching, or - * undefined to search the entire string - * @return {number} index into the string of the string being sought, - * or -1 if the string is not found - */ - lastIndexOf: function(searchValue, start) { - return this.str.lastIndexOf(searchValue, start); - }, - - /** - * Same as String.match() - * @param {string} regexp the regular expression to match - * @return {Array.} an array of matches - */ - match: function(regexp) { - return this.str.match(regexp); - }, - - /** - * Same as String.matchAll() - * @param {string} regexp the regular expression to match - * @return {iterator} an iterator of the matches - */ - matchAll: function(regexp) { - return this.str.matchAll(regexp); - }, - - /** - * Same as String.replace() - * @param {string} searchValue a regular expression to search for - * @param {string} newValue the string to replace the matches with - * @return {IString} a new string with all the matches replaced - * with the new value - */ - replace: function(searchValue, newValue) { - return new IString(this.str.replace(searchValue, newValue)); - }, - - /** - * Same as String.search() - * @param {string} regexp the regular expression to search for - * @return {number} position of the match, or -1 for no match - */ - search: function(regexp) { - return this.str.search(regexp); - }, - - /** - * Same as String.slice() - * @param {number} start first character to include in the string - * @param {number} end include all characters up to, but not including - * the end character - * @return {IString} a slice of the current string - */ - slice: function(start, end) { - return new IString(this.str.slice(start, end)); - }, - - /** - * Same as String.split() - * @param {string} separator regular expression to match to find - * separations between the parts of the text - * @param {number} limit maximum number of items in the final - * output array. Any items beyond that limit will be ignored. - * @return {Array.} the parts of the current string split - * by the separator - */ - split: function(separator, limit) { - return this.str.split(separator, limit); - }, - - /** - * Same as String.substr() - * @param {number} start the index of the character that should - * begin the returned substring - * @param {number} length the number of characters to return after - * the start character. - * @return {IString} the requested substring - */ - substr: function(start, length) { - var plat = ilib._getPlatform(); - if (plat === "qt" || plat === "rhino" || plat === "trireme") { - // qt and rhino have a broken implementation of substr(), so - // work around it - if (typeof(length) === "undefined") { - length = this.str.length - start; - } - } - return new IString(this.str.substr(start, length)); - }, - - /** - * Same as String.substring() - * @param {number} from the index of the character that should - * begin the returned substring - * @param {number} to the index where to stop the extraction. If - * omitted, extracts the rest of the string - * @return {IString} the requested substring - */ - substring: function(from, to) { - return this.str.substring(from, to); - }, - - /** - * Same as String.toLowerCase(). Note that this method is - * not locale-sensitive. - * @return {IString} a string with the first character - * lower-cased - */ - toLowerCase: function() { - return this.str.toLowerCase(); - }, - - /** - * Same as String.toUpperCase(). Note that this method is - * not locale-sensitive. Use toLocaleUpperCase() instead - * to get locale-sensitive behaviour. - * @return {IString} a string with the first character - * upper-cased - */ - toUpperCase: function() { - return this.str.toUpperCase(); - }, - - /** - * Same as String.endsWith(). - * @return {boolean} true if the given characters are found at - * the end of the string, and false otherwise - */ - endsWith: function(searchString, length) { - /* (note)length is optional. If it is omitted the default value is the length of string. - * But If length is omitted, it returns false on QT. (tested on QT 5.12.4 and 5.13.0) - */ - if (typeof length === "undefined") { - length = this.str.length; - } - return this.str.endsWith(searchString, length); - }, - - /** - * Same as String.startsWith(). - * @return {boolean} true if the given characters are found at - * the beginning of the string, and false otherwise - */ - startsWith: function(searchString, length) { - return this.str.startsWith(searchString, length); - }, - - /** - * Same as String.includes(). - * @return {boolean} true if the search string is found anywhere - * with the given string, and false otherwise - */ - includes: function(searchString, position) { - return this.str.includes(searchString, position); - }, - - /** - * Same as String.normalize(). If this JS engine does not support - * this method, then you can use the NormString class of ilib - * to the same thing (albeit a little slower). - * - * @return {string} the string in normalized form - */ - normalize: function(form) { - return this.str.normalize(form); - }, - - /** - * Same as String.padEnd(). - * @return {string} a string of the specified length with the - * pad string applied at the end of the current string - */ - padEnd: function(targetLength, padString) { - return this.str.padEnd(targetLength, padString); - }, - - /** - * Same as String.padStart(). - * @return {string} a string of the specified length with the - * pad string applied at the end of the current string - */ - padStart: function(targetLength, padString) { - return this.str.padStart(targetLength, padString); - }, - - /** - * Same as String.repeat(). - * @return {string} a new string containing the specified number - * of copies of the given string - */ - repeat: function(count) { - return this.str.repeat(count); - }, - - /** - * Same as String.toLocaleLowerCase(). If the JS engine does not support this - * method, you can use the ilib CaseMapper class instead. - * @return {string} a new string representing the calling string - * converted to lower case, according to any locale-sensitive - * case mappings - */ - toLocaleLowerCase: function(locale) { - return this.str.toLocaleLowerCase(locale); - }, - - /** - * Same as String.toLocaleUpperCase(). If the JS engine does not support this - * method, you can use the ilib CaseMapper class instead. - * @return {string} a new string representing the calling string - * converted to upper case, according to any locale-sensitive - * case mappings - */ - toLocaleUpperCase: function(locale) { - return this.str.toLocaleUpperCase(locale); - }, - - /** - * Same as String.trim(). - * @return {string} a new string representing the calling string stripped - * of whitespace from both ends. - */ - trim: function() { - return this.str.trim(); - }, - - /** - * Same as String.trimEnd(). - * @return {string} a new string representing the calling string stripped - * of whitespace from its (right) end. - */ - trimEnd: function() { - return this.str.trimEnd(); - }, - - /** - * Same as String.trimRight(). - * @return {string} a new string representing the calling string stripped - * of whitespace from its (right) end. - */ - trimRight: function() { - return this.str.trimRight(); - }, - - /** - * Same as String.trimStart(). - * @return {string} A new string representing the calling string stripped - * of whitespace from its beginning (left end). - */ - trimStart: function() { - return this.str.trimStart(); - }, - - /** - * Same as String.trimLeft(). - * @return {string} A new string representing the calling string stripped - * of whitespace from its beginning (left end). - */ - trimLeft: function() { - return this.str.trimLeft(); - }, - - /** - * Convert the character or the surrogate pair at the given - * index into the string to a Unicode UCS-4 code point. - * @private - * @param {number} index index into the string - * @return {number} code point of the character at the - * given index into the string - */ - _toCodePoint: function (index) { - return IString.toCodePoint(this.str, index); - }, - - /** - * Call the callback with each character in the string one at - * a time, taking care to step through the surrogate pairs in - * the UTF-16 encoding properly.

    - * - * The standard Javascript String's charAt() method only - * returns a particular 16-bit character in the - * UTF-16 encoding scheme. - * If the index to charAt() is pointing to a low- or - * high-surrogate character, - * it will return the surrogate character rather - * than the the character - * in the supplementary planes that the two surrogates together - * encode. This function will call the callback with the full - * character, making sure to join two - * surrogates into one character in the supplementary planes - * where necessary.

    - * - * @param {function(string)} callback a callback function to call with each - * full character in the current string - */ - forEach: function(callback) { - if (typeof(callback) === 'function') { - var it = this.charIterator(); - while (it.hasNext()) { - callback(it.next()); - } - } - }, - - /** - * Call the callback with each numeric code point in the string one at - * a time, taking care to step through the surrogate pairs in - * the UTF-16 encoding properly.

    - * - * The standard Javascript String's charCodeAt() method only - * returns information about a particular 16-bit character in the - * UTF-16 encoding scheme. - * If the index to charCodeAt() is pointing to a low- or - * high-surrogate character, - * it will return the code point of the surrogate character rather - * than the code point of the character - * in the supplementary planes that the two surrogates together - * encode. This function will call the callback with the full - * code point of each character, making sure to join two - * surrogates into one code point in the supplementary planes.

    - * - * @param {function(string)} callback a callback function to call with each - * code point in the current string - */ - forEachCodePoint: function(callback) { - if (typeof(callback) === 'function') { - var it = this.iterator(); - while (it.hasNext()) { - callback(it.next()); - } - } - }, - - /** - * Return an iterator that will step through all of the characters - * in the string one at a time and return their code points, taking - * care to step through the surrogate pairs in UTF-16 encoding - * properly.

    - * - * The standard Javascript String's charCodeAt() method only - * returns information about a particular 16-bit character in the - * UTF-16 encoding scheme. - * If the index is pointing to a low- or high-surrogate character, - * it will return a code point of the surrogate character rather - * than the code point of the character - * in the supplementary planes that the two surrogates together - * encode.

    - * - * The iterator instance returned has two methods, hasNext() which - * returns true if the iterator has more code points to iterate through, - * and next() which returns the next code point as a number.

    - * - * @return {Object} an iterator - * that iterates through all the code points in the string - */ - iterator: function() { - /** - */ - function _iterator (istring) { - this.index = 0; - this.hasNext = function () { - return (this.index < istring.str.length); - }; - this.next = function () { - if (this.index < istring.str.length) { - var num = istring._toCodePoint(this.index); - this.index += ((num > 0xFFFF) ? 2 : 1); - } else { - num = -1; - } - return num; - }; - }; - return new _iterator(this); - }, - - /** - * Return an iterator that will step through all of the characters - * in the string one at a time, taking - * care to step through the surrogate pairs in UTF-16 encoding - * properly.

    - * - * The standard Javascript String's charAt() method only - * returns information about a particular 16-bit character in the - * UTF-16 encoding scheme. - * If the index is pointing to a low- or high-surrogate character, - * it will return that surrogate character rather - * than the surrogate pair which represents a character - * in the supplementary planes.

    - * - * The iterator instance returned has two methods, hasNext() which - * returns true if the iterator has more characters to iterate through, - * and next() which returns the next character.

    - * - * @return {Object} an iterator - * that iterates through all the characters in the string - */ - charIterator: function() { - /** - */ - function _chiterator (istring) { - this.index = 0; - this.hasNext = function () { - return (this.index < istring.str.length); - }; - this.next = function () { - var ch; - if (this.index < istring.str.length) { - ch = istring.str.charAt(this.index); - if (IString._isSurrogate(ch) && - this.index+1 < istring.str.length && - IString._isSurrogate(istring.str.charAt(this.index+1))) { - this.index++; - ch += istring.str.charAt(this.index); - } - this.index++; - } - return ch; - }; - }; - return new _chiterator(this); - }, - - /** - * Return the code point at the given index when the string is viewed - * as an array of code points. If the index is beyond the end of the - * array of code points or if the index is negative, -1 is returned. - * @param {number} index index of the code point - * @return {number} code point of the character at the given index into - * the string - */ - codePointAt: function (index) { - if (index < 0) { - return -1; - } - var count, - it = this.iterator(), - ch; - for (count = index; count >= 0 && it.hasNext(); count--) { - ch = it.next(); - } - return (count < 0) ? ch : -1; - }, - - /** - * Set the locale to use when processing choice formats. The locale - * affects how number classes are interpretted. In some cultures, - * the limit "few" maps to "any integer that ends in the digits 2 to 9" and - * in yet others, "few" maps to "any integer that ends in the digits - * 3 or 4". - * @param {Locale|string} locale locale to use when processing choice - * formats with this string - * @param {boolean=} sync [optional] whether to load the locale data synchronously - * or not - * @param {Object=} loadParams [optional] parameters to pass to the loader function - * @param {function(*)=} onLoad [optional] function to call when the loading is done - */ - setLocale: function (locale, sync, loadParams, onLoad) { - if (typeof(locale) === 'object') { - this.locale = locale; - } else { - this.localeSpec = locale; - this.locale = new Locale(locale); - } - - if (this._isIntlPluralAvailable(this.locale)){ - this.intlPlural = new Intl.PluralRules(this.locale.getSpec()); - } - - IString.loadPlurals(typeof(sync) !== 'undefined' ? sync : true, this.locale, loadParams, onLoad); - }, - - /** - * Return the locale to use when processing choice formats. The locale - * affects how number classes are interpretted. In some cultures, - * the limit "few" maps to "any integer that ends in the digits 2 to 9" and - * in yet others, "few" maps to "any integer that ends in the digits - * 3 or 4". - * @return {string} localespec to use when processing choice - * formats with this string - */ - getLocale: function () { - return (this.locale ? this.locale.getSpec() : this.localeSpec) || ilib.getLocale(); - }, - - /** - * Return the number of code points in this string. This may be different - * than the number of characters, as the UTF-16 encoding that Javascript - * uses for its basis returns surrogate pairs separately. Two 2-byte - * surrogate characters together make up one character/code point in - * the supplementary character planes. If your string contains no - * characters in the supplementary planes, this method will return the - * same thing as the length() method. - * @return {number} the number of code points in this string - */ - codePointLength: function () { - if (this.cpLength === -1) { - var it = this.iterator(); - this.cpLength = 0; - while (it.hasNext()) { - this.cpLength++; - it.next(); - }; - } - return this.cpLength; - } -}; - - -/* - * ISet.js - ilib Set class definition for platforms older than ES6 - * - * Copyright © 2015, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Create a new set with elements in the given array. The type of - * the set is gleaned from the type of the first element in the - * elements array, or the first element added to the set. The type - * may be "string" or "number", and all elements will be returned - * as elements of that type. - * - * @class - * @param {Array.=} elements initial elements to add to the set - * @constructor - */ -var ISet = function(elements) { - this.elements = {}; - - if (elements && elements.length) { - for (var i = 0; i < elements.length; i++) { - this.elements[elements[i]] = true; - } - - this.type = typeof(elements[0]); - } -}; - -/** - * @private - */ -ISet.prototype._addOne = function(element) { - if (this.isEmpty()) { - this.type = typeof(element); - } - - if (!this.elements[element]) { - this.elements[element] = true; - return true; - } - - return false; -}; - -/** - * Adds the specified element or array of elements to this set if it is or they are not - * already present. - * - * @param {*|Array.<*>} element element or array of elements to add - * @return {boolean} true if this set did not already contain the specified element[s] - */ -ISet.prototype.add = function(element) { - var ret = false; - - if (typeof(element) === "object") { - for (var i = 0; i < element.length; i++) { - ret = this._addOne(element[i]) || ret; - } - } else { - ret = this._addOne(element); - } - - return ret; -}; - -/** - * Removes all of the elements from this set. - */ -ISet.prototype.clear = function() { - this.elements = {}; -}; - -/** - * Returns true if this set contains the specified element. - * @param {*} element the element to test - * @return {boolean} - */ -ISet.prototype.contains = function(element) { - return this.elements[element] || false; -}; - -ISet.prototype.has = ISet.prototype.contains; // for compatibility with ES6 - -/** - * Returns true if this set contains no elements. - * @return {boolean} - */ -ISet.prototype.isEmpty = function() { - return (Object.keys(this.elements).length === 0); -}; - -/** - * Removes the specified element from this set if it is present. - * @param {*} element the element to remove - * @return {boolean} true if the set contained the specified element - */ -ISet.prototype.remove = function(element) { - if (this.elements[element]) { - delete this.elements[element]; - return true; - } - - return false; -}; - -/** - * Return the set as a javascript array. - * @return {Array.<*>} the set represented as a javascript array - */ -ISet.prototype.asArray = function() { - var keys = Object.keys(this.elements); - - // keys is an array of strings. Convert to numbers if necessary - if (this.type === "number") { - var tmp = []; - for (var i = 0; i < keys.length; i++) { - tmp.push(Number(keys[i]).valueOf()); - } - keys = tmp; - } - - return keys; -}; - -/** - * Represents the current set as json. - * @return {string} the current set represented as json - */ -ISet.prototype.toJson = function() { - return JSON.stringify(this.asArray()); -}; - -/** - * Convert to a javascript representation of this object. - * In this case, it is a normal JS array. - * @return {*} the JS representation of this object - */ -ISet.prototype.toJS = function() { - return this.asArray(); -}; - -/** - * Convert from a js representation to an internal one. - * @return {ISet|undefined} the current object, or undefined if the conversion did not work - */ -ISet.prototype.fromJS = function(obj) { - return this.add(obj) ? this : undefined; -}; - - -/* - * INumber.js - Parse a number in any locale - * - * Copyright © 2012-2015, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - - - - - - - -/** - * @class - * Parse a string as a number, ignoring all locale-specific formatting.

    - * - * This class is different from the standard Javascript parseInt() and parseFloat() - * functions in that the number to be parsed can have formatting characters in it - * that are not supported by those two - * functions, and it handles numbers written in other locales properly. For example, - * if you pass the string "203,231.23" to the parseFloat() function in Javascript, it - * will return you the number 203. The INumber class will parse it correctly and - * the value() function will return the number 203231.23. If you pass parseFloat() the - * string "203.231,23" with the locale set to de-DE, it will return you 203 again. This - * class will return the correct number 203231.23 again.

    - * - * The options object may contain any of the following properties: - * - *

      - *
    • locale - specify the locale of the string to parse. This is used to - * figure out what the decimal point character is. If not specified, the default locale - * for the app or browser is used. - *
    • type - specify whether this string should be interpretted as a number, - * currency, or percentage amount. When the number is interpretted as a currency - * amount, the getCurrency() method will return something useful, otherwise it will - * return undefined. If - * the number is to be interpretted as percentage amount and there is a percentage sign - * in the string, then the number will be returned - * as a fraction from the valueOf() method. If there is no percentage sign, then the - * number will be returned as a regular number. That is "58.3%" will be returned as the - * number 0.583 but "58.3" will be returned as 58.3. Valid values for this property - * are "number", "currency", and "percentage". Default if this is not specified is - * "number". - *
    • onLoad - a callback function to call when the locale data is fully - * loaded. When the onLoad option is given, this class will attempt to - * load any missing locale data using the ilib loader callback. - * When the constructor is done (even if the data is already preassembled), the - * onLoad function is called with the current instance as a parameter, so this - * callback can be used with preassembled or dynamic loading or a mix of the two. - * - *
    • sync - tell whether to load any missing locale data synchronously or - * asynchronously. If this option is given as "false", then the "onLoad" - * callback must be given, as the instance returned from this constructor will - * not be usable for a while. - * - *
    • loadParams - an object containing parameters to pass to the - * loader callback function when locale data is missing. The parameters are not - * interpretted or modified in any way. They are simply passed along. The object - * may contain any property/value pairs as long as the calling code is in - * agreement with the loader callback function as to what those parameters mean. - *
    - *

    - * - * This class is named INumber ("ilib number") so as not to conflict with the - * built-in Javascript Number class. - * - * @constructor - * @param {string|number|INumber|Number|undefined} str a string to parse as a number, or a number value - * @param {Object=} options Options controlling how the instance should be created - */ -var INumber = function (str, options) { - var i, stripped = "", - sync = true; - - this.locale = new Locale(); - this.type = "number"; - - if (options) { - if (options.locale) { - this.locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; - } - if (options.type) { - switch (options.type) { - case "number": - case "currency": - case "percentage": - this.type = options.type; - break; - default: - break; - } - } - if (typeof(options.sync) !== 'undefined') { - sync = !!options.sync; - } - } else { - options = {sync: true}; - } - - isDigit._init(sync, options.loadParams, ilib.bind(this, function() { - isSpace._init(sync, options.loadParams, ilib.bind(this, function() { - new LocaleInfo(this.locale, { - sync: sync, - loadParams: options.loadParams, - onLoad: ilib.bind(this, function (li) { - this.li = li; - this.decimal = li.getDecimalSeparator(); - var nativeDecimal = this.li.getNativeDecimalSeparator() || ""; - - switch (typeof(str)) { - case 'string': - // stripping should work for all locales, because you just ignore all the - // formatting except the decimal char - var unary = true; // looking for the unary minus still? - var lastNumericChar = 0; - this.str = str || "0"; - i = 0; - for (i = 0; i < this.str.length; i++) { - if (unary && this.str.charAt(i) === '-') { - unary = false; - stripped += this.str.charAt(i); - lastNumericChar = i; - } else if (isDigit(this.str.charAt(i))) { - stripped += this.str.charAt(i); - unary = false; - lastNumericChar = i; - } else if (this.str.charAt(i) === this.decimal || this.str.charAt(i) === nativeDecimal) { - stripped += "."; // always convert to period - unary = false; - lastNumericChar = i; - } // else ignore - } - // record what we actually parsed - this.parsed = this.str.substring(0, lastNumericChar+1); - - /** @type {number} */ - this.value = parseFloat(this._mapToLatinDigits(stripped)); - break; - case 'number': - this.str = "" + str; - this.value = str; - break; - - case 'object': - // call parseFloat to coerse the type to number - this.value = parseFloat(str.valueOf()); - this.str = "" + this.value; - break; - - case 'undefined': - this.value = 0; - this.str = "0"; - break; - } - - switch (this.type) { - default: - // don't need to do anything special for other types - break; - case "percentage": - if (this.str.indexOf(li.getPercentageSymbol()) !== -1) { - this.value /= 100; - } - break; - case "currency": - stripped = ""; - i = 0; - while (i < this.str.length && - !isDigit(this.str.charAt(i)) && - !isSpace(this.str.charAt(i))) { - stripped += this.str.charAt(i++); - } - if (stripped.length === 0) { - while (i < this.str.length && - isDigit(this.str.charAt(i)) || - isSpace(this.str.charAt(i)) || - this.str.charAt(i) === '.' || - this.str.charAt(i) === ',' ) { - i++; - } - while (i < this.str.length && - !isDigit(this.str.charAt(i)) && - !isSpace(this.str.charAt(i))) { - stripped += this.str.charAt(i++); - } - } - new Currency({ - locale: this.locale, - sign: stripped, - sync: sync, - loadParams: options.loadParams, - onLoad: ilib.bind(this, function (cur) { - this.currency = cur; - if (options && typeof(options.onLoad) === 'function') { - options.onLoad(this); - } - }) - }); - return; - } - - if (options && typeof(options.onLoad) === 'function') { - options.onLoad(this); - } - }) - }); - })); - })); -}; - -INumber.prototype = { - /** - * @private - */ - _mapToLatinDigits: function(str) { - // only map if there are actual native digits - var digits = this.li.getNativeDigits(); - if (!digits) return str; - - var digitMap = {}; - for (var i = 0; i < digits.length; i++) { - digitMap[digits[i]] = String(i); - } - var decimal = this.li.getNativeDecimalSeparator(); - - return str.split("").map(function(ch) { - if (ch == decimal) return "."; - return digitMap[ch] || ch; - }).join(""); - }, - - /** - * Return the locale for this formatter instance. - * @return {Locale} the locale instance for this formatter - */ - getLocale: function () { - return this.locale; - }, - - /** - * Return the original string that this number instance was created with. - * @return {string} the original string - */ - toString: function () { - return this.str; - }, - - /** - * If the type of this INumber instance is "currency", then the parser will attempt - * to figure out which currency this amount represents. The amount can be written - * with any of the currency signs or ISO 4217 codes that are currently - * recognized by ilib, and the currency signs may occur before or after the - * numeric portion of the string. If no currency can be recognized, then the - * default currency for the locale is returned. If multiple currencies can be - * recognized (for example if the currency sign is "$"), then this method - * will prefer the one for the current locale. If multiple currencies can be - * recognized, but none are used in the current locale, then the first currency - * encountered will be used. This may produce random results, though the larger - * currencies occur earlier in the list. For example, if the sign found in the - * string is "$" and that is not the sign of the currency of the current locale - * then the US dollar will be recognized, as it is the largest currency that uses - * the "$" as its sign. - * - * @return {Currency|undefined} the currency instance for this amount, or - * undefined if this INumber object is not of type currency - */ - getCurrency: function () { - return this.currency; - }, - - /** - * Return the value of this INumber object as a primitive number instance. - * @return {number} the value of this number instance - */ - valueOf: function () { - return this.value; - } -}; - - -/* - * JSUtils.js - Misc utilities to work around Javascript engine differences - * - * Copyright © 2013-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -var JSUtils = {}; - -/** - * Perform a shallow copy of the source object to the target object. This only - * copies the assignments of the source properties to the target properties, - * but not recursively from there.

    - * - * - * @static - * @param {Object} source the source object to copy properties from - * @param {Object} target the target object to copy properties into - */ -JSUtils.shallowCopy = function (source, target) { - var prop = undefined; - if (source && target) { - // using Object.assign is about 1/3 faster on nodejs - if (typeof(Object.assign) === "function") { - return Object.assign(target, source); - } - // polyfill - for (prop in source) { - if (prop !== undefined && typeof(source[prop]) !== 'undefined') { - target[prop] = source[prop]; - } - } - } -}; - -/** - * Perform a recursive deep copy from the "from" object to the "deep" object. - * - * @static - * @param {Object} from the object to copy from - * @param {Object} to the object to copy to - * @return {Object} a reference to the the "to" object - */ -JSUtils.deepCopy = function(from, to) { - var prop; - - for (prop in from) { - if (prop) { - if (typeof(from[prop]) === 'object') { - to[prop] = {}; - JSUtils.deepCopy(from[prop], to[prop]); - } else { - to[prop] = from[prop]; - } - } - } - return to; -}; - -/** - * Map a string to the given set of alternate characters. If the target set - * does not contain a particular character in the input string, then that - * character will be copied to the output unmapped. - * - * @static - * @param {string} str a string to map to an alternate set of characters - * @param {Array.|Object} map a mapping to alternate characters - * @return {string} the source string where each character is mapped to alternate characters - */ -JSUtils.mapString = function (str, map) { - var mapped = ""; - if (map && str) { - for (var i = 0; i < str.length; i++) { - var c = str.charAt(i); // TODO use a char iterator? - mapped += map[c] || c; - } - } else { - mapped = str; - } - return mapped; -}; - -/** - * Check if an object is a member of the given array. If this javascript engine - * support indexOf, it is used directly. Otherwise, this function implements it - * itself. The idea is to make sure that you can use the quick indexOf if it is - * available, but use a slower implementation in older engines as well. - * - * @static - * @param {Array.} array array to search - * @param {Object|string|number} obj object being sought. This should be of the same type as the - * members of the array being searched. If not, this function will not return - * any results. - * @return {number} index of the object in the array, or -1 if it is not in the array. - */ -JSUtils.indexOf = function(array, obj) { - if (!array || !obj) { - return -1; - } - if (typeof(array.indexOf) === 'function') { - return array.indexOf(obj); - } else { - // polyfill - for (var i = 0; i < array.length; i++) { - if (array[i] === obj) { - return i; - } - } - return -1; - } -}; - -/** - * Pad the str with zeros to the given length of digits. - * - * @static - * @param {string|number} str the string or number to pad - * @param {number} length the desired total length of the output string, padded - * @param {boolean=} right if true, pad on the right side of the number rather than the left. - * Default is false. - */ -JSUtils.pad = function (str, length, right) { - if (typeof(str) !== 'string') { - str = "" + str; - } - var start = 0; - // take care of negative numbers - if (str.charAt(0) === '-') { - start++; - } - return (str.length >= length+start) ? str : - (right ? str + JSUtils.pad.zeros.substring(0,length-str.length+start) : - str.substring(0, start) + JSUtils.pad.zeros.substring(0,length-str.length+start) + str.substring(start)); -}; - -/** @private */ -JSUtils.pad.zeros = "00000000000000000000000000000000"; - -/** - * Convert a string into the hexadecimal representation - * of the Unicode characters in that string. - * - * @static - * @param {string} string The string to convert - * @param {number=} limit the number of digits to use to represent the character (1 to 8) - * @return {string} a hexadecimal representation of the - * Unicode characters in the input string - */ -JSUtils.toHexString = function(string, limit) { - var i, - result = "", - lim = (limit && limit < 9) ? limit : 4; - - if (!string) { - return ""; - } - for (i = 0; i < string.length; i++) { - var ch = string.charCodeAt(i).toString(16); - result += JSUtils.pad(ch, lim); - } - return result.toUpperCase(); -}; - -/** - * Test whether an object in a Javascript Date. - * - * @static - * @param {Object|null|undefined} object The object to test - * @return {boolean} return true if the object is a Date - * and false otherwise - */ -JSUtils.isDate = function(object) { - if (typeof(object) === 'object') { - return Object.prototype.toString.call(object) === '[object Date]'; - } - return false; -}; - -/** - * Merge the properties of object2 into object1 in a deep manner and return a merged - * object. If the property exists in both objects, the value in object2 will overwrite - * the value in object1. If a property exists in object1, but not in object2, its value - * will not be touched. If a property exists in object2, but not in object1, it will be - * added to the merged result.

    - * - * Name1 and name2 are for creating debug output only. They are not necessary.

    - * - * - * @static - * @param {*} object1 the object to merge into - * @param {*} object2 the object to merge - * @param {boolean=} replace if true, replace the array elements in object1 with those in object2. - * If false, concatenate array elements in object1 with items in object2. - * @param {string=} name1 name of the object being merged into - * @param {string=} name2 name of the object being merged in - * @return {Object} the merged object - */ -JSUtils.merge = function (object1, object2, replace, name1, name2) { - if (!object1 && object2) { - return object2; - } - if (object1 && !object2) { - return object1; - } - var prop = undefined, - newObj = {}; - for (prop in object1) { - if (prop && typeof(object1[prop]) !== 'undefined') { - newObj[prop] = object1[prop]; - } - } - for (prop in object2) { - if (prop && typeof(object2[prop]) !== 'undefined') { - if (ilib.isArray(object1[prop]) && ilib.isArray(object2[prop])) { - if (typeof(replace) !== 'boolean' || !replace) { - newObj[prop] = [].concat(object1[prop]); - newObj[prop] = newObj[prop].concat(object2[prop]); - } else { - newObj[prop] = object2[prop]; - } - } else if (typeof(object1[prop]) === 'object' && typeof(object2[prop]) === 'object') { - newObj[prop] = JSUtils.merge(object1[prop], object2[prop], replace); - } else { - // for debugging. Used to determine whether or not json files are overriding their parents unnecessarily - if (name1 && name2 && newObj[prop] === object2[prop]) { - console.log("Property " + prop + " in " + name1 + " is being overridden by the same value in " + name2); - } - newObj[prop] = object2[prop]; - } - } - } - return newObj; -}; - -/** - * Return true if the given object has no properties.

    - * - * - * @static - * @param {Object} obj the object to check - * @return {boolean} true if the given object has no properties, false otherwise - */ -JSUtils.isEmpty = function (obj) { - var prop = undefined; - - if (!obj) { - return true; - } - - for (prop in obj) { - if (prop && typeof(obj[prop]) !== 'undefined') { - return false; - } - } - return true; -}; - -/** - * @static - */ -JSUtils.hashCode = function(obj) { - var hash = 0; - - function addHash(hash, newValue) { - // co-prime numbers creates a nicely distributed hash - hash *= 65543; - hash += newValue; - hash %= 2147483647; - return hash; - } - - function stringHash(str) { - var hash = 0; - for (var i = 0; i < str.length; i++) { - hash = addHash(hash, str.charCodeAt(i)); - } - return hash; - } - - switch (typeof(obj)) { - case 'undefined': - hash = 0; - break; - case 'string': - hash = stringHash(obj); - break; - case 'function': - case 'number': - case 'xml': - hash = stringHash(String(obj)); - break; - case 'boolean': - hash = obj ? 1 : 0; - break; - case 'object': - var props = []; - for (var p in obj) { - if (obj.hasOwnProperty(p)) { - props.push(p); - } - } - // make sure the order of the properties doesn't matter - props.sort(); - for (var i = 0; i < props.length; i++) { - hash = addHash(hash, stringHash(props[i])); - hash = addHash(hash, JSUtils.hashCode(obj[props[i]])); - } - break; - } - - return hash; -}; - -/** - * Calls the given action function on each element in the given - * array arr in order and finally call the given callback when they are - * all done. The action function should take the array to - * process as its parameter, and a callback function. It should - * process the first element in the array and then call its callback - * function with the result of processing that element (if any). - * - * @param {Array.} arr the array to process - * @param {Function(Array., Function(*))} action the action - * to perform on each element of the array - * @param {Function(*)} callback the callback function to call - * with the results of processing each element of the array. - */ -JSUtils.callAll = function(arr, action, callback, results) { - results = results || []; - if (arr && arr.length) { - action(arr, function(result) { - results.push(result); - JSUtils.callAll(arr.slice(1), action, callback, results); - }); - } else { - callback(results); - } -}; - - -/* - * Utils.js - Core utility routines - * - * Copyright © 2012-2015, 2018-2019, 2021 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - - -var Utils = {}; - -/** - * Return the property name inside of ilib.data that corresponds to the given locale data file. - * - * @private - * @param {String} basename the basename of the file - * @param {String} pathname the path from the root to the base file which usually encodes the - * locale of the file - * @param {String=} root the root directory of the file or undefined for the standard locale dir - */ -function getPropertyName(basename, pathname, root) { - var bits = [ basename ]; - if (root) { - bits = bits.concat(root.split("\/")); - } - if (pathname) { - bits = bits.concat(pathname.split("\/")); - } - return bits.join('_'); -} - -/** - * Return an array of locales that represent the sublocales of - * the given locale. These sublocales are intended to be used - * to load locale data. Each sublocale might be represented - * separately by files on disk in order to share them with other - * locales that have the same sublocales. The sublocales are - * given in the order that they should be loaded, which is - * least specific to most specific.

    - * - * For example, the locale "en-US" would have the sublocales - * "root", "en", "und-US", and "en-US".

    - * - *

    Variations

    - * - * With only language and region specified, the following - * sequence of sublocales will be generated:

    - * - *

    - * root
    - * language
    - * und-region
    - * language-region
    - * 
    - * - * With only language and script specified:

    - * - *

    - * root
    - * language
    - * language-script
    - * 
    - * - * With only script and region specified:

    - * - *

    - * root
    - * und-region
    - * 
    - * - * With only region and variant specified:

    - * - *

    - * root
    - * und-region
    - * region-variant
    - * 
    - * - * With only language, script, and region specified:

    - * - *

    - * root
    - * language
    - * und-region
    - * language-script
    - * language-region
    - * language-script-region
    - * 
    - * - * With only language, region, and variant specified:

    - * - *

    - * root
    - * language
    - * und-region
    - * language-region
    - * und-region-variant
    - * language-region-variant
    - * 
    - * - * With all parts specified:

    - * - *

    - * root
    - * language
    - * und-region
    - * language-script
    - * language-region
    - * und-region-variant
    - * language-script-region
    - * language-region-variant
    - * language-script-region-variant
    - * 
    - * - * @static - * @param {Locale|String} locale the locale to find the sublocales for - * @return {Array.} An array of locale specifiers that - * are the sublocales of the given on - */ -Utils.getSublocales = function(locale) { - var ret = ["root"]; - var loc = typeof(locale) === "string" ? new Locale(locale) : locale; - var lang = loc.getLanguage(); - var region = loc.getRegion(); - var script = loc.getScript(); - var variant = loc.getVariant(); - - if (lang) { - ret.push(lang); - } - if (region) { - ret.push('und-' + region); - } - - if (lang) { - if (script) { - ret.push(lang + '-' + script); - } - if (region) { - ret.push(lang + '-' + region); - } - if (variant) { - ret.push(lang + '-' + variant); - } - } - - if (region && variant) { - ret.push("und-" + region + '-' + variant); - } - - if (lang) { - if (script && region) { - ret.push(lang + '-' + script + '-' + region); - } - if (script && variant) { - ret.push(lang + '-' + script + '-' + variant); - } - if (region && variant) { - ret.push(lang + '-' + region + '-' + variant); - } - if (script && region && variant) { - ret.push(lang + '-' + script + '-' + region + '-' + variant); - } - } - return ret; -}; - -/** - * Find and merge all the locale data for a particular prefix in the given locale - * and return it as a single javascript object. This merges the data in the - * correct order: - * - *
      - *
    1. shared data (usually English) - *
    2. data for language - *
    3. data for language + region - *
    4. data for language + region + script - *
    5. data for language + region + script + variant - *
    - * - * It is okay for any of the above to be missing. This function will just skip the - * missing data. - * - * @static - * @param {string} prefix prefix under ilib.data of the data to merge - * @param {Locale} locale locale of the data being sought - * @param {boolean=} replaceArrays if true, replace the array elements in object1 with those in object2. - * If false, concatenate array elements in object1 with items in object2. - * @param {boolean=} returnOne if true, only return the most locale-specific data. If false, - * merge all the relevant locale data together. - * @param {string=} root root path if there is one - * @return {Object?} the merged locale data - */ -Utils.mergeLocData = function (prefix, locale, replaceArrays, returnOne, root) { - var data = undefined; - var loc = locale || new Locale(); - var mostSpecific; - - data = {}; - - mostSpecific = data; - - Utils.getSublocales(loc).forEach(function(l) { - var property = getPropertyName(prefix, (l === "root") ? undefined : l.replace(/-/g, "/"), root); - - if (ilib.data[property]) { - if (returnOne) { - mostSpecific = ilib.data[property]; - } else { - data = JSUtils.merge(data, ilib.data[property], replaceArrays); - } - } - }); - - return returnOne ? mostSpecific : data; -}; - - -/** - * Return an array of relative path names for the - * files that represent the data for the given locale.

    - * - * Note that to prevent the situation where a directory for - * a language exists next to the directory for a region where - * the language code and region code differ only by case, the - * plain region directories are located under the special - * "undefined" language directory which has the ISO code "und". - * The reason is that some platforms have case-insensitive - * file systems, and you cannot have 2 directories with the - * same name which only differ by case. For example, "es" is - * the ISO 639 code for the language "Spanish" and "ES" is - * the ISO 3166 code for the region "Spain", so both the - * directories cannot exist underneath "locale". The region - * therefore will be loaded from "und/ES" instead.

    - * - *

    Variations

    - * - * With only language and region specified, the following - * sequence of paths will be generated:

    - * - *

    - * language
    - * und/region
    - * language/region
    - * 
    - * - * With only language and script specified:

    - * - *

    - * language
    - * language/script
    - * 
    - * - * With only script and region specified:

    - * - *

    - * und/region
    - * 
    - * - * With only region and variant specified:

    - * - *

    - * und/region
    - * region/variant
    - * 
    - * - * With only language, script, and region specified:

    - * - *

    - * language
    - * und/region
    - * language/script
    - * language/region
    - * language/script/region
    - * 
    - * - * With only language, region, and variant specified:

    - * - *

    - * language
    - * und/region
    - * language/region
    - * region/variant
    - * language/region/variant
    - * 
    - * - * With all parts specified:

    - * - *

    - * language
    - * und/region
    - * language/script
    - * language/region
    - * region/variant
    - * language/script/region
    - * language/region/variant
    - * language/script/region/variant
    - * 
    - * - * @static - * @param {Locale} locale load the files for this locale - * @param {string?} name the file name of each file to load without - * any path - * @return {Array.} An array of relative path names - * for the files that contain the locale data - */ -Utils.getLocFiles = function(locale, name) { - var filename = name || "resources.json"; - var loc = locale || new Locale(); - - return Utils.getSublocales(loc).map(function(l) { - return (l === "root") ? filename : Path.join(l.replace(/-/g, "/"), filename); - }); -}; - -/** - * Load data using the new loader object or via the old function callback. - * @static - * @private - */ -Utils._callLoadData = function (files, sync, params, root, callback) { - // console.log("Utils._callLoadData called"); - if (typeof(ilib._load) === 'function') { - // console.log("Utils._callLoadData: calling as a regular function"); - return ilib._load(files, sync, params, callback); - } else if (typeof(ilib._load) === 'object' && typeof(ilib._load.loadFiles) === 'function') { - // console.log("Utils._callLoadData: calling as an object"); - return ilib._load.loadFiles(files, sync, params, callback, root); - } - - // console.log("Utils._callLoadData: not calling. Type is " + typeof(ilib._load) + " and instanceof says " + (ilib._load instanceof Loader)); - return undefined; -}; - -function getPropertyNameFromFile(basename, filepath, root) { - var dir = Path.dirname(filepath); - return getPropertyName(basename, (dir === "." || dir === "/" || dir === "..") ? undefined : dir, root); -} - -/** - * Return true if the locale data corresponding to the given pathname is not already loaded - * or assembled. - * - * @private - * @param basename - * @param locale - * @return {boolean} true if the locale data corresponding to the given pathname is not already loaded or assembled - */ -function dataNotExists(basename, pathname, root) { - return !ilib.data[getPropertyNameFromFile(basename, pathname, root)]; -} - -/** - * Find locale data or load it in. If the data with the given name is preassembled, it will - * find the data in ilib.data. If the data is not preassembled but there is a loader function, - * this function will call it to load the data. Otherwise, the callback will be called with - * undefined as the data. This function will create a cache under the given class object. - * If data was successfully loaded, it will be set into the cache so that future access to - * the same data for the same locale is much quicker.

    - * - * The parameters can specify any of the following properties:

    - * - *

      - *
    • name - String. The name of the file being loaded. Default: ResBundle.json - *
    • object - String. The name of the class attempting to load data. This is used to differentiate parts of the cache. - *
    • locale - Locale. The locale for which data is loaded. Default is the current locale. - *
    • nonlocale - boolean. If true, the data being loaded is not locale-specific. - *
    • type - String. Type of file to load. This can be "json" or "other" type. Default: "json" - *
    • replace - boolean. When merging json objects, this parameter controls whether to merge arrays - * or have arrays replace each other. If true, arrays in child objects replace the arrays in parent - * objects. When false, the arrays in child objects are concatenated with the arrays in parent objects. - *
    • root - String. If provided, look in this root directory first for files, and then fall back - * to the standard include paths if they are not found in this root. If not provided, just search the - * standard include paths. - *
    • loadParams - Object. An object with parameters to pass to the loader function - *
    • sync - boolean. Whether or not to load the data synchronously - *
    • callback - function(?)=. callback Call back function to call when the data is available. - * Data is not returned from this method, so a callback function is mandatory. - *
    - * - * @static - * @param {Object} params Parameters configuring how to load the files (see above) - */ -Utils.loadData = function(params) { - var name = "resources.json", - locale = new Locale(ilib.getLocale()), - sync = false, - type = undefined, - loadParams = {}, - callback = undefined, - nonlocale = false, - replace = false, - root, - basename; - - if (!params || typeof(params.callback) !== 'function') { - throw "Utils.loadData called without a callback. It must have a callback to work."; - } - - if (params.name) { - name = params.name; - } - if (params.locale) { - locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; - } - if (params.type) { - type = params.type; - } - if (params.loadParams) { - loadParams = params.loadParams; - } - if (params.sync) { - sync = params.sync; - } - if (params.nonlocale) { - nonlocale = !!params.nonlocale; - } - if (typeof(params.replace) === 'boolean') { - replace = params.replace; - } - - root = params.root; - callback = params.callback; - - if (!type) { - var dot = name.lastIndexOf("."); - type = (dot !== -1) ? name.substring(dot+1) : "text"; - } - - if (typeof(ilib.data.cache) === "undefined") { - ilib.data.cache = {}; - } - if (typeof(ilib.data.cache.fileSet) === "undefined") { - ilib.data.cache.fileSet = new ISet(); - } - - var data, returnOne = ((loadParams && loadParams.returnOne) || type !== "json"); - - basename = name.substring(0, name.lastIndexOf(".")).replace(/[\.:\(\)\/\\\+\-]/g, "_"); - - if (ilib._cacheMerged) { - if (typeof(ilib.data.cache.merged) === "undefined") { - ilib.data.cache.merged = {}; - } - var spec = ((!nonlocale && locale.getSpec().replace(/-/g, '_')) || "root") + "," + basename + "," + String(JSUtils.hashCode(loadParams)); - if (typeof(ilib.data.cache.merged[spec]) !== 'undefined') { - // cache hit! - callback(ilib.data.cache.merged[spec]); - return; - } - } - - if (typeof(ilib._load) !== 'undefined') { - // We have a loader, so we can figure out which json files are loaded already and - // which are not so that we can load the missing ones. - // the data is not preassembled, so attempt to load it dynamically - var files = nonlocale ? [ name || "resources.json" ] : Utils.getLocFiles(locale, name); - - var isPath = ilib._load.isMultiPaths; - - if (typeof(isPath) === "undefined" || isPath === false){ - // find the ones we haven't loaded before - files = files.filter(ilib.bind(this, function(file) { - return !ilib.data.cache.fileSet.has(Path.join(root, file)) && dataNotExists(basename, file, root); - })); - } - - if (files.length) { - Utils._callLoadData(files, sync, loadParams, root, ilib.bind(this, function(arr) { - for (var i = 0; i < files.length; i++) { - if (arr[i]) { - var property = nonlocale ? basename : getPropertyNameFromFile(basename, files[i], root); - - if (isPath || !ilib.data[property]) { - ilib.data[property] = arr[i]; - } - } - - ilib.data.cache.fileSet.add(Path.join(root, files[i])); - } - - if (!nonlocale) { - data = Utils.mergeLocData(basename, locale, replace, returnOne, root); - if (ilib._cacheMerged) ilib.data.cache.merged[spec] = data; - } else { - data = ilib.data[basename]; - } - - callback(data); - })); - - return; - } - // otherwise the code below will return the already-loaded data - } - - // No loader, or data already loaded? Then use whatever data we have already in ilib.data - if (!nonlocale) { - data = Utils.mergeLocData(basename, locale, replace, returnOne, root); - if (ilib._cacheMerged) ilib.data.cache.merged[spec] = data; - } else { - data = ilib.data[basename]; - } - - callback(data); -}; - - -/* - * MathUtils.js - Misc math utility routines - * - * Copyright © 2013-2015, 2018 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var MathUtils = {}; - -/** - * Return the sign of the given number. If the sign is negative, this function - * returns -1. If the sign is positive or zero, this function returns 1. - * @static - * @param {number} num the number to test - * @return {number} -1 if the number is negative, and 1 otherwise - */ -MathUtils.signum = function (num) { - var n = num; - if (typeof(num) === 'string') { - n = parseInt(num, 10); - } else if (typeof(num) !== 'number') { - return 1; - } - return (n < 0) ? -1 : 1; -}; - -/** - * @static - * @protected - * @param {number} num number to round - * @return {number} rounded number - */ -MathUtils.floor = function (num) { - return Math.floor(num); -}; - -/** - * @static - * @protected - * @param {number} num number to round - * @return {number} rounded number - */ -MathUtils.ceiling = function (num) { - return Math.ceil(num); -}; - -/** - * @static - * @protected - * @param {number} num number to round - * @return {number} rounded number - */ -MathUtils.down = function (num) { - return (num < 0) ? Math.ceil(num) : Math.floor(num); -}; - -/** - * @static - * @protected - * @param {number} num number to round - * @return {number} rounded number - */ -MathUtils.up = function (num) { - return (num < 0) ? Math.floor(num) : Math.ceil(num); -}; - -/** - * @static - * @protected - * @param {number} num number to round - * @return {number} rounded number - */ -MathUtils.halfup = function (num) { - return (num < 0) ? Math.ceil(num - 0.5) : Math.floor(num + 0.5); -}; - -/** - * @static - * @protected - * @param {number} num number to round - * @return {number} rounded number - */ -MathUtils.halfdown = function (num) { - return (num < 0) ? Math.floor(num + 0.5) : Math.ceil(num - 0.5); -}; - -/** - * @static - * @protected - * @param {number} num number to round - * @return {number} rounded number - */ -MathUtils.halfeven = function (num) { - return (Math.floor(num) % 2 === 0) ? Math.ceil(num - 0.5) : Math.floor(num + 0.5); -}; - -/** - * @static - * @protected - * @param {number} num number to round - * @return {number} rounded number - */ -MathUtils.halfodd = function (num) { - return (Math.floor(num) % 2 !== 0) ? Math.ceil(num - 0.5) : Math.floor(num + 0.5); -}; - -/** - * Do a proper modulo function. The Javascript % operator will give the truncated - * division algorithm, but for calendrical calculations, we need the Euclidean - * division algorithm where the remainder of any division, whether the dividend - * is negative or not, is always a positive number in the range [0, modulus).

    - * - * - * @static - * @param {number} dividend the number being divided - * @param {number} modulus the number dividing the dividend. This should always be a positive number. - * @return the remainder of dividing the dividend by the modulus. - */ -MathUtils.mod = function (dividend, modulus) { - if (modulus === 0) { - return 0; - } - var x = dividend % modulus; - return (x < 0) ? x + modulus : x; -}; - -/** - * Do a proper adjusted modulo function. The Javascript % operator will give the truncated - * division algorithm, but for calendrical calculations, we need the Euclidean - * division algorithm where the remainder of any division, whether the dividend - * is negative or not, is always a positive number in the range (0, modulus]. The adjusted - * modulo function differs from the regular modulo function in that when the remainder is - * zero, the modulus should be returned instead.

    - * - * - * @static - * @param {number} dividend the number being divided - * @param {number} modulus the number dividing the dividend. This should always be a positive number. - * @return the remainder of dividing the dividend by the modulus. - */ -MathUtils.amod = function (dividend, modulus) { - if (modulus === 0) { - return 0; - } - var x = dividend % modulus; - return (x <= 0) ? x + modulus : x; -}; - -/** - * Return the number with the decimal shifted by the given precision. - * Positive precisions shift the decimal to the right giving larger - * numbers, and negative ones shift the decimal to the left giving - * smaller numbers. - * - * @static - * @param {number} number the number to shift - * @param {number} precision the number of places to move the decimal point - * @returns {number} the number with the decimal point shifted by the - * given number of decimals - */ -MathUtils.shiftDecimal = function shift(number, precision) { - var numArray = ("" + number).split("e"); - return +(numArray[0] + "e" + (numArray[1] ? (+numArray[1] + precision) : precision)); -}; - -/** - * Returns the base 10 logarithm of a number. For platforms that support - * Math.log10() it is used directly. For plaforms that do not, such as Qt/QML, - * it will be calculated using the natural logarithm. - * - * @param {number} num the number to take the logarithm of - * @returns {number} the base-10 logarithm of the given number - */ -MathUtils.log10 = function(num) { - if (typeof(Math.log10) === "function") { - return Math.log10(num); - } - - return Math.log(num) / Math.LN10; -}; - -/** - * Return the given number with only the given number of significant digits. - * The number of significant digits can start with the digits greater than - * 1 and straddle the decimal point, or it may start after the decimal point. - * If the number of digits requested is less than 1, the original number - * will be returned unchanged. - * - * @static - * @param {number} number the number to return with only significant digits - * @param {number} digits the number of significant digits to include in the - * returned number - * @param {function(number): number=} round a rounding function to use - * @returns {number} the given number with only the requested number of - * significant digits - */ -MathUtils.significant = function(number, digits, round) { - if (digits < 1 || number === 0) return number; - var rnd = round || Math.round; - var factor = -Math.floor(MathUtils.log10(Math.abs(number))) + digits - 1; - return MathUtils.shiftDecimal(rnd(MathUtils.shiftDecimal(number, factor)), -factor); -}; - - -/* - * SearchUtils.js - Misc search utility routines - * - * Copyright © 2013-2015, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var SearchUtils = {}; - -/** - * Binary search a sorted array for a particular target value. - * If the exact value is not found, it returns the index of the smallest - * entry that is greater than the given target value.

    - * - * The comparator - * parameter is a function that knows how to compare elements of the - * array and the target. The function should return a value greater than 0 - * if the array element is greater than the target, a value less than 0 if - * the array element is less than the target, and 0 if the array element - * and the target are equivalent.

    - * - * If the comparator function is not specified, this function assumes - * the array and the target are numeric values and should be compared - * as such.

    - * - * - * @static - * @param {*} target element being sought - * @param {Array} arr the array being searched - * @param {?function(*,*)=} comparator a comparator that is appropriate for comparing two entries - * in the array - * @return the index of the array into which the value would fit if - * inserted, or -1 if given array is not an array or the target is not - * a number - */ -SearchUtils.bsearch = function(target, arr, comparator) { - if (typeof(arr) === 'undefined' || !arr || typeof(target) === 'undefined') { - return -1; - } - - var high = arr.length - 1, - low = 0, - mid = 0, - value, - cmp = comparator || SearchUtils.bsearch.numbers; - - while (low <= high) { - mid = Math.floor((high+low)/2); - value = cmp(arr[mid], target); - if (value > 0) { - high = mid - 1; - } else if (value < 0) { - low = mid + 1; - } else { - return mid; - } - } - - return low; -}; - -/** - * Returns whether or not the given element is greater than, less than, - * or equal to the given target.

    - * - * @private - * @static - * @param {number} element the element being tested - * @param {number} target the target being sought - */ -SearchUtils.bsearch.numbers = function(element, target) { - return element - target; -}; - -/** - * Do a bisection search of a function for a particular target value.

    - * - * The function to search is a function that takes a numeric parameter, - * does calculations, and returns gives a numeric result. The - * function should should be smooth and not have any discontinuities - * between the low and high values of the parameter. - * - * - * @static - * @param {number} target value being sought - * @param {number} low the lower bounds to start searching - * @param {number} high the upper bounds to start searching - * @param {number} precision minimum precision to support. Use 0 if you want to use the default. - * @param {?function(number)=} func function to search - * @return an approximation of the input value to the function that gives the desired - * target output value, correct to within the error range of Javascript floating point - * arithmetic, or NaN if there was some error - */ -SearchUtils.bisectionSearch = function(target, low, high, precision, func) { - if (typeof(target) !== 'number' || - typeof(low) !== 'number' || - typeof(high) !== 'number' || - typeof(func) !== 'function') { - return NaN; - } - - var mid = 0, - value, - pre = precision > 0 ? precision : 1e-13; - - do { - mid = (high+low)/2; - value = func(mid); - if (value > target) { - high = mid; - } else if (value < target) { - low = mid; - } - } while (high - low > pre); - - return mid; -}; - - -/* - * CalendarFactory.js - Constructs new instances of the right subclass of Calendar - * - * Copyright © 2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - -/** - * Factory method to create a new instance of a calendar subclass.

    - * - * The options parameter can be an object that contains the following - * properties: - * - *

      - *
    • type - specify the type of the calendar desired. The - * list of valid values changes depending on which calendars are - * defined. When assembling your iliball.js, include those calendars - * you wish to use in your program or web page, and they will register - * themselves with this factory method. The "official", "gregorian", - * and "julian" calendars are all included by default, as they are the - * standard calendars for much of the world. - *
    • locale - some calendars vary depending on the locale. - * For example, the "official" calendar transitions from a Julian-style - * calendar to a Gregorian-style calendar on a different date for - * each country, as the governments of those countries decided to - * adopt the Gregorian calendar at different times. - * - *
    • onLoad - a callback function to call when the calendar object is fully - * loaded. When the onLoad option is given, the calendar factory will attempt to - * load any missing locale data using the ilib loader callback. - * When the constructor is done (even if the data is already preassembled), the - * onLoad function is called with the current instance as a parameter, so this - * callback can be used with preassembled or dynamic loading or a mix of the two. - * - *
    • sync - tell whether to load any missing locale data synchronously or - * asynchronously. If this option is given as "false", then the "onLoad" - * callback must be given, as the instance returned from this constructor will - * not be usable for a while. - * - *
    • loadParams - an object containing parameters to pass to the - * loader callback function when locale data is missing. The parameters are not - * interpretted or modified in any way. They are simply passed along. The object - * may contain any property/value pairs as long as the calling code is in - * agreement with the loader callback function as to what those parameters mean. - *
    - * - * If a locale is specified, but no type, then the calendar that is default for - * the locale will be instantiated and returned. If neither the type nor - * the locale are specified, then the calendar for the default locale will - * be used. - * - * @static - * @param {Object=} options options controlling the construction of this instance, or - * undefined to use the default options - * @return {Calendar} an instance of a calendar object of the appropriate type - */ -var CalendarFactory = function (options) { - var locale, - type, - sync = true, - instance; - - if (options) { - if (options.locale) { - locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; - } - - type = options.type || options.calendar; - - if (typeof(options.sync) === 'boolean') { - sync = options.sync; - } - } - - if (!locale) { - locale = new Locale(); // default locale - } - - if (!type) { - new LocaleInfo(locale, { - sync: sync, - loadParams: options && options.loadParams, - onLoad: function(info) { - type = info.getCalendar(); - - instance = CalendarFactory._init(type, options); - } - }); - } else { - instance = CalendarFactory._init(type, options); - } - - return instance; -}; - -/** - * Map calendar names to classes to initialize in the dynamic code model. - * TODO: Need to figure out some way that this doesn't have to be updated by hand. - * @private - */ -CalendarFactory._dynMap = { - "coptic": "Coptic", - "ethiopic": "Ethiopic", - "gregorian": "Gregorian", - "han": "Han", - "hebrew": "Hebrew", - "islamic": "Islamic", - "julian": "Julian", - "persian": "Persian", - "persian-algo": "PersianAlgo", - "thaisolar": "ThaiSolar" -}; - -function circumventWebPack(x) { - return "./" + x + "Cal.js"; -} - -/** - * Dynamically load the code for a calendar and calendar class if necessary. - * @protected - */ -CalendarFactory._dynLoadCalendar = function (name, fnc) { - if (!Calendar._constructors[name]) { - var entry = CalendarFactory._dynMap[name]; - if (entry) { - // eslint-disable-next-line - Calendar._constructors[name] = require(fnc(entry)); - } - } - return Calendar._constructors[name]; -}; - -/** @private */ -CalendarFactory._init = function(type, options) { - var cons; - - if (ilib.isDynCode()) { - CalendarFactory._dynLoadCalendar(type, circumventWebPack); - } - - cons = Calendar._constructors[type]; - - // pass the same options through to the constructor so the subclass - // has the ability to do something with if it needs to - if (!cons && typeof(options.onLoad) === "function") { - options.onLoad(undefined); - } - return cons && new cons(options); -}; - -/** - * Return an array of known calendar types that the factory method can instantiate. - * - * @return {Array.} an array of calendar types - */ -CalendarFactory.getCalendars = function () { - var arr = [], - c; - - if (ilib.isDynCode()) { - for (c in CalendarFactory._dynMap) { - CalendarFactory._dynLoadCalendar(c, circumventWebPack); - } - } - - for (c in Calendar._constructors) { - if (c && Calendar._constructors[c]) { - arr.push(c); // code like a pirate - } - } - - return arr; -}; - - -/* - * DateFactory.js - Factory class to create the right subclasses of a date for any - * calendar or locale. - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - - - - -// Statically depend on these even though we don't use them -// to guarantee they are loaded into the cache already. - - -/** - * Factory method to create a new instance of a date subclass.

    - * - * The options parameter can be an object that contains the following - * properties: - * - *

      - *
    • type - specify the type/calendar of the date desired. The - * list of valid values changes depending on which calendars are - * defined. When assembling your iliball.js, include those date type - * you wish to use in your program or web page, and they will register - * themselves with this factory method. The "gregorian", - * and "julian" calendars are all included by default, as they are the - * standard calendars for much of the world. If not specified, the type - * of the date returned is the one that is appropriate for the locale. - * This property may also be given as "calendar" instead of "type". - * - *
    • onLoad - a callback function to call when the date object is fully - * loaded. When the onLoad option is given, the date factory will attempt to - * load any missing locale data using the ilib loader callback. - * When the constructor is done (even if the data is already preassembled), the - * onLoad function is called with the current instance as a parameter, so this - * callback can be used with preassembled or dynamic loading or a mix of the two. - * - *
    • sync - tell whether to load any missing locale data synchronously or - * asynchronously. If this option is given as "false", then the "onLoad" - * callback must be given, as the instance returned from this constructor will - * not be usable for a while. - * - *
    • loadParams - an object containing parameters to pass to the - * loader callback function when locale data is missing. The parameters are not - * interpretted or modified in any way. They are simply passed along. The object - * may contain any property/value pairs as long as the calling code is in - * agreement with the loader callback function as to what those parameters mean. - *
    - * - * The options object is also passed down to the date constructor, and - * thus can contain the the properties as the date object being instantiated. - * See the documentation for {@link GregorianDate}, and other - * subclasses for more details on other parameter that may be passed in.

    - * - * Please note that if you do not give the type parameter, this factory - * method will create a date object that is appropriate for the calendar - * that is most commonly used in the specified or current ilib locale. - * For example, in Thailand, the most common calendar is the Thai solar - * calendar. If the current locale is "th-TH" (Thai for Thailand) and you - * use this factory method to construct a new date without specifying the - * type, it will automatically give you back an instance of - * {@link ThaiSolarDate}. This is convenient because you do not - * need to know which locales use which types of dates. In fact, you - * should always use this factory method to make new date instances unless - * you know that you specifically need a date in a particular calendar.

    - * - * Also note that when you pass in the date components such as year, month, - * day, etc., these components should be appropriate for the given date - * being instantiated. That is, in our Thai example in the previous - * paragraph, the year and such should be given as a Thai solar year, not - * the Gregorian year that you get from the Javascript Date class. In - * order to initialize a date instance when you don't know what subclass - * will be instantiated for the locale, use a parameter such as "unixtime" - * or "julianday" which are unambiguous and based on UTC time, instead of - * the year/month/date date components. The date components for that UTC - * time will be calculated and the time zone offset will be automatically - * factored in. - * - * @static - * @param {Object=} options options controlling the construction of this instance, or - * undefined to use the default options - * @return {IDate} an instance of a calendar object of the appropriate type - */ -var DateFactory = function(options) { - var locale, - type, - sync = true, - obj; - - if (options) { - if (options.locale) { - locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; - } - - type = options.type || options.calendar; - - if (typeof(options.sync) === 'boolean') { - sync = options.sync; - } - } - - if (!locale) { - locale = new Locale(); // default locale - } - - if (!type) { - new LocaleInfo(locale, { - sync: sync, - loadParams: options && options.loadParams, - onLoad: function(info) { - type = info.getCalendar(); - - obj = DateFactory._init(type, options); - } - }); - } else { - obj = DateFactory._init(type, options); - } - - return obj -}; - -/** - * Map calendar names to classes to initialize in the dynamic code model. - * TODO: Need to figure out some way that this doesn't have to be updated by hand. - * @private - */ -DateFactory._dynMap = { - "coptic": "Coptic", - "ethiopic": "Ethiopic", - "gregorian": "Gregorian", - "han": "Han", - "hebrew": "Hebrew", - "islamic": "Islamic", - "julian": "Julian", - "persian": "Persian", - "persian-algo": "PersianAlgo", - "thaisolar": "ThaiSolar" -}; - -function circumventWebPackDate(x) { - return "./" + x + "Date.js"; -} - -function circumventWebPackCal(x) { - return "./" + x + "Cal.js"; -} - -/** - * Dynamically load the code for a calendar and calendar class if necessary. - * @protected - */ -DateFactory._dynLoadDate = function (name, fnc) { - if (!IDate._constructors[name]) { - var entry = DateFactory._dynMap[name]; - if (entry) { - // eslint-disable-next-line - IDate._constructors[name] = require(fnc(entry)); - } - } - return IDate._constructors[name]; -}; - -/** - * @protected - * @static - */ -DateFactory._init = function(type, options) { - var cons; - - if (ilib.isDynCode()) { - DateFactory._dynLoadDate(type, circumventWebPackDate); - CalendarFactory._dynLoadCalendar(type, circumventWebPackCal); - } - - cons = IDate._constructors[type]; - - // pass the same options through to the constructor so the subclass - // has the ability to do something with if it needs to - if (!cons && options && typeof(options.onLoad) === "function") { - options.onLoad(undefined); - } - return cons && new cons(options); -}; - -/** - * Convert JavaScript Date objects and other types into native Dates. This accepts any - * string or number that can be translated by the JavaScript Date class, - * (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse) - * any JavaScript Date classed object, any IDate subclass, an JulianDay object, an object - * containing the normal options to initialize an IDate instance, or null (will - * return null or undefined if input is null or undefined). Normal output is - * a standard native subclass of the IDate object as appropriate for the locale. - * - * @static - * @protected - * @param {IDate|Object|JulianDay|Date|string|number=} inDate The input date object, string or Number. - * @param {IString|string=} timezone timezone to use if a new date object is created - * @param {Locale|string=} locale locale to use when constructing an IDate - * @return {IDate|null|undefined} an IDate subclass equivalent to the given inDate - */ -DateFactory._dateToIlib = function(inDate, timezone, locale) { - if (typeof(inDate) === 'undefined' || inDate === null) { - return inDate; - } - if (inDate instanceof IDate) { - return inDate; - } - if (typeof(inDate) === 'number') { - return DateFactory({ - unixtime: inDate, - timezone: timezone, - locale: locale - }); - } - if (typeof(inDate) === 'string') { - inDate = new Date(inDate); - } - if (JSUtils.isDate(inDate)) { - return DateFactory({ - unixtime: inDate.getTime(), - timezone: timezone, - locale: locale - }); - } - if (inDate instanceof JulianDay) { - return DateFactory({ - jd: inDate, - timezone: timezone, - locale: locale - }); - } - if (typeof(inDate) === 'object') { - return DateFactory(inDate); - } - return DateFactory({ - unixtime: inDate.getTime(), - timezone: timezone, - locale: locale - }); -}; - -DateFactory._ilibToDate = function(ilibDate, timezone, locale) { - if (typeof(ilibDate) !== 'object' || !(ilibDate instanceof IDate)) { - return ilibDate; - } - - return new Date(ilibDate.getTimeExtended()); -}; - - -/* - * Loader.js - shared loader implementation - * - * Copyright © 2015, 2018-2019, 2021 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - -/** - * @class - * Superclass of the loader classes that contains shared functionality. - * - * @private - * @constructor - */ -var Loader = function() { - // console.log("new Loader instance"); - - this.protocol = "file://"; - this.includePath = []; - this.addPaths = []; - - this.jsutils =JSUtils; -}; - -Loader.prototype = new ilib.Loader(); -Loader.prototype.parent = ilib.Loader; -Loader.prototype.constructor = Loader; - -Loader.prototype._loadFile = function (pathname, sync, cb) {}; - -Loader.prototype._exists = function(dir, file) { - var fullpath = Path.normalize(Path.join(dir, file)); - if (this.protocol !== "http://") { - var text = this._loadFile(fullpath, true); - if (text && this.includePath.indexOf(text) === -1) { - this.includePath.push(dir); - } - } else { - // put the dir on the list now assuming it exists, and check for its availability - // later so we can avoid the 404 errors eventually - if (this.includePath.indexOf(dir) === -1) { - this.includePath.push(dir); - this._loadFile(fullpath, false, ilib.bind(this, function(text) { - if (!text) { - //console.log("Loader._exists: removing " + dir + " from the include path because it doesn't exist."); - this.includePath = this.includePath.slice(-1); - } - })); - } - } -}; - -Loader.prototype._loadFileAlongIncludePath = function(includePath, pathname) { - var textMerge={}; - for (var i = 0; i < includePath.length; i++) { - var manifest = this.manifest[includePath[i]]; - if (!manifest || Loader.indexOf(manifest, pathname) > -1) { - var filepath = Path.join(includePath[i], pathname); - //console.log("Loader._loadFileAlongIncludePath: attempting sync load " + filepath); - var text = this._loadFile(filepath, true); - - if (text) { - - if (typeof (this.isMultiPaths) !== "undefined" && this.isMultiPaths === true){ - if (typeof(text) === "string") { - text = JSON.parse(text); - } - textMerge = this.jsutils.merge(text, textMerge); - } else { - //console.log("Loader._loadFileAlongIncludePath: succeeded" + filepath); - return text; - } - } - //else { - //console.log("Loader._loadFileAlongIncludePath: failed"); - //} - } - //else { - //console.log("Loader._loadFileAlongIncludePath: " + pathname + " not in manifest for " + this.includePath[i]); - //} - } - - if (Object.keys(textMerge).length > 0) { - //console.log("Loader._loadFileAlongIncludePath: succeeded"); - return textMerge; - } - - //console.log("Loader._loadFileAlongIncludePath: file not found anywhere along the path."); - return undefined; -}; - -Loader.prototype.loadFiles = function(paths, sync, params, callback, root) { - root = root || (params && params.base); - var includePath = []; - - if(this.addPaths && this.addPaths.length > 0){ - includePath= includePath.concat(this.addPaths); - } - if (root) includePath.push(root); - includePath = includePath.concat(this.includePath); - - //console.log("Loader loadFiles called"); - // make sure we know what we can load - if (!paths) { - // nothing to load - //console.log("nothing to load"); - return; - } - - //console.log("generic loader: attempting to load these files: " + JSON.stringify(paths)); - if (sync) { - var ret = []; - - // synchronous - this._loadManifests(true); - - for (var i = 0; i < paths.length; i++) { - var text = this._loadFileAlongIncludePath(includePath, Path.normalize(paths[i])); - ret.push(typeof(text) === "string" ? JSON.parse(text) : text); - }; - - // only call the callback at the end of the chain of files - if (typeof(callback) === 'function') { - callback(ret); - } - - return ret; - } - - // asynchronous - this._loadManifests(false, ilib.bind(this, function() { - //console.log("Loader.loadFiles: now loading files asynchronously"); - var results = []; - this._loadFilesAsync(includePath, paths, results, callback); - })); -}; - -Loader.prototype._loadFilesAsyncAlongIncludePath = function (includes, filename, cb) { - var text = undefined; - - if (includes.length > 0) { - var root = includes[0]; - includes = includes.slice(1); - - var manifest = this.manifest[root]; - if (!manifest || Loader.indexOf(manifest, filename) > -1) { - var filepath = Path.join(root, filename); - this._loadFile(filepath, false, ilib.bind(this, function(t) { - //console.log("Loader._loadFilesAsyncAlongIncludePath: loading " + (t ? " success" : " failed")); - if (t) { - cb(t); - } else { - this._loadFilesAsyncAlongIncludePath(includes, filename, cb); - } - })); - } else { - //console.log("Loader._loadFilesAsyncAlongIncludePath: " + filepath + " not in manifest for " + root); - this._loadFilesAsyncAlongIncludePath(includes, filename, cb); - } - } else { - // file not found in any of the include paths - cb(); - } -}; - -Loader.prototype._loadFilesAsync = function (includePath, paths, results, callback) { - if (paths.length > 0) { - var filename = paths[0]; - paths = paths.slice(1); - - //console.log("Loader._loadFilesAsync: attempting to load " + filename + " along the include path."); - this._loadFilesAsyncAlongIncludePath(includePath, filename, ilib.bind(this, function (json) { - results.push(typeof(json) === "string" ? JSON.parse(json) : json); - this._loadFilesAsync(includePath, paths, results, callback); - })); - } else { - // only call the callback at the end of the chain of files - if (typeof(callback) === 'function') { - callback(results); - } - } -}; - -Loader.prototype._loadManifestFile = function(i, sync, cb) { - //console.log("Loader._loadManifestFile: Checking include path " + i + " " + this.includePath[i]); - if (i < this.includePath.length) { - var filepath = Path.join(this.includePath[i], "ilibmanifest.json"); - //console.log("Loader._loadManifestFile: Loading manifest file " + filepath); - var text = this._loadFile(filepath, sync, ilib.bind(this, function(text) { - if (text) { - //console.log("Loader._loadManifestFile: success!"); - this.manifest[this.includePath[i]] = (typeof(text) === "string" ? JSON.parse(text) : text).files; - } - //else console.log("Loader._loadManifestFile: failed..."); - this._loadManifestFile(i+1, sync, cb); - })); - } else { - if (typeof(cb) === 'function') { - //console.log("Loader._loadManifestFile: now calling callback function"); - cb(); - } - } -}; - -Loader.prototype._loadManifests = function(sync, cb) { - //console.log("Loader._loadManifests: called " + (sync ? "synchronously" : "asychronously.")); - if (!this.manifest) { - //console.log("Loader._loadManifests: attempting to find manifests"); - this.manifest = {}; - if (typeof(sync) !== 'boolean') { - sync = true; - } - - this._loadManifestFile(0, sync, cb); - } else { - //console.log("Loader._loadManifests: already loaded"); - if (typeof(cb) === 'function') { - //console.log("Loader._loadManifests: now calling callback function"); - cb(); - } - } -}; - -Loader.prototype.listAvailableFiles = function(sync, cb) { - //console.log("generic loader: list available files called"); - this._loadManifests(sync, ilib.bind(this, function () { - if (typeof(cb) === 'function') { - //console.log("generic loader: now calling caller's callback function"); - cb(this.manifest); - } - })); - return this.manifest; -}; - -Loader.prototype.addPath = function (paths) { - if (!paths) return; - - var newpaths = ilib.isArray(paths) ? paths : [paths]; - this.addPaths = this.addPaths.concat(newpaths); - this.isMultiPaths = true; -}; - -Loader.prototype.removePath = function (paths) { - if (!paths) return; - paths = ilib.isArray(paths) ? paths : [paths]; - - paths.forEach(ilib.bind(this, function(item){ - var index = this.addPaths.indexOf(item); - if (index !== -1) { - this.addPaths.splice(index, 1); - } - })); -}; - -Loader.indexOf = function(array, obj) { - if (!array || !obj) { - return -1; - } - if (typeof(array.indexOf) === 'function') { - return array.indexOf(obj); - } else { - for (var i = 0; i < array.length; i++) { - if (array[i] === obj) { - return i; - } - } - return -1; - } -}; - -Loader.prototype.checkAvailability = function(file) { - for (var dir in this.manifest) { - if (Loader.indexOf(this.manifest[dir], file) !== -1) { - return true; - } - } - - return false; -}; - -Loader.prototype.isAvailable = function(file, sync, cb) { - //console.log("Loader.isAvailable: called"); - if (typeof(sync) !== 'boolean') { - sync = true; - } - if (sync) { - this._loadManifests(sync); - return this.checkAvailability(file); - } - - this._loadManifests(false, ilib.bind(this, function () { - // console.log("generic loader: isAvailable " + path + "? "); - if (typeof(cb) === 'function') { - cb(this.checkAvailability(file)); - } - })); -}; - -/* - * Locale.js - Locale specifier definition - * - * Copyright © 2012-2015, 2018,2021 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - -/** - * @class - * Create a new locale instance. Locales are specified either with a specifier string - * that follows the BCP-47 convention (roughly: "language-region-script-variant") or - * with 4 parameters that specify the language, region, variant, and script individually.

    - * - * The language is given as an ISO 639-1 two-letter, lower-case language code. You - * can find a full list of these codes at - * http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes

    - * - * The region is given as an ISO 3166-1 two-letter, upper-case region code. You can - * find a full list of these codes at - * http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2.

    - * - * The variant is any string that does not contain a dash which further differentiates - * locales from each other.

    - * - * The script is given as the ISO 15924 four-letter script code. In some locales, - * text may be validly written in more than one script. For example, Serbian is often - * written in both Latin and Cyrillic, though not usually mixed together. You can find a - * full list of these codes at - * http://en.wikipedia.org/wiki/ISO_15924#List_of_codes.

    - * - * As an example in ilib, the script can be used in the date formatter. Dates formatted - * in Serbian could have day-of-week names or month names written in the Latin - * or Cyrillic script. Often one script is default such that sr-SR-Latn is the same - * as sr-SR so the script code "Latn" can be left off of the locale spec.

    - * - * Each part is optional, and an empty string in the specifier before or after a - * dash or as a parameter to the constructor denotes an unspecified value. In this - * case, many of the ilib functions will treat the locale as generic. For example - * the locale "en-" is equivalent to "en" and to "en--" and denotes a locale - * of "English" with an unspecified region and variant, which typically matches - * any region or variant.

    - * - * Without any arguments to the constructor, this function returns the locale of - * the host Javascript engine.

    - * - * - * @constructor - * @param {?string|Locale=} language the ISO 639 2-letter code for the language, or a full - * locale spec in BCP-47 format, or another Locale instance to copy from - * @param {string=} region the ISO 3166 2-letter code for the region - * @param {string=} variant the name of the variant of this locale, if any - * @param {string=} script the ISO 15924 code of the script for this locale, if any - */ -var Locale = function(language, region, variant, script) { - if (typeof(region) === 'undefined' && typeof(variant) === 'undefined' && typeof(script) === 'undefined') { - var spec = language || ilib.getLocale(); - if (typeof(spec) === 'string') { - var parts = spec.split(/[-_]/g); - for ( var i = 0; i < parts.length; i++ ) { - if (Locale._isLanguageCode(parts[i])) { - /** - * @private - * @type {string|undefined} - */ - this.language = parts[i]; - } else if (Locale._isRegionCode(parts[i])) { - /** - * @private - * @type {string|undefined} - */ - this.region = parts[i]; - } else if (Locale._isScriptCode(parts[i])) { - /** - * @private - * @type {string|undefined} - */ - this.script = parts[i]; - } else { - /** - * @private - * @type {string|undefined} - */ - this.variant = parts[i]; - } - } - this.language = this.language || undefined; - this.region = this.region || undefined; - this.script = this.script || undefined; - this.variant = this.variant || undefined; - } else if (typeof(spec) === 'object') { - this.language = spec.language || undefined; - this.region = spec.region || undefined; - this.script = spec.script || undefined; - this.variant = spec.variant || undefined; - } - } else { - if (language && typeof(language) === "string") { - language = language.trim(); - this.language = language.length > 0 ? language.toLowerCase() : undefined; - } else { - this.language = undefined; - } - if (region && typeof(region) === "string") { - region = region.trim(); - this.region = region.length > 0 ? region.toUpperCase() : undefined; - } else { - this.region = undefined; - } - if (variant && typeof(variant) === "string") { - variant = variant.trim(); - this.variant = variant.length > 0 ? variant : undefined; - } else { - this.variant = undefined; - } - if (script && typeof(script) === "string") { - script = script.trim(); - this.script = script.length > 0 ? script : undefined; - } else { - this.script = undefined; - } - } - this._genSpec(); -}; - -// from http://en.wikipedia.org/wiki/ISO_3166-1 -Locale.a2toa3regmap = { - "AF": "AFG", - "AX": "ALA", - "AL": "ALB", - "DZ": "DZA", - "AS": "ASM", - "AD": "AND", - "AO": "AGO", - "AI": "AIA", - "AQ": "ATA", - "AG": "ATG", - "AR": "ARG", - "AM": "ARM", - "AW": "ABW", - "AU": "AUS", - "AT": "AUT", - "AZ": "AZE", - "BS": "BHS", - "BH": "BHR", - "BD": "BGD", - "BB": "BRB", - "BY": "BLR", - "BE": "BEL", - "BZ": "BLZ", - "BJ": "BEN", - "BM": "BMU", - "BT": "BTN", - "BO": "BOL", - "BQ": "BES", - "BA": "BIH", - "BW": "BWA", - "BV": "BVT", - "BR": "BRA", - "IO": "IOT", - "BN": "BRN", - "BG": "BGR", - "BF": "BFA", - "BI": "BDI", - "KH": "KHM", - "CM": "CMR", - "CA": "CAN", - "CV": "CPV", - "KY": "CYM", - "CF": "CAF", - "TD": "TCD", - "CL": "CHL", - "CN": "CHN", - "CX": "CXR", - "CC": "CCK", - "CO": "COL", - "KM": "COM", - "CG": "COG", - "CD": "COD", - "CK": "COK", - "CR": "CRI", - "CI": "CIV", - "HR": "HRV", - "CU": "CUB", - "CW": "CUW", - "CY": "CYP", - "CZ": "CZE", - "DK": "DNK", - "DJ": "DJI", - "DM": "DMA", - "DO": "DOM", - "EC": "ECU", - "EG": "EGY", - "SV": "SLV", - "GQ": "GNQ", - "ER": "ERI", - "EE": "EST", - "ET": "ETH", - "FK": "FLK", - "FO": "FRO", - "FJ": "FJI", - "FI": "FIN", - "FR": "FRA", - "GF": "GUF", - "PF": "PYF", - "TF": "ATF", - "GA": "GAB", - "GM": "GMB", - "GE": "GEO", - "DE": "DEU", - "GH": "GHA", - "GI": "GIB", - "GR": "GRC", - "GL": "GRL", - "GD": "GRD", - "GP": "GLP", - "GU": "GUM", - "GT": "GTM", - "GG": "GGY", - "GN": "GIN", - "GW": "GNB", - "GY": "GUY", - "HT": "HTI", - "HM": "HMD", - "VA": "VAT", - "HN": "HND", - "HK": "HKG", - "HU": "HUN", - "IS": "ISL", - "IN": "IND", - "ID": "IDN", - "IR": "IRN", - "IQ": "IRQ", - "IE": "IRL", - "IM": "IMN", - "IL": "ISR", - "IT": "ITA", - "JM": "JAM", - "JP": "JPN", - "JE": "JEY", - "JO": "JOR", - "KZ": "KAZ", - "KE": "KEN", - "KI": "KIR", - "KP": "PRK", - "KR": "KOR", - "KW": "KWT", - "KG": "KGZ", - "LA": "LAO", - "LV": "LVA", - "LB": "LBN", - "LS": "LSO", - "LR": "LBR", - "LY": "LBY", - "LI": "LIE", - "LT": "LTU", - "LU": "LUX", - "MO": "MAC", - "MK": "MKD", - "MG": "MDG", - "MW": "MWI", - "MY": "MYS", - "MV": "MDV", - "ML": "MLI", - "MT": "MLT", - "MH": "MHL", - "MQ": "MTQ", - "MR": "MRT", - "MU": "MUS", - "YT": "MYT", - "MX": "MEX", - "FM": "FSM", - "MD": "MDA", - "MC": "MCO", - "MN": "MNG", - "ME": "MNE", - "MS": "MSR", - "MA": "MAR", - "MZ": "MOZ", - "MM": "MMR", - "NA": "NAM", - "NR": "NRU", - "NP": "NPL", - "NL": "NLD", - "NC": "NCL", - "NZ": "NZL", - "NI": "NIC", - "NE": "NER", - "NG": "NGA", - "NU": "NIU", - "NF": "NFK", - "MP": "MNP", - "NO": "NOR", - "OM": "OMN", - "PK": "PAK", - "PW": "PLW", - "PS": "PSE", - "PA": "PAN", - "PG": "PNG", - "PY": "PRY", - "PE": "PER", - "PH": "PHL", - "PN": "PCN", - "PL": "POL", - "PT": "PRT", - "PR": "PRI", - "QA": "QAT", - "RE": "REU", - "RO": "ROU", - "RU": "RUS", - "RW": "RWA", - "BL": "BLM", - "SH": "SHN", - "KN": "KNA", - "LC": "LCA", - "MF": "MAF", - "PM": "SPM", - "VC": "VCT", - "WS": "WSM", - "SM": "SMR", - "ST": "STP", - "SA": "SAU", - "SN": "SEN", - "RS": "SRB", - "SC": "SYC", - "SL": "SLE", - "SG": "SGP", - "SX": "SXM", - "SK": "SVK", - "SI": "SVN", - "SB": "SLB", - "SO": "SOM", - "ZA": "ZAF", - "GS": "SGS", - "SS": "SSD", - "ES": "ESP", - "LK": "LKA", - "SD": "SDN", - "SR": "SUR", - "SJ": "SJM", - "SZ": "SWZ", - "SE": "SWE", - "CH": "CHE", - "SY": "SYR", - "TW": "TWN", - "TJ": "TJK", - "TZ": "TZA", - "TH": "THA", - "TL": "TLS", - "TG": "TGO", - "TK": "TKL", - "TO": "TON", - "TT": "TTO", - "TN": "TUN", - "TR": "TUR", - "TM": "TKM", - "TC": "TCA", - "TV": "TUV", - "UG": "UGA", - "UA": "UKR", - "AE": "ARE", - "GB": "GBR", - "US": "USA", - "UM": "UMI", - "UY": "URY", - "UZ": "UZB", - "VU": "VUT", - "VE": "VEN", - "VN": "VNM", - "VG": "VGB", - "VI": "VIR", - "WF": "WLF", - "EH": "ESH", - "YE": "YEM", - "ZM": "ZMB", - "ZW": "ZWE" -}; - - -Locale.a1toa3langmap = { - "ab": "abk", - "aa": "aar", - "af": "afr", - "ak": "aka", - "sq": "sqi", - "am": "amh", - "ar": "ara", - "an": "arg", - "hy": "hye", - "as": "asm", - "av": "ava", - "ae": "ave", - "ay": "aym", - "az": "aze", - "bm": "bam", - "ba": "bak", - "eu": "eus", - "be": "bel", - "bn": "ben", - "bh": "bih", - "bi": "bis", - "bs": "bos", - "br": "bre", - "bg": "bul", - "my": "mya", - "ca": "cat", - "ch": "cha", - "ce": "che", - "ny": "nya", - "zh": "zho", - "cv": "chv", - "kw": "cor", - "co": "cos", - "cr": "cre", - "hr": "hrv", - "cs": "ces", - "da": "dan", - "dv": "div", - "nl": "nld", - "dz": "dzo", - "en": "eng", - "eo": "epo", - "et": "est", - "ee": "ewe", - "fo": "fao", - "fj": "fij", - "fi": "fin", - "fr": "fra", - "ff": "ful", - "gl": "glg", - "ka": "kat", - "de": "deu", - "el": "ell", - "gn": "grn", - "gu": "guj", - "ht": "hat", - "ha": "hau", - "he": "heb", - "hz": "her", - "hi": "hin", - "ho": "hmo", - "hu": "hun", - "ia": "ina", - "id": "ind", - "ie": "ile", - "ga": "gle", - "ig": "ibo", - "ik": "ipk", - "io": "ido", - "is": "isl", - "it": "ita", - "iu": "iku", - "ja": "jpn", - "jv": "jav", - "kl": "kal", - "kn": "kan", - "kr": "kau", - "ks": "kas", - "kk": "kaz", - "km": "khm", - "ki": "kik", - "rw": "kin", - "ky": "kir", - "kv": "kom", - "kg": "kon", - "ko": "kor", - "ku": "kur", - "kj": "kua", - "la": "lat", - "lb": "ltz", - "lg": "lug", - "li": "lim", - "ln": "lin", - "lo": "lao", - "lt": "lit", - "lu": "lub", - "lv": "lav", - "gv": "glv", - "mk": "mkd", - "mg": "mlg", - "ms": "msa", - "ml": "mal", - "mt": "mlt", - "mi": "mri", - "mr": "mar", - "mh": "mah", - "mn": "mon", - "na": "nau", - "nv": "nav", - "nb": "nob", - "nd": "nde", - "ne": "nep", - "ng": "ndo", - "nn": "nno", - "no": "nor", - "ii": "iii", - "nr": "nbl", - "oc": "oci", - "oj": "oji", - "cu": "chu", - "om": "orm", - "or": "ori", - "os": "oss", - "pa": "pan", - "pi": "pli", - "fa": "fas", - "pl": "pol", - "ps": "pus", - "pt": "por", - "qu": "que", - "rm": "roh", - "rn": "run", - "ro": "ron", - "ru": "rus", - "sa": "san", - "sc": "srd", - "sd": "snd", - "se": "sme", - "sm": "smo", - "sg": "sag", - "sr": "srp", - "gd": "gla", - "sn": "sna", - "si": "sin", - "sk": "slk", - "sl": "slv", - "so": "som", - "st": "sot", - "es": "spa", - "su": "sun", - "sw": "swa", - "ss": "ssw", - "sv": "swe", - "ta": "tam", - "te": "tel", - "tg": "tgk", - "th": "tha", - "ti": "tir", - "bo": "bod", - "tk": "tuk", - "tl": "tgl", - "tn": "tsn", - "to": "ton", - "tr": "tur", - "ts": "tso", - "tt": "tat", - "tw": "twi", - "ty": "tah", - "ug": "uig", - "uk": "ukr", - "ur": "urd", - "uz": "uzb", - "ve": "ven", - "vi": "vie", - "vo": "vol", - "wa": "wln", - "cy": "cym", - "wo": "wol", - "fy": "fry", - "xh": "xho", - "yi": "yid", - "yo": "yor", - "za": "zha", - "zu": "zul" -}; - -// the list below is originally from https://unicode.org/iso15924/iso15924-codes.html -Locale.iso15924 = [ - "Adlm", - "Afak", - "Aghb", - "Ahom", - "Arab", - "Aran", - "Armi", - "Armn", - "Avst", - "Bali", - "Bamu", - "Bass", - "Batk", - "Beng", - "Bhks", - "Blis", - "Bopo", - "Brah", - "Brai", - "Bugi", - "Buhd", - "Cakm", - "Cans", - "Cari", - "Cham", - "Cher", - "Chrs", - "Cirt", - "Copt", - "Cpmn", - "Cprt", - "Cyrl", - "Cyrs", - "Deva", - "Diak", - "Dogr", - "Dsrt", - "Dupl", - "Egyd", - "Egyh", - "Egyp", - "Elba", - "Elym", - "Ethi", - "Geok", - "Geor", - "Glag", - "Gong", - "Gonm", - "Goth", - "Gran", - "Grek", - "Gujr", - "Guru", - "Hanb", - "Hang", - "Hani", - "Hano", - "Hans", - "Hant", - "Hatr", - "Hebr", - "Hira", - "Hluw", - "Hmng", - "Hmnp", - "Hrkt", - "Hung", - "Inds", - "Ital", - "Jamo", - "Java", - "Jpan", - "Jurc", - "Kali", - "Kana", - "Khar", - "Khmr", - "Khoj", - "Kitl", - "Kits", - "Knda", - "Kore", - "Kpel", - "Kthi", - "Lana", - "Laoo", - "Latf", - "Latg", - "Latn", - "Leke", - "Lepc", - "Limb", - "Lina", - "Linb", - "Lisu", - "Loma", - "Lyci", - "Lydi", - "Mahj", - "Maka", - "Mand", - "Mani", - "Marc", - "Maya", - "Medf", - "Mend", - "Merc", - "Mero", - "Mlym", - "Modi", - "Mong", - "Moon", - "Mroo", - "Mtei", - "Mult", - "Mymr", - "Nand", - "Narb", - "Nbat", - "Newa", - "Nkdb", - "Nkgb", - "Nkoo", - "Nshu", - "Ogam", - "Olck", - "Orkh", - "Orya", - "Osge", - "Osma", - "Palm", - "Pauc", - "Perm", - "Phag", - "Phli", - "Phlp", - "Phlv", - "Phnx", - "Plrd", - "Piqd", - "Prti", - "Qaaa", - "Qabx", - "Rjng", - "Rohg", - "Roro", - "Runr", - "Samr", - "Sara", - "Sarb", - "Saur", - "Sgnw", - "Shaw", - "Shrd", - "Shui", - "Sidd", - "Sind", - "Sinh", - "Sogd", - "Sogo", - "Sora", - "Soyo", - "Sund", - "Sylo", - "Syrc", - "Syre", - "Syrj", - "Syrn", - "Tagb", - "Takr", - "Tale", - "Talu", - "Taml", - "Tang", - "Tavt", - "Telu", - "Teng", - "Tfng", - "Tglg", - "Thaa", - "Thai", - "Tibt", - "Tirh", - "Toto", - "Ugar", - "Vaii", - "Visp", - "Wara", - "Wcho", - "Wole", - "Xpeo", - "Xsux", - "Yezi", - "Yiii", - "Zanb", - "Zinh", - "Zmth", - "Zsye", - "Zsym", - "Zxxx", - "Zyyy", - "Zzzz", -]; - -/** - * Tell whether or not the str does not start with a lower case ASCII char. - * @private - * @param {string} str the char to check - * @return {boolean} true if the char is not a lower case ASCII char - */ -Locale._notLower = function(str) { - // do this with ASCII only so we don't have to depend on the CType functions - var ch = str.charCodeAt(0); - return ch < 97 || ch > 122; -}; - -/** - * Tell whether or not the str does not start with an upper case ASCII char. - * @private - * @param {string} str the char to check - * @return {boolean} true if the char is a not an upper case ASCII char - */ -Locale._notUpper = function(str) { - // do this with ASCII only so we don't have to depend on the CType functions - var ch = str.charCodeAt(0); - return ch < 65 || ch > 90; -}; - -/** - * Tell whether or not the str does not start with a digit char. - * @private - * @param {string} str the char to check - * @return {boolean} true if the char is a not an upper case ASCII char - */ -Locale._notDigit = function(str) { - // do this with ASCII only so we don't have to depend on the CType functions - var ch = str.charCodeAt(0); - return ch < 48 || ch > 57; -}; - -/** - * Tell whether or not the given string has the correct syntax to be - * an ISO 639 language code. - * - * @private - * @param {string} str the string to parse - * @return {boolean} true if the string could syntactically be a language code. - */ -Locale._isLanguageCode = function(str) { - if (typeof(str) === 'undefined' || str.length < 2 || str.length > 3) { - return false; - } - - for (var i = 0; i < str.length; i++) { - if (Locale._notLower(str.charAt(i))) { - return false; - } - } - - return true; -}; - -/** - * Tell whether or not the given string has the correct syntax to be - * an ISO 3166 2-letter region code or M.49 3-digit region code. - * - * @private - * @param {string} str the string to parse - * @return {boolean} true if the string could syntactically be a language code. - */ -Locale._isRegionCode = function (str) { - var i; - - if (typeof(str) === 'undefined' || str.length < 2 || str.length > 3) { - return false; - } - - if (str.length === 2) { - for (i = 0; i < str.length; i++) { - if (Locale._notUpper(str.charAt(i))) { - return false; - } - } - } else { - for (i = 0; i < str.length; i++) { - if (Locale._notDigit(str.charAt(i))) { - return false; - } - } - } - - return true; -}; - -/** - * Tell whether or not the given string has the correct syntax to be - * an ISO 639 language code. - * - * @private - * @param {string} str the string to parse - * @return {boolean} true if the string could syntactically be a language code. - */ -Locale._isScriptCode = function(str) { - if (typeof(str) === 'undefined' || str.length !== 4 || Locale._notUpper(str.charAt(0))) { - return false; - } - - for (var i = 1; i < 4; i++) { - if (Locale._notLower(str.charAt(i))) { - return false; - } - } - - return true; -}; - -/** - * Return the ISO-3166 alpha3 equivalent region code for the given ISO 3166 alpha2 - * region code. If the given alpha2 code is not found, this function returns its - * argument unchanged. - * @static - * @param {string|undefined} alpha2 the alpha2 code to map - * @return {string|undefined} the alpha3 equivalent of the given alpha2 code, or the alpha2 - * parameter if the alpha2 value is not found - */ -Locale.regionAlpha2ToAlpha3 = function(alpha2) { - return Locale.a2toa3regmap[alpha2] || alpha2; -}; - -/** - * Return the ISO-639 alpha3 equivalent language code for the given ISO 639 alpha1 - * language code. If the given alpha1 code is not found, this function returns its - * argument unchanged. - * @static - * @param {string|undefined} alpha1 the alpha1 code to map - * @return {string|undefined} the alpha3 equivalent of the given alpha1 code, or the alpha1 - * parameter if the alpha1 value is not found - */ -Locale.languageAlpha1ToAlpha3 = function(alpha1) { - return Locale.a1toa3langmap[alpha1] || alpha1; -}; - -Locale.prototype = { - /** - * @private - */ - _genSpec: function () { - this.spec = this.language || ""; - - if (this.script) { - if (this.spec.length > 0) { - this.spec += "-"; - } - this.spec += this.script; - } - - if (this.region) { - if (this.spec.length > 0) { - this.spec += "-"; - } - this.spec += this.region; - } - - if (this.variant) { - if (this.spec.length > 0) { - this.spec += "-"; - } - this.spec += this.variant; - } - }, - - /** - * Return the ISO 639 language code for this locale. - * @return {string|undefined} the language code for this locale - */ - getLanguage: function() { - return this.language; - }, - - /** - * Return the language of this locale as an ISO-639-alpha3 language code - * @return {string|undefined} the alpha3 language code of this locale - */ - getLanguageAlpha3: function() { - return Locale.languageAlpha1ToAlpha3(this.language); - }, - - /** - * Return the ISO 3166 region code for this locale. - * @return {string|undefined} the region code of this locale - */ - getRegion: function() { - return this.region; - }, - - /** - * Return the region of this locale as an ISO-3166-alpha3 region code - * @return {string|undefined} the alpha3 region code of this locale - */ - getRegionAlpha3: function() { - return Locale.regionAlpha2ToAlpha3(this.region); - }, - - /** - * Return the ISO 15924 script code for this locale - * @return {string|undefined} the script code of this locale - */ - getScript: function () { - return this.script; - }, - - /** - * Return the variant code for this locale - * @return {string|undefined} the variant code of this locale, if any - */ - getVariant: function() { - return this.variant; - }, - - /** - * Return the whole locale specifier as a string. - * @return {string} the locale specifier - */ - getSpec: function() { - if (!this.spec) this._genSpec(); - return this.spec; - }, - - /** - * Return the language locale specifier. This includes the - * language and the script if it is available. This can be - * used to see whether the written language of two locales - * match each other regardless of the region or variant. - * - * @return {string} the language locale specifier - */ - getLangSpec: function() { - var spec = this.language; - if (spec && this.script) { - spec += "-" + this.script; - } - return spec || ""; - }, - - /** - * Express this locale object as a string. Currently, this simply calls the getSpec - * function to represent the locale as its specifier. - * - * @return {string} the locale specifier - */ - toString: function() { - return this.getSpec(); - }, - - /** - * Return true if the the other locale is exactly equal to the current one. - * @return {boolean} whether or not the other locale is equal to the current one - */ - equals: function(other) { - return this.language === other.language && - this.region === other.region && - this.script === other.script && - this.variant === other.variant; - }, - - /** - * Return true if the current locale is the special pseudo locale. - * @return {boolean} true if the current locale is the special pseudo locale - */ - isPseudo: function () { - return JSUtils.indexOf(ilib.pseudoLocales, this.spec) > -1; - }, - - /** - * Return true if the current locale uses a valid ISO codes for each component - * of the locale that exists. - * @return {boolean} true if the current locale has all valid components, and - * false otherwise. - */ - isValid: function() { - if (!this.language && !this.script && !this.region) return false; - - return !!((!this.language || (Locale._isLanguageCode(this.language) && Locale.a1toa3langmap[this.language])) && - (!this.script || (Locale._isScriptCode(this.script) && Locale.iso15924.indexOf(this.script) > -1)) && - (!this.region || (Locale._isRegionCode(this.region) && Locale.a2toa3regmap[this.region]))); - } -}; - -// static functions -/** - * @private - */ -Locale.locales = []; -// !macro localelist - -/** - * Return the list of available locales that this iLib file supports. - * If this copy of ilib is pre-assembled with locale data, then the - * list locales may be much smaller - * than the list of all available locales in the iLib repository. The - * assembly tool will automatically fill in the list for an assembled - * copy of iLib. If this copy is being used with dynamically loaded - * data, then you - * can load any locale that iLib supports. You can form a locale with any - * combination of a language and region tags that exist in the locale - * data directory. Language tags are in the root of the locale data dir, - * and region tags can be found underneath the "und" directory. (The - * region tags are separated into a different dir because the region names - * conflict with language names on file systems that are case-insensitive.) - * If you have culled the locale data directory to limit the size of - * your app, then this function should return only those files that actually exist - * according to the ilibmanifest.json file in the root of that locale - * data dir. Make sure your ilibmanifest.json file is up-to-date with - * respect to the list of files that exist in the locale data dir. - * - * @param {boolean} sync if false, load the list of available files from disk - * asynchronously, otherwise load them synchronously. (Default: true/synchronously) - * @param {Function} onLoad a callback function to call if asynchronous - * load was requested and the list of files have been loaded. - * @return {Array.} this is an array of locale specs for which - * this iLib file has locale data for - */ -Locale.getAvailableLocales = function (sync, onLoad) { - var locales = []; - if (Locale.locales.length || typeof(ilib._load.listAvailableFiles) !== 'function') { - locales = Locale.locales; - if (onLoad && typeof(onLoad) === 'function') { - onLoad(locales); - } - } else { - if (typeof(sync) === 'undefined') { - sync = true; - } - ilib._load.listAvailableFiles(sync, function(manifest) { - if (manifest) { - for (var dir in manifest) { - var filelist = manifest[dir]; - for (var i = 0; i < filelist.length; i++) { - if (filelist[i].length > 15 && filelist[i].substr(-15) === "localeinfo.json") { - locales.push(filelist[i].substring(0,filelist[i].length-16).replace(/\//g, "-")); - } - } - } - } - if (onLoad && typeof(onLoad) === 'function') { - onLoad(locales); - } - }); - } - return locales; -}; - - -/* - * LocaleInfo.js - Encode locale-specific defaults - * - * Copyright © 2012-2015, 2018, 2021 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data localeinfo - - - - - - -/** - * @class - * Create a new locale info instance. Locale info instances give information about - * the default settings for a particular locale. These settings may be overridden - * by various parts of the code, and should be used as a fall-back setting of last - * resort.

    - * - * The optional options object holds extra parameters if they are necessary. The - * current list of supported options are: - * - *

      - *
    • onLoad - a callback function to call when the locale info object is fully - * loaded. When the onLoad option is given, the localeinfo object will attempt to - * load any missing locale data using the ilib loader callback. - * When the constructor is done (even if the data is already preassembled), the - * onLoad function is called with the current instance as a parameter, so this - * callback can be used with preassembled or dynamic loading or a mix of the two. - * - *
    • sync - tell whether to load any missing locale data synchronously or - * asynchronously. If this option is given as "false", then the "onLoad" - * callback must be given, as the instance returned from this constructor will - * not be usable for a while. - * - *
    • loadParams - an object containing parameters to pass to the - * loader callback function when locale data is missing. The parameters are not - * interpretted or modified in any way. They are simply passed along. The object - * may contain any property/value pairs as long as the calling code is in - * agreement with the loader callback function as to what those parameters mean. - *
    - * - * If this copy of ilib is pre-assembled and all the data is already available, - * or if the data was already previously loaded, then this constructor will call - * the onLoad callback immediately when the initialization is done. - * If the onLoad option is not given, this class will only attempt to load any - * missing locale data synchronously. - * - * - * @constructor - * @see {ilib.setLoaderCallback} for information about registering a loader callback - * function - * @param {Locale|string=} locale the locale for which the info is sought, or undefined for - * @param {Object=} options the locale for which the info is sought, or undefined for - * the current locale - */ -var LocaleInfo = function(locale, options) { - var sync = true, - loadParams = undefined; - - /** - @private - @type {{ - calendar:string, - clock:string, - currency:string, - delimiter: {quotationStart:string,quotationEnd:string,alternateQuotationStart:string,alternateQuotationEnd:string}, - firstDayOfWeek:number, - meridiems:string, - numfmt:{ - currencyFormats:{common:string,commonNegative:string,iso:string,isoNegative:string}, - decimalChar:string, - exponential:string, - groupChar:string, - negativenumFmt:string, - negativepctFmt:string, - pctChar:string, - pctFmt:string, - prigroupSize:number, - roundingMode:string, - script:string, - secgroupSize:number, - useNative:boolean - }, - timezone:string, - units:string, - weekendEnd:number, - weekendStart:number, - paperSizes:{regular:string} - }} - */ - this.info = LocaleInfo.defaultInfo; - - switch (typeof(locale)) { - case "string": - this.locale = new Locale(locale); - break; - default: - case "undefined": - this.locale = new Locale(); - break; - case "object": - this.locale = locale; - break; - } - var manipulateLocale = ["pa-PK", "ha-CM", "ha-SD"]; - - if (manipulateLocale.indexOf(this.locale.getSpec()) != -1) { - new LocaleMatcher({ - locale: this.locale.getSpec(), - sync:sync, - loadParams:loadParams, - onLoad: ilib.bind(this, function(lm){ - this.locale = new Locale(lm.getLikelyLocale()); - }) - }) - } - - if (options) { - if (typeof(options.sync) !== 'undefined') { - sync = !!options.sync; - } - - if (typeof(options.loadParams) !== 'undefined') { - loadParams = options.loadParams; - } - } - - Utils.loadData({ - object: "LocaleInfo", - locale: this.locale, - name: "localeinfo.json", - sync: sync, - loadParams: loadParams, - callback: ilib.bind(this, function (info) { - this.info = info || LocaleInfo.defaultInfo; - if (options && typeof(options.onLoad) === 'function') { - options.onLoad(this); - } - }) - }); -}; - -LocaleInfo.defaultInfo = ilib.data.localeinfo; -LocaleInfo.defaultInfo = LocaleInfo.defaultInfo || { - "calendar": "gregorian", - "clock": "24", - "currency": "USD", - "delimiter": { - "quotationStart": "“", - "quotationEnd": "”", - "alternateQuotationStart": "‘", - "alternateQuotationEnd": "’" - }, - "firstDayOfWeek": 1, - "meridiems": "gregorian", - "numfmt": { - "script": "Latn", - "decimalChar": ".", - "groupChar": ",", - "pctChar": "%", - "exponential": "E", - "prigroupSize": 3, - "currencyFormats": { - "common": "{s} {n}", - "commonNegative": "-{s} {n}", - "iso": "{s} {n}", - "isoNegative": "({s} {n})" - }, - "negativenumFmt": "-{n}", - "pctFmt": "{n}%", - "negativepctFmt": "-{n}%", - "roundingMode": "halfdown", - "secGroupSize": null, - "useNative": false - }, - "paperSizes": { - "regular": "A4" - }, - "timezone": "Etc/UTC", - "units": "metric", - "weekendEnd": 0, - "weekendStart": 6 -}; - -LocaleInfo.prototype = { - /** - * Return the name of the locale's language in English. - * @returns {string} the name of the locale's language in English - */ - getLanguageName: function () { - return this.info["language.name"]; - }, - - /** - * Return the name of the locale's region in English. If the locale - * has no region, this returns undefined. - * - * @returns {string|undefined} the name of the locale's region in English - */ - getRegionName: function () { - return this.info["region.name"]; - }, - - /** - * Return whether this locale commonly uses the 12- or the 24-hour clock. - * - * @returns {string} "12" if the locale commonly uses a 12-hour clock, or "24" - * if the locale commonly uses a 24-hour clock. - */ - getClock: function() { - return this.info.clock; - }, - - /** - * Return the locale that this info object was created with. - * @returns {Locale} The locale spec of the locale used to construct this info instance - */ - getLocale: function () { - return this.locale; - }, - - /** - * Return the name of the measuring system that is commonly used in the given locale. - * Valid values are "uscustomary", "imperial", and "metric". - * - * @returns {string} The name of the measuring system commonly used in the locale - */ - getUnits: function () { - return this.info.units; - }, - - /** - * Return the name of the calendar that is commonly used in the given locale. - * - * @returns {string} The name of the calendar commonly used in the locale - */ - getCalendar: function () { - return this.info.calendar; - }, - - /** - * Return the day of week that starts weeks in the current locale. Days are still - * numbered the standard way with 0 for Sunday through 6 for Saturday, but calendars - * should be displayed and weeks calculated with the day of week returned from this - * function as the first day of the week. - * - * @returns {number} the day of the week that starts weeks in the current locale. - */ - getFirstDayOfWeek: function () { - return this.info.firstDayOfWeek; - }, - - /** - * Return the day of week that starts weekend in the current locale. Days are still - * numbered the standard way with 0 for Sunday through 6 for Saturday. - * - * @returns {number} the day of the week that starts weeks in the current locale. - */ - getWeekEndStart: function () { - return this.info.weekendStart; - }, - - /** - * Return the day of week that starts weekend in the current locale. Days are still - * numbered the standard way with 0 for Sunday through 6 for Saturday. - * - * @returns {number} the day of the week that starts weeks in the current locale. - */ - getWeekEndEnd: function () { - return this.info.weekendEnd; - }, - - /** - * Return the default time zone for this locale. Many locales span across multiple - * time zones. In this case, the time zone with the largest population is chosen - * to represent the locale. This is obviously not that accurate, but then again, - * this method's return value should only be used as a default anyways. - * @returns {string} the default time zone for this locale. - */ - getTimeZone: function () { - return this.info.timezone; - }, - - /** - * Return the decimal separator for formatted numbers in this locale. - * @returns {string} the decimal separator char - */ - getDecimalSeparator: function () { - return this.info.numfmt.decimalChar; - }, - - /** - * Return the decimal separator for formatted numbers in this locale for native script. - * @returns {string} the decimal separator char - */ - getNativeDecimalSeparator: function () { - return (this.info.native_numfmt && this.info.native_numfmt.decimalChar) || this.info.numfmt.decimalChar; - }, - - /** - * Return the separator character used to separate groups of digits on the - * integer side of the decimal character. - * @returns {string} the grouping separator char - */ - getGroupingSeparator: function () { - return this.info.numfmt.groupChar; - }, - - /** - * Return the separator character used to separate groups of digits on the - * integer side of the decimal character for the native script if present other than the default script. - * @returns {string} the grouping separator char - */ - getNativeGroupingSeparator: function () { - return (this.info.native_numfmt && this.info.native_numfmt.groupChar) || this.info.numfmt.groupChar; - }, - - /** - * Return the minimum number of digits grouped together on the integer side - * for the first (primary) group. - * In western European cultures, groupings are in 1000s, so the number of digits - * is 3. - * @returns {number} the number of digits in a primary grouping, or 0 for no grouping - */ - getPrimaryGroupingDigits: function () { - return (typeof(this.info.numfmt.prigroupSize) !== 'undefined' && this.info.numfmt.prigroupSize) || 0; - }, - - /** - * Return the minimum number of digits grouped together on the integer side - * for the second or more (secondary) group.

    - * - * In western European cultures, all groupings are by 1000s, so the secondary - * size should be 0 because there is no secondary size. In general, if this - * method returns 0, then all groupings are of the primary size.

    - * - * For some other cultures, the first grouping (primary) - * is 3 and any subsequent groupings (secondary) are two. So, 100000 would be - * written as: "1,00,000". - * - * @returns {number} the number of digits in a secondary grouping, or 0 for no - * secondary grouping. - */ - getSecondaryGroupingDigits: function () { - return this.info.numfmt.secgroupSize || 0; - }, - - /** - * Return the format template used to format percentages in this locale. - * @returns {string} the format template for formatting percentages - */ - getPercentageFormat: function () { - return this.info.numfmt.pctFmt; - }, - - /** - * Return the format template used to format percentages in this locale - * with negative amounts. - * @returns {string} the format template for formatting percentages - */ - getNegativePercentageFormat: function () { - return this.info.numfmt.negativepctFmt; - }, - - /** - * Return the symbol used for percentages in this locale. - * @returns {string} the symbol used for percentages in this locale - */ - getPercentageSymbol: function () { - return this.info.numfmt.pctChar || "%"; - }, - - /** - * Return the symbol used for exponential in this locale. - * @returns {string} the symbol used for exponential in this locale - */ - getExponential: function () { - return this.info.numfmt.exponential; - }, - - /** - * Return the symbol used for exponential in this locale for native script. - * @returns {string} the symbol used for exponential in this locale for native script - */ - getNativeExponential: function () { - return (this.info.native_numfmt && this.info.native_numfmt.exponential) || this.info.numfmt.exponential; - }, - - /** - * Return the symbol used for percentages in this locale for native script. - * @returns {string} the symbol used for percentages in this locale for native script - */ - getNativePercentageSymbol: function () { - return (this.info.native_numfmt && this.info.native_numfmt.pctChar) || this.info.numfmt.pctChar || "%"; - - }, - /** - * Return the format template used to format negative numbers in this locale. - * @returns {string} the format template for formatting negative numbers - */ - getNegativeNumberFormat: function () { - return this.info.numfmt.negativenumFmt; - }, - - /** - * Return an object containing the format templates for formatting currencies - * in this locale. The object has a number of properties in it that each are - * a particular style of format. Normally, this contains a "common" and an "iso" - * style, but may contain others in the future. - * @returns {Object} an object containing the format templates for currencies - */ - getCurrencyFormats: function () { - return this.info.numfmt.currencyFormats; - }, - - /** - * Return the currency that is legal in the locale, or which is most commonly - * used in regular commerce. - * @returns {string} the ISO 4217 code for the currency of this locale - */ - getCurrency: function () { - return this.info.currency; - }, - - /** - * Return a string that describes the style of digits used by this locale. - * Possible return values are: - *

      - *
    • western - uses the regular western 10-based digits 0 through 9 - *
    • optional - native 10-based digits exist, but in modern usage, - * this locale most often uses western digits - *
    • native - native 10-based native digits exist and are used - * regularly by this locale - *
    • custom - uses native digits by default that are not 10-based - *
    - * @returns {string} string that describes the style of digits used in this locale - */ - getDigitsStyle: function () { - if (this.info.numfmt && this.info.numfmt.useNative) { - return "native"; - } - if (typeof(this.info.native_numfmt) !== 'undefined') { - return "optional"; - } - return "western"; - }, - - /** - * Return the digits of the default script if they are defined. - * If not defined, the default should be the regular "Arabic numerals" - * used in the Latin script. (0-9) - * @returns {string|undefined} the digits used in the default script - */ - getDigits: function () { - return this.info.numfmt.digits; - }, - - /** - * Return the digits of the native script if they are defined. - * @returns {string|undefined} the digits used in the default script - */ - getNativeDigits: function () { - return (this.info.numfmt.useNative && this.info.numfmt.digits) || (this.info.native_numfmt && this.info.native_numfmt.digits); - }, - - /** - * If this locale typically uses a different type of rounding for numeric - * formatting other than halfdown, especially for currency, then it can be - * specified in the localeinfo. If the locale uses the default, then this - * method returns undefined. The locale's rounding method overrides the - * rounding method for the currency itself, which can sometimes shared - * between various locales so it is less specific. - * @returns {string} the name of the rounding mode typically used in this - * locale, or "halfdown" if the locale does not override the default - */ - getRoundingMode: function () { - return this.info.numfmt.roundingMode; - }, - - /** - * Return the default script used to write text in the language of this - * locale. Text for most languages is written in only one script, but there - * are some languages where the text can be written in a number of scripts, - * depending on a variety of things such as the region, ethnicity, religion, - * etc. of the author. This method returns the default script for the - * locale, in which the language is most commonly written.

    - * - * The script is returned as an ISO 15924 4-letter code. - * - * @returns {string} the ISO 15924 code for the default script used to write - * text in this locale - */ - getDefaultScript: function() { - return (this.info.scripts) ? this.info.scripts[0] : "Latn"; - }, - - /** - * Return the script used for the current locale. If the current locale - * explicitly defines a script, then this script is returned. If not, then - * the default script for the locale is returned. - * - * @see LocaleInfo.getDefaultScript - * @returns {string} the ISO 15924 code for the script used to write - * text in this locale - */ - getScript: function() { - return this.locale.getScript() || this.getDefaultScript(); - }, - - /** - * Return an array of script codes which are used to write text in the current - * language. Text for most languages is written in only one script, but there - * are some languages where the text can be written in a number of scripts, - * depending on a variety of things such as the region, ethnicity, religion, - * etc. of the author. This method returns an array of script codes in which - * the language is commonly written. - * - * @returns {Array.} an array of ISO 15924 codes for the scripts used - * to write text in this language - */ - getAllScripts: function() { - return this.info.scripts || ["Latn"]; - }, - - /** - * Return the default style of meridiems used in this locale. Meridiems are - * times of day like AM/PM. In a few locales with some calendars, for example - * Amharic/Ethiopia using the Ethiopic calendar, the times of day may be - * split into different segments than simple AM/PM as in the Gregorian - * calendar. Only a few locales are like that. For most locales, formatting - * a Gregorian date will use the regular Gregorian AM/PM meridiems. - * - * @returns {string} the default meridiems style used in this locale. Possible - * values are "gregorian", "chinese", and "ethiopic" - */ - getMeridiemsStyle: function () { - return this.info.meridiems || "gregorian"; - }, - /** - * Return the default PaperSize information in this locale. - * @returns {string} default PaperSize in this locale - */ - getPaperSize: function () { - return this.info.paperSizes.regular; - }, - /** - * Return the default Delimiter QuotationStart information in this locale. - * @returns {string} default QuotationStart in this locale - */ - getDelimiterQuotationStart: function () { - return this.info.delimiter.quotationStart; - }, - /** - * Return the default Delimiter QuotationEnd information in this locale. - * @returns {string} default QuotationEnd in this locale - */ - getDelimiterQuotationEnd: function () { - return this.info.delimiter.quotationEnd; - } -}; - - -/* - * ScriptInfo.js - information about scripts - * - * Copyright © 2012-2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data scripts - - - - -/** - * @class - * Create a new script info instance. This class encodes information about - * scripts, which are sets of characters used in a writing system.

    - * - * The options object may contain any of the following properties: - * - *

      - *
    • onLoad - a callback function to call when the script info object is fully - * loaded. When the onLoad option is given, the script info object will attempt to - * load any missing locale data using the ilib loader callback. - * When the constructor is done (even if the data is already preassembled), the - * onLoad function is called with the current instance as a parameter, so this - * callback can be used with preassembled or dynamic loading or a mix of the two. - * - *
    • sync - tell whether to load any missing locale data synchronously or - * asynchronously. If this option is given as "false", then the "onLoad" - * callback must be given, as the instance returned from this constructor will - * not be usable for a while. - * - *
    • loadParams - an object containing parameters to pass to the - * loader callback function when locale data is missing. The parameters are not - * interpretted or modified in any way. They are simply passed along. The object - * may contain any property/value pairs as long as the calling code is in - * agreement with the loader callback function as to what those parameters mean. - *
    - * - * - * @constructor - * @param {string} script The ISO 15924 4-letter identifier for the script - * @param {Object=} options parameters to initialize this instance - */ -var ScriptInfo = function(script, options) { - var sync = true, - loadParams = undefined; - - this.script = script; - - if (options) { - if (typeof(options.sync) !== 'undefined') { - sync = !!options.sync; - } - - if (typeof(options.loadParams) !== 'undefined') { - loadParams = options.loadParams; - } - } - - if (!ilib.data.scripts) { - Utils.loadData({ - object: "ScriptInfo", - nonlocale: true, - name: "scripts.json", - sync: sync, - loadParams: loadParams, - callback: ilib.bind(this, function (info) { - if (!info) { - info = {"Latn":{"nb":215,"nm":"Latin","lid":"Latin","rtl":false,"ime":false,"casing":true}}; - } - ilib.data.scripts = info; - this.info = script && ilib.data.scripts[script]; - if (options && typeof(options.onLoad) === 'function') { - options.onLoad(this); - } - }) - }); - } else { - this.info = ilib.data.scripts[script]; - if (options && typeof(options.onLoad) === 'function') { - options.onLoad(this); - } - } -}; - -/** - * @private - */ -ScriptInfo._getScriptsArray = function() { - var ret = [], - script = undefined, - scripts = ilib.data.scripts; - - for (script in scripts) { - if (script && scripts[script]) { - ret.push(script); - } - } - - return ret; -}; - -/** - * Return an array of all ISO 15924 4-letter identifier script identifiers that - * this copy of ilib knows about. - * @static - * @param {boolean} sync whether to find the available ids synchronously (true) or asynchronously (false) - * @param {Object} loadParams arbitrary object full of properties to pass to the loader - * @param {function(Array.)} onLoad callback function to call when the data is finished loading - * @return {Array.} an array of all script identifiers that this copy of - * ilib knows about - */ -ScriptInfo.getAllScripts = function(sync, loadParams, onLoad) { - if (!ilib.data.scripts) { - Utils.loadData({ - object: "ScriptInfo", - locale: "-", - name: "scripts.json", - sync: sync, - loadParams: loadParams, - callback: ilib.bind(this, function (info) { - ilib.data.scripts = info; - - if (typeof(onLoad) === 'function') { - onLoad(ScriptInfo._getScriptsArray()); - } - }) - }); - } else { - if (typeof(onLoad) === 'function') { - onLoad(ScriptInfo._getScriptsArray()); - } - } - - return ScriptInfo._getScriptsArray(); -}; - -ScriptInfo.prototype = { - /** - * Return the 4-letter ISO 15924 identifier associated - * with this script. - * @return {string} the 4-letter ISO code for this script - */ - getCode: function () { - return this.info && this.script; - }, - - /** - * Get the ISO 15924 code number associated with this - * script. - * - * @return {number} the ISO 15924 code number - */ - getCodeNumber: function () { - return this.info && this.info.nb || 0; - }, - - /** - * Get the name of this script in English. - * - * @return {string} the name of this script in English - */ - getName: function () { - return this.info && this.info.nm; - }, - - /** - * Get the long identifier assciated with this script. - * - * @return {string} the long identifier of this script - */ - getLongCode: function () { - return this.info && this.info.lid; - }, - - /** - * Return the usual direction that text in this script is written - * in. Possible return values are "rtl" for right-to-left, - * "ltr" for left-to-right, and "ttb" for top-to-bottom. - * - * @return {string} the usual direction that text in this script is - * written in - */ - getScriptDirection: function() { - return (this.info && typeof(this.info.rtl) !== 'undefined' && this.info.rtl) ? "rtl" : "ltr"; - }, - - /** - * Return true if this script typically requires an input method engine - * to enter its characters. - * - * @return {boolean} true if this script typically requires an IME - */ - getNeedsIME: function () { - return this.info && this.info.ime ? true : false; // converts undefined to false - }, - - /** - * Return true if this script uses lower- and upper-case characters. - * - * @return {boolean} true if this script uses letter case - */ - getCasing: function () { - return this.info && this.info.casing ? true : false; // converts undefined to false - } -}; - -/* - * LocaleMatcher.js - Locale matcher definition - * - * Copyright © 2013-2015, 2018-2019, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data localematch - - - - - -var componentWeights = [ - 0.5, // language - 0.2, // script - 0.25, // region - 0.05 // variant -]; - -// these are languages where you have to put the script all the time, -// as none of the scripts are default for the language -var multiScriptLanguages = { - "az": true, // Azerbaijani - "kk": true, // Kazakh - "ku": true, // Kurdish - "ky": true, // Kyrgyz - "pa": true, // Panjabi - "sr": true, // Serbian - "tg": true, // Tajik - "uz": true, // Uzbek - "zh": true // Chinese -}; - -/** - * @class - * Create a new locale matcher instance. This is used - * to see which locales can be matched with each other in - * various ways.

    - * - * The options object may contain any of the following properties: - * - *

      - *
    • locale - the locale instance or locale spec to match - * - *
    • onLoad - a callback function to call when the locale matcher object is fully - * loaded. When the onLoad option is given, the locale matcher object will attempt to - * load any missing locale data using the ilib loader callback. - * When the constructor is done (even if the data is already preassembled), the - * onLoad function is called with the current instance as a parameter, so this - * callback can be used with preassembled or dynamic loading or a mix of the two. - * - *
    • sync - tell whether to load any missing locale data synchronously or - * asynchronously. If this option is given as "false", then the "onLoad" - * callback must be given, as the instance returned from this constructor will - * not be usable for a while. - * - *
    • loadParams - an object containing parameters to pass to the - * loader callback function when locale data is missing. The parameters are not - * interpretted or modified in any way. They are simply passed along. The object - * may contain any property/value pairs as long as the calling code is in - * agreement with the loader callback function as to what those parameters mean. - *
    - * - * - * @constructor - * @param {Object} options parameters to initialize this matcher - */ -var LocaleMatcher = function(options) { - var sync = true, - loadParams = undefined; - - this.locale = new Locale(); - - if (options) { - if (typeof(options.locale) !== 'undefined') { - this.locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; - } - - if (typeof(options.sync) !== 'undefined') { - sync = !!options.sync; - } - - if (typeof(options.loadParams) !== 'undefined') { - loadParams = options.loadParams; - } - } - - if (typeof(ilib.data.localematch) === 'undefined') { - Utils.loadData({ - object: "LocaleMatcher", - locale: "-", - name: "localematch.json", - sync: sync, - loadParams: loadParams, - callback: ilib.bind(this, function (info) { - if (!info) { - info = {}; - } - /** @type {Object.} */ - this.info = info; - if (options && typeof(options.onLoad) === 'function') { - options.onLoad(this); - } - }) - }); - } else { - this.info = ilib.data.localematch; - if (options && typeof(options.onLoad) === 'function') { - options.onLoad(this); - } - } -}; - - -LocaleMatcher.prototype = { - /** - * Return the locale used to construct this instance. - * @return {Locale|undefined} the locale for this matcher - */ - getLocale: function() { - return this.locale; - }, - - /** - * Do the work - * @private - */ - _getLikelyLocale: function(locale) { - // already full specified - if (locale.language && locale.script && locale.region) return locale; - - if (typeof(this.info.likelyLocales[locale.getSpec()]) === 'undefined') { - // try various partials before giving up - var partial = this.info.likelyLocales[new Locale(locale.language, undefined, locale.region).getSpec()]; - if (typeof(partial) !== 'undefined') return new Locale(partial); - - partial = this.info.likelyLocales[new Locale(locale.language, locale.script, undefined).getSpec()]; - if (typeof(partial) !== 'undefined') return new Locale(partial); - - partial = this.info.likelyLocales[new Locale(locale.language, undefined, undefined).getSpec()]; - if (typeof(partial) !== 'undefined') return new Locale(partial); - - partial = this.info.likelyLocales[new Locale(undefined, locale.script, locale.region).getSpec()]; - if (typeof(partial) !== 'undefined') return new Locale(partial); - - partial = this.info.likelyLocales[new Locale(undefined, undefined, locale.region).getSpec()]; - if (typeof(partial) !== 'undefined') return new Locale(partial); - - partial = this.info.likelyLocales[new Locale(undefined, locale.script, undefined).getSpec()]; - if (typeof(partial) !== 'undefined') return new Locale(partial); - - return locale; - } - - return new Locale(this.info.likelyLocales[locale.getSpec()]); - }, - - /** - * Return an Locale instance that is fully specified based on partial information - * given to the constructor of this locale matcher instance. For example, if the locale - * spec given to this locale matcher instance is simply "ru" (for the Russian language), - * then it will fill in the missing region and script tags and return a locale with - * the specifier "ru-Cyrl-RU". (ie. Russian language, Cyrillic, Russian Federation). - * Any one or two of the language, script, or region parts may be left unspecified, - * and the other one or two parts will be filled in automatically. If this - * class has no information about the given locale, then the locale of this - * locale matcher instance is returned unchanged. - * - * @returns {Locale} the most likely completion of the partial locale given - * to the constructor of this locale matcher instance - */ - getLikelyLocale: function () { - return this._getLikelyLocale(this.locale); - }, - - /** - * Return an Locale instance that is specified based on partial information - * given to the constructor of this locale matcher instance but which leaves out any - * part of the locale specifier that is so common that it is understood. For example, - * if the locale - * spec given to this locale matcher instance is simply "ru" (for the Russian language), - * then it will fill in the missing region and/or script tags and return a locale with - * the specifier "ru-RU". (ie. Russian language, Russian Federation). Note that the - * default script "Cyrl" is left out because the vast majority of text written in - * Russian is written with the Cyrllic script, so that part of the locale is understood - * and is commonly left out.

    - * - * Any one or two of the language, script, or region parts may be left unspecified, - * and the other one or two parts will be filled in automatically. If this - * class has no information about the given locale, then the locale of this - * locale matcher instance is returned unchanged.

    - * - * This method returns the same information as getLikelyLocale but with the very common - * parts left out. - * - * @returns {Locale} the most likely "minimal" completion of the partial locale given - * to the constructor of this locale matcher instance where the commonly understood - * parts are left out. - */ - getLikelyLocaleMinimal: function() { - var fullLocale = this._getLikelyLocale(this.locale); - var langLocale = this._getLikelyLocale(new Locale(fullLocale.language)); - return fullLocale.script === langLocale.script && !multiScriptLanguages[fullLocale.language] ? - new Locale(fullLocale.language, undefined, fullLocale.region) : - fullLocale; - }, - - /** - * Return the degree that the given locale matches the current locale of this - * matcher. This method returns an integer from 0 to 100. A value of 100 is - * a 100% match, meaning that the two locales are exactly equivalent to each - * other. (eg. "ja-JP" and "ja-JP") A value of 0 means that there 0% match or - * that the two locales have nothing in common. (eg. "en-US" and "ja-JP")

    - * - * Locale matching is not the same as equivalence, as the degree of matching - * is returned. (See Locale.equals for equivalence.)

    - * - * The match score is calculated based on matching the 4 locale components, - * weighted by importance: - * - *

      - *
    • language - this accounts for 50% of the match score - *
    • region - accounts for 25% of the match score - *
    • script - accounts for 20% of the match score - *
    • variant - accounts for 5% of the match score - *
    - * - * The score is affected by the following things: - * - *
      - *
    • A large language score is given when the language components of the locales - * match exactly. - *
    • Higher language scores are given when the languages are linguistically - * close to each other, such as dialects. - *
    • A small score is given when two languages are in the same - * linguistic family, but one is not a dialect of the other, such as German - * and Dutch. - *
    • A large region score is given when two locales share the same region. - *
    • A smaller region score is given when one region is contained within - * another. For example, Hong Kong is part of China, so a moderate score is - * given instead of a full score. - *
    • A small score is given if two regions are geographically close to - * each other or are tied by history. For example, Ireland and Great Britain - * are both adjacent and tied by history, so they receive a moderate score. - *
    • A high script score is given if the two locales share the same script. - * The legibility of a common script means that there is some small kinship of the - * different languages. - *
    • A high variant score is given if the two locales share the same - * variant. Full score is given when both locales have no variant at all. - *
    • Locale components that are unspecified in both locales are given high - * scores. - *
    • Locales where a particular locale component is missing in only one - * locale can still match when the default for that locale component matches - * the component in the other locale. The - * default value for the missing component is determined using the likely locales - * data. (See getLikelyLocale()) For example, "en-US" and "en-Latn-US" receive - * a high script score because the default script for "en" is "Latn". - *
    - * - * The intention of this method is that it can be used to determine - * compatibility of locales. For example, when a user signs up for an - * account on a web site, the locales that the web site supports and - * the locale of the user's browser may differ, and the site needs to - * pick the best locale to show the user. Let's say the - * web site supports a selection of European languages such as "it-IT", - * "fr-FR", "de-DE", and "en-GB". The user's - * browser may be set to "it-CH". The web site code can then match "it-CH" - * against each of the supported locales to find the one with the - * highest score. In - * this case, the best match would be "it-IT" because it shares a - * language and script in common with "it-CH" and differs only in the region - * component. It is not a 100% match, but it is pretty good. The web site - * may decide if the match scores all fall - * below a chosen threshold (perhaps 50%?), it should show the user the - * default language "en-GB", because that is probably a better choice - * than any other supported locale.

    - * - * @param {Locale} locale the other locale to match against the current one - * @return {number} an integer from 0 to 100 that indicates the degree to - * which these locales match each other - */ - match: function(locale) { - var other = new Locale(locale); - var scores = [0, 0, 0, 0]; - var thisfull, otherfull, i; - - if (this.locale.language === other.language) { - scores[0] = 100; - } else { - if (!this.locale.language || !other.language) { - // check for default language - thisfull = this.getLikelyLocale(); - otherfull = new Locale(this.info.likelyLocales[other.getSpec()] || other.getSpec()); - if (thisfull.language === otherfull.language) { - scores[0] = 100; - } - } else { - // check for macro languages - var mlthis = this.info.macroLanguagesReverse[this.locale.language] || this.locale.language; - var mlother = this.info.macroLanguagesReverse[other.language] || other.language; - if (mlthis === mlother) { - scores[0] = 90; - } else { - // check for mutual intelligibility - var pair = this.locale.language + "-" + other.language; - scores[0] = this.info.mutualIntelligibility[pair] || 0; - } - } - } - - if (this.locale.script === other.script) { - scores[1] = 100; - } else { - if (!this.locale.script || !other.script) { - // check for default script - thisfull = this.locale.script ? this.locale : new Locale(this.info.likelyLocales[this.locale.language]); - otherfull = other.script ? other : new Locale(this.info.likelyLocales[other.language]); - if (thisfull.script === otherfull.script) { - scores[1] = 100; - } - } - } - - if (this.locale.region === other.region) { - scores[2] = 100; - } else { - if (!this.locale.region || !other.region) { - // check for default region - thisfull = this.getLikelyLocale(); - otherfull = new Locale(this.info.likelyLocales[other.getSpec()] || other.getSpec()); - if (thisfull.region === otherfull.region) { - scores[2] = 100; - } - } else { - // check for containment - var containers = this.info.territoryContainmentReverse[this.locale.region] || []; - // end at 1 because 0 is "001" which is "the whole world" -- which is not useful - for (i = containers.length-1; i > 0; i--) { - var container = this.info.territoryContainment[containers[i]]; - if (container && container.indexOf(other.region) > -1) { - // same area only accounts for 20% of the region score - scores[2] = ((i+1) * 100 / containers.length) * 0.2; - break; - } - } - } - } - - if (this.locale.variant === other.variant) { - scores[3] = 100; - } - - var total = 0; - - for (i = 0; i < 4; i++) { - total += scores[i] * componentWeights[i]; - } - - return Math.round(total); - }, - - /** - * Return the macrolanguage associated with this locale. If the - * locale's language is not part of a macro-language, then the - * locale's language is returned as-is. - * - * @returns {string} the ISO code for the macrolanguage associated - * with this locale, or language of the locale - */ - getMacroLanguage: function() { - return this.info.macroLanguagesReverse[this.locale.language] || this.locale.language; - }, - - /** - * Return the containment array for the given region code. - * @private - */ - _getRegionContainment: function(region) { - return this.info.territoryContainmentReverse[region] || [] - }, - - /** - * Return the list of regions that this locale is contained within. Regions are - * nested, so locales can be in multiple regions. (eg. US is in Northern North - * America, North America, the Americas, the World.) Most regions are specified - * using UN.49 region numbers, though some, like "EU", are letters. If the - * locale is underspecified, this method will use the most likely locale method - * to get the region first. For example, the locale "ja" (Japanese) is most - * likely "ja-JP" (Japanese for Japan), and the region containment info for Japan - * is returned. - * - * @returns {Array.} an array of region specifiers that this locale is within - */ - getRegionContainment: function() { - var region = this.locale.region || this.getLikelyLocale().region; - return this._getRegionContainment(region); - }, - - /** - * Find the smallest region that contains both the current locale and the other locale. - * If the current or other locales are underspecified, this method will use the most - * likely locale method - * to get their regions first. For example, the locale "ja" (Japanese) is most - * likely "ja-JP" (Japanese for Japan), and the region containment info for Japan - * is checked against the other locale's region containment info. - * - * @param {string|Locale} otherLocale a locale specifier or a Locale instance to - * compare against - * @returns {string} the region specifier of the smallest region containing both the - * current locale and other locale - */ - smallestCommonRegion: function(otherLocale) { - if (typeof(otherLocale) === "undefined") return "001"; - - var thisRegion = this.locale.region || this.getLikelyLocale().region; - var otherLoc = typeof(otherLocale) === "string" ? new Locale(otherLocale) : otherLocale; - var otherRegion = this._getLikelyLocale(otherLoc).region; - - var thisRegions = this._getRegionContainment(thisRegion); - var otherRegions = this._getRegionContainment(otherRegion); - - // region containment arrays are arranged from largest to smallest, so start - // at the end of the array - for (var i = thisRegions.length-1; i > 0; i--) { - if (otherRegions.indexOf(thisRegions[i]) > -1) { - return thisRegions[i]; - } - } - - // this default should never be reached because the world should be common to all regions - return "001"; - } -}; - - -/* - * isAlnum.js - Character type is alphanumeric - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - -/** - * Return whether or not the first character is alphabetic or numeric.

    - * - * @static - * @param {string|IString|number} ch character or code point to examine - * @return {boolean} true if the first character is alphabetic or numeric - */ -var isAlnum = function (ch) { - var num; - switch (typeof(ch)) { - case 'number': - num = ch; - break; - case 'string': - num = IString.toCodePoint(ch, 0); - break; - case 'undefined': - return false; - default: - num = ch._toCodePoint(0); - break; - } - return isAlpha(num) || isDigit(num); -}; - -/** - * @protected - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -isAlnum._init = function (sync, loadParams, onLoad) { - isAlpha._init(sync, loadParams, function () { - isDigit._init(sync, loadParams, onLoad); - }); -}; - - -/* - * ctype.islpha.js - Character type is alphabetic - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data ctype_l - - - - - -/** - * Return whether or not the first character is alphabetic.

    - * - * @static - * @param {string|IString|number} ch character or code point to examine - * @return {boolean} true if the first character is alphabetic. - */ -var isAlpha = function (ch) { - var num; - switch (typeof(ch)) { - case 'number': - num = ch; - break; - case 'string': - num = IString.toCodePoint(ch, 0); - break; - case 'undefined': - return false; - default: - num = ch._toCodePoint(0); - break; - } - return ilib.data.ctype_l ? - (CType._inRange(num, 'Lu', ilib.data.ctype_l) || - CType._inRange(num, 'Ll', ilib.data.ctype_l) || - CType._inRange(num, 'Lt', ilib.data.ctype_l) || - CType._inRange(num, 'Lm', ilib.data.ctype_l) || - CType._inRange(num, 'Lo', ilib.data.ctype_l)) : - ((num >= 0x41 && num <= 0x5A) || (num >= 0x61 && num <= 0x7A)); -}; - -/** - * @protected - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -isAlpha._init = function (sync, loadParams, onLoad) { - CType._load("ctype_l", sync, loadParams, onLoad); -}; - -/* - * isAscii.js - Character type is ASCII - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data ctype - - - - - -/** - * Return whether or not the first character is in the ASCII range.

    - * - * @static - * @param {string|IString|number} ch character or code point to examine - * @return {boolean} true if the first character is in the ASCII range. - */ -var isAscii = function (ch) { - var num; - switch (typeof(ch)) { - case 'number': - num = ch; - break; - case 'string': - num = IString.toCodePoint(ch, 0); - break; - case 'undefined': - return false; - default: - num = ch._toCodePoint(0); - break; - } - return ilib.data.ctype ? CType._inRange(num, 'ascii', ilib.data.ctype) : (num <= 0x7F); -}; - -/** - * @protected - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -isAscii._init = function (sync, loadParams, onLoad) { - CType._init(sync, loadParams, onLoad); -}; - -/* - * isBlank.js - Character type is blank - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data ctype - - - - - -/** - * Return whether or not the first character is a blank character.

    - * - * @static - * ie. a space or a tab. - * @param {string|IString|number} ch character or code point to examine - * @return {boolean} true if the first character is a blank character. - */ -var isBlank = function (ch) { - var num; - switch (typeof(ch)) { - case 'number': - num = ch; - break; - case 'string': - num = IString.toCodePoint(ch, 0); - break; - case 'undefined': - return false; - default: - num = ch._toCodePoint(0); - break; - } - return ilib.data.ctype ? CType._inRange(num, 'blank', ilib.data.ctype) : (ch === ' ' || ch === '\t'); -}; - -/** - * @protected - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -isBlank._init = function (sync, loadParams, onLoad) { - CType._init(sync, loadParams, onLoad); -}; - -/* - * isCntrl.js - Character type is control character - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data ctype_c - - - - - -/** - * Return whether or not the first character is a control character.

    - * - * @static - * @param {string|IString|number} ch character or code point to examine - * @return {boolean} true if the first character is a control character. - */ -var isCntrl = function (ch) { - var num; - switch (typeof(ch)) { - case 'number': - num = ch; - break; - case 'string': - num = IString.toCodePoint(ch, 0); - break; - case 'undefined': - return false; - default: - num = ch._toCodePoint(0); - break; - } - return CType._inRange(num, 'Cc', ilib.data.ctype_c); -}; - -/** - * @protected - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -isCntrl._init = function (sync, loadParams, onLoad) { - CType._load("ctype_c", sync, loadParams, onLoad); -}; - -/* - * isDigit.js - Character type is digit - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data ctype ctype_n - - - - - -/** - * Return whether or not the first character is a digit character in the - * Latin script.

    - * - * @static - * @param {string|IString|number} ch character or code point to examine - * @return {boolean} true if the first character is a digit character in the - * Latin script. - */ -var isDigit = function (ch) { - var num; - switch (typeof(ch)) { - case 'number': - num = ch; - break; - case 'string': - num = IString.toCodePoint(ch, 0); - break; - case 'undefined': - return false; - default: - num = ch._toCodePoint(0); - break; - } - return ilib.data.ctype ? CType._inRange(num, 'Nd', ilib.data.ctype_n) : (num >= 0x30 && num <= 0x39); -}; - -/** - * @protected - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -isDigit._init = function (sync, loadParams, onLoad) { - CType._load("ctype_n", sync, loadParams, onLoad); -}; - - -/* - * isGraph.js - Character type is graph char - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - -/** - * Return whether or not the first character is any printable character - * other than space.

    - * - * @static - * @param {string|IString|number} ch character or code point to examine - * @return {boolean} true if the first character is any printable character - * other than space. - */ -var isGraph = function (ch) { - var num; - switch (typeof(ch)) { - case 'number': - num = ch; - break; - case 'string': - num = IString.toCodePoint(ch, 0); - break; - case 'undefined': - return false; - default: - num = ch._toCodePoint(0); - break; - } - return typeof(ch) !== 'undefined' && ch.length > 0 && !isSpace(num) && !isCntrl(num); -}; - -/** - * @protected - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -isGraph._init = function (sync, loadParams, onLoad) { - isSpace._init(sync, loadParams, function () { - isCntrl._init(sync, loadParams, onLoad); - }); -}; - - -/* - * isIdeo.js - Character type definitions - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data ctype - - - - - -/** - * Return whether or not the first character is an ideographic character.

    - * - * @static - * @param {string|IString|number} ch character or code point to examine - * @return {boolean} true if the first character is an ideographic character. - */ -var isIdeo = function (ch) { - var num; - switch (typeof(ch)) { - case 'number': - num = ch; - break; - case 'string': - num = IString.toCodePoint(ch, 0); - break; - case 'undefined': - return false; - default: - num = ch._toCodePoint(0); - break; - } - - return CType._inRange(num, 'cjk', ilib.data.ctype) || - CType._inRange(num, 'cjkradicals', ilib.data.ctype) || - CType._inRange(num, 'enclosedcjk', ilib.data.ctype) || - CType._inRange(num, 'cjkpunct', ilib.data.ctype) || - CType._inRange(num, 'cjkcompatibility', ilib.data.ctype); -}; - -/** - * @protected - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -isIdeo._init = function (sync, loadParams, onLoad) { - CType._init(sync, loadParams, onLoad); -}; - -/* - * isLower.js - Character type is lower case letter - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data ctype_l - - - - - - -/** - * Return whether or not the first character is lower-case. For alphabetic - * characters in scripts that do not make a distinction between upper- and - * lower-case, this function always returns true.

    - * - * @static - * @param {string|IString|number} ch character or code point to examine - * @return {boolean} true if the first character is lower-case. - */ -var isLower = function (ch) { - var num; - switch (typeof(ch)) { - case 'number': - num = ch; - break; - case 'string': - num = IString.toCodePoint(ch, 0); - break; - case 'undefined': - return false; - default: - num = ch._toCodePoint(0); - break; - } - - return ilib.data.ctype_l ? CType._inRange(num, 'Ll', ilib.data.ctype_l) : (num >= 0x61 && num <= 0x7A); -}; - -/** - * @protected - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -isLower._init = function (sync, loadParams, onLoad) { - CType._load("ctype_l", sync, loadParams, onLoad); -}; - -/* - * isPrint.js - Character type is printable char - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -/** - * Return whether or not the first character is any printable character, - * including space.

    - * - * @static - * @param {string|IString|number} ch character or code point to examine - * @return {boolean} true if the first character is printable. - */ -var isPrint = function (ch) { - return typeof(ch) !== 'undefined' && ch.length > 0 && !isCntrl(ch); -}; - -/** - * @protected - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -isPrint._init = function (sync, loadParams, onLoad) { - isCntrl._init(sync, loadParams, onLoad); -}; - - -/* - * isPunct.js - Character type is punctuation - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data ctype_p - - - - - - -/** - * Return whether or not the first character is punctuation.

    - * - * @static - * @param {string|IString|number} ch character or code point to examine - * @return {boolean} true if the first character is punctuation. - */ -var isPunct = function (ch) { - var num; - switch (typeof(ch)) { - case 'number': - num = ch; - break; - case 'string': - num = IString.toCodePoint(ch, 0); - break; - case 'undefined': - return false; - default: - num = ch._toCodePoint(0); - break; - } - - return ilib.data.ctype_p ? - (CType._inRange(num, 'Pd', ilib.data.ctype_p) || - CType._inRange(num, 'Ps', ilib.data.ctype_p) || - CType._inRange(num, 'Pe', ilib.data.ctype_p) || - CType._inRange(num, 'Pc', ilib.data.ctype_p) || - CType._inRange(num, 'Po', ilib.data.ctype_p) || - CType._inRange(num, 'Pi', ilib.data.ctype_p) || - CType._inRange(num, 'Pf', ilib.data.ctype_p)) : - ((num >= 0x21 && num <= 0x2F) || - (num >= 0x3A && num <= 0x40) || - (num >= 0x5B && num <= 0x60) || - (num >= 0x7B && num <= 0x7E)); -}; - -/** - * @protected - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -isPunct._init = function (sync, loadParams, onLoad) { - CType._load("ctype_p", sync, loadParams, onLoad); -}; - - -/* - * isSpace.js - Character type is space char - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data ctype ctype_z - - - - - - -/** - * Return whether or not the first character is a whitespace character.

    - * - * @static - * @param {string|IString|number} ch character or code point to examine - * @return {boolean} true if the first character is a whitespace character. - */ -var isSpace = function (ch) { - var num; - switch (typeof(ch)) { - case 'number': - num = ch; - break; - case 'string': - num = IString.toCodePoint(ch, 0); - break; - case 'undefined': - return false; - default: - num = ch._toCodePoint(0); - break; - } - - return ilib.data.ctype && ilib.data.ctype_z ? - (CType._inRange(num, 'space', ilib.data.ctype) || - CType._inRange(num, 'Zs', ilib.data.ctype_z) || - CType._inRange(num, 'Zl', ilib.data.ctype_z) || - CType._inRange(num, 'Zp', ilib.data.ctype_z)) : - (ch === ' ' || num === 0xA0 || - (num >= 0x09 && num <= 0x0D)); -}; - -/** - * @protected - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -isSpace._init = function (sync, loadParams, onLoad) { - CType._load("ctype_z", sync, loadParams, function () { - CType._init(sync, loadParams, onLoad); - }); -}; - -/* - * isUpper.js - Character type is upper-case letter - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data ctype_l - - - - - - -/** - * Return whether or not the first character is upper-case. For alphabetic - * characters in scripts that do not make a distinction between upper- and - * lower-case, this function always returns true.

    - * - * @static - * @param {string|IString|number} ch character or code point to examine - * @return {boolean} true if the first character is upper-case. - */ -var isUpper = function (ch) { - var num; - switch (typeof(ch)) { - case 'number': - num = ch; - break; - case 'string': - num = IString.toCodePoint(ch, 0); - break; - case 'undefined': - return false; - default: - num = ch._toCodePoint(0); - break; - } - - return ilib.data.ctype_l ? CType._inRange(num, 'Lu', ilib.data.ctype_l) : (num >= 0x41 && num <= 0x5A); -}; - -/** - * @protected - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -isUpper._init = function (sync, loadParams, onLoad) { - CType._load("ctype_l", sync, loadParams, onLoad); -}; - -/* - * isXdigit.js - Character type is hex digit - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data ctype - - - - - - -/** - * Return whether or not the first character is a hexadecimal digit written - * in the Latin script. (0-9 or A-F)

    - * - * @static - * @param {string|IString|number} ch character or code point to examine - * @return {boolean} true if the first character is a hexadecimal digit written - * in the Latin script. - */ -var isXdigit = function (ch) { - var num; - switch (typeof(ch)) { - case 'number': - num = ch; - break; - case 'string': - num = IString.toCodePoint(ch, 0); - break; - case 'undefined': - return false; - default: - num = ch._toCodePoint(0); - break; - } - - return ilib.data.ctype ? CType._inRange(num, 'xdigit', ilib.data.ctype) : - ((num >= 0x30 && num <= 0x39) || (num >= 0x41 && num <= 0x46) || (num >= 0x61 && num <= 0x66)); -}; - -/** - * @protected - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -isXdigit._init = function (sync, loadParams, onLoad) { - CType._init(sync, loadParams, onLoad); -}; - -/* - * isScript.js - Character type is script - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data scriptToRange - - - - - - -/** - * Return whether or not the first character in the given string is - * in the given script. The script is given as the 4-letter ISO - * 15924 script code.

    - * - * @static - * @param {string|IString|number} ch character or code point to examine - * @param {string} script the 4-letter ISO 15924 to query against - * @return {boolean} true if the first character is in the given script, and - * false otherwise - */ -var isScript = function (ch, script) { - var num; - switch (typeof(ch)) { - case 'number': - num = ch; - break; - case 'string': - num = IString.toCodePoint(ch, 0); - break; - case 'undefined': - return false; - default: - num = ch._toCodePoint(0); - break; - } - - return CType._inRange(num, script, ilib.data.scriptToRange); -}; - -/** - * @protected - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -isScript._init = function (sync, loadParams, onLoad) { - CType._load("scriptToRange", sync, loadParams, onLoad); -}; - -/* - * CType.js - Character type definitions - * - * Copyright © 2012-2015, 2018, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data ctype - - - - - - -/** - * Provides a set of static routines that return information about characters. - * These routines emulate the C-library ctype functions. The characters must be - * encoded in utf-16, as no other charsets are currently supported. Only the first - * character of the given string is tested. - * @namespace - */ -var CType = {}; - - -/** - * Actual implementation for withinRange. Searches the given object for ranges. - * The range names are taken from the Unicode range names in - * http://www.unicode.org/Public/UNIDATA/extracted/DerivedGeneralCategory.txt - * - *

      - *
    • Cn - Unassigned - *
    • Lu - Uppercase_Letter - *
    • Ll - Lowercase_Letter - *
    • Lt - Titlecase_Letter - *
    • Lm - Modifier_Letter - *
    • Lo - Other_Letter - *
    • Mn - Nonspacing_Mark - *
    • Me - Enclosing_Mark - *
    • Mc - Spacing_Mark - *
    • Nd - Decimal_Number - *
    • Nl - Letter_Number - *
    • No - Other_Number - *
    • Zs - Space_Separator - *
    • Zl - Line_Separator - *
    • Zp - Paragraph_Separator - *
    • Cc - Control - *
    • Cf - Format - *
    • Co - Private_Use - *
    • Cs - Surrogate - *
    • Pd - Dash_Punctuation - *
    • Ps - Open_Punctuation - *
    • Pe - Close_Punctuation - *
    • Pc - Connector_Punctuation - *
    • Po - Other_Punctuation - *
    • Sm - Math_Symbol - *
    • Sc - Currency_Symbol - *
    • Sk - Modifier_Symbol - *
    • So - Other_Symbol - *
    • Pi - Initial_Punctuation - *
    • Pf - Final_Punctuation - *
    - * - * @private - * @param {number} num code point of the character to examine - * @param {string} rangeName the name of the range to check - * @param {Object} obj object containing the character range data - * @return {boolean} true if the first character is within the named - * range - */ -CType._inRange = function(num, rangeName, obj) { - var range; - if (num < 0 || !rangeName || !obj) { - return false; - } - - range = obj[rangeName]; - if (!range) { - return false; - } - - var compare = function(singlerange, target) { - if (singlerange.length === 1) { - return singlerange[0] - target; - } else { - return target < singlerange[0] ? singlerange[0] - target : - (target > singlerange[1] ? singlerange[1] - target : 0); - } - }; - var result = SearchUtils.bsearch(num, range, compare); - return result < range.length && compare(range[result], num) === 0; -}; - -/** - * Return whether or not the first character is within the named range - * of Unicode characters. The valid list of range names are taken from - * the Unicode 6.0 spec. Characters in all ranges of Unicode are supported, - * including those supported in Javascript via UTF-16. Currently, this method - * supports the following range names: - * - *
      - *
    • ascii - basic ASCII - *
    • latin - Latin, Latin Extended Additional, Latin-1 supplement, Latin Extended-C, Latin Extended-D, Latin Extended-E - *
    • armenian - *
    • greek - Greek, Greek Extended - *
    • cyrillic - Cyrillic, Cyrillic Extended-A, Cyrillic Extended-B, Cyrillic Extended-C, Cyrillic Supplement - *
    • georgian - Georgian, Georgian Supplement - *
    • glagolitic - Glagolitic, Glagolitic Supplement - *
    • gothic - *
    • ogham - *
    • oldpersian - *
    • runic - *
    • ipa - IPA, Phonetic Extensions, Phonetic Extensions Supplement - *
    • phonetic - *
    • modifiertone - Modifier Tone Letters - *
    • spacing - *
    • diacritics - *
    • halfmarks - Combining Half Marks - *
    • small - Small Form Variants - *
    • bamum - Bamum, Bamum Supplement - *
    • ethiopic - Ethiopic, Ethiopic Extended, Ethiopic Extended-A - *
    • nko - *
    • osmanya - *
    • tifinagh - *
    • val - *
    • arabic - Arabic, Arabic Supplement, Arabic Presentation Forms-A, - * Arabic Presentation Forms-B, Arabic Mathematical Alphabetic Symbols - *
    • carlan - *
    • hebrew - *
    • mandaic - *
    • samaritan - *
    • syriac - *
    • mongolian - *
    • phagspa - *
    • tibetan - *
    • bengali - *
    • devanagari - Devanagari, Devanagari Extended - *
    • gujarati - *
    • gurmukhi - *
    • kannada - *
    • lepcha - *
    • limbu - *
    • malayalam - *
    • meetaimayek - *
    • olchiki - *
    • oriya - *
    • saurashtra - *
    • sinhala - *
    • sylotinagri - Syloti Nagri - *
    • tangut - *
    • tamil - *
    • telugu - *
    • thaana - *
    • vedic - *
    • batak - *
    • balinese - *
    • buginese - *
    • cham - *
    • javanese - *
    • kayahli - *
    • khmer - *
    • lao - *
    • myanmar - Myanmar, Myanmar Extended-A, Myanmar Extended-B - *
    • newtailue - *
    • rejang - *
    • sundanese - Sundanese, Sundanese Supplement - *
    • taile - *
    • taitham - *
    • taiviet - *
    • thai - *
    • buhld - *
    • hanunoo - *
    • tagalog - *
    • tagbanwa - *
    • bopomofo - Bopomofo, Bopomofo Extended - *
    • cjk - the CJK unified ideographs (Han), CJK Unified Ideographs - * Extension A, CJK Unified Ideographs Extension B, CJK Unified Ideographs - * Extension C, CJK Unified Ideographs Extension D, Ideographic Description - * Characters (=isIdeo()) - *
    • cjkcompatibility - CJK Compatibility, CJK Compatibility - * Ideographs, CJK Compatibility Forms, CJK Compatibility Ideographs Supplement - *
    • cjkradicals - the CJK radicals, KangXi radicals - *
    • hangul - Hangul Jamo, Hangul Syllables, Hangul Jamo Extended-A, - * Hangul Jamo Extended-B, Hangul Compatibility Jamo - *
    • cjkpunct - CJK symbols and punctuation - *
    • cjkstrokes - CJK strokes - *
    • hiragana - *
    • katakana - Katakana, Katakana Phonetic Extensions, Kana Supplement - *
    • kanbun - *
    • lisu - *
    • yi - Yi Syllables, Yi Radicals - *
    • cherokee - *
    • canadian - Unified Canadian Aboriginal Syllabics, Unified Canadian - * Aboriginal Syllabics Extended - *
    • presentation - Alphabetic presentation forms - *
    • vertical - Vertical Forms - *
    • width - Halfwidth and Fullwidth Forms - *
    • punctuation - General punctuation, Supplemental Punctuation - *
    • box - Box Drawing - *
    • block - Block Elements - *
    • letterlike - Letterlike symbols - *
    • mathematical - Mathematical alphanumeric symbols, Miscellaneous - * Mathematical Symbols-A, Miscellaneous Mathematical Symbols-B - *
    • enclosedalpha - Enclosed alphanumerics, Enclosed Alphanumeric Supplement - *
    • enclosedcjk - Enclosed CJK letters and months, Enclosed Ideographic Supplement - *
    • cjkcompatibility - CJK compatibility - *
    • apl - APL symbols - *
    • controlpictures - Control pictures - *
    • misc - Miscellaneous technical - *
    • ocr - Optical character recognition (OCR) - *
    • combining - Combining Diacritical Marks, Combining Diacritical Marks - * for Symbols, Combining Diacritical Marks Supplement, Combining Diacritical Marks Extended - *
    • digits - ASCII digits (=isDigit()) - *
    • indicnumber - Common Indic Number Forms - *
    • numbers - Number forms - *
    • supersub - Superscripts and Subscripts - *
    • arrows - Arrows, Miscellaneous Symbols and Arrows, Supplemental Arrows-A, - * Supplemental Arrows-B, Supplemental Arrows-C - *
    • operators - Mathematical operators, supplemental - * mathematical operators - *
    • geometric - Geometric shapes, Geometric shapes extended - *
    • ancient - Ancient symbols - *
    • braille - Braille patterns - *
    • currency - Currency symbols - *
    • dingbats - *
    • gamesymbols - *
    • yijing - Yijing Hexagram Symbols - *
    • specials - *
    • variations - Variation Selectors, Variation Selectors Supplement - *
    • privateuse - Private Use Area, Supplementary Private Use Area-A, - * Supplementary Private Use Area-B - *
    • supplementarya - Supplementary private use area-A - *
    • supplementaryb - Supplementary private use area-B - *
    • highsurrogates - High Surrogates, High Private Use Surrogates - *
    • lowsurrogates - *
    • reserved - *
    • noncharacters - *
    • copticnumber - coptic epact numbers - *
    • oldpermic - old permic - *
    • albanian - albanian - *
    • lineara - linear a - *
    • meroitic - meroitic cursive - *
    • oldnortharabian - old north arabian - *
    • oldhungarian - Supplementary private use area-A - *
    • sorasompeng - sora sompeng - *
    • warangciti - warang citi - *
    • paucinhau - pau cin hau - *
    • bassavah - bassa vah - *
    • pahawhhmong - pahawh hmong - *
    • shorthandformat - shorthand format controls - *
    • suttonsignwriting - sutton signwriting - *
    • pictographs - miscellaneous symbols and pictographs, supplemental symbols and pictographs - *
    • ornamentaldingbats - ornamental dingbats - *

    - * - * - * @protected - * @param {string|IString|number} ch character or code point to examine - * @param {string} rangeName the name of the range to check - * @return {boolean} true if the first character is within the named - * range - */ -CType.withinRange = function(ch, rangeName) { - if (!rangeName) { - return false; - } - var num; - switch (typeof(ch)) { - case 'number': - num = ch; - break; - case 'string': - num = IString.toCodePoint(ch, 0); - break; - case 'undefined': - return false; - default: - num = ch._toCodePoint(0); - break; - } - - return CType._inRange(num, rangeName.toLowerCase(), ilib.data.ctype); -}; - -/** - * @private - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -CType._init = function(sync, loadParams, onLoad) { - CType._load("ctype", sync, loadParams, onLoad); -}; - -/** - * @private - * @param {string} name - * @param {boolean} sync - * @param {Object|undefined} loadParams - * @param {function(*)|undefined} onLoad - */ -CType._load = function (name, sync, loadParams, onLoad) { - if (!ilib.data[name]) { - var loadName = name ? name + ".json" : "CType.json"; - Utils.loadData({ - object: "CType", - name: loadName, - locale: "-", - nonlocale: true, - sync: sync, - loadParams: loadParams, - callback: ilib.bind(this, function(ct) { - ilib.data[name] = ct; - if (onLoad && typeof(onLoad) === 'function') { - onLoad(ilib.data[name]); - } - }) - }); - } else { - if (onLoad && typeof(onLoad) === 'function') { - onLoad(ilib.data[name]); - } - } -}; - - -/* - * Astro.js - Static functions to support astronomical calculations - * - * Copyright © 2014-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data astro - -/* - * These routines were derived from a public domain set of JavaScript - * functions for positional astronomy by John Walker of Fourmilab, - * September 1999. - */ - - - - - - - - - -var Astro = {}; - -/** - * Load in all the data needed for astrological calculations. - * - * @private - * @param {boolean} sync - * @param {*} loadParams - * @param {function(*)|undefined} callback - */ -Astro.initAstro = function(sync, loadParams, callback) { - if (!ilib.data.astro) { - Utils.loadData({ - object: "Astro", - name: "astro.json", // countries in their own language - locale: "-", // only need to load the root file - nonLocale: true, - sync: sync, - loadParams: loadParams, - callback: ilib.bind(this, function(astroData) { - /** - * @type {{ - * _EquinoxpTerms:Array., - * _JDE0tab1000:Array., - * _JDE0tab2000:Array., - * _deltaTtab:Array., - * _oterms:Array., - * _nutArgMult:Array., - * _nutArgCoeff:Array., - * _nutCoeffA:Array., - * _nutCoeffB:Array., - * _coeff19th:Array., - * _coeff18th:Array., - * _solarLongCoeff:Array., - * _solarLongMultipliers:Array., - * _solarLongAddends:Array., - * _meanMoonCoeff:Array., - * _elongationCoeff:Array., - * _solarAnomalyCoeff:Array., - * _lunarAnomalyCoeff:Array., - * _moonFromNodeCoeff:Array., - * _eCoeff:Array., - * _lunarElongationLongCoeff:Array., - * _solarAnomalyLongCoeff:Array., - * _lunarAnomalyLongCoeff:Array., - * _moonFromNodeLongCoeff:Array., - * _sineCoeff:Array., - * _nmApproxCoeff:Array., - * _nmCapECoeff:Array., - * _nmSolarAnomalyCoeff:Array., - * _nmLunarAnomalyCoeff:Array., - * _nmMoonArgumentCoeff:Array., - * _nmCapOmegaCoeff:Array., - * _nmEFactor:Array., - * _nmSolarCoeff:Array., - * _nmLunarCoeff:Array., - * _nmMoonCoeff:Array., - * _nmSineCoeff:Array., - * _nmAddConst:Array., - * _nmAddCoeff:Array., - * _nmAddFactor:Array., - * _nmExtra:Array. - * }} - */ - ilib.data.astro = astroData; - if (callback && typeof(callback) === 'function') { - callback(astroData); - } - }) - }); - } else { - if (callback && typeof(callback) === 'function') { - callback(ilib.data.astro); - } - } -}; - -/** - * Convert degrees to radians. - * - * @static - * @protected - * @param {number} d angle in degrees - * @return {number} angle in radians - */ -Astro._dtr = function(d) { - return (d * Math.PI) / 180.0; -}; - -/** - * Convert radians to degrees. - * - * @static - * @protected - * @param {number} r angle in radians - * @return {number} angle in degrees - */ -Astro._rtd = function(r) { - return (r * 180.0) / Math.PI; -}; - -/** - * Return the cosine of an angle given in degrees. - * @static - * @protected - * @param {number} d angle in degrees - * @return {number} cosine of the angle. - */ -Astro._dcos = function(d) { - return Math.cos(Astro._dtr(d)); -}; - -/** - * Return the sine of an angle given in degrees. - * @static - * @protected - * @param {number} d angle in degrees - * @return {number} sine of the angle. - */ -Astro._dsin = function(d) { - return Math.sin(Astro._dtr(d)); -}; - -/** - * Return the tan of an angle given in degrees. - * @static - * @protected - * @param {number} d angle in degrees - * @return {number} tan of the angle. - */ -Astro._dtan = function(d) { - return Math.tan(Astro._dtr(d)); -}; - -/** - * Range reduce angle in degrees. - * - * @static - * @param {number} a angle to reduce - * @return {number} the reduced angle - */ -Astro._fixangle = function(a) { - return a - 360.0 * (Math.floor(a / 360.0)); -}; - -/** - * Range reduce angle in radians. - * - * @static - * @protected - * @param {number} a angle to reduce - * @return {number} the reduced angle - */ -Astro._fixangr = function(a) { - return a - (2 * Math.PI) * (Math.floor(a / (2 * Math.PI))); -}; - -/** - * Determine the Julian Ephemeris Day of an equinox or solstice. The "which" - * argument selects the item to be computed: - * - *

      - *
    • 0 March equinox - *
    • 1 June solstice - *
    • 2 September equinox - *
    • 3 December solstice - *
    - * - * @static - * @protected - * @param {number} year Gregorian year to calculate for - * @param {number} which Which equinox or solstice to calculate - */ -Astro._equinox = function(year, which) { - var deltaL, i, j, JDE0, JDE, JDE0tab, S, T, W, Y; - - /* Initialize terms for mean equinox and solstices. We - have two sets: one for years prior to 1000 and a second - for subsequent years. */ - - if (year < 1000) { - JDE0tab = ilib.data.astro._JDE0tab1000; - Y = year / 1000; - } else { - JDE0tab = ilib.data.astro._JDE0tab2000; - Y = (year - 2000) / 1000; - } - - JDE0 = JDE0tab[which][0] + (JDE0tab[which][1] * Y) - + (JDE0tab[which][2] * Y * Y) + (JDE0tab[which][3] * Y * Y * Y) - + (JDE0tab[which][4] * Y * Y * Y * Y); - - //document.debug.log.value += "JDE0 = " + JDE0 + "\n"; - - T = (JDE0 - 2451545.0) / 36525; - //document.debug.log.value += "T = " + T + "\n"; - W = (35999.373 * T) - 2.47; - //document.debug.log.value += "W = " + W + "\n"; - deltaL = 1 + (0.0334 * Astro._dcos(W)) + (0.0007 * Astro._dcos(2 * W)); - //document.debug.log.value += "deltaL = " + deltaL + "\n"; - - // Sum the periodic terms for time T - - S = 0; - j = 0; - for (i = 0; i < 24; i++) { - S += ilib.data.astro._EquinoxpTerms[j] - * Astro._dcos(ilib.data.astro._EquinoxpTerms[j + 1] + (ilib.data.astro._EquinoxpTerms[j + 2] * T)); - j += 3; - } - - //document.debug.log.value += "S = " + S + "\n"; - //document.debug.log.value += "Corr = " + ((S * 0.00001) / deltaL) + "\n"; - - JDE = JDE0 + ((S * 0.00001) / deltaL); - - return JDE; -}; - -/* - * The table of observed Delta T values at the beginning of - * years from 1620 through 2014 as found in astro.json is taken from - * http://www.staff.science.uu.nl/~gent0113/deltat/deltat.htm - * and - * ftp://maia.usno.navy.mil/ser7/deltat.data - */ - -/** - * Determine the difference, in seconds, between dynamical time and universal time. - * - * @static - * @protected - * @param {number} year to calculate the difference for - * @return {number} difference in seconds between dynamical time and universal time - */ -Astro._deltat = function (year) { - var dt, f, i, t; - - if ((year >= 1620) && (year <= 2014)) { - i = Math.floor(year - 1620); - f = (year - 1620) - i; /* Fractional part of year */ - dt = ilib.data.astro._deltaTtab[i] + ((ilib.data.astro._deltaTtab[i + 1] - ilib.data.astro._deltaTtab[i]) * f); - } else { - t = (year - 2000) / 100; - if (year < 948) { - dt = 2177 + (497 * t) + (44.1 * t * t); - } else { - dt = 102 + (102 * t) + (25.3 * t * t); - if ((year > 2000) && (year < 2100)) { - dt += 0.37 * (year - 2100); - } - } - } - return dt; -}; - -/** - * Calculate the obliquity of the ecliptic for a given - * Julian date. This uses Laskar's tenth-degree - * polynomial fit (J. Laskar, Astronomy and - * Astrophysics, Vol. 157, page 68 [1986]) which is - * accurate to within 0.01 arc second between AD 1000 - * and AD 3000, and within a few seconds of arc for - * +/-10000 years around AD 2000. If we're outside the - * range in which this fit is valid (deep time) we - * simply return the J2000 value of the obliquity, which - * happens to be almost precisely the mean. - * - * @static - * @protected - * @param {number} jd Julian Day to calculate the obliquity for - * @return {number} the obliquity - */ -Astro._obliqeq = function (jd) { - var eps, u, v, i; - - v = u = (jd - 2451545.0) / 3652500.0; - - eps = 23 + (26 / 60.0) + (21.448 / 3600.0); - - if (Math.abs(u) < 1.0) { - for (i = 0; i < 10; i++) { - eps += (ilib.data.astro._oterms[i] / 3600.0) * v; - v *= u; - } - } - return eps; -}; - -/** - * Return the position of the sun. We return - * intermediate values because they are useful in a - * variety of other contexts. - * @static - * @protected - * @param {number} jd find the position of sun on this Julian Day - * @return {Object} the position of the sun and many intermediate - * values - */ -Astro._sunpos = function(jd) { - var ret = {}, - T, T2, T3, Omega, epsilon, epsilon0; - - T = (jd - 2451545.0) / 36525.0; - //document.debug.log.value += "Sunpos. T = " + T + "\n"; - T2 = T * T; - T3 = T * T2; - ret.meanLongitude = Astro._fixangle(280.46646 + 36000.76983 * T + 0.0003032 * T2); - //document.debug.log.value += "ret.meanLongitude = " + ret.meanLongitude + "\n"; - ret.meanAnomaly = Astro._fixangle(357.52911 + (35999.05029 * T) - 0.0001537 * T2 - 0.00000048 * T3); - //document.debug.log.value += "ret.meanAnomaly = " + ret.meanAnomaly + "\n"; - ret.eccentricity = 0.016708634 - 0.000042037 * T - 0.0000001267 * T2; - //document.debug.log.value += "e = " + e + "\n"; - ret.equationOfCenter = ((1.914602 - 0.004817 * T - 0.000014 * T2) * Astro._dsin(ret.meanAnomaly)) - + ((0.019993 - 0.000101 * T) * Astro._dsin(2 * ret.meanAnomaly)) - + (0.000289 * Astro._dsin(3 * ret.meanAnomaly)); - //document.debug.log.value += "ret.equationOfCenter = " + ret.equationOfCenter + "\n"; - ret.sunLongitude = ret.meanLongitude + ret.equationOfCenter; - //document.debug.log.value += "ret.sunLongitude = " + ret.sunLongitude + "\n"; - //ret.sunAnomaly = ret.meanAnomaly + ret.equationOfCenter; - //document.debug.log.value += "ret.sunAnomaly = " + ret.sunAnomaly + "\n"; - // ret.sunRadius = (1.000001018 * (1 - (ret.eccentricity * ret.eccentricity))) / (1 + (ret.eccentricity * Astro._dcos(ret.sunAnomaly))); - //document.debug.log.value += "ret.sunRadius = " + ret.sunRadius + "\n"; - Omega = 125.04 - (1934.136 * T); - //document.debug.log.value += "Omega = " + Omega + "\n"; - ret.apparentLong = ret.sunLongitude + (-0.00569) + (-0.00478 * Astro._dsin(Omega)); - //document.debug.log.value += "ret.apparentLong = " + ret.apparentLong + "\n"; - epsilon0 = Astro._obliqeq(jd); - //document.debug.log.value += "epsilon0 = " + epsilon0 + "\n"; - epsilon = epsilon0 + (0.00256 * Astro._dcos(Omega)); - //document.debug.log.value += "epsilon = " + epsilon + "\n"; - //ret.rightAscension = Astro._fixangle(Astro._rtd(Math.atan2(Astro._dcos(epsilon0) * Astro._dsin(ret.sunLongitude), Astro._dcos(ret.sunLongitude)))); - //document.debug.log.value += "ret.rightAscension = " + ret.rightAscension + "\n"; - // ret.declination = Astro._rtd(Math.asin(Astro._dsin(epsilon0) * Astro._dsin(ret.sunLongitude))); - ////document.debug.log.value += "ret.declination = " + ret.declination + "\n"; - ret.inclination = Astro._fixangle(23.4392911 - 0.013004167 * T - 0.00000016389 * T2 + 0.0000005036 * T3); - ret.apparentRightAscension = Astro._fixangle(Astro._rtd(Math.atan2(Astro._dcos(epsilon) * Astro._dsin(ret.apparentLong), Astro._dcos(ret.apparentLong)))); - //document.debug.log.value += "ret.apparentRightAscension = " + ret.apparentRightAscension + "\n"; - //ret.apparentDeclination = Astro._rtd(Math.asin(Astro._dsin(epsilon) * Astro._dsin(ret.apparentLong))); - //document.debug.log.value += "ret.apparentDecliation = " + ret.apparentDecliation + "\n"; - - // Angular quantities are expressed in decimal degrees - return ret; -}; - -/** - * Calculate the nutation in longitude, deltaPsi, and obliquity, - * deltaEpsilon for a given Julian date jd. Results are returned as an object - * giving deltaPsi and deltaEpsilon in degrees. - * - * @static - * @protected - * @param {number} jd calculate the nutation of this Julian Day - * @return {Object} the deltaPsi and deltaEpsilon of the nutation - */ -Astro._nutation = function(jd) { - var i, j, - t = (jd - 2451545.0) / 36525.0, - t2, t3, to10, - ta = [], - dp = 0, - de = 0, - ang, - ret = {}; - - t3 = t * (t2 = t * t); - - /* - * Calculate angles. The correspondence between the elements of our array - * and the terms cited in Meeus are: - * - * ta[0] = D ta[0] = M ta[2] = M' ta[3] = F ta[4] = \Omega - * - */ - - ta[0] = Astro._dtr(297.850363 + 445267.11148 * t - 0.0019142 * t2 + t3 / 189474.0); - ta[1] = Astro._dtr(357.52772 + 35999.05034 * t - 0.0001603 * t2 - t3 / 300000.0); - ta[2] = Astro._dtr(134.96298 + 477198.867398 * t + 0.0086972 * t2 + t3 / 56250.0); - ta[3] = Astro._dtr(93.27191 + 483202.017538 * t - 0.0036825 * t2 + t3 / 327270); - ta[4] = Astro._dtr(125.04452 - 1934.136261 * t + 0.0020708 * t2 + t3 / 450000.0); - - /* - * Range reduce the angles in case the sine and cosine functions don't do it - * as accurately or quickly. - */ - - for (i = 0; i < 5; i++) { - ta[i] = Astro._fixangr(ta[i]); - } - - to10 = t / 10.0; - for (i = 0; i < 63; i++) { - ang = 0; - for (j = 0; j < 5; j++) { - if (ilib.data.astro._nutArgMult[(i * 5) + j] != 0) { - ang += ilib.data.astro._nutArgMult[(i * 5) + j] * ta[j]; - } - } - dp += (ilib.data.astro._nutArgCoeff[(i * 4) + 0] + ilib.data.astro._nutArgCoeff[(i * 4) + 1] * to10) * Math.sin(ang); - de += (ilib.data.astro._nutArgCoeff[(i * 4) + 2] + ilib.data.astro._nutArgCoeff[(i * 4) + 3] * to10) * Math.cos(ang); - } - - /* - * Return the result, converting from ten thousandths of arc seconds to - * radians in the process. - */ - - ret.deltaPsi = dp / (3600.0 * 10000.0); - ret.deltaEpsilon = de / (3600.0 * 10000.0); - - return ret; -}; - -/** - * Returns the equation of time as a fraction of a day. - * - * @static - * @protected - * @param {number} jd the Julian Day of the day to calculate for - * @return {number} the equation of time for the given day - */ -Astro._equationOfTime = function(jd) { - var alpha, deltaPsi, E, epsilon, L0, tau, pos; - - // 2451545.0 is the Julian day of J2000 epoch - // 365250.0 is the number of days in a Julian millenium - tau = (jd - 2451545.0) / 365250.0; - //console.log("equationOfTime. tau = " + tau); - L0 = 280.4664567 + (360007.6982779 * tau) + (0.03032028 * tau * tau) - + ((tau * tau * tau) / 49931) - + (-((tau * tau * tau * tau) / 15300)) - + (-((tau * tau * tau * tau * tau) / 2000000)); - //console.log("L0 = " + L0); - L0 = Astro._fixangle(L0); - //console.log("L0 = " + L0); - pos = Astro._sunpos(jd); - alpha = pos.apparentRightAscension; - //console.log("alpha = " + alpha); - var nut = Astro._nutation(jd); - deltaPsi = nut.deltaPsi; - //console.log("deltaPsi = " + deltaPsi); - epsilon = Astro._obliqeq(jd) + nut.deltaEpsilon; - //console.log("epsilon = " + epsilon); - //console.log("L0 - 0.0057183 = " + (L0 - 0.0057183)); - //console.log("L0 - 0.0057183 - alpha = " + (L0 - 0.0057183 - alpha)); - //console.log("deltaPsi * cos(epsilon) = " + deltaPsi * Astro._dcos(epsilon)); - - E = L0 - 0.0057183 - alpha + deltaPsi * Astro._dcos(epsilon); - // if alpha and L0 are in different quadrants, then renormalize - // so that the difference between them is in the right range - if (E > 180) { - E -= 360; - } - //console.log("E = " + E); - // E = E - 20.0 * (Math.floor(E / 20.0)); - E = E * 4; - //console.log("Efixed = " + E); - E = E / (24 * 60); - //console.log("Eday = " + E); - - return E; -}; - -/** - * @private - * @static - */ -Astro._poly = function(x, coefficients) { - var result = coefficients[0]; - var xpow = x; - for (var i = 1; i < coefficients.length; i++) { - result += coefficients[i] * xpow; - xpow *= x; - } - return result; -}; - -/** - * Calculate the UTC RD from the local RD given "zone" number of minutes - * worth of offset. - * - * @static - * @protected - * @param {number} local RD of the locale time, given in any calendar - * @param {number} zone number of minutes of offset from UTC for the time zone - * @return {number} the UTC equivalent of the local RD - */ -Astro._universalFromLocal = function(local, zone) { - return local - zone / 1440; -}; - -/** - * Calculate the local RD from the UTC RD given "zone" number of minutes - * worth of offset. - * - * @static - * @protected - * @param {number} local RD of the locale time, given in any calendar - * @param {number} zone number of minutes of offset from UTC for the time zone - * @return {number} the UTC equivalent of the local RD - */ -Astro._localFromUniversal = function(local, zone) { - return local + zone / 1440; -}; - -/** - * @private - * @static - * @param {number} c julian centuries of the date to calculate - * @return {number} the aberration - */ -Astro._aberration = function(c) { - return 9.74e-05 * Astro._dcos(177.63 + 35999.01847999999 * c) - 0.005575; -}; - -/** - * ilib.data.astro._nutCoeffA = [124.90, -1934.134, 0.002063]; - * ilib.data.astro._nutCoeffB q= [201.11, 72001.5377, 0.00057]; - * @private - * -*/ - -/** - * @private - * @static - * @param {number} c julian centuries of the date to calculate - * @return {number} the nutation for the given julian century in radians - */ -Astro._nutation2 = function(c) { - var a = Astro._poly(c, ilib.data.astro._nutCoeffA); - var b = Astro._poly(c, ilib.data.astro._nutCoeffB); - // return -0.0000834 * Astro._dsin(a) - 0.0000064 * Astro._dsin(b); - return -0.004778 * Astro._dsin(a) - 0.0003667 * Astro._dsin(b); -}; - -/** - * @static - * @private - */ -Astro._ephemerisCorrection = function(jd) { - var year = GregorianDate._calcYear(jd - 1721424.5); - - if (1988 <= year && year <= 2019) { - return (year - 1933) / 86400; - } - - if (1800 <= year && year <= 1987) { - var jul1 = new GregRataDie({ - year: year, - month: 7, - day: 1, - hour: 0, - minute: 0, - second: 0 - }); - // 693596 is the rd of Jan 1, 1900 - var theta = (jul1.getRataDie() - 693596) / 36525; - return Astro._poly(theta, (1900 <= year) ? ilib.data.astro._coeff19th : ilib.data.astro._coeff18th); - } - - if (1620 <= year && year <= 1799) { - year -= 1600; - return (196.58333 - 4.0675 * year + 0.0219167 * year * year) / 86400; - } - - // 660724 is the rd of Jan 1, 1810 - var jan1 = new GregRataDie({ - year: year, - month: 1, - day: 1, - hour: 0, - minute: 0, - second: 0 - }); - // var x = 0.5 + (jan1.getRataDie() - 660724); - var x = 0.5 + (jan1.getRataDie() - 660724); - - return ((x * x / 41048480) - 15) / 86400; -}; - -/** - * @static - * @private - */ -Astro._ephemerisFromUniversal = function(jd) { - return jd + Astro._ephemerisCorrection(jd); -}; - -/** - * @static - * @private - */ -Astro._universalFromEphemeris = function(jd) { - return jd - Astro._ephemerisCorrection(jd); -}; - -/** - * @static - * @private - */ -Astro._julianCenturies = function(jd) { - // 2451545.0 is the Julian day of J2000 epoch - // 730119.5 is the Gregorian RD of J2000 epoch - // 36525.0 is the number of days in a Julian century - return (Astro._ephemerisFromUniversal(jd) - 2451545.0) / 36525.0; -}; - -/** - * Calculate the solar longitude - * - * @static - * @protected - * @param {number} jd julian day of the date to calculate the longitude for - * @return {number} the solar longitude in degrees - */ -Astro._solarLongitude = function(jd) { - var c = Astro._julianCenturies(jd), - longitude = 0, - len = ilib.data.astro._solarLongCoeff.length; - - for (var i = 0; i < len; i++) { - longitude += ilib.data.astro._solarLongCoeff[i] * - Astro._dsin(ilib.data.astro._solarLongAddends[i] + ilib.data.astro._solarLongMultipliers[i] * c); - } - longitude *= 5.729577951308232e-06; - longitude += 282.77718340000001 + 36000.769537439999 * c; - longitude += Astro._aberration(c) + Astro._nutation2(c); - return Astro._fixangle(longitude); -}; - -/** - * @static - * @protected - * @param {number} jd - * @return {number} - */ -Astro._lunarLongitude = function (jd) { - var c = Astro._julianCenturies(jd), - meanMoon = Astro._fixangle(Astro._poly(c, ilib.data.astro._meanMoonCoeff)), - elongation = Astro._fixangle(Astro._poly(c, ilib.data.astro._elongationCoeff)), - solarAnomaly = Astro._fixangle(Astro._poly(c, ilib.data.astro._solarAnomalyCoeff)), - lunarAnomaly = Astro._fixangle(Astro._poly(c, ilib.data.astro._lunarAnomalyCoeff)), - moonNode = Astro._fixangle(Astro._poly(c, ilib.data.astro._moonFromNodeCoeff)), - e = Astro._poly(c, ilib.data.astro._eCoeff); - - var sum = 0; - for (var i = 0; i < ilib.data.astro._lunarElongationLongCoeff.length; i++) { - var x = ilib.data.astro._solarAnomalyLongCoeff[i]; - - sum += ilib.data.astro._sineCoeff[i] * Math.pow(e, Math.abs(x)) * - Astro._dsin(ilib.data.astro._lunarElongationLongCoeff[i] * elongation + x * solarAnomaly + - ilib.data.astro._lunarAnomalyLongCoeff[i] * lunarAnomaly + - ilib.data.astro._moonFromNodeLongCoeff[i] * moonNode); - } - var longitude = sum / 1000000; - var venus = 3958.0 / 1000000 * Astro._dsin(119.75 + c * 131.84899999999999); - var jupiter = 318.0 / 1000000 * Astro._dsin(53.090000000000003 + c * 479264.28999999998); - var flatEarth = 1962.0 / 1000000 * Astro._dsin(meanMoon - moonNode); - - return Astro._fixangle(meanMoon + longitude + venus + jupiter + flatEarth + Astro._nutation2(c)); -}; - -/** - * @static - * @protected - * @param {number} n - * @return {number} julian day of the n'th new moon - */ -Astro._newMoonTime = function(n) { - var k = n - 24724; - var c = k / 1236.8499999999999; - var approx = Astro._poly(c, ilib.data.astro._nmApproxCoeff); - var capE = Astro._poly(c, ilib.data.astro._nmCapECoeff); - var solarAnomaly = Astro._poly(c, ilib.data.astro._nmSolarAnomalyCoeff); - var lunarAnomaly = Astro._poly(c, ilib.data.astro._nmLunarAnomalyCoeff); - var moonArgument = Astro._poly(c, ilib.data.astro._nmMoonArgumentCoeff); - var capOmega = Astro._poly(c, ilib.data.astro._nmCapOmegaCoeff); - var correction = -0.00017 * Astro._dsin(capOmega); - var i; - for (i = 0; i < ilib.data.astro._nmSineCoeff.length; i++) { - correction = correction + ilib.data.astro._nmSineCoeff[i] * Math.pow(capE, ilib.data.astro._nmEFactor[i]) * - Astro._dsin(ilib.data.astro._nmSolarCoeff[i] * solarAnomaly + - ilib.data.astro._nmLunarCoeff[i] * lunarAnomaly + - ilib.data.astro._nmMoonCoeff[i] * moonArgument); - } - var additional = 0; - for (i = 0; i < ilib.data.astro._nmAddConst.length; i++) { - additional = additional + ilib.data.astro._nmAddFactor[i] * - Astro._dsin(ilib.data.astro._nmAddConst[i] + ilib.data.astro._nmAddCoeff[i] * k); - } - var extra = 0.000325 * Astro._dsin(Astro._poly(c, ilib.data.astro._nmExtra)); - return Astro._universalFromEphemeris(approx + correction + extra + additional + RataDie.gregorianEpoch); -}; - -/** - * @static - * @protected - * @param {number} jd - * @return {number} - */ -Astro._lunarSolarAngle = function(jd) { - var lunar = Astro._lunarLongitude(jd); - var solar = Astro._solarLongitude(jd) - return Astro._fixangle(lunar - solar); -}; - -/** - * @static - * @protected - * @param {number} jd - * @return {number} - */ -Astro._newMoonBefore = function (jd) { - var phase = Astro._lunarSolarAngle(jd); - // 11.450086114414322 is the julian day of the 0th full moon - // 29.530588853000001 is the average length of a month - var guess = Math.round((jd - 11.450086114414322 - RataDie.gregorianEpoch) / 29.530588853000001 - phase / 360) - 1; - var current, last; - current = last = Astro._newMoonTime(guess); - while (current < jd) { - guess++; - last = current; - current = Astro._newMoonTime(guess); - } - return last; -}; - -/** - * @static - * @protected - * @param {number} jd - * @return {number} - */ -Astro._newMoonAtOrAfter = function (jd) { - var phase = Astro._lunarSolarAngle(jd); - // 11.450086114414322 is the julian day of the 0th full moon - // 29.530588853000001 is the average length of a month - var guess = Math.round((jd - 11.450086114414322 - RataDie.gregorianEpoch) / 29.530588853000001 - phase / 360); - var current; - while ((current = Astro._newMoonTime(guess)) < jd) { - guess++; - } - return current; -}; - -/** - * @static - * @protected - * @param {number} jd JD to calculate from - * @param {number} longitude longitude to seek - * @returns {number} the JD of the next time that the solar longitude - * is a multiple of the given longitude - */ -Astro._nextSolarLongitude = function(jd, longitude) { - var rate = 365.242189 / 360.0; - var tau = jd + rate * Astro._fixangle(longitude - Astro._solarLongitude(jd)); - var start = Math.max(jd, tau - 5.0); - var end = tau + 5.0; - - return SearchUtils.bisectionSearch(0, start, end, 1e-6, function (l) { - return 180 - Astro._fixangle(Astro._solarLongitude(l) - longitude); - }); -}; - -/** - * Floor the julian day to midnight of the current julian day. - * - * @static - * @protected - * @param {number} jd the julian to round - * @return {number} the jd floored to the midnight of the julian day - */ -Astro._floorToJD = function(jd) { - return Math.floor(jd - 0.5) + 0.5; -}; - -/** - * Floor the julian day to midnight of the current julian day. - * - * @static - * @protected - * @param {number} jd the julian to round - * @return {number} the jd floored to the midnight of the julian day - */ -Astro._ceilToJD = function(jd) { - return Math.ceil(jd + 0.5) - 0.5; -}; - - -/* - * Calendar.js - Represent a calendar object. - * - * Copyright © 2012-2015, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @class - * Superclass for all calendar subclasses that contains shared - * functionality. - * This class is never instantiated on its own. Instead, - * you should use the {@link CalendarFactory} function to manufacture a new - * instance of a subclass of Calendar. - * - * @protected - * @constructor - */ -var Calendar = function() { -}; - -/* place for the subclasses to put their constructors so that the factory method - * can find them. Do this to add your calendar after it's defined: - * Calendar._constructors["mytype"] = Calendar.MyTypeConstructor; - */ -Calendar._constructors = {}; - -Calendar.prototype = { - /** - * Return the type of this calendar. - * - * @return {string} the name of the type of this calendar - */ - getType: function() { - throw "Cannot call methods of abstract class Calendar"; - }, - - /** - * Return the number of months in the given year. The number of months in a year varies - * for some luni-solar calendars because in some years, an extra month is needed to extend the - * days in a year to an entire solar year. The month is represented as a 1-based number - * where 1=first month, 2=second month, etc. - * - * @param {number} year a year for which the number of months is sought - * @return {number} The number of months in the given year - */ - getNumMonths: function(year) { - throw "Cannot call methods of abstract class Calendar"; - }, - - /** - * Return the number of days in a particular month in a particular year. This function - * can return a different number for a month depending on the year because of things - * like leap years. - * - * @param {number} month the month for which the length is sought - * @param {number} year the year within which that month can be found - * @return {number} the number of days within the given month in the given year - */ - getMonLength: function(month, year) { - throw "Cannot call methods of abstract class Calendar"; - }, - - /** - * Return true if the given year is a leap year in this calendar. - * The year parameter may be given as a number. - * - * @param {number} year the year for which the leap year information is being sought - * @return {boolean} true if the given year is a leap year - */ - isLeapYear: function(year) { - throw "Cannot call methods of abstract class Calendar"; - } -}; - -/* - * RataDie.js - Represent the RD date number in the calendar - * - * Copyright © 2014-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - -/** - * @class - * Construct a new RD date number object. The constructor parameters can - * contain any of the following properties: - * - *
      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. - * - *
    • julianday - sets the time of this instance according to the given - * Julian Day instance or the Julian Day given as a float - * - *
    • cycle - any integer giving the number of 60-year cycle in which the date is located. - * If the cycle is not given but the year is, it is assumed that the year parameter is a fictitious - * linear count of years since the beginning of the epoch, much like other calendars. This linear - * count is never used. If both the cycle and year are given, the year is wrapped to the range 0 - * to 60 and treated as if it were a year in the regular 60-year cycle. - * - *
    • year - any integer, including 0 - * - *
    • month - 1 to 12, where 1 means January, 2 means February, etc. - * - *
    • day - 1 to 31 - * - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - * - *
    • minute - 0 to 59 - * - *
    • second - 0 to 59 - * - *
    • millisecond - 0 to 999 - * - *
    • parts - 0 to 1079. Specify the halaqim parts of an hour. Either specify - * the parts or specify the minutes, seconds, and milliseconds, but not both. This is only used - * in the Hebrew calendar. - * - *
    • minute - 0 to 59 - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If the constructor is called with another date instance instead of - * a parameter block, the other instance acts as a parameter block and its - * settings are copied into the current instance.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above are present, then the RD is calculate based on - * the current date at the time of instantiation.

    - * - * If any of the properties from year through millisecond are not - * specified in the params, it is assumed that they have the smallest possible - * value in the range for the property (zero or one).

    - * - * - * @private - * @constructor - * @param {Object=} params parameters that govern the settings and behaviour of this RD date - */ -var RataDie = function(params) { - if (params) { - if (typeof(params.date) !== 'undefined') { - // accept JS Date classes or strings - var date = params.date; - if (!(JSUtils.isDate(date))) { - date = new Date(date); // maybe a string initializer? - } - this._setTime(date.getTime()); - } else if (typeof(params.unixtime) !== 'undefined') { - this._setTime(parseInt(params.unixtime, 10)); - } else if (typeof(params.julianday) !== 'undefined') { - // JD time is defined to be UTC - this._setJulianDay(parseFloat(params.julianday)); - } else if (params.year || params.month || params.day || params.hour || - params.minute || params.second || params.millisecond || params.parts || params.cycle) { - this._setDateComponents(params); - } else if (typeof(params.rd) !== 'undefined') { - /** - * the Rata Die number of this date for this calendar type - * @type {number} - */ - this.rd = (typeof(params.rd) === 'object' && params.rd instanceof RataDie) ? params.rd.rd : params.rd; - } - } - - if (typeof(this.rd) === 'undefined' || isNaN(this.rd)) { - var now = new Date(); - this._setTime(now.getTime()); - } -}; - -/** - * @private - * @const - * @type {number} - */ -RataDie.gregorianEpoch = 1721424.5; - -RataDie.prototype = { - /** - * the difference between a zero Julian day and the zero Gregorian date. - * @protected - * @type {number} - */ - epoch: RataDie.gregorianEpoch, - - /** - * Set the RD of this instance according to the given unix time. Unix time is - * the number of milliseconds since midnight on Jan 1, 1970. - * - * @protected - * @param {number} millis the unix time to set this date to in milliseconds - */ - _setTime: function(millis) { - // 2440587.5 is the julian day of midnight Jan 1, 1970, UTC (Gregorian) - this._setJulianDay(2440587.5 + millis / 86400000); - }, - - /** - * Set the date of this instance using a Julian Day. - * @protected - * @param {number} date the Julian Day to use to set this date - */ - _setJulianDay: function (date) { - var jd = (typeof(date) === 'number') ? new JulianDay(date) : date; - // round to the nearest millisecond - this.rd = MathUtils.halfup((jd.getDate() - this.epoch) * 86400000) / 86400000; - }, - - /** - * Return the rd number of the particular day of the week on or before the - * given rd. eg. The Sunday on or before the given rd. - * @protected - * @param {number} rd the rata die date of the reference date - * @param {number} dayOfWeek the day of the week that is being sought relative - * to the current date - * @return {number} the rd of the day of the week - */ - _onOrBefore: function(rd, dayOfWeek) { - return rd - MathUtils.mod(Math.floor(rd) - dayOfWeek - 2, 7); - }, - - /** - * Return the rd number of the particular day of the week on or before the current rd. - * eg. The Sunday on or before the current rd. If the offset is given, the calculation - * happens in wall time instead of UTC. UTC time may be a day before or day behind - * wall time, so it it would give the wrong day of the week if this calculation was - * done in UTC time when the caller really wanted wall time. Even though the calculation - * may be done in wall time, the return value is nonetheless always given in UTC. - * @param {number} dayOfWeek the day of the week that is being sought relative - * to the current date - * @param {number=} offset RD offset for the time zone. Zero is assumed if this param is - * not given - * @return {number} the rd of the day of the week - */ - onOrBefore: function(dayOfWeek, offset) { - offset = offset || 0; - return this._onOrBefore(this.rd + offset, dayOfWeek) - offset; - }, - - /** - * Return the rd number of the particular day of the week on or before the current rd. - * eg. The Sunday on or before the current rd. If the offset is given, the calculation - * happens in wall time instead of UTC. UTC time may be a day before or day behind - * wall time, so it it would give the wrong day of the week if this calculation was - * done in UTC time when the caller really wanted wall time. Even though the calculation - * may be done in wall time, the return value is nonetheless always given in UTC. - * @param {number} dayOfWeek the day of the week that is being sought relative - * to the reference date - * @param {number=} offset RD offset for the time zone. Zero is assumed if this param is - * not given - * @return {number} the day of the week - */ - onOrAfter: function(dayOfWeek, offset) { - offset = offset || 0; - return this._onOrBefore(this.rd+6+offset, dayOfWeek) - offset; - }, - - /** - * Return the rd number of the particular day of the week before the current rd. - * eg. The Sunday before the current rd. If the offset is given, the calculation - * happens in wall time instead of UTC. UTC time may be a day before or day behind - * wall time, so it it would give the wrong day of the week if this calculation was - * done in UTC time when the caller really wanted wall time. Even though the calculation - * may be done in wall time, the return value is nonetheless always given in UTC. - * @param {number} dayOfWeek the day of the week that is being sought relative - * to the reference date - * @param {number=} offset RD offset for the time zone. Zero is assumed if this param is - * not given - * @return {number} the day of the week - */ - before: function(dayOfWeek, offset) { - offset = offset || 0; - return this._onOrBefore(this.rd-1+offset, dayOfWeek) - offset; - }, - - /** - * Return the rd number of the particular day of the week after the current rd. - * eg. The Sunday after the current rd. If the offset is given, the calculation - * happens in wall time instead of UTC. UTC time may be a day before or day behind - * wall time, so it it would give the wrong day of the week if this calculation was - * done in UTC time when the caller really wanted wall time. Even though the calculation - * may be done in wall time, the return value is nonetheless always given in UTC. - * @param {number} dayOfWeek the day of the week that is being sought relative - * to the reference date - * @param {number=} offset RD offset for the time zone. Zero is assumed if this param is - * not given - * @return {number} the day of the week - */ - after: function(dayOfWeek, offset) { - offset = offset || 0; - return this._onOrBefore(this.rd+7+offset, dayOfWeek) - offset; - }, - - /** - * Return the unix time equivalent to this Gregorian date instance. Unix time is - * the number of milliseconds since midnight on Jan 1, 1970 UTC. This method only - * returns a valid number for dates between midnight, Jan 1, 1970 and - * Jan 19, 2038 at 3:14:07am when the unix time runs out. If this instance - * encodes a date outside of that range, this method will return -1. - * - * @return {number} a number giving the unix time, or -1 if the date is outside the - * valid unix time range - */ - getTime: function() { - // earlier than Jan 1, 1970 - // or later than Jan 19, 2038 at 3:14:07am - var jd = this.getJulianDay(); - if (jd < 2440587.5 || jd > 2465442.634803241) { - return -1; - } - - // avoid the rounding errors in the floating point math by only using - // the whole days from the rd, and then calculating the milliseconds directly - return Math.round((jd - 2440587.5) * 86400000); - }, - - /** - * Return the extended unix time equivalent to this Gregorian date instance. Unix time is - * the number of milliseconds since midnight on Jan 1, 1970 UTC. Traditionally unix time - * (or the type "time_t" in C/C++) is only encoded with a unsigned 32 bit integer, and thus - * runs out on Jan 19, 2038. However, most Javascript engines encode numbers well above - * 32 bits and the Date object allows you to encode up to 100 million days worth of time - * after Jan 1, 1970, and even more interestingly 100 million days worth of time before - * Jan 1, 1970 as well. This method returns the number of milliseconds in that extended - * range. If this instance encodes a date outside of that range, this method will return - * NaN. - * - * @return {number} a number giving the extended unix time, or NaN if the date is outside - * the valid extended unix time range - */ - getTimeExtended: function() { - var jd = this.getJulianDay(); - - // test if earlier than Jan 1, 1970 - 100 million days - // or later than Jan 1, 1970 + 100 million days - if (jd < -97559412.5 || jd > 102440587.5) { - return NaN; - } - - // avoid the rounding errors in the floating point math by only using - // the whole days from the rd, and then calculating the milliseconds directly - return Math.round((jd - 2440587.5) * 86400000); - }, - - /** - * Return the Julian Day equivalent to this calendar date as a number. - * This returns the julian day in UTC. - * - * @return {number} the julian date equivalent of this date - */ - getJulianDay: function() { - return this.rd + this.epoch; - }, - - /** - * Return the Rata Die (fixed day) number of this RD date. - * - * @return {number} the rd date as a number - */ - getRataDie: function() { - return this.rd; - } -}; - - -/* - * JulianDay.js - A Julian Day object. - * - * Copyright © 2012-2015, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @class - * A Julian Day class. A Julian Day is a date based on the Julian Day count - * of time invented by Joseph Scaliger in 1583 for use with astronomical calculations. - * Do not confuse it with a date in the Julian calendar, which it has very - * little in common with. The naming is unfortunately close, and comes from history.

    - * - * - * @constructor - * @param {number} num the Julian Day expressed as a floating point number - */ -var JulianDay = function(num) { - this.jd = num; - this.days = Math.floor(this.jd); - this.frac = num - this.days; -}; - -JulianDay.prototype = { - /** - * Return the integral portion of this Julian Day instance. This corresponds to - * the number of days since the beginning of the epoch. - * - * @return {number} the integral portion of this Julian Day - */ - getDays: function() { - return this.days; - }, - - /** - * Set the date of this Julian Day instance. - * - * @param {number} days the julian date expressed as a floating point number - */ - setDays: function(days) { - this.days = Math.floor(days); - this.jd = this.days + this.frac; - }, - - /** - * Return the fractional portion of this Julian Day instance. This portion - * corresponds to the time of day for the instance. - */ - getDayFraction: function() { - return this.frac; - }, - - /** - * Set the fractional part of the Julian Day. The fractional part represents - * the portion of a fully day. Julian dates start at noon, and proceed until - * noon of the next day. That would mean midnight is represented as a fractional - * part of 0.5. - * - * @param {number} fraction The fractional part of the Julian date - */ - setDayFraction: function(fraction) { - var t = Math.floor(fraction); - this.frac = fraction - t; - this.jd = this.days + this.frac; - }, - - /** - * Return the Julian Day expressed as a floating point number. - * @return {number} the Julian Day as a number - */ - getDate: function () { - return this.jd; - }, - - /** - * Set the date of this Julian Day instance. - * - * @param {number} num the numeric Julian Day to set into this instance - */ - setDate: function (num) { - this.jd = num; - }, - - /** - * Add an offset to the current date instance. The offset should be expressed in - * terms of Julian days. That is, each integral unit represents one day of time, and - * fractional part represents a fraction of a regular 24-hour day. - * - * @param {number} offset an amount to add (or subtract) to the current result instance. - */ - addDate: function(offset) { - if (typeof(offset) === 'number') { - this.jd += offset; - this.days = Math.floor(this.jd); - this.frac = this.jd - this.days; - } - } -}; - - -/* - * JulianCal.js - Represent a Julian calendar object. - * - * Copyright © 2012-2017, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - -/** - * @class - * Construct a new Julian calendar object. This class encodes information about - * a Julian calendar.

    - * - * @param {Object=} options Options governing the construction of this instance - * @constructor - * @extends Calendar - */ -var JulianCal = function(options) { - this.type = "julian"; - - if (options && typeof(options.onLoad) === "function") { - options.onLoad(this); - } -}; - -/* the lengths of each month */ -JulianCal.monthLengths = [ - 31, /* Jan */ - 28, /* Feb */ - 31, /* Mar */ - 30, /* Apr */ - 31, /* May */ - 30, /* Jun */ - 31, /* Jul */ - 31, /* Aug */ - 30, /* Sep */ - 31, /* Oct */ - 30, /* Nov */ - 31 /* Dec */ -]; - -/** - * the cumulative lengths of each month, for a non-leap year - * @private - * @const - * @type Array. - */ -JulianCal.cumMonthLengths = [ - 0, /* Jan */ - 31, /* Feb */ - 59, /* Mar */ - 90, /* Apr */ - 120, /* May */ - 151, /* Jun */ - 181, /* Jul */ - 212, /* Aug */ - 243, /* Sep */ - 273, /* Oct */ - 304, /* Nov */ - 334, /* Dec */ - 365 -]; - -/** - * the cumulative lengths of each month, for a leap year - * @private - * @const - * @type Array. - */ -JulianCal.cumMonthLengthsLeap = [ - 0, /* Jan */ - 31, /* Feb */ - 60, /* Mar */ - 91, /* Apr */ - 121, /* May */ - 152, /* Jun */ - 182, /* Jul */ - 213, /* Aug */ - 244, /* Sep */ - 274, /* Oct */ - 305, /* Nov */ - 335, /* Dec */ - 366 -]; - -/** - * Return the number of months in the given year. The number of months in a year varies - * for lunar calendars because in some years, an extra month is needed to extend the - * days in a year to an entire solar year. The month is represented as a 1-based number - * where 1=Jaunary, 2=February, etc. until 12=December. - * - * @param {number} year a year for which the number of months is sought - */ -JulianCal.prototype.getNumMonths = function(year) { - return 12; -}; - -/** - * Return the number of days in a particular month in a particular year. This function - * can return a different number for a month depending on the year because of things - * like leap years. - * - * @param {number} month the month for which the length is sought - * @param {number} year the year within which that month can be found - * @return {number} the number of days within the given month in the given year - */ -JulianCal.prototype.getMonLength = function(month, year) { - if (month !== 2 || !this.isLeapYear(year)) { - return JulianCal.monthLengths[month-1]; - } else { - return 29; - } -}; - -/** - * Return true if the given year is a leap year in the Julian calendar. - * The year parameter may be given as a number, or as a JulDate object. - * @param {number|JulianDate} year the year for which the leap year information is being sought - * @return {boolean} true if the given year is a leap year - */ -JulianCal.prototype.isLeapYear = function(year) { - var y = (typeof(year) === 'number' ? year : year.year); - return MathUtils.mod(y, 4) === ((year > 0) ? 0 : 3); -}; - -/** - * Return the type of this calendar. - * - * @return {string} the name of the type of this calendar - */ -JulianCal.prototype.getType = function() { - return this.type; -}; - - -/* register this calendar for the factory method */ -Calendar._constructors["julian"] = JulianCal; - - -/* - * JulianDate.js - Represent a date in the Julian calendar - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - -/** - * @class - * Construct a new Julian RD date number object. The constructor parameters can - * contain any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. - * - *
    • julianday - sets the time of this instance according to the given - * Julian Day instance or the Julian Day given as a float - * - *
    • year - any integer, including 0 - * - *
    • month - 1 to 12, where 1 means January, 2 means February, etc. - * - *
    • day - 1 to 31 - * - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - * - *
    • minute - 0 to 59 - * - *
    • second - 0 to 59 - * - *
    • millisecond - 0 to 999 - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If the constructor is called with another Julian date instance instead of - * a parameter block, the other instance acts as a parameter block and its - * settings are copied into the current instance.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above are present, then the RD is calculate based on - * the current date at the time of instantiation.

    - * - * If any of the properties from year through millisecond are not - * specified in the params, it is assumed that they have the smallest possible - * value in the range for the property (zero or one).

    - * - * - * @private - * @constructor - * @extends RataDie - * @param {Object=} params parameters that govern the settings and behaviour of this Julian RD date - */ -var JulianRataDie = function(params) { - this.cal = params && params.cal || new JulianCal(); - this.rd = NaN; - RataDie.call(this, params); -}; - -JulianRataDie.prototype = new RataDie(); -JulianRataDie.prototype.parent = RataDie; -JulianRataDie.prototype.constructor = JulianRataDie; - -/** - * The difference between a zero Julian day and the first Julian date - * of Friday, July 16, 622 CE Julian. - * @private - * @type number - */ -JulianRataDie.prototype.epoch = 1721422.5; - -/** - * Calculate the Rata Die (fixed day) number of the given date from the - * date components. - * - * @protected - * @param {Object} date the date components to calculate the RD from - */ -JulianRataDie.prototype._setDateComponents = function(date) { - var year = date.year + ((date.year < 0) ? 1 : 0); - var years = 365 * (year - 1) + Math.floor((year-1)/4); - var dayInYear = (date.month > 1 ? JulianCal.cumMonthLengths[date.month-1] : 0) + - date.day + - (this.cal.isLeapYear(date.year) && date.month > 2 ? 1 : 0); - var rdtime = (date.hour * 3600000 + - date.minute * 60000 + - date.second * 1000 + - date.millisecond) / - 86400000; - - /* - console.log("calcRataDie: converting " + JSON.stringify(parts)); - console.log("getRataDie: year is " + years); - console.log("getRataDie: day in year is " + dayInYear); - console.log("getRataDie: rdtime is " + rdtime); - console.log("getRataDie: rd is " + (years + dayInYear + rdtime)); - */ - - this.rd = years + dayInYear + rdtime; -}; - -/* - * JulianDate.js - Represent a date in the Julian calendar - * - * Copyright © 2012-2015, 2018, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - - - - - - - - -/** - * @class - * Construct a new date object for the Julian Calendar. The constructor can be called - * with a parameter object that contains any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970 (Gregorian). - *
    • julianday - the Julian Day to set into this date - *
    • year - any integer except 0. Years go from -1 (BCE) to 1 (CE), skipping the zero - * year which doesn't exist in the Julian calendar - *
    • month - 1 to 12, where 1 means January, 2 means February, etc. - *
    • day - 1 to 31 - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - *
    • minute - 0 to 59 - *
    • second - 0 to 59 - *
    • millisecond - 0 to 999 - *
    • locale - the TimeZone instance or time zone name as a string - * of this julian date. The date/time is kept in the local time. The time zone - * is used later if this date is formatted according to a different time zone and - * the difference has to be calculated, or when the date format has a time zone - * component in it. - *
    • timezone - the time zone of this instance. If the time zone is not - * given, it can be inferred from this locale. For locales that span multiple - * time zones, the one with the largest population is chosen as the one that - * represents the locale. - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * NB. The Julian Day - * (JulianDay) object is a different object than a - * date in - * the Julian calendar and the two are not to be confused. The Julian Day - * object represents time as a number of whole and fractional days since the - * beginning of the epoch, whereas a date in the Julian - * calendar is a regular date that signifies year, month, day, etc. using the rules - * of the Julian calendar. The naming of Julian Days and the Julian calendar are - * unfortunately close, and come from history.

    - * - * If called with another Julian date argument, the date components of the given - * date are copied into the current one.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above - * from unixtime through millisecond are present, then the date - * components are - * filled in with the current date at the time of instantiation. Note that if - * you do not give the time zone when defaulting to the current time and the - * time zone for all of ilib was not set with ilib.setTimeZone(), then the - * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich - * Mean Time").

    - * - * - * @constructor - * @extends IDate - * @param {Object=} params parameters that govern the settings and behaviour of this Julian date - */ -var JulianDate = function(params) { - this.cal = new JulianCal(); - - params = params || {}; - - if (params.timezone) { - this.timezone = params.timezone; - } - if (params.locale) { - this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; - } - - if (!this.timezone) { - if (this.locale) { - new LocaleInfo(this.locale, { - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(li) { - this.li = li; - this.timezone = li.getTimeZone(); - this._init(params); - }) - }); - } else { - this.timezone = "local"; - this._init(params); - } - } else { - this._init(params); - } - -}; - -JulianDate.prototype = new IDate({noinstance: true}); -JulianDate.prototype.parent = IDate; -JulianDate.prototype.constructor = JulianDate; - -/** - * Initialize the date - * @private - */ -JulianDate.prototype._init = function (params) { - if (params.year || params.month || params.day || params.hour || - params.minute || params.second || params.millisecond ) { - /** - * Year in the Julian calendar. - * @type number - */ - this.year = parseInt(params.year, 10) || 0; - /** - * The month number, ranging from 1 (January) to 12 (December). - * @type number - */ - this.month = parseInt(params.month, 10) || 1; - /** - * The day of the month. This ranges from 1 to 31. - * @type number - */ - this.day = parseInt(params.day, 10) || 1; - /** - * The hour of the day. This can be a number from 0 to 23, as times are - * stored unambiguously in the 24-hour clock. - * @type number - */ - this.hour = parseInt(params.hour, 10) || 0; - /** - * The minute of the hours. Ranges from 0 to 59. - * @type number - */ - this.minute = parseInt(params.minute, 10) || 0; - /** - * The second of the minute. Ranges from 0 to 59. - * @type number - */ - this.second = parseInt(params.second, 10) || 0; - /** - * The millisecond of the second. Ranges from 0 to 999. - * @type number - */ - this.millisecond = parseInt(params.millisecond, 10) || 0; - - /** - * The day of the year. Ranges from 1 to 383. - * @type number - */ - this.dayOfYear = parseInt(params.dayOfYear, 10); - - if (typeof(params.dst) === 'boolean') { - this.dst = params.dst; - } - - this.rd = this.newRd(this); - - new TimeZone({ - id: this.timezone, - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(tz) { - this.tz = tz; - // add the time zone offset to the rd to convert to UTC - // getOffsetMillis requires that this.year, this.rd, and this.dst - // are set in order to figure out which time zone rules apply and - // what the offset is at that point in the year - this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; - if (this.offset !== 0) { - this.rd = this.newRd({ - rd: this.rd.getRataDie() - this.offset - }); - } - this._init2(params); - }) - }); - } else { - this._init2(params); - } -}; - -/** - * Finish initializing the date - * @private - */ -JulianDate.prototype._init2 = function (params) { - if (!this.rd) { - this.rd = this.newRd(params); - this._calcDateComponents(); - } - - if (typeof(params.onLoad) === "function") { - params.onLoad(this); - } -}; - -/** - * Return a new RD for this date type using the given params. - * @protected - * @param {Object=} params the parameters used to create this rata die instance - * @returns {RataDie} the new RD instance for the given params - */ -JulianDate.prototype.newRd = function (params) { - return new JulianRataDie(params); -}; - -/** - * Return the year for the given RD - * @private - * @param {number} rd RD to calculate from - * @returns {number} the year for the RD - */ -JulianDate.prototype._calcYear = function(rd) { - var year = Math.floor((4*(Math.floor(rd)-1) + 1464)/1461); - - return (year <= 0) ? year - 1 : year; -}; - -/** - * Calculate date components for the given RD date. - * @private - */ -JulianDate.prototype._calcDateComponents = function () { - var remainder, - cumulative, - rd = this.rd.getRataDie(); - - this.year = this._calcYear(rd); - - if (typeof(this.offset) === "undefined") { - this.year = this._calcYear(rd); - - // now offset the RD by the time zone, then recalculate in case we were - // near the year boundary - if (!this.tz) { - this.tz = new TimeZone({id: this.timezone}); - } - this.offset = this.tz.getOffsetMillis(this) / 86400000; - } - - if (this.offset !== 0) { - rd += this.offset; - this.year = this._calcYear(rd); - } - - var jan1 = this.newRd({ - year: this.year, - month: 1, - day: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0 - }); - remainder = rd + 1 - jan1.getRataDie(); - - cumulative = this.cal.isLeapYear(this.year) ? - JulianCal.cumMonthLengthsLeap : - JulianCal.cumMonthLengths; - - this.month = SearchUtils.bsearch(Math.floor(remainder), cumulative); - remainder = remainder - cumulative[this.month-1]; - - this.day = Math.floor(remainder); - remainder -= this.day; - // now convert to milliseconds for the rest of the calculation - remainder = Math.round(remainder * 86400000); - - this.hour = Math.floor(remainder/3600000); - remainder -= this.hour * 3600000; - - this.minute = Math.floor(remainder/60000); - remainder -= this.minute * 60000; - - this.second = Math.floor(remainder/1000); - remainder -= this.second * 1000; - - this.millisecond = remainder; -}; - -/** - * Return the day of the week of this date. The day of the week is encoded - * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. - * - * @return {number} the day of the week - */ -JulianDate.prototype.getDayOfWeek = function() { - var rd = Math.floor(this.rd.getRataDie() + (this.offset || 0)); - return MathUtils.mod(rd-2, 7); -}; - -/** - * Return the name of the calendar that governs this date. - * - * @return {string} a string giving the name of the calendar - */ -JulianDate.prototype.getCalendar = function() { - return "julian"; -}; - -//register with the factory method -IDate._constructors["julian"] = JulianDate; - - -/* - * GregorianCal.js - Represent a Gregorian calendar object. - * - * Copyright © 2012-2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - -/** - * @class - * Construct a new Gregorian calendar object. This class encodes information about - * a Gregorian calendar.

    - * - * - * @constructor - * @param {{noinstance:boolean}=} options - * @extends Calendar - */ -var GregorianCal = function(options) { - if (!options || !options.noinstance) { - this.type = "gregorian"; - } - - if (options && typeof(options.onLoad) === "function") { - options.onLoad(this); - } -}; - -/** - * the lengths of each month - * @private - * @const - * @type Array. - */ -GregorianCal.monthLengths = [ - 31, /* Jan */ - 28, /* Feb */ - 31, /* Mar */ - 30, /* Apr */ - 31, /* May */ - 30, /* Jun */ - 31, /* Jul */ - 31, /* Aug */ - 30, /* Sep */ - 31, /* Oct */ - 30, /* Nov */ - 31 /* Dec */ -]; - -/** - * Return the number of months in the given year. The number of months in a year varies - * for some luni-solar calendars because in some years, an extra month is needed to extend the - * days in a year to an entire solar year. The month is represented as a 1-based number - * where 1=first month, 2=second month, etc. - * - * @param {number} year a year for which the number of months is sought - * @return {number} The number of months in the given year - */ -GregorianCal.prototype.getNumMonths = function(year) { - return 12; -}; - -/** - * Return the number of days in a particular month in a particular year. This function - * can return a different number for a month depending on the year because of things - * like leap years. - * - * @param {number} month the month for which the length is sought - * @param {number} year the year within which that month can be found - * @return {number} the number of days within the given month in the given year - */ -GregorianCal.prototype.getMonLength = function(month, year) { - if (month !== 2 || !this.isLeapYear(year)) { - return GregorianCal.monthLengths[month-1]; - } else { - return 29; - } -}; - -/** - * Return true if the given year is a leap year in the Gregorian calendar. - * The year parameter may be given as a number, or as a GregDate object. - * @param {number|GregorianDate} year the year for which the leap year information is being sought - * @return {boolean} true if the given year is a leap year - */ -GregorianCal.prototype.isLeapYear = function(year) { - var y = (typeof(year) === 'number' ? year : year.getYears()); - var centuries = MathUtils.mod(y, 400); - return (MathUtils.mod(y, 4) === 0 && centuries !== 100 && centuries !== 200 && centuries !== 300); -}; - -/** - * Return the type of this calendar. - * - * @return {string} the name of the type of this calendar - */ -GregorianCal.prototype.getType = function() { - return this.type; -}; - -/* register this calendar for the factory method */ -Calendar._constructors["gregorian"] = GregorianCal; - - -/* - * GregorianDate.js - Represent a date in the Gregorian calendar - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - - - - - - - - -/** - * @class - * Construct a new Gregorian date object. The constructor parameters can - * contain any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. - *
    • julianday - sets the time of this instance according to the given - * Julian Day instance or the Julian Day given as a float - * - *
    • year - any integer, including 0 - * - *
    • month - 1 to 12, where 1 means January, 2 means February, etc. - * - *
    • day - 1 to 31 - * - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - * - *
    • minute - 0 to 59 - * - *
    • second - 0 to 59 - * - *
    • millisecond - 0 to 999 - * - *
    • dst - boolean used to specify whether the given time components are - * intended to be in daylight time or not. This is only used in the overlap - * time when transitioning from DST to standard time, and the time components are - * ambiguous. Otherwise at all other times of the year, this flag is ignored. - * If you specify the date using unix time (UTC) or a julian day, then the time is - * already unambiguous and this flag does not need to be specified.

      - * For example, in the US, the transition out of daylight savings time - * in 2014 happens at Nov 2, 2014 2:00am Daylight Time, when the time falls - * back to Nov 2, 2014 1:00am Standard Time. If you give a date/time components as - * "Nov 2, 2014 1:30am", then there are two 1:30am times in that day, and you would - * have to give the standard flag to indicate which of those two you mean. - * (dst=true means daylight time, dst=false means standard time).

      - * - *
    • timezone - the TimeZone instance or time zone name as a string - * of this gregorian date. The date/time is kept in the local time. The time zone - * is used later if this date is formatted according to a different time zone and - * the difference has to be calculated, or when the date format has a time zone - * component in it. - * - *
    • locale - locale for this gregorian date. If the time zone is not - * given, it can be inferred from this locale. For locales that span multiple - * time zones, the one with the largest population is chosen as the one that - * represents the locale. - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - * - *
    • onLoad - a callback function to call when this date object is fully - * loaded. When the onLoad option is given, this date object will attempt to - * load any missing locale data using the ilib loader callback. - * When the constructor is done (even if the data is already preassembled), the - * onLoad function is called with the current instance as a parameter, so this - * callback can be used with preassembled or dynamic loading or a mix of the two. - * - *
    • sync - tell whether to load any missing locale data synchronously or - * asynchronously. If this option is given as "false", then the "onLoad" - * callback must be given, as the instance returned from this constructor will - * not be usable for a while. - * - *
    • loadParams - an object containing parameters to pass to the - * loader callback function when locale data is missing. The parameters are not - * interpretted or modified in any way. They are simply passed along. The object - * may contain any property/value pairs as long as the calling code is in - * agreement with the loader callback function as to what those parameters mean. - *
    - * - * If the constructor is called with another Gregorian date instance instead of - * a parameter block, the other instance acts as a parameter block and its - * settings are copied into the current instance.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above - * from unixtime through millisecond are present, then the date - * components are - * filled in with the current date at the time of instantiation. Note that if - * you do not give the time zone when defaulting to the current time and the - * time zone for all of ilib was not set with ilib.setTimeZone(), then the - * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich - * Mean Time").

    - * - * If any of the properties from year through millisecond are not - * specified in the params, it is assumed that they have the smallest possible - * value in the range for the property (zero or one).

    - * - * - * @constructor - * @extends IDate - * @param {Object=} params parameters that govern the settings and behaviour of this Gregorian date - */ -var GregorianDate = function(params) { - this.cal = new GregorianCal(); - - params = params || {}; - if (typeof(params.noinstance) === 'boolean' && params.noinstance) { - // for doing inheritance, so don't need to fill in the data. The - // inheriting class only wants the methods. - return; - } - - if (params.timezone) { - this.timezone = params.timezone.toString(); - } - if (params.locale) { - this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; - } - - if (!this.timezone) { - if (this.locale) { - new LocaleInfo(this.locale, { - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(li) { - this.li = li; - this.timezone = li.getTimeZone(); - this._init(params); - }) - }); - } else { - this.timezone = "local"; - this._init(params); - } - } else { - this._init(params); - } -}; - -GregorianDate.prototype = new IDate({noinstance: true}); -GregorianDate.prototype.parent = IDate; -GregorianDate.prototype.constructor = GregorianDate; - -/** - * Initialize this date object - * @private - */ -GregorianDate.prototype._init = function (params) { - if (params.year || params.month || params.day || params.hour || - params.minute || params.second || params.millisecond ) { - this.year = parseInt(params.year, 10) || 0; - this.month = parseInt(params.month, 10) || 1; - this.day = parseInt(params.day, 10) || 1; - this.hour = parseInt(params.hour, 10) || 0; - this.minute = parseInt(params.minute, 10) || 0; - this.second = parseInt(params.second, 10) || 0; - this.millisecond = parseInt(params.millisecond, 10) || 0; - if (typeof(params.dst) === 'boolean') { - this.dst = params.dst; - } - this.rd = this.newRd(params); - - // add the time zone offset to the rd to convert to UTC - this.offset = 0; - if (this.timezone === "local" && typeof(params.dst) === 'undefined') { - // if dst is defined, the intrinsic Date object has no way of specifying which version of a time you mean - // in the overlap time at the end of DST. Do you mean the daylight 1:30am or the standard 1:30am? In this - // case, use the ilib calculations below, which can distinguish between the two properly - var d = new Date(this.year, this.month-1, this.day, this.hour, this.minute, this.second, this.millisecond); - var hBefore = new Date(this.year, this.month-1, this.day, this.hour - 1, this.minute, this.second, this.millisecond); - this.offset = -d.getTimezoneOffset() / 1440; - if (d.getTimezoneOffset() < hBefore.getTimezoneOffset()) { - var startOffset = -hBefore.getTimezoneOffset() / 1440; - this.rd = this.newRd({ - rd: this.rd.getRataDie() - startOffset - }); - } else { - this.rd = this.newRd({ - rd: this.rd.getRataDie() - this.offset - }); - } - this._init2(params); - } else { - new TimeZone({ - id: this.timezone, - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(tz) { - this.tz = tz; - - // getOffsetMillis requires that this.year, this.rd, and this.dst - // are set in order to figure out which time zone rules apply and - // what the offset is at that point in the year - this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; - this.rd = this.newRd({ - rd: this.rd.getRataDie() - this.offset - }); - this._init2(params); - }) - }); - } - } else { - this._init2(params); - } -}; - -/** - * Finish initializing this date object - * @private - */ -GregorianDate.prototype._init2 = function (params) { - if (!this.rd) { - this.rd = this.newRd(params); - this._calcDateComponents(); - } - - if (typeof(params.onLoad) === "function") { - params.onLoad(this); - } -}; - -/** - * Return a new RD for this date type using the given params. - * @private - * @param {Object=} params the parameters used to create this rata die instance - * @returns {RataDie} the new RD instance for the given params - */ -GregorianDate.prototype.newRd = function (params) { - return new GregRataDie(params); -}; - -/** - * Calculates the Gregorian year for a given rd number. - * @private - * @static - */ -GregorianDate._calcYear = function(rd) { - var days400, - days100, - days4, - years400, - years100, - years4, - years1, - year; - - years400 = Math.floor((rd - 1) / 146097); - days400 = MathUtils.mod((rd - 1), 146097); - years100 = Math.floor(days400 / 36524); - days100 = MathUtils.mod(days400, 36524); - years4 = Math.floor(days100 / 1461); - days4 = MathUtils.mod(days100, 1461); - years1 = Math.floor(days4 / 365); - - year = 400 * years400 + 100 * years100 + 4 * years4 + years1; - if (years100 !== 4 && years1 !== 4) { - year++; - } - return year; -}; - -/** - * @private - */ -GregorianDate.prototype._calcYear = function(rd) { - return GregorianDate._calcYear(rd); -}; - -/** - * Calculate the date components for the current time zone - * @private - */ -GregorianDate.prototype._calcDateComponents = function () { - if (this.timezone === "local" && this.rd.getRataDie() >= -99280837 && this.rd.getRataDie() <= 100719163) { - // console.log("using js Date to calculate offset"); - // use the intrinsic JS Date object to do the tz conversion for us, which - // guarantees that it follows the system tz database settings - var d = new Date(this.rd.getTimeExtended()); - - /** - * Year in the Gregorian calendar. - * @type number - */ - this.year = d.getFullYear(); - - /** - * The month number, ranging from 1 (January) to 12 (December). - * @type number - */ - this.month = d.getMonth()+1; - - /** - * The day of the month. This ranges from 1 to 31. - * @type number - */ - this.day = d.getDate(); - - /** - * The hour of the day. This can be a number from 0 to 23, as times are - * stored unambiguously in the 24-hour clock. - * @type number - */ - this.hour = d.getHours(); - - /** - * The minute of the hours. Ranges from 0 to 59. - * @type number - */ - this.minute = d.getMinutes(); - - /** - * The second of the minute. Ranges from 0 to 59. - * @type number - */ - this.second = d.getSeconds(); - - /** - * The millisecond of the second. Ranges from 0 to 999. - * @type number - */ - this.millisecond = d.getMilliseconds(); - - this.offset = -d.getTimezoneOffset() / 1440; - } else { - // console.log("using ilib to calculate offset. tz is " + this.timezone); - // console.log("GregDate._calcDateComponents: date is " + JSON.stringify(this) + " parent is " + JSON.stringify(this.parent) + " and parent.parent is " + JSON.stringify(this.parent.parent)); - if (typeof(this.offset) === "undefined") { - // console.log("calculating offset"); - this.year = this._calcYear(this.rd.getRataDie()); - - // now offset the RD by the time zone, then recalculate in case we were - // near the year boundary - if (!this.tz) { - this.tz = new TimeZone({id: this.timezone}); - } - this.offset = this.tz.getOffsetMillis(this) / 86400000; - // } else { - // console.log("offset is already defined somehow. type is " + typeof(this.offset)); - // console.trace("Stack is this one"); - } - // console.log("offset is " + this.offset); - var rd = this.rd.getRataDie(); - if (this.offset !== 0) { - rd += this.offset; - } - this.year = this._calcYear(rd); - - var yearStartRd = this.newRd({ - year: this.year, - month: 1, - day: 1, - cal: this.cal - }); - - // remainder is days into the year - var remainder = rd - yearStartRd.getRataDie() + 1; - - var cumulative = GregorianCal.prototype.isLeapYear.call(this.cal, this.year) ? - GregRataDie.cumMonthLengthsLeap : - GregRataDie.cumMonthLengths; - - this.month = SearchUtils.bsearch(Math.floor(remainder), cumulative); - remainder = remainder - cumulative[this.month-1]; - - this.day = Math.floor(remainder); - remainder -= this.day; - // now convert to milliseconds for the rest of the calculation - remainder = Math.round(remainder * 86400000); - - this.hour = Math.floor(remainder/3600000); - remainder -= this.hour * 3600000; - - this.minute = Math.floor(remainder/60000); - remainder -= this.minute * 60000; - - this.second = Math.floor(remainder/1000); - remainder -= this.second * 1000; - - this.millisecond = Math.floor(remainder); - } -}; - -/** - * Return the day of the week of this date. The day of the week is encoded - * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. - * - * @return {number} the day of the week - */ -GregorianDate.prototype.getDayOfWeek = function() { - var rd = Math.floor(this.rd.getRataDie() + (this.offset || 0)); - return MathUtils.mod(rd, 7); -}; - -/** - * Return the ordinal day of the year. Days are counted from 1 and proceed linearly up to - * 365, regardless of months or weeks, etc. That is, January 1st is day 1, and - * December 31st is 365 in regular years, or 366 in leap years. - * @return {number} the ordinal day of the year - */ -GregorianDate.prototype.getDayOfYear = function() { - var cumulativeMap = this.cal.isLeapYear(this.year) ? - GregRataDie.cumMonthLengthsLeap : - GregRataDie.cumMonthLengths; - - return cumulativeMap[this.month-1] + this.day; -}; - -/** - * Return the era for this date as a number. The value for the era for Gregorian - * calendars is -1 for "before the common era" (BCE) and 1 for "the common era" (CE). - * BCE dates are any date before Jan 1, 1 CE. In the proleptic Gregorian calendar, - * there is a year 0, so any years that are negative or zero are BCE. In the Julian - * calendar, there is no year 0. Instead, the calendar goes straight from year -1 to - * 1. - * @return {number} 1 if this date is in the common era, -1 if it is before the - * common era - */ -GregorianDate.prototype.getEra = function() { - return (this.year < 1) ? -1 : 1; -}; - -/** - * Return the name of the calendar that governs this date. - * - * @return {string} a string giving the name of the calendar - */ -GregorianDate.prototype.getCalendar = function() { - return "gregorian"; -}; - -// register with the factory method -IDate._constructors["gregorian"] = GregorianDate; - - -/* - * GregRataDie.js - Represent the RD date number in the Gregorian calendar - * - * Copyright © 2014-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - -/** - * @class - * Construct a new Gregorian RD date number object. The constructor parameters can - * contain any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. - * - *
    • julianday - sets the time of this instance according to the given - * Julian Day instance or the Julian Day given as a float - * - *
    • year - any integer, including 0 - * - *
    • month - 1 to 12, where 1 means January, 2 means February, etc. - * - *
    • day - 1 to 31 - * - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - * - *
    • minute - 0 to 59 - * - *
    • second - 0 to 59 - * - *
    • millisecond - 0 to 999 - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If the constructor is called with another Gregorian date instance instead of - * a parameter block, the other instance acts as a parameter block and its - * settings are copied into the current instance.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above are present, then the RD is calculate based on - * the current date at the time of instantiation.

    - * - * If any of the properties from year through millisecond are not - * specified in the params, it is assumed that they have the smallest possible - * value in the range for the property (zero or one).

    - * - * - * @private - * @constructor - * @extends RataDie - * @param {Object=} params parameters that govern the settings and behaviour of this Gregorian RD date - */ -var GregRataDie = function(params) { - this.cal = params && params.cal || new GregorianCal(); - /** @type {number|undefined} */ - this.rd = NaN; - RataDie.call(this, params); -}; - -GregRataDie.prototype = new RataDie(); -GregRataDie.prototype.parent = RataDie; -GregRataDie.prototype.constructor = GregRataDie; - -/** - * the cumulative lengths of each month, for a non-leap year - * @private - * @const - * @type Array. - */ -GregRataDie.cumMonthLengths = [ - 0, /* Jan */ - 31, /* Feb */ - 59, /* Mar */ - 90, /* Apr */ - 120, /* May */ - 151, /* Jun */ - 181, /* Jul */ - 212, /* Aug */ - 243, /* Sep */ - 273, /* Oct */ - 304, /* Nov */ - 334, /* Dec */ - 365 -]; - -/** - * the cumulative lengths of each month, for a leap year - * @private - * @const - * @type Array. - */ -GregRataDie.cumMonthLengthsLeap = [ - 0, /* Jan */ - 31, /* Feb */ - 60, /* Mar */ - 91, /* Apr */ - 121, /* May */ - 152, /* Jun */ - 182, /* Jul */ - 213, /* Aug */ - 244, /* Sep */ - 274, /* Oct */ - 305, /* Nov */ - 335, /* Dec */ - 366 -]; - -/** - * Calculate the Rata Die (fixed day) number of the given date. - * - * @private - * @param {Object} date the date components to calculate the RD from - */ -GregRataDie.prototype._setDateComponents = function(date) { - var year = parseInt(date.year, 10) || 0; - var month = parseInt(date.month, 10) || 1; - var day = parseInt(date.day, 10) || 1; - var hour = parseInt(date.hour, 10) || 0; - var minute = parseInt(date.minute, 10) || 0; - var second = parseInt(date.second, 10) || 0; - var millisecond = parseInt(date.millisecond, 10) || 0; - - var years = 365 * (year - 1) + - Math.floor((year-1)/4) - - Math.floor((year-1)/100) + - Math.floor((year-1)/400); - - var dayInYear = (month > 1 ? GregRataDie.cumMonthLengths[month-1] : 0) + - day + - (GregorianCal.prototype.isLeapYear.call(this.cal, year) && month > 2 ? 1 : 0); - var rdtime = (hour * 3600000 + - minute * 60000 + - second * 1000 + - millisecond) / - 86400000; - /* - debug("getRataDie: converting " + JSON.stringify(this)); - debug("getRataDie: year is " + years); - debug("getRataDie: day in year is " + dayInYear); - debug("getRataDie: rdtime is " + rdtime); - debug("getRataDie: rd is " + (years + dayInYear + rdtime)); - */ - - /** - * the RD number of this Gregorian date - * @type {number|undefined} - */ - this.rd = years + dayInYear + rdtime; -}; - -/** - * Return the rd number of the particular day of the week on or before the - * given rd. eg. The Sunday on or before the given rd. - * @private - * @param {number} rd the rata die date of the reference date - * @param {number} dayOfWeek the day of the week that is being sought relative - * to the current date - * @return {number} the rd of the day of the week - */ -GregRataDie.prototype._onOrBefore = function(rd, dayOfWeek) { - return rd - MathUtils.mod(Math.floor(rd) - dayOfWeek, 7); -}; - - -/* - * HebrewRataDie.js - Represent an RD date in the Hebrew calendar - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - -/** - * @class - * Construct a new Hebrew RD date number object. The constructor parameters can - * contain any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. - * - *
    • julianday - sets the time of this instance according to the given - * Julian Day instance or the Julian Day given as a float - * - *
    • year - any integer, including 0 - * - *
    • month - 1 to 12, where 1 means January, 2 means February, etc. - * - *
    • day - 1 to 31 - * - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - * - *
    • parts - 0 to 1079. Specify the halaqim parts of an hour. Either specify - * the parts or specify the minutes, seconds, and milliseconds, but not both. - * - *
    • minute - 0 to 59 - * - *
    • second - 0 to 59 - * - *
    • millisecond - 0 to 999 - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If the constructor is called with another Hebrew date instance instead of - * a parameter block, the other instance acts as a parameter block and its - * settings are copied into the current instance.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above are present, then the RD is calculate based on - * the current date at the time of instantiation.

    - * - * If any of the properties from year through millisecond are not - * specified in the params, it is assumed that they have the smallest possible - * value in the range for the property (zero or one).

    - * - * - * @private - * @constructor - * @extends RataDie - * @param {Object=} params parameters that govern the settings and behaviour of this Hebrew RD date - */ -var HebrewRataDie = function(params) { - this.cal = params && params.cal || new HebrewCal(); - this.rd = NaN; - RataDie.call(this, params); -}; - -HebrewRataDie.prototype = new RataDie(); -HebrewRataDie.prototype.parent = RataDie; -HebrewRataDie.prototype.constructor = HebrewRataDie; - -/** - * The difference between a zero Julian day and the first day of the Hebrew - * calendar: sunset on Monday, Tishri 1, 1 = September 7, 3760 BC Gregorian = JD 347997.25 - * @private - * @type number - */ -HebrewRataDie.prototype.epoch = 347997.25; - -/** - * the cumulative lengths of each month for a non-leap year, without new years corrections - * @private - * @const - * @type Array. - */ -HebrewRataDie.cumMonthLengths = [ - 176, /* Nisan */ - 206, /* Iyyar */ - 235, /* Sivan */ - 265, /* Tammuz */ - 294, /* Av */ - 324, /* Elul */ - 0, /* Tishri - Jewish New Year (Rosh HaShanah) starts in month 7 */ - 30, /* Heshvan */ - 59, /* Kislev */ - 88, /* Teveth */ - 117, /* Shevat */ - 147 /* Adar I */ -]; - -/** - * the cumulative lengths of each month for a leap year, without new years corrections - * @private - * @const - * @type Array. - */ -HebrewRataDie.cumMonthLengthsLeap = [ - 206, /* Nisan */ - 236, /* Iyyar */ - 265, /* Sivan */ - 295, /* Tammuz */ - 324, /* Av */ - 354, /* Elul */ - 0, /* Tishri - Jewish New Year (Rosh HaShanah) starts in month 7 */ - 30, /* Heshvan */ - 59, /* Kislev */ - 88, /* Teveth */ - 117, /* Shevat */ - 147, /* Adar I */ - 177 /* Adar II */ -]; - -/** - * Calculate the Rata Die (fixed day) number of the given date from the - * date components. - * - * @private - * @param {Object} date the date components to calculate the RD from - */ -HebrewRataDie.prototype._setDateComponents = function(date) { - var elapsed = HebrewCal.elapsedDays(date.year); - var days = elapsed + - HebrewCal.newYearsCorrection(date.year, elapsed) + - date.day - 1; - var sum = 0, table; - - //console.log("getRataDie: converting " + JSON.stringify(date)); - //console.log("getRataDie: days is " + days); - //console.log("getRataDie: new years correction is " + HebrewCal.newYearsCorrection(date.year, elapsed)); - - table = this.cal.isLeapYear(date.year) ? - HebrewRataDie.cumMonthLengthsLeap : - HebrewRataDie.cumMonthLengths; - sum = table[date.month-1]; - - // gets cumulative without correction, so now add in the correction - if ((date.month < 7 || date.month > 8) && HebrewCal.longHeshvan(date.year)) { - sum++; - } - if ((date.month < 7 || date.month > 9) && HebrewCal.longKislev(date.year)) { - sum++; - } - // console.log("getRataDie: cum days is now " + sum); - - days += sum; - - // the date starts at sunset, which we take as 18:00, so the hours from - // midnight to 18:00 are on the current Gregorian day, and the hours from - // 18:00 to midnight are on the previous Gregorian day. So to calculate the - // number of hours into the current day that this time represents, we have - // to count from 18:00 to midnight first, and add in 6 hours if the time is - // less than 18:00 - var minute, second, millisecond; - - if (typeof(date.parts) !== 'undefined') { - // The parts (halaqim) of the hour. This can be a number from 0 to 1079. - var parts = parseInt(date.parts, 10); - var seconds = parseInt(parts, 10) * 3.333333333333; - minute = Math.floor(seconds / 60); - seconds -= minute * 60; - second = Math.floor(seconds); - millisecond = (seconds - second); - } else { - minute = parseInt(date.minute, 10) || 0; - second = parseInt(date.second, 10) || 0; - millisecond = parseInt(date.millisecond, 10) || 0; - } - - var time; - if (date.hour >= 18) { - time = ((date.hour - 18 || 0) * 3600000 + - (minute || 0) * 60000 + - (second || 0) * 1000 + - (millisecond || 0)) / - 86400000; - } else { - time = 0.25 + // 6 hours from 18:00 to midnight on the previous gregorian day - ((date.hour || 0) * 3600000 + - (minute || 0) * 60000 + - (second || 0) * 1000 + - (millisecond || 0)) / - 86400000; - } - - //console.log("getRataDie: rd is " + (days + time)); - this.rd = days + time; -}; - -/** - * Return the rd number of the particular day of the week on or before the - * given rd. eg. The Sunday on or before the given rd. - * @private - * @param {number} rd the rata die date of the reference date - * @param {number} dayOfWeek the day of the week that is being sought relative - * to the current date - * @return {number} the rd of the day of the week - */ -HebrewRataDie.prototype._onOrBefore = function(rd, dayOfWeek) { - return rd - MathUtils.mod(Math.floor(rd) - dayOfWeek + 1, 7); -}; - - -/* - * HebrewDate.js - Represent a date in the Hebrew calendar - * - * Copyright © 2012-2015, 2018, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - - - - - - - -/** - * @class - * Construct a new civil Hebrew date object. The constructor can be called - * with a params object that can contain the following properties:

    - * - *

      - *
    • julianday - the Julian Day to set into this date - *
    • year - any integer except 0. Years go from -1 (BCE) to 1 (CE), skipping the zero year - *
    • month - 1 to 12, where 1 means Nisan, 2 means Iyyar, etc. - *
    • day - 1 to 30 - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - *
    • parts - 0 to 1079. Specify the halaqim parts of an hour. Either specify - * the parts or specify the minutes, seconds, and milliseconds, but not both. - *
    • minute - 0 to 59 - *
    • second - 0 to 59 - *
    • millisecond - 0 to 999 - *
    • locale - the TimeZone instance or time zone name as a string - * of this julian date. The date/time is kept in the local time. The time zone - * is used later if this date is formatted according to a different time zone and - * the difference has to be calculated, or when the date format has a time zone - * component in it. - *
    • timezone - the time zone of this instance. If the time zone is not - * given, it can be inferred from this locale. For locales that span multiple - * time zones, the one with the largest population is chosen as the one that - * represents the locale. - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If called with another Hebrew date argument, the date components of the given - * date are copied into the current one.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above - * from julianday through millisecond are present, then the date - * components are - * filled in with the current date at the time of instantiation. Note that if - * you do not give the time zone when defaulting to the current time and the - * time zone for all of ilib was not set with ilib.setTimeZone(), then the - * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich - * Mean Time").

    - * - * - * @constructor - * @extends IDate - * @param {Object=} params parameters that govern the settings and behaviour of this Hebrew date - */ -var HebrewDate = function(params) { - this.cal = new HebrewCal(); - - params = params || {}; - - if (params.timezone) { - this.timezone = params.timezone; - } - if (params.locale) { - this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; - } - - if (!this.timezone) { - if (this.locale) { - new LocaleInfo(this.locale, { - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(li) { - this.li = li; - this.timezone = li.getTimeZone(); - this._init(params); - }) - }); - } else { - this.timezone = "local"; - this._init(params); - } - } else { - this._init(params); - } -}; - -HebrewDate.prototype = new IDate({noinstance: true}); -HebrewDate.prototype.parent = IDate; -HebrewDate.prototype.constructor = HebrewDate; - -/** - * Initialize this date - * @private - */ -HebrewDate.prototype._init = function (params) { - if (params.year || params.month || params.day || params.hour || - params.minute || params.second || params.millisecond || params.parts ) { - /** - * Year in the Hebrew calendar. - * @type number - */ - this.year = parseInt(params.year, 10) || 0; - - /** - * The month number, ranging from 1 to 13. - * @type number - */ - this.month = parseInt(params.month, 10) || 1; - - /** - * The day of the month. This ranges from 1 to 30. - * @type number - */ - this.day = parseInt(params.day, 10) || 1; - - /** - * The hour of the day. This can be a number from 0 to 23, as times are - * stored unambiguously in the 24-hour clock. - * @type number - */ - this.hour = parseInt(params.hour, 10) || 0; - - if (typeof(params.parts) !== 'undefined') { - /** - * The parts (halaqim) of the hour. This can be a number from 0 to 1079. - * @type number - */ - this.parts = parseInt(params.parts, 10); - var seconds = parseInt(params.parts, 10) * 3.333333333333; - this.minute = Math.floor(seconds / 60); - seconds -= this.minute * 60; - this.second = Math.floor(seconds); - this.millisecond = (seconds - this.second); - } else { - /** - * The minute of the hours. Ranges from 0 to 59. - * @type number - */ - this.minute = parseInt(params.minute, 10) || 0; - - /** - * The second of the minute. Ranges from 0 to 59. - * @type number - */ - this.second = parseInt(params.second, 10) || 0; - - /** - * The millisecond of the second. Ranges from 0 to 999. - * @type number - */ - this.millisecond = parseInt(params.millisecond, 10) || 0; - } - - /** - * The day of the year. Ranges from 1 to 383. - * @type number - */ - this.dayOfYear = parseInt(params.dayOfYear, 10); - - if (typeof(params.dst) === 'boolean') { - this.dst = params.dst; - } - - this.rd = this.newRd(this); - - // add the time zone offset to the rd to convert to UTC - new TimeZone({ - id: this.timezone, - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(tz) { - this.tz = tz; - // getOffsetMillis requires that this.year, this.rd, and this.dst - // are set in order to figure out which time zone rules apply and - // what the offset is at that point in the year - this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; - if (this.offset !== 0) { - this.rd = this.newRd({ - rd: this.rd.getRataDie() - this.offset - }); - } - - this._init2(params); - }) - }); - } else { - this._init2(params); - } -}; - -/** - * Finish initializing this date - * @private - */ -HebrewDate.prototype._init2 = function (params) { - if (!this.rd) { - this.rd = this.newRd(params); - this._calcDateComponents(); - } - - if (typeof(params.onLoad) === "function") { - params.onLoad(this); - } -}; - -/** - * the cumulative lengths of each month for a non-leap year, without new years corrections, - * that can be used in reverse to map days to months - * @private - * @const - * @type Array. - */ -HebrewDate.cumMonthLengthsReverse = [ -// [days, monthnumber], - [0, 7], /* Tishri - Jewish New Year (Rosh HaShanah) starts in month 7 */ - [30, 8], /* Heshvan */ - [59, 9], /* Kislev */ - [88, 10], /* Teveth */ - [117, 11], /* Shevat */ - [147, 12], /* Adar I */ - [176, 1], /* Nisan */ - [206, 2], /* Iyyar */ - [235, 3], /* Sivan */ - [265, 4], /* Tammuz */ - [294, 5], /* Av */ - [324, 6], /* Elul */ - [354, 7] /* end of year sentinel value */ -]; - -/** - * the cumulative lengths of each month for a leap year, without new years corrections - * that can be used in reverse to map days to months - * - * @private - * @const - * @type Array. - */ -HebrewDate.cumMonthLengthsLeapReverse = [ -// [days, monthnumber], - [0, 7], /* Tishri - Jewish New Year (Rosh HaShanah) starts in month 7 */ - [30, 8], /* Heshvan */ - [59, 9], /* Kislev */ - [88, 10], /* Teveth */ - [117, 11], /* Shevat */ - [147, 12], /* Adar I */ - [177, 13], /* Adar II */ - [206, 1], /* Nisan */ - [236, 2], /* Iyyar */ - [265, 3], /* Sivan */ - [295, 4], /* Tammuz */ - [324, 5], /* Av */ - [354, 6], /* Elul */ - [384, 7] /* end of year sentinel value */ -]; - -/** - * Number of days difference between RD 0 of the Hebrew calendar - * (Jan 1, 1 Gregorian = JD 1721057.5) and RD 0 of the Hebrew calendar - * (September 7, -3760 Gregorian = JD 347997.25) - * @private - * @const - * @type number - */ -HebrewDate.GregorianDiff = 1373060.25; - -/** - * Return a new RD for this date type using the given params. - * @private - * @param {Object=} params the parameters used to create this rata die instance - * @returns {RataDie} the new RD instance for the given params - */ -HebrewDate.prototype.newRd = function (params) { - return new HebrewRataDie(params); -}; - -/** - * Return the year for the given RD - * @private - * @param {number} rd RD to calculate from - * @returns {number} the year for the RD - */ -HebrewDate.prototype._calcYear = function(rd) { - var year, approximation, nextNewYear; - - // divide by the average number of days per year in the Hebrew calendar - // to approximate the year, then tweak it to get the real year - approximation = Math.floor(rd / 365.246822206) + 1; - - // console.log("HebrewDate._calcYear: approx is " + approximation); - - // search forward from approximation-1 for the year that actually contains this rd - year = approximation; - nextNewYear = HebrewCal.newYear(year); - while (rd >= nextNewYear) { - year++; - nextNewYear = HebrewCal.newYear(year); - } - return year - 1; -}; - -/** - * Calculate date components for the given RD date. - * @private - */ -HebrewDate.prototype._calcDateComponents = function () { - var remainder, - i, - table, - target, - rd = this.rd.getRataDie(); - - // console.log("HebrewDate.calcComponents: calculating for rd " + rd); - - if (typeof(this.offset) === "undefined") { - this.year = this._calcYear(rd); - - // now offset the RD by the time zone, then recalculate in case we were - // near the year boundary - if (!this.tz) { - this.tz = new TimeZone({id: this.timezone}); - } - this.offset = this.tz.getOffsetMillis(this) / 86400000; - } - - if (this.offset !== 0) { - rd += this.offset; - this.year = this._calcYear(rd); - } - - // console.log("HebrewDate.calcComponents: year is " + this.year + " with starting rd " + thisNewYear); - - remainder = rd - HebrewCal.newYear(this.year); - // console.log("HebrewDate.calcComponents: remainder is " + remainder); - - // take out new years corrections so we get the right month when we look it up in the table - if (remainder >= 59) { - if (remainder >= 88) { - if (HebrewCal.longKislev(this.year)) { - remainder--; - } - } - if (HebrewCal.longHeshvan(this.year)) { - remainder--; - } - } - - // console.log("HebrewDate.calcComponents: after new years corrections, remainder is " + remainder); - - table = this.cal.isLeapYear(this.year) ? - HebrewDate.cumMonthLengthsLeapReverse : - HebrewDate.cumMonthLengthsReverse; - - i = 0; - target = Math.floor(remainder); - while (i+1 < table.length && target >= table[i+1][0]) { - i++; - } - - this.month = table[i][1]; - // console.log("HebrewDate.calcComponents: remainder is " + remainder); - remainder -= table[i][0]; - - // console.log("HebrewDate.calcComponents: month is " + this.month + " and remainder is " + remainder); - - this.day = Math.floor(remainder); - remainder -= this.day; - this.day++; // days are 1-based - - // console.log("HebrewDate.calcComponents: day is " + this.day + " and remainder is " + remainder); - - // now convert to milliseconds for the rest of the calculation - remainder = Math.round(remainder * 86400000); - - this.hour = Math.floor(remainder/3600000); - remainder -= this.hour * 3600000; - - // the hours from 0 to 6 are actually 18:00 to midnight of the previous - // gregorian day, so we have to adjust for that - if (this.hour >= 6) { - this.hour -= 6; - } else { - this.hour += 18; - } - - this.minute = Math.floor(remainder/60000); - remainder -= this.minute * 60000; - - this.second = Math.floor(remainder/1000); - remainder -= this.second * 1000; - - this.millisecond = Math.floor(remainder); -}; - -/** - * Return the day of the week of this date. The day of the week is encoded - * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. - * - * @return {number} the day of the week - */ -HebrewDate.prototype.getDayOfWeek = function() { - var rd = Math.floor(this.rd.getRataDie() + (this.offset || 0)); - return MathUtils.mod(rd+1, 7); -}; - -/** - * Get the Halaqim (parts) of an hour. There are 1080 parts in an hour, which means - * each part is 3.33333333 seconds long. This means the number returned may not - * be an integer. - * - * @return {number} the halaqim parts of the current hour - */ -HebrewDate.prototype.getHalaqim = function() { - if (this.parts < 0) { - // convert to ms first, then to parts - var h = this.minute * 60000 + this.second * 1000 + this.millisecond; - this.parts = (h * 0.0003); - } - return this.parts; -}; - -/** - * Return the rd number of the first Sunday of the given ISO year. - * @protected - * @return the rd of the first Sunday of the ISO year - */ -HebrewDate.prototype.firstSunday = function (year) { - var tishri1 = this.newRd({ - year: year, - month: 7, - day: 1, - hour: 18, - minute: 0, - second: 0, - millisecond: 0, - cal: this.cal - }); - var firstThu = this.newRd({ - rd: tishri1.onOrAfter(4), - cal: this.cal - }); - return firstThu.before(0); -}; - -/** - * Return the ordinal day of the year. Days are counted from 1 and proceed linearly up to - * 385, regardless of months or weeks, etc. That is, Tishri 1st is day 1, and - * Elul 29 is 385 for a leap year with a long Heshvan and long Kislev. - * @return {number} the ordinal day of the year - */ -HebrewDate.prototype.getDayOfYear = function() { - var table = this.cal.isLeapYear(this.year) ? - HebrewRataDie.cumMonthLengthsLeap : - HebrewRataDie.cumMonthLengths; - var days = table[this.month-1]; - if ((this.month < 7 || this.month > 8) && HebrewCal.longHeshvan(this.year)) { - days++; - } - if ((this.month < 7 || this.month > 9) && HebrewCal.longKislev(this.year)) { - days++; - } - - return days + this.day; -}; - -/** - * Return the ordinal number of the week within the month. The first week of a month is - * the first one that contains 4 or more days in that month. If any days precede this - * first week, they are marked as being in week 0. This function returns values from 0 - * through 6.

    - * - * The locale is a required parameter because different locales that use the same - * Hebrew calendar consider different days of the week to be the beginning of - * the week. This can affect the week of the month in which some days are located. - * - * @param {Locale|string} locale the locale or locale spec to use when figuring out - * the first day of the week - * @return {number} the ordinal number of the week within the current month - */ -HebrewDate.prototype.getWeekOfMonth = function(locale) { - var li = new LocaleInfo(locale), - first = this.newRd({ - year: this.year, - month: this.month, - day: 1, - hour: 18, - minute: 0, - second: 0, - millisecond: 0 - }), - rd = this.rd.getRataDie(), - weekStart = first.onOrAfter(li.getFirstDayOfWeek()); - - if (weekStart - first.getRataDie() > 3) { - // if the first week has 4 or more days in it of the current month, then consider - // that week 1. Otherwise, it is week 0. To make it week 1, move the week start - // one week earlier. - weekStart -= 7; - } - return (rd < weekStart) ? 0 : Math.floor((rd - weekStart) / 7) + 1; -}; - -/** - * Return the era for this date as a number. The value for the era for Hebrew - * calendars is -1 for "before the Hebrew era" and 1 for "the Hebrew era". - * Hebrew era dates are any date after Tishri 1, 1, which is the same as - * September 7, 3760 BC in the Gregorian calendar. - * - * @return {number} 1 if this date is in the Hebrew era, -1 if it is before the - * Hebrew era - */ -HebrewDate.prototype.getEra = function() { - return (this.year < 1) ? -1 : 1; -}; - -/** - * Return the name of the calendar that governs this date. - * - * @return {string} a string giving the name of the calendar - */ -HebrewDate.prototype.getCalendar = function() { - return "hebrew"; -}; - -// register with the factory method -IDate._constructors["hebrew"] = HebrewDate; - - -/* - * HebrewCal.js - Represent a Hebrew calendar object. - * - * Copyright © 2012-2015,2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - -/** - * @class - * Construct a new Hebrew calendar object. This class encodes information about - * the Hebrew (Jewish) calendar. The Hebrew calendar is a tabular hebrew - * calendar where the dates are calculated by arithmetic rules. This differs from - * the religious Hebrew calendar which is used to mark the beginning of particular - * holidays. The religious calendar depends on the first sighting of the new - * crescent moon to determine the first day of the new month. Because humans and - * weather are both involved, the actual time of sighting varies, so it is not - * really possible to precalculate the religious calendar. Certain groups, such - * as the Hebrew Society of North America, decreed in in 2007 that they will use - * a calendar based on calculations rather than observations to determine the - * beginning of lunar months, and therefore the dates of holidays.

    - * - * @param {Object=} options Options governing the construction of this instance - * @constructor - * @extends Calendar - */ -var HebrewCal = function(options) { - this.type = "hebrew"; - - if (options && typeof(options.onLoad) === "function") { - options.onLoad(this); - } -}; - -/** - * Return the number of days elapsed in the Hebrew calendar before the - * given year starts. - * @private - * @param {number} year the year for which the number of days is sought - * @return {number} the number of days elapsed in the Hebrew calendar before the - * given year starts - */ -HebrewCal.elapsedDays = function(year) { - var months = Math.floor(((235*year) - 234)/19); - var parts = 204 + 793 * MathUtils.mod(months, 1080); - var hours = 11 + 12 * months + 793 * Math.floor(months/1080) + - Math.floor(parts/1080); - var days = 29 * months + Math.floor(hours/24); - return (MathUtils.mod(3 * (days + 1), 7) < 3) ? days + 1 : days; -}; - -/** - * Return the number of days that the New Year's (Rosh HaShanah) in the Hebrew - * calendar will be corrected for the given year. Corrections are caused because New - * Year's is not allowed to start on certain days of the week. To deal with - * it, the start of the new year is corrected for the next year by adding a - * day to the 8th month (Heshvan) and/or the 9th month (Kislev) in the current - * year to make them 30 days long instead of 29. - * - * @private - * @param {number} year the year for which the correction is sought - * @param {number} elapsed number of days elapsed up to this year - * @return {number} the number of days correction in the current year to make sure - * Rosh HaShanah does not fall on undesirable days of the week - */ -HebrewCal.newYearsCorrection = function(year, elapsed) { - var lastYear = HebrewCal.elapsedDays(year-1), - thisYear = elapsed, - nextYear = HebrewCal.elapsedDays(year+1); - - return (nextYear - thisYear) == 356 ? 2 : ((thisYear - lastYear) == 382 ? 1 : 0); -}; - -/** - * Return the rata die date of the new year for the given hebrew year. - * @private - * @param {number} year the year for which the new year is needed - * @return {number} the rata die date of the new year - */ -HebrewCal.newYear = function(year) { - var elapsed = HebrewCal.elapsedDays(year); - - return elapsed + HebrewCal.newYearsCorrection(year, elapsed); -}; - -/** - * Return the number of days in the given year. Years contain a variable number of - * days because the date of Rosh HaShanah (New Year's) changes so that it doesn't - * fall on particular days of the week. Days are added to the months of Heshvan - * and/or Kislev in the previous year in order to prevent the current year's New - * Year from being on Sunday, Wednesday, or Friday. - * - * @param {number} year the year for which the length is sought - * @return {number} number of days in the given year - */ -HebrewCal.daysInYear = function(year) { - return HebrewCal.newYear(year+1) - HebrewCal.newYear(year); -}; - -/** - * Return true if the given year contains a long month of Heshvan. That is, - * it is 30 days instead of 29. - * - * @private - * @param {number} year the year in which that month is questioned - * @return {boolean} true if the given year contains a long month of Heshvan - */ -HebrewCal.longHeshvan = function(year) { - return MathUtils.mod(HebrewCal.daysInYear(year), 10) === 5; -}; - -/** - * Return true if the given year contains a long month of Kislev. That is, - * it is 30 days instead of 29. - * - * @private - * @param {number} year the year in which that month is questioned - * @return {boolean} true if the given year contains a short month of Kislev - */ -HebrewCal.longKislev = function(year) { - return MathUtils.mod(HebrewCal.daysInYear(year), 10) !== 3; -}; - -/** - * Return the date of the last day of the month for the given year. The date of - * the last day of the month is variable because a number of months gain an extra - * day in leap years, and it is variable which months gain a day for each leap - * year and which do not. - * - * @param {number} month the month for which the number of days is sought - * @param {number} year the year in which that month is - * @return {number} the number of days in the given month and year - */ -HebrewCal.prototype.lastDayOfMonth = function(month, year) { - switch (month) { - case 2: - case 4: - case 6: - case 10: - return 29; - case 13: - return this.isLeapYear(year) ? 29 : 0; - case 8: - return HebrewCal.longHeshvan(year) ? 30 : 29; - case 9: - return HebrewCal.longKislev(year) ? 30 : 29; - case 12: - case 1: - case 3: - case 5: - case 7: - case 11: - return 30; - default: - return 0; - } -}; - -/** - * Return the number of months in the given year. The number of months in a year varies - * for luni-solar calendars because in some years, an extra month is needed to extend the - * days in a year to an entire solar year. The month is represented as a 1-based number - * where 1=first month, 2=second month, etc. - * - * @param {number} year a year for which the number of months is sought - */ -HebrewCal.prototype.getNumMonths = function(year) { - return this.isLeapYear(year) ? 13 : 12; -}; - -/** - * Return the number of days in a particular month in a particular year. This function - * can return a different number for a month depending on the year because of leap years. - * - * @param {number} month the month for which the length is sought - * @param {number} year the year within which that month can be found - * @returns {number} the number of days within the given month in the given year, or - * 0 for an invalid month in the year - */ -HebrewCal.prototype.getMonLength = function(month, year) { - if (month < 1 || month > 13 || (month == 13 && !this.isLeapYear(year))) { - return 0; - } - return this.lastDayOfMonth(month, year); -}; - -/** - * Return true if the given year is a leap year in the Hebrew calendar. - * The year parameter may be given as a number, or as a HebrewDate object. - * @param {number|Object} year the year for which the leap year information is being sought - * @returns {boolean} true if the given year is a leap year - */ -HebrewCal.prototype.isLeapYear = function(year) { - var y = (typeof(year) == 'number') ? year : year.year; - return (MathUtils.mod(1 + 7 * y, 19) < 7); -}; - -/** - * Return the type of this calendar. - * - * @returns {string} the name of the type of this calendar - */ -HebrewCal.prototype.getType = function() { - return this.type; -}; - - -/*register this calendar for the factory method */ -Calendar._constructors["hebrew"] = HebrewCal; - - -/* - * IslamicCal.js - Represent a Islamic calendar object. - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - -/** - * @class - * Construct a new Islamic calendar object. This class encodes information about - * the civil Islamic calendar. The civil Islamic calendar is a tabular islamic - * calendar where the dates are calculated by arithmetic rules. This differs from - * the religious Islamic calendar which is used to mark the beginning of particular - * holidays. The religious calendar depends on the first sighting of the new - * crescent moon to determine the first day of the new month. Because humans and - * weather are both involved, the actual time of sighting varies, so it is not - * really possible to precalculate the religious calendar. Certain groups, such - * as the Islamic Society of North America, decreed in in 2007 that they will use - * a calendar based on calculations rather than observations to determine the - * beginning of lunar months, and therefore the dates of holidays.

    - * - * @param {Object=} options Options governing the construction of this instance - * @constructor - * @extends Calendar - */ -var IslamicCal = function(options) { - this.type = "islamic"; - - if (options && typeof(options.onLoad) === "function") { - options.onLoad(this); - } -}; - -/** - * the lengths of each month - * @private - * @const - * @type Array. - */ -IslamicCal.monthLengths = [ - 30, /* Muharram */ - 29, /* Saffar */ - 30, /* Rabi'I */ - 29, /* Rabi'II */ - 30, /* Jumada I */ - 29, /* Jumada II */ - 30, /* Rajab */ - 29, /* Sha'ban */ - 30, /* Ramadan */ - 29, /* Shawwal */ - 30, /* Dhu al-Qa'da */ - 29 /* Dhu al-Hijja */ -]; - - -/** - * Return the number of months in the given year. The number of months in a year varies - * for luni-solar calendars because in some years, an extra month is needed to extend the - * days in a year to an entire solar year. The month is represented as a 1-based number - * where 1=first month, 2=second month, etc. - * - * @param {number} year a year for which the number of months is sought - */ -IslamicCal.prototype.getNumMonths = function(year) { - return 12; -}; - -/** - * Return the number of days in a particular month in a particular year. This function - * can return a different number for a month depending on the year because of things - * like leap years. - * - * @param {number} month the month for which the length is sought - * @param {number} year the year within which that month can be found - * @return {number} the number of days within the given month in the given year - */ -IslamicCal.prototype.getMonLength = function(month, year) { - if (month !== 12) { - return IslamicCal.monthLengths[month-1]; - } else { - return this.isLeapYear(year) ? 30 : 29; - } -}; - -/** - * Return true if the given year is a leap year in the Islamic calendar. - * The year parameter may be given as a number, or as a IslamicDate object. - * @param {number} year the year for which the leap year information is being sought - * @return {boolean} true if the given year is a leap year - */ -IslamicCal.prototype.isLeapYear = function(year) { - return (MathUtils.mod((14 + 11 * year), 30) < 11); -}; - -/** - * Return the type of this calendar. - * - * @return {string} the name of the type of this calendar - */ -IslamicCal.prototype.getType = function() { - return this.type; -}; - - -/*register this calendar for the factory method */ -Calendar._constructors["islamic"] = IslamicCal; - - -/* - * IslamicRataDie.js - Represent an RD date in the Islamic calendar - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - -/** - * @class - * Construct a new Islamic RD date number object. The constructor parameters can - * contain any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. - * - *
    • julianday - sets the time of this instance according to the given - * Julian Day instance or the Julian Day given as a float - * - *
    • year - any integer, including 0 - * - *
    • month - 1 to 12, where 1 means January, 2 means February, etc. - * - *
    • day - 1 to 31 - * - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - * - *
    • minute - 0 to 59 - * - *
    • second - 0 to 59 - * - *
    • millisecond - 0 to 999 - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If the constructor is called with another Islamic date instance instead of - * a parameter block, the other instance acts as a parameter block and its - * settings are copied into the current instance.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above are present, then the RD is calculate based on - * the current date at the time of instantiation.

    - * - * If any of the properties from year through millisecond are not - * specified in the params, it is assumed that they have the smallest possible - * value in the range for the property (zero or one).

    - * - * - * @private - * @constructor - * @extends RataDie - * @param {Object=} params parameters that govern the settings and behaviour of this Islamic RD date - */ -var IslamicRataDie = function(params) { - this.cal = params && params.cal || new IslamicCal(); - this.rd = NaN; - RataDie.call(this, params); -}; - -IslamicRataDie.prototype = new RataDie(); -IslamicRataDie.prototype.parent = RataDie; -IslamicRataDie.prototype.constructor = IslamicRataDie; - -/** - * The difference between a zero Julian day and the first Islamic date - * of Friday, July 16, 622 CE Julian. - * @private - * @type number - */ -IslamicRataDie.prototype.epoch = 1948439.5; - -/** - * Calculate the Rata Die (fixed day) number of the given date from the - * date components. - * - * @protected - * @param {Object} date the date components to calculate the RD from - */ -IslamicRataDie.prototype._setDateComponents = function(date) { - var days = (date.year - 1) * 354 + - Math.ceil(29.5 * (date.month - 1)) + - date.day + - Math.floor((3 + 11 * date.year) / 30) - 1; - var time = (date.hour * 3600000 + - date.minute * 60000 + - date.second * 1000 + - date.millisecond) / - 86400000; - - //console.log("getRataDie: converting " + JSON.stringify(date)); - //console.log("getRataDie: days is " + days); - //console.log("getRataDie: time is " + time); - //console.log("getRataDie: rd is " + (days + time)); - - this.rd = days + time; -}; - -/* - * IslamicDate.js - Represent a date in the Islamic calendar - * - * Copyright © 2012-2015, 2018, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - - - - - - - - -/** - * @class - * Construct a new civil Islamic date object. The constructor can be called - * with a params object that can contain the following properties:

    - * - *

      - *
    • julianday - the Julian Day to set into this date - *
    • year - any integer except 0. Years go from -1 (BCE) to 1 (CE), skipping the zero year - *
    • month - 1 to 12, where 1 means Muharram, 2 means Saffar, etc. - *
    • day - 1 to 30 - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - *
    • minute - 0 to 59 - *
    • second - 0 to 59 - *
    • millisecond - 0 to 999 - *
    • locale - the TimeZone instance or time zone name as a string - * of this julian date. The date/time is kept in the local time. The time zone - * is used later if this date is formatted according to a different time zone and - * the difference has to be calculated, or when the date format has a time zone - * component in it. - *
    • timezone - the time zone of this instance. If the time zone is not - * given, it can be inferred from this locale. For locales that span multiple - * time zones, the one with the largest population is chosen as the one that - * represents the locale. - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If called with another Islamic date argument, the date components of the given - * date are copied into the current one.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above - * from julianday through millisecond are present, then the date - * components are - * filled in with the current date at the time of instantiation. Note that if - * you do not give the time zone when defaulting to the current time and the - * time zone for all of ilib was not set with ilib.setTimeZone(), then the - * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich - * Mean Time").

    - * - * - * @constructor - * @extends IDate - * @param {Object=} params parameters that govern the settings and behaviour of this Islamic date - */ -var IslamicDate = function(params) { - this.cal = new IslamicCal(); - - params = params || {}; - - if (params.timezone) { - this.timezone = params.timezone; - } - if (params.locale) { - this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; - } - - if (!this.timezone) { - if (this.locale) { - new LocaleInfo(this.locale, { - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(li) { - this.li = li; - this.timezone = li.getTimeZone(); - this._init(params); - }) - }); - } else { - this.timezone = "local"; - this._init(params); - } - } else { - this._init(params); - } -}; - -IslamicDate.prototype = new IDate({noinstance: true}); -IslamicDate.prototype.parent = IDate; -IslamicDate.prototype.constructor = IslamicDate; - -/** - * Initialize the date - * @private - */ -IslamicDate.prototype._init = function (params) { - if (params.year || params.month || params.day || params.hour || - params.minute || params.second || params.millisecond ) { - /** - * Year in the Islamic calendar. - * @type number - */ - this.year = parseInt(params.year, 10) || 0; - - /** - * The month number, ranging from 1 to 12 (December). - * @type number - */ - this.month = parseInt(params.month, 10) || 1; - - /** - * The day of the month. This ranges from 1 to 30. - * @type number - */ - this.day = parseInt(params.day, 10) || 1; - - /** - * The hour of the day. This can be a number from 0 to 23, as times are - * stored unambiguously in the 24-hour clock. - * @type number - */ - this.hour = parseInt(params.hour, 10) || 0; - - /** - * The minute of the hours. Ranges from 0 to 59. - * @type number - */ - this.minute = parseInt(params.minute, 10) || 0; - - /** - * The second of the minute. Ranges from 0 to 59. - * @type number - */ - this.second = parseInt(params.second, 10) || 0; - - /** - * The millisecond of the second. Ranges from 0 to 999. - * @type number - */ - this.millisecond = parseInt(params.millisecond, 10) || 0; - - /** - * The day of the year. Ranges from 1 to 355. - * @type number - */ - this.dayOfYear = parseInt(params.dayOfYear, 10); - - if (typeof(params.dst) === 'boolean') { - this.dst = params.dst; - } - - this.rd = this.newRd(this); - - new TimeZone({ - id: this.timezone, - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(tz) { - this.tz = tz; - // add the time zone offset to the rd to convert to UTC - // getOffsetMillis requires that this.year, this.rd, and this.dst - // are set in order to figure out which time zone rules apply and - // what the offset is at that point in the year - this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; - if (this.offset !== 0) { - this.rd = this.newRd({ - rd: this.rd.getRataDie() - this.offset - }); - } - this._init2(params); - }) - }); - } else { - this._init2(params); - } -}; - -/** - * Finish initializing this date object - * @private - */ -IslamicDate.prototype._init2 = function (params) { - if (!this.rd) { - this.rd = this.newRd(params); - this._calcDateComponents(); - } - - if (typeof(params.onLoad) === "function") { - params.onLoad(this); - } -}; - -/** - * the cumulative lengths of each month, for a non-leap year - * @private - * @const - * @type Array. - */ -IslamicDate.cumMonthLengths = [ - 0, /* Muharram */ - 30, /* Saffar */ - 59, /* Rabi'I */ - 89, /* Rabi'II */ - 118, /* Jumada I */ - 148, /* Jumada II */ - 177, /* Rajab */ - 207, /* Sha'ban */ - 236, /* Ramadan */ - 266, /* Shawwal */ - 295, /* Dhu al-Qa'da */ - 325, /* Dhu al-Hijja */ - 354 -]; - -/** - * Number of days difference between RD 0 of the Gregorian calendar and - * RD 0 of the Islamic calendar. - * @private - * @const - * @type number - */ -IslamicDate.GregorianDiff = 227015; - -/** - * Return a new RD for this date type using the given params. - * @protected - * @param {Object=} params the parameters used to create this rata die instance - * @returns {RataDie} the new RD instance for the given params - */ -IslamicDate.prototype.newRd = function (params) { - return new IslamicRataDie(params); -}; - -/** - * Return the year for the given RD - * @private - * @param {number} rd RD to calculate from - * @returns {number} the year for the RD - */ -IslamicDate.prototype._calcYear = function(rd) { - return Math.floor((30 * rd + 10646) / 10631); -}; - -/** - * Calculate date components for the given RD date. - * @private - */ -IslamicDate.prototype._calcDateComponents = function () { - var remainder, - rd = this.rd.getRataDie(); - - this.year = this._calcYear(rd); - - if (typeof(this.offset) === "undefined") { - this.year = this._calcYear(rd); - - // now offset the RD by the time zone, then recalculate in case we were - // near the year boundary - if (!this.tz) { - this.tz = new TimeZone({id: this.timezone}); - } - this.offset = this.tz.getOffsetMillis(this) / 86400000; - } - - if (this.offset !== 0) { - rd += this.offset; - this.year = this._calcYear(rd); - } - - //console.log("IslamicDate.calcComponent: calculating for rd " + rd); - //console.log("IslamicDate.calcComponent: year is " + ret.year); - var yearStart = this.newRd({ - year: this.year, - month: 1, - day: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0 - }); - remainder = rd - yearStart.getRataDie() + 1; - - this.dayOfYear = remainder; - - //console.log("IslamicDate.calcComponent: remainder is " + remainder); - - this.month = SearchUtils.bsearch(remainder, IslamicDate.cumMonthLengths); - remainder -= IslamicDate.cumMonthLengths[this.month-1]; - - //console.log("IslamicDate.calcComponent: month is " + this.month + " and remainder is " + remainder); - - this.day = Math.floor(remainder); - remainder -= this.day; - - //console.log("IslamicDate.calcComponent: day is " + this.day + " and remainder is " + remainder); - - // now convert to milliseconds for the rest of the calculation - remainder = Math.round(remainder * 86400000); - - this.hour = Math.floor(remainder/3600000); - remainder -= this.hour * 3600000; - - this.minute = Math.floor(remainder/60000); - remainder -= this.minute * 60000; - - this.second = Math.floor(remainder/1000); - remainder -= this.second * 1000; - - this.millisecond = remainder; -}; - -/** - * Return the day of the week of this date. The day of the week is encoded - * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. - * - * @return {number} the day of the week - */ -IslamicDate.prototype.getDayOfWeek = function() { - var rd = Math.floor(this.rd.getRataDie() + (this.offset || 0)); - return MathUtils.mod(rd-2, 7); -}; - -/** - * Return the ordinal day of the year. Days are counted from 1 and proceed linearly up to - * 354 or 355, regardless of months or weeks, etc. That is, Muharran 1st is day 1, and - * Dhu al-Hijja 29 is 354. - * @return {number} the ordinal day of the year - */ -IslamicDate.prototype.getDayOfYear = function() { - return IslamicDate.cumMonthLengths[this.month-1] + this.day; -}; - -/** - * Return the era for this date as a number. The value for the era for Islamic - * calendars is -1 for "before the Islamic era" and 1 for "the Islamic era". - * Islamic era dates are any date after Muharran 1, 1, which is the same as - * July 16, 622 CE in the Gregorian calendar. - * - * @return {number} 1 if this date is in the common era, -1 if it is before the - * common era - */ -IslamicDate.prototype.getEra = function() { - return (this.year < 1) ? -1 : 1; -}; - -/** - * Return the name of the calendar that governs this date. - * - * @return {string} a string giving the name of the calendar - */ -IslamicDate.prototype.getCalendar = function() { - return "islamic"; -}; - -//register with the factory method -IDate._constructors["islamic"] = IslamicDate; - - -/* - * ThaiSolarCal.js - Represent a Thai solar calendar object. - * - * Copyright © 2013-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - -/** - * @class - * Construct a new Thai solar calendar object. This class encodes information about - * a Thai solar calendar.

    - * - * @param {Object=} options Options governing the construction of this instance - * @constructor - * @extends Calendar - */ -var ThaiSolarCal = function(options) { - this.type = "thaisolar"; - - if (options && typeof(options.onLoad) === "function") { - options.onLoad(this); - } -}; - -ThaiSolarCal.prototype = new GregorianCal({noinstance: true}); -ThaiSolarCal.prototype.parent = GregorianCal; -ThaiSolarCal.prototype.constructor = ThaiSolarCal; - -/** - * Return true if the given year is a leap year in the Thai solar calendar. - * The year parameter may be given as a number, or as a ThaiSolarDate object. - * @param {number|ThaiSolarDate} year the year for which the leap year information is being sought - * @return {boolean} true if the given year is a leap year - */ -ThaiSolarCal.prototype.isLeapYear = function(year) { - var y = (typeof(year) === 'number' ? year : year.getYears()); - y -= 543; - var centuries = MathUtils.mod(y, 400); - return (MathUtils.mod(y, 4) === 0 && centuries !== 100 && centuries !== 200 && centuries !== 300); -}; - - -/* register this calendar for the factory method */ -Calendar._constructors["thaisolar"] = ThaiSolarCal; - - -/* - * ThaiSolarDate.js - Represent a date in the ThaiSolar calendar - * - * Copyright © 2013-2015, 2018, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - - - - -/** - * @class - * Construct a new Thai solar date object. The constructor parameters can - * contain any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. - * - *
    • julianday - sets the time of this instance according to the given - * Julian Day instance or the Julian Day given as a float - * - *
    • year - any integer, including 0 - * - *
    • month - 1 to 12, where 1 means January, 2 means February, etc. - * - *
    • day - 1 to 31 - * - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - * - *
    • minute - 0 to 59 - * - *
    • second - 0 to 59 - * - *
    • millisecond - 0 to 999 - * - *
    • timezone - the TimeZone instance or time zone name as a string - * of this Thai solar date. The date/time is kept in the local time. The time zone - * is used later if this date is formatted according to a different time zone and - * the difference has to be calculated, or when the date format has a time zone - * component in it. - * - *
    • locale - locale for this Thai solar date. If the time zone is not - * given, it can be inferred from this locale. For locales that span multiple - * time zones, the one with the largest population is chosen as the one that - * represents the locale. - *
    - * - * If the constructor is called with another Thai solar date instance instead of - * a parameter block, the other instance acts as a parameter block and its - * settings are copied into the current instance.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above - * from unixtime through millisecond are present, then the date - * components are - * filled in with the current date at the time of instantiation. Note that if - * you do not give the time zone when defaulting to the current time and the - * time zone for all of ilib was not set with ilib.setTimeZone(), then the - * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich - * Mean Time").

    - * - * If any of the properties from year through millisecond are not - * specified in the params, it is assumed that they have the smallest possible - * value in the range for the property (zero or one).

    - * - * - * @constructor - * @extends GregorianDate - * @param {Object=} params parameters that govern the settings and behaviour of this Thai solar date - */ -var ThaiSolarDate = function(params) { - var p = {}; - - if (params) { - JSUtils.shallowCopy(params, p); - - // there is 198327 days difference between the Thai solar and - // Gregorian epochs which is equivalent to 543 years - if (typeof(p.year) !== 'undefined') { - p.year -= 543; - } - if (typeof(p.rd) !== 'undefined') { - p.rd -= 198327; - } - } - this.rd = null; // clear these out so that the GregorianDate constructor can set it - this.offset = undefined; - //console.log("ThaiSolarDate.constructor: date is " + JSON.stringify(this) + " parent is " + JSON.stringify(this.parent) + " and parent.parent is " + JSON.stringify(this.parent.parent)); - - p.onLoad = ilib.bind(this, function(gd) { - this.cal = new ThaiSolarCal(); - - // make sure the year is set correctly from the original params - if (params && typeof(params.year) !== 'undefined') { - this.year = parseInt(params.year, 10); - } - - if (params && typeof(params.onLoad) === "function") { - params.onLoad(gd); - } - }); - - GregorianDate.call(this, p); -}; - -ThaiSolarDate.prototype = new GregorianDate({noinstance: true}); -ThaiSolarDate.prototype.parent = GregorianDate.prototype; -ThaiSolarDate.prototype.constructor = ThaiSolarDate; - -/** - * the difference between a zero Julian day and the zero Thai Solar date. - * This is some 543 years before the start of the Gregorian epoch. - * @private - * @type number - */ -ThaiSolarDate.epoch = 1523097.5; - -/** - * Calculate the date components for the current time zone - * @private - */ -ThaiSolarDate.prototype._calcDateComponents = function () { - // there is 198327 days difference between the Thai solar and - // Gregorian epochs which is equivalent to 543 years - // console.log("ThaiSolarDate._calcDateComponents: date is " + JSON.stringify(this) + " parent is " + JSON.stringify(this.parent) + " and parent.parent is " + JSON.stringify(this.parent.parent)); - this.parent._calcDateComponents.call(this); - this.year += 543; -}; - -/** - * Return the Rata Die (fixed day) number of this date. - * - * @protected - * @return {number} the rd date as a number - */ -ThaiSolarDate.prototype.getRataDie = function() { - // there is 198327 days difference between the Thai solar and - // Gregorian epochs which is equivalent to 543 years - return this.rd.getRataDie() + 198327; -}; - -/** - * Return a new Gregorian date instance that represents the first instance of the - * given day of the week before the current date. The day of the week is encoded - * as a number where 0 = Sunday, 1 = Monday, etc. - * - * @param {number} dow the day of the week before the current date that is being sought - * @return {IDate} the date being sought - */ -ThaiSolarDate.prototype.before = function (dow) { - return new ThaiSolarDate({ - rd: this.rd.before(dow, this.offset) + 198327, - timezone: this.timezone - }); -}; - -/** - * Return a new Gregorian date instance that represents the first instance of the - * given day of the week after the current date. The day of the week is encoded - * as a number where 0 = Sunday, 1 = Monday, etc. - * - * @param {number} dow the day of the week after the current date that is being sought - * @return {IDate} the date being sought - */ -ThaiSolarDate.prototype.after = function (dow) { - return new ThaiSolarDate({ - rd: this.rd.after(dow, this.offset) + 198327, - timezone: this.timezone - }); -}; - -/** - * Return a new Gregorian date instance that represents the first instance of the - * given day of the week on or before the current date. The day of the week is encoded - * as a number where 0 = Sunday, 1 = Monday, etc. - * - * @param {number} dow the day of the week on or before the current date that is being sought - * @return {IDate} the date being sought - */ -ThaiSolarDate.prototype.onOrBefore = function (dow) { - return new ThaiSolarDate({ - rd: this.rd.onOrBefore(dow, this.offset) + 198327, - timezone: this.timezone - }); -}; - -/** - * Return a new Gregorian date instance that represents the first instance of the - * given day of the week on or after the current date. The day of the week is encoded - * as a number where 0 = Sunday, 1 = Monday, etc. - * - * @param {number} dow the day of the week on or after the current date that is being sought - * @return {IDate} the date being sought - */ -ThaiSolarDate.prototype.onOrAfter = function (dow) { - return new ThaiSolarDate({ - rd: this.rd.onOrAfter(dow, this.offset) + 198327, - timezone: this.timezone - }); -}; - -/** - * Return the name of the calendar that governs this date. - * - * @return {string} a string giving the name of the calendar - */ -ThaiSolarDate.prototype.getCalendar = function() { - return "thaisolar"; -}; - -//register with the factory method -IDate._constructors["thaisolar"] = ThaiSolarDate; - - -/* - * PersRataDie.js - Represent a rata die date in the Persian calendar - * - * Copyright © 2014-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - - - -/** - * @class - * Construct a new Persian RD date number object. The constructor parameters can - * contain any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970, Gregorian - * - *
    • julianday - sets the time of this instance according to the given - * Julian Day instance or the Julian Day given as a float - * - *
    • year - any integer, including 0 - * - *
    • month - 1 to 12, where 1 means Farvardin, 2 means Ordibehesht, etc. - * - *
    • day - 1 to 31 - * - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - * - *
    • minute - 0 to 59 - * - *
    • second - 0 to 59 - * - *
    • millisecond - 0 to 999 - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If the constructor is called with another Persian date instance instead of - * a parameter block, the other instance acts as a parameter block and its - * settings are copied into the current instance.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above are present, then the RD is calculate based on - * the current date at the time of instantiation.

    - * - * If any of the properties from year through millisecond are not - * specified in the params, it is assumed that they have the smallest possible - * value in the range for the property (zero or one).

    - * - * - * @private - * @constructor - * @extends RataDie - * @param {Object=} params parameters that govern the settings and behaviour of this Persian RD date - */ -var PersRataDie = function(params) { - this.rd = NaN; - Astro.initAstro( - params && typeof(params.sync) === 'boolean' ? params.sync : true, - params && params.loadParams, - ilib.bind(this, function (x) { - RataDie.call(this, params); - if (params && typeof(params.callback) === 'function') { - params.callback(this); - } - }) - ); -}; - -PersRataDie.prototype = new RataDie(); -PersRataDie.prototype.parent = RataDie; -PersRataDie.prototype.constructor = PersRataDie; - -/** - * The difference between a zero Julian day and the first Persian date - * @private - * @type number - */ -PersRataDie.prototype.epoch = 1948319.5; - -/** - * @protected - */ -PersRataDie.prototype._tehranEquinox = function(year) { - var equJED, equJD, equAPP, equTehran, dtTehran, eot; - - // March equinox in dynamical time - equJED = Astro._equinox(year, 0); - - // Correct for delta T to obtain Universal time - equJD = equJED - (Astro._deltat(year) / (24 * 60 * 60)); - - // Apply the equation of time to yield the apparent time at Greenwich - eot = Astro._equationOfTime(equJED) * 360; - eot = (eot - 20 * Math.floor(eot/20)) / 360; - equAPP = equJD + eot; - - /* - * Finally, we must correct for the constant difference between - * the Greenwich meridian and the time zone standard for Iran - * Standard time, 52 degrees 30 minutes to the East. - */ - - dtTehran = 52.5 / 360; - equTehran = equAPP + dtTehran; - - return equTehran; -}; - -/** - * Calculate the year based on the given Julian day. - * @protected - * @param {number} jd the Julian day to get the year for - * @return {{year:number,equinox:number}} the year and the last equinox - */ -PersRataDie.prototype._getYear = function(jd) { - var gd = new GregorianDate({julianday: jd}); - var guess = gd.getYears() - 2, - nexteq, - ret = {}; - - //ret.equinox = Math.floor(this._tehranEquinox(guess)); - ret.equinox = this._tehranEquinox(guess); - while (ret.equinox > jd) { - guess--; - // ret.equinox = Math.floor(this._tehranEquinox(guess)); - ret.equinox = this._tehranEquinox(guess); - } - nexteq = ret.equinox - 1; - // if the equinox falls after noon, then the day after that is the start of the - // next year, so truncate the JD to get the noon of the day before the day with - //the equinox on it, then add 0.5 to get the midnight of that day - while (!(Math.floor(ret.equinox) + 0.5 <= jd && jd < Math.floor(nexteq) + 0.5)) { - ret.equinox = nexteq; - guess++; - // nexteq = Math.floor(this._tehranEquinox(guess)); - nexteq = this._tehranEquinox(guess); - } - - // Mean solar tropical year is 365.24219878 days - ret.year = Math.round((ret.equinox - this.epoch - 1) / 365.24219878) + 1; - - return ret; -}; - -/** - * Calculate the Rata Die (fixed day) number of the given date from the - * date components. - * - * @protected - * @param {Object} date the date components to calculate the RD from - */ -PersRataDie.prototype._setDateComponents = function(date) { - var adr, guess, jd; - - // Mean solar tropical year is 365.24219878 days - guess = this.epoch + 1 + 365.24219878 * ((date.year || 0) - 2); - adr = {year: (date.year || 0) - 1, equinox: 0}; - - while (adr.year < date.year) { - adr = this._getYear(guess); - guess = adr.equinox + (365.24219878 + 2); - } - - jd = Math.floor(adr.equinox) + - (((date.month || 0) <= 7) ? - (((date.month || 1) - 1) * 31) : - ((((date.month || 1) - 1) * 30) + 6) - ) + - ((date.day || 1) - 1 + 0.5); // add 0.5 so that we convert JDs, which start at noon to RDs which start at midnight - - jd += ((date.hour || 0) * 3600000 + - (date.minute || 0) * 60000 + - (date.second || 0) * 1000 + - (date.millisecond || 0)) / - 86400000; - - this.rd = jd - this.epoch; -}; - -/** - * Return the rd number of the particular day of the week on or before the - * given rd. eg. The Sunday on or before the given rd. - * @private - * @param {number} rd the rata die date of the reference date - * @param {number} dayOfWeek the day of the week that is being sought relative - * to the current date - * @return {number} the rd of the day of the week - */ -PersRataDie.prototype._onOrBefore = function(rd, dayOfWeek) { - return rd - MathUtils.mod(Math.floor(rd) - dayOfWeek - 3, 7); -}; - -/* - * PersianCal.js - Represent a Persian astronomical (Hijjri) calendar object. - * - * Copyright © 2014-2015,2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - -/** - * @class - * Construct a new Persian astronomical (Hijjri) calendar object. This class encodes - * information about a Persian calendar. This class differs from the - * Persian calendar in that the leap years are calculated based on the - * astronomical observations of the sun in Teheran, instead of calculating - * the leap years based on a regular cyclical rhythm algorithm.

    - * - * @param {Object=} options Options governing the construction of this instance - * @constructor - * @extends Calendar - */ -var PersianCal = function(options) { - this.type = "persian"; - - if (options && typeof(options.onLoad) === "function") { - options.onLoad(this); - } -}; - -/** - * the lengths of each month - * @private - * @const - * @type Array. - */ -PersianCal.monthLengths = [ - 31, // Farvardin - 31, // Ordibehesht - 31, // Khordad - 31, // Tir - 31, // Mordad - 31, // Shahrivar - 30, // Mehr - 30, // Aban - 30, // Azar - 30, // Dey - 30, // Bahman - 29 // Esfand -]; - -/** - * Return the number of months in the given year. The number of months in a year varies - * for some luni-solar calendars because in some years, an extra month is needed to extend the - * days in a year to an entire solar year. The month is represented as a 1-based number - * where 1=first month, 2=second month, etc. - * - * @param {number} year a year for which the number of months is sought - * @return {number} The number of months in the given year - */ -PersianCal.prototype.getNumMonths = function(year) { - return 12; -}; - -/** - * Return the number of days in a particular month in a particular year. This function - * can return a different number for a month depending on the year because of things - * like leap years. - * - * @param {number} month the month for which the length is sought - * @param {number} year the year within which that month can be found - * @return {number} the number of days within the given month in the given year - */ -PersianCal.prototype.getMonLength = function(month, year) { - if (month !== 12 || !this.isLeapYear(year)) { - return PersianCal.monthLengths[month-1]; - } else { - // Month 12, Esfand, has 30 days instead of 29 in leap years - return 30; - } -}; - -/** - * Return true if the given year is a leap year in the Persian astronomical calendar. - * @param {number} year the year for which the leap year information is being sought - * @return {boolean} true if the given year is a leap year - */ -PersianCal.prototype.isLeapYear = function(year) { - var rdNextYear = new PersRataDie({ - cal: this, - year: year + 1, - month: 1, - day: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0 - }); - var rdThisYear = new PersRataDie({ - cal: this, - year: year, - month: 1, - day: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0 - }); - return (rdNextYear.getRataDie() - rdThisYear.getRataDie()) > 365; -}; - -/** - * Return the type of this calendar. - * - * @return {string} the name of the type of this calendar - */ -PersianCal.prototype.getType = function() { - return this.type; -}; - -/* register this calendar for the factory method */ -Calendar._constructors["persian"] = PersianCal; - - -/* - * PersianDate.js - Represent a date in the Persian astronomical (Hijjri) calendar - * - * Copyright © 2014-2015, 2018, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - - - - - - - - - -/** - * @class - * - * Construct a new Persian astronomical date object. The constructor parameters can - * contain any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970, Gregorian - * - *
    • julianday - sets the time of this instance according to the given - * Julian Day instance or the Julian Day given as a float - * - *
    • year - any integer, including 0 - * - *
    • month - 1 to 12, where 1 means Farvardin, 2 means Ordibehesht, etc. - * - *
    • day - 1 to 31 - * - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - * - *
    • minute - 0 to 59 - * - *
    • second - 0 to 59 - * - *
    • millisecond - 0 to 999 - * - *
    • timezone - the TimeZone instance or time zone name as a string - * of this persian date. The date/time is kept in the local time. The time zone - * is used later if this date is formatted according to a different time zone and - * the difference has to be calculated, or when the date format has a time zone - * component in it. - * - *
    • locale - locale for this persian date. If the time zone is not - * given, it can be inferred from this locale. For locales that span multiple - * time zones, the one with the largest population is chosen as the one that - * represents the locale. - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If the constructor is called with another Persian date instance instead of - * a parameter block, the other instance acts as a parameter block and its - * settings are copied into the current instance.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above - * from unixtime through millisecond are present, then the date - * components are - * filled in with the current date at the time of instantiation. Note that if - * you do not give the time zone when defaulting to the current time and the - * time zone for all of ilib was not set with ilib.setTimeZone(), then the - * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich - * Mean Time").

    - * - * If any of the properties from year through millisecond are not - * specified in the params, it is assumed that they have the smallest possible - * value in the range for the property (zero or one).

    - * - * - * @constructor - * @extends IDate - * @param {Object=} params parameters that govern the settings and behaviour of this Persian date - */ -var PersianDate = function(params) { - this.cal = new PersianCal(); - - params = params || {}; - - if (params.timezone) { - this.timezone = params.timezone; - } - if (params.locale) { - this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; - } - - if (!this.timezone) { - if (this.locale) { - new LocaleInfo(this.locale, { - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(li) { - this.li = li; - this.timezone = li.getTimeZone(); - this._init(params); - }) - }); - } else { - this.timezone = "local"; - this._init(params); - } - } else { - this._init(params); - } -}; - -PersianDate.prototype = new IDate({noinstance: true}); -PersianDate.prototype.parent = IDate; -PersianDate.prototype.constructor = PersianDate; - -/** - * Initialize this date object - * @private - */ -PersianDate.prototype._init = function (params) { - Astro.initAstro( - typeof(params.sync) === 'boolean' ? params.sync : true, - params.loadParams, - ilib.bind(this, function (x) { - if (params.year || params.month || params.day || params.hour || - params.minute || params.second || params.millisecond) { - /** - * Year in the Persian calendar. - * @type number - */ - this.year = parseInt(params.year, 10) || 0; - - /** - * The month number, ranging from 1 to 12 - * @type number - */ - this.month = parseInt(params.month, 10) || 1; - - /** - * The day of the month. This ranges from 1 to 31. - * @type number - */ - this.day = parseInt(params.day, 10) || 1; - - /** - * The hour of the day. This can be a number from 0 to 23, as times are - * stored unambiguously in the 24-hour clock. - * @type number - */ - this.hour = parseInt(params.hour, 10) || 0; - - /** - * The minute of the hours. Ranges from 0 to 59. - * @type number - */ - this.minute = parseInt(params.minute, 10) || 0; - - /** - * The second of the minute. Ranges from 0 to 59. - * @type number - */ - this.second = parseInt(params.second, 10) || 0; - - /** - * The millisecond of the second. Ranges from 0 to 999. - * @type number - */ - this.millisecond = parseInt(params.millisecond, 10) || 0; - - /** - * The day of the year. Ranges from 1 to 366. - * @type number - */ - this.dayOfYear = parseInt(params.dayOfYear, 10); - - if (typeof(params.dst) === 'boolean') { - this.dst = params.dst; - } - - this.newRd(JSUtils.merge(params, { - callback: ilib.bind(this, function(rd) { - this.rd = rd; - - new TimeZone({ - id: this.timezone, - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(tz) { - this.tz = tz; - // add the time zone offset to the rd to convert to UTC - // getOffsetMillis requires that this.year, this.rd, and this.dst - // are set in order to figure out which time zone rules apply and - // what the offset is at that point in the year - this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; - if (this.offset !== 0) { - this.rd = this.newRd({ - rd: this.rd.getRataDie() - this.offset - }); - } - this._init2(params); - }) - }); - }) - })); - - } else { - this._init2(params); - } - }) - ); -}; - -/** - * Finish initializing this date object - * @private - */ -PersianDate.prototype._init2 = function (params) { - if (!this.rd) { - this.newRd(JSUtils.merge(params, { - callback: ilib.bind(this, function(rd) { - this.rd = rd; - this._calcDateComponents(); - - if (typeof(params.onLoad) === "function") { - params.onLoad(this); - } - }) - })); - } else { - if (typeof(params.onLoad) === "function") { - params.onLoad(this); - } - } -}; - -/** - * the cumulative lengths of each month, for a non-leap year - * @private - * @const - * @type Array. - */ -PersianDate.cumMonthLengths = [ - 0, // Farvardin - 31, // Ordibehesht - 62, // Khordad - 93, // Tir - 124, // Mordad - 155, // Shahrivar - 186, // Mehr - 216, // Aban - 246, // Azar - 276, // Dey - 306, // Bahman - 336, // Esfand - 366 -]; - -/** - * Return a new RD for this date type using the given params. - * @protected - * @param {Object=} params the parameters used to create this rata die instance - * @returns {RataDie} the new RD instance for the given params - */ -PersianDate.prototype.newRd = function (params) { - return new PersRataDie(params); -}; - -/** - * Return the year for the given RD - * @private - * @param {number} rd RD to calculate from - * @returns {number} the year for the RD - */ -PersianDate.prototype._calcYear = function(rd) { - var julianday = rd + this.rd.epoch; - return this.rd._getYear(julianday).year; -}; - -/** - * Calculate date components for the given RD date. - * @private - */ -PersianDate.prototype._calcDateComponents = function () { - var remainder, - rd = this.rd.getRataDie(); - - this.year = this._calcYear(rd); - - if (typeof(this.offset) === "undefined") { - // now offset the RD by the time zone, then recalculate in case we were - // near the year boundary - if (!this.tz) { - this.tz = new TimeZone({id: this.timezone}); - } - this.offset = this.tz.getOffsetMillis(this) / 86400000; - } - - if (this.offset !== 0) { - rd += this.offset; - this.year = this._calcYear(rd); - } - - //console.log("PersDate.calcComponent: calculating for rd " + rd); - //console.log("PersDate.calcComponent: year is " + ret.year); - var yearStart = this.newRd({ - year: this.year, - month: 1, - day: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0 - }); - remainder = rd - yearStart.getRataDie() + 1; - - this.dayOfYear = remainder; - - //console.log("PersDate.calcComponent: remainder is " + remainder); - - this.month = SearchUtils.bsearch(Math.floor(remainder), PersianDate.cumMonthLengths); - remainder -= PersianDate.cumMonthLengths[this.month-1]; - - //console.log("PersDate.calcComponent: month is " + this.month + " and remainder is " + remainder); - - this.day = Math.floor(remainder); - remainder -= this.day; - - //console.log("PersDate.calcComponent: day is " + this.day + " and remainder is " + remainder); - - // now convert to milliseconds for the rest of the calculation - remainder = Math.round(remainder * 86400000); - - this.hour = Math.floor(remainder/3600000); - remainder -= this.hour * 3600000; - - this.minute = Math.floor(remainder/60000); - remainder -= this.minute * 60000; - - this.second = Math.floor(remainder/1000); - remainder -= this.second * 1000; - - this.millisecond = remainder; -}; - -/** - * Return the day of the week of this date. The day of the week is encoded - * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. - * - * @return {number} the day of the week - */ -PersianDate.prototype.getDayOfWeek = function() { - var rd = Math.floor(this.getRataDie()); - return MathUtils.mod(rd-3, 7); -}; - -/** - * Return the ordinal day of the year. Days are counted from 1 and proceed linearly up to - * 365, regardless of months or weeks, etc. That is, Farvardin 1st is day 1, and - * December 31st is 365 in regular years, or 366 in leap years. - * @return {number} the ordinal day of the year - */ -PersianDate.prototype.getDayOfYear = function() { - return PersianDate.cumMonthLengths[this.month-1] + this.day; -}; - -/** - * Return the era for this date as a number. The value for the era for Persian - * calendars is -1 for "before the persian era" (BP) and 1 for "the persian era" (anno - * persico or AP). - * BP dates are any date before Farvardin 1, 1 AP. In the proleptic Persian calendar, - * there is a year 0, so any years that are negative or zero are BP. - * @return {number} 1 if this date is in the common era, -1 if it is before the - * common era - */ -PersianDate.prototype.getEra = function() { - return (this.year < 1) ? -1 : 1; -}; - -/** - * Return the name of the calendar that governs this date. - * - * @return {string} a string giving the name of the calendar - */ -PersianDate.prototype.getCalendar = function() { - return "persian"; -}; - -// register with the factory method -IDate._constructors["persian"] = PersianDate; - - -/* - * PersianAlgoCal.js - Represent a Persian algorithmic calendar object. - * - * Copyright © 2014-2015,2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - -/** - * @class - * Construct a new Persian algorithmic calendar object. This class encodes information about - * a Persian algorithmic calendar.

    - * - * @param {Object=} options Options governing the construction of this instance - * @constructor - * @extends Calendar - */ -var PersianAlgoCal = function(options) { - this.type = "persian-algo"; - - if (options && typeof(options.onLoad) === "function") { - options.onLoad(this); - } -}; - -/** - * the lengths of each month - * @private - * @const - * @type Array. - */ -PersianAlgoCal.monthLengths = [ - 31, // Farvardin - 31, // Ordibehesht - 31, // Khordad - 31, // Tir - 31, // Mordad - 31, // Shahrivar - 30, // Mehr - 30, // Aban - 30, // Azar - 30, // Dey - 30, // Bahman - 29 // Esfand -]; - -/** - * Return the number of months in the given year. The number of months in a year varies - * for some luni-solar calendars because in some years, an extra month is needed to extend the - * days in a year to an entire solar year. The month is represented as a 1-based number - * where 1=first month, 2=second month, etc. - * - * @param {number} year a year for which the number of months is sought - * @return {number} The number of months in the given year - */ -PersianAlgoCal.prototype.getNumMonths = function(year) { - return 12; -}; - -/** - * Return the number of days in a particular month in a particular year. This function - * can return a different number for a month depending on the year because of things - * like leap years. - * - * @param {number} month the month for which the length is sought - * @param {number} year the year within which that month can be found - * @return {number} the number of days within the given month in the given year - */ -PersianAlgoCal.prototype.getMonLength = function(month, year) { - if (month !== 12 || !this.isLeapYear(year)) { - return PersianAlgoCal.monthLengths[month-1]; - } else { - // Month 12, Esfand, has 30 days instead of 29 in leap years - return 30; - } -}; - -/** - * Return the equivalent year in the 2820 year cycle that begins on - * Far 1, 474. This particular cycle obeys the cycle-of-years formula - * whereas the others do not specifically. This cycle can be used as - * a proxy for other years outside of the cycle by shifting them into - * the cycle. - * @param {number} year year to find the equivalent cycle year for - * @returns {number} the equivalent cycle year - */ -PersianAlgoCal.prototype.equivalentCycleYear = function(year) { - var y = year - (year >= 0 ? 474 : 473); - return MathUtils.mod(y, 2820) + 474; -}; - -/** - * Return true if the given year is a leap year in the Persian calendar. - * The year parameter may be given as a number, or as a PersAlgoDate object. - * @param {number} year the year for which the leap year information is being sought - * @return {boolean} true if the given year is a leap year - */ -PersianAlgoCal.prototype.isLeapYear = function(year) { - return (MathUtils.mod((this.equivalentCycleYear(year) + 38) * 682, 2816) < 682); -}; - -/** - * Return the type of this calendar. - * - * @return {string} the name of the type of this calendar - */ -PersianAlgoCal.prototype.getType = function() { - return this.type; -}; - - -/* register this calendar for the factory method */ -Calendar._constructors["persian-algo"] = PersianAlgoCal; - - -/* - * PersAlsoRataDie.js - Represent an RD date in the Persian algorithmic calendar - * - * Copyright © 2014-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - -/** - * @class - * Construct a new Persian RD date number object. The constructor parameters can - * contain any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970, Gregorian - * - *
    • julianday - sets the time of this instance according to the given - * Julian Day instance or the Julian Day given as a float - * - *
    • year - any integer, including 0 - * - *
    • month - 1 to 12, where 1 means Farvardin, 2 means Ordibehesht, etc. - * - *
    • day - 1 to 31 - * - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - * - *
    • minute - 0 to 59 - * - *
    • second - 0 to 59 - * - *
    • millisecond - 0 to 999 - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If the constructor is called with another Persian date instance instead of - * a parameter block, the other instance acts as a parameter block and its - * settings are copied into the current instance.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above are present, then the RD is calculate based on - * the current date at the time of instantiation.

    - * - * If any of the properties from year through millisecond are not - * specified in the params, it is assumed that they have the smallest possible - * value in the range for the property (zero or one).

    - * - * - * @private - * @constructor - * @extends RataDie - * @param {Object=} params parameters that govern the settings and behaviour of this Persian RD date - */ -var PersAlgoRataDie = function(params) { - this.cal = params && params.cal || new PersianAlgoCal(); - this.rd = NaN; - RataDie.call(this, params); -}; - -PersAlgoRataDie.prototype = new RataDie(); -PersAlgoRataDie.prototype.parent = RataDie; -PersAlgoRataDie.prototype.constructor = PersAlgoRataDie; - -/** - * The difference between a zero Julian day and the first Persian date - * @private - * @type number - */ -PersAlgoRataDie.prototype.epoch = 1948319.5; - -/** - * the cumulative lengths of each month, for a non-leap year - * @private - * @const - * @type Array. - */ -PersAlgoRataDie.cumMonthLengths = [ - 0, // Farvardin - 31, // Ordibehesht - 62, // Khordad - 93, // Tir - 124, // Mordad - 155, // Shahrivar - 186, // Mehr - 216, // Aban - 246, // Azar - 276, // Dey - 306, // Bahman - 336, // Esfand - 365 -]; - -/** - * Calculate the Rata Die (fixed day) number of the given date from the - * date components. - * - * @protected - * @param {Object} date the date components to calculate the RD from - */ -PersAlgoRataDie.prototype._setDateComponents = function(date) { - var year = this.cal.equivalentCycleYear(date.year); - var y = date.year - (date.year >= 0 ? 474 : 473); - var rdOfYears = 1029983 * Math.floor(y/2820) + 365 * (year - 1) + Math.floor((682 * year - 110) / 2816); - var dayInYear = (date.month > 1 ? PersAlgoRataDie.cumMonthLengths[date.month-1] : 0) + date.day; - var rdtime = (date.hour * 3600000 + - date.minute * 60000 + - date.second * 1000 + - date.millisecond) / - 86400000; - - /* - // console.log("getRataDie: converting " + JSON.stringify(this)); - console.log("getRataDie: year is " + year); - console.log("getRataDie: rd of years is " + rdOfYears); - console.log("getRataDie: day in year is " + dayInYear); - console.log("getRataDie: rdtime is " + rdtime); - console.log("getRataDie: rd is " + (rdOfYears + dayInYear + rdtime)); - */ - - this.rd = rdOfYears + dayInYear + rdtime; -}; - -/** - * Return the rd number of the particular day of the week on or before the - * given rd. eg. The Sunday on or before the given rd. - * @private - * @param {number} rd the rata die date of the reference date - * @param {number} dayOfWeek the day of the week that is being sought relative - * to the current date - * @return {number} the rd of the day of the week - */ -PersAlgoRataDie.prototype._onOrBefore = function(rd, dayOfWeek) { - return rd - MathUtils.mod(Math.floor(rd) - dayOfWeek - 3, 7); -}; - -/* - * PersianAlgoDate.js - Represent a date in the Persian algorithmic calendar - * - * Copyright © 2014-2015, 2018, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - - - - - - - - -/** - * @class - * - * Construct a new Persian date object. The constructor parameters can - * contain any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970, Gregorian - * - *
    • julianday - sets the time of this instance according to the given - * Julian Day instance or the Julian Day given as a float - * - *
    • year - any integer, including 0 - * - *
    • month - 1 to 12, where 1 means Farvardin, 2 means Ordibehesht, etc. - * - *
    • day - 1 to 31 - * - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - * - *
    • minute - 0 to 59 - * - *
    • second - 0 to 59 - * - *
    • millisecond - 0 to 999 - * - *
    • timezone - the TimeZone instance or time zone name as a string - * of this persian date. The date/time is kept in the local time. The time zone - * is used later if this date is formatted according to a different time zone and - * the difference has to be calculated, or when the date format has a time zone - * component in it. - * - *
    • locale - locale for this persian date. If the time zone is not - * given, it can be inferred from this locale. For locales that span multiple - * time zones, the one with the largest population is chosen as the one that - * represents the locale. - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If the constructor is called with another Persian date instance instead of - * a parameter block, the other instance acts as a parameter block and its - * settings are copied into the current instance.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above - * from unixtime through millisecond are present, then the date - * components are - * filled in with the current date at the time of instantiation. Note that if - * you do not give the time zone when defaulting to the current time and the - * time zone for all of ilib was not set with ilib.setTimeZone(), then the - * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich - * Mean Time").

    - * - * If any of the properties from year through millisecond are not - * specified in the params, it is assumed that they have the smallest possible - * value in the range for the property (zero or one).

    - * - * - * @constructor - * @extends IDate - * @param {Object=} params parameters that govern the settings and behaviour of this Persian date - */ -var PersianAlgoDate = function(params) { - this.cal = new PersianAlgoCal(); - - params = params || {}; - - if (params.timezone) { - this.timezone = params.timezone; - } - if (params.locale) { - this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; - } - - if (!this.timezone) { - if (this.locale) { - new LocaleInfo(this.locale, { - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(li) { - this.li = li; - this.timezone = li.getTimeZone(); - this._init(params); - }) - }); - } else { - this.timezone = "local"; - this._init(params); - } - } else { - this._init(params); - } - - - if (!this.rd) { - this.rd = this.newRd(params); - this._calcDateComponents(); - } -}; - -PersianAlgoDate.prototype = new IDate({noinstance: true}); -PersianAlgoDate.prototype.parent = IDate; -PersianAlgoDate.prototype.constructor = PersianAlgoDate; - -/** - * Initialize this date - * @private - */ -PersianAlgoDate.prototype._init = function (params) { - if (params.year || params.month || params.day || params.hour || - params.minute || params.second || params.millisecond ) { - /** - * Year in the Persian calendar. - * @type number - */ - this.year = parseInt(params.year, 10) || 0; - - /** - * The month number, ranging from 1 to 12 - * @type number - */ - this.month = parseInt(params.month, 10) || 1; - - /** - * The day of the month. This ranges from 1 to 31. - * @type number - */ - this.day = parseInt(params.day, 10) || 1; - - /** - * The hour of the day. This can be a number from 0 to 23, as times are - * stored unambiguously in the 24-hour clock. - * @type number - */ - this.hour = parseInt(params.hour, 10) || 0; - - /** - * The minute of the hours. Ranges from 0 to 59. - * @type number - */ - this.minute = parseInt(params.minute, 10) || 0; - - /** - * The second of the minute. Ranges from 0 to 59. - * @type number - */ - this.second = parseInt(params.second, 10) || 0; - - /** - * The millisecond of the second. Ranges from 0 to 999. - * @type number - */ - this.millisecond = parseInt(params.millisecond, 10) || 0; - - /** - * The day of the year. Ranges from 1 to 366. - * @type number - */ - this.dayOfYear = parseInt(params.dayOfYear, 10); - - if (typeof(params.dst) === 'boolean') { - this.dst = params.dst; - } - - this.rd = this.newRd(this); - - new TimeZone({ - id: this.timezone, - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(tz) { - this.tz = tz; - // add the time zone offset to the rd to convert to UTC - // getOffsetMillis requires that this.year, this.rd, and this.dst - // are set in order to figure out which time zone rules apply and - // what the offset is at that point in the year - this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; - if (this.offset !== 0) { - this.rd = this.newRd({ - rd: this.rd.getRataDie() - this.offset - }); - } - this._init2(params); - }) - }); - } else { - this._init2(params); - } -}; - -/** -* Finish initializing this date object. -* @private -*/ -PersianAlgoDate.prototype._init2 = function (params) { - if (!this.rd) { - this.rd = this.newRd(params); - this._calcDateComponents(); - } - - if (typeof(params.onLoad) === "function") { - params.onLoad(this); - } -}; - -/** - * Return a new RD for this date type using the given params. - * @protected - * @param {Object=} params the parameters used to create this rata die instance - * @returns {RataDie} the new RD instance for the given params - */ -PersianAlgoDate.prototype.newRd = function (params) { - return new PersAlgoRataDie(params); -}; - -/** - * Return the year for the given RD - * @private - * @param {number} rd RD to calculate from - * @returns {number} the year for the RD - */ -PersianAlgoDate.prototype._calcYear = function(rd) { - var shiftedRd = rd - 173126; - var numberOfCycles = Math.floor(shiftedRd / 1029983); - var shiftedDayInCycle = MathUtils.mod(shiftedRd, 1029983); - var yearInCycle = (shiftedDayInCycle === 1029982) ? 2820 : Math.floor((2816 * shiftedDayInCycle + 1031337) / 1028522); - var year = 474 + 2820 * numberOfCycles + yearInCycle; - return (year > 0) ? year : year - 1; -}; - -/** - * Calculate date components for the given RD date. - * @private - */ -PersianAlgoDate.prototype._calcDateComponents = function () { - var remainder, - rd = this.rd.getRataDie(); - - this.year = this._calcYear(rd); - - if (typeof(this.offset) === "undefined") { - // now offset the RD by the time zone, then recalculate in case we were - // near the year boundary - if (!this.tz) { - this.tz = new TimeZone({id: this.timezone}); - } - this.offset = this.tz.getOffsetMillis(this) / 86400000; - } - - if (this.offset !== 0) { - rd += this.offset; - this.year = this._calcYear(rd); - } - - //console.log("PersAlgoDate.calcComponent: calculating for rd " + rd); - //console.log("PersAlgoDate.calcComponent: year is " + ret.year); - var yearStart = this.newRd({ - year: this.year, - month: 1, - day: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0 - }); - remainder = rd - yearStart.getRataDie() + 1; - - this.dayOfYear = remainder; - - //console.log("PersAlgoDate.calcComponent: remainder is " + remainder); - - this.month = SearchUtils.bsearch(remainder, PersAlgoRataDie.cumMonthLengths); - remainder -= PersAlgoRataDie.cumMonthLengths[this.month-1]; - - //console.log("PersAlgoDate.calcComponent: month is " + this.month + " and remainder is " + remainder); - - this.day = Math.floor(remainder); - remainder -= this.day; - - //console.log("PersAlgoDate.calcComponent: day is " + this.day + " and remainder is " + remainder); - - // now convert to milliseconds for the rest of the calculation - remainder = Math.round(remainder * 86400000); - - this.hour = Math.floor(remainder/3600000); - remainder -= this.hour * 3600000; - - this.minute = Math.floor(remainder/60000); - remainder -= this.minute * 60000; - - this.second = Math.floor(remainder/1000); - remainder -= this.second * 1000; - - this.millisecond = remainder; -}; - -/** - * Return the day of the week of this date. The day of the week is encoded - * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. - * - * @return {number} the day of the week - */ -PersianAlgoDate.prototype.getDayOfWeek = function() { - var rd = Math.floor(this.getRataDie()); - return MathUtils.mod(rd-3, 7); -}; - -/** - * Return the ordinal day of the year. Days are counted from 1 and proceed linearly up to - * 365, regardless of months or weeks, etc. That is, Farvardin 1st is day 1, and - * December 31st is 365 in regular years, or 366 in leap years. - * @return {number} the ordinal day of the year - */ -PersianAlgoDate.prototype.getDayOfYear = function() { - return PersAlgoRataDie.cumMonthLengths[this.month-1] + this.day; -}; - -/** - * Return the era for this date as a number. The value for the era for Persian - * calendars is -1 for "before the persian era" (BP) and 1 for "the persian era" (anno - * persico or AP). - * BP dates are any date before Farvardin 1, 1 AP. In the proleptic Persian calendar, - * there is a year 0, so any years that are negative or zero are BP. - * @return {number} 1 if this date is in the common era, -1 if it is before the - * common era - */ -PersianAlgoDate.prototype.getEra = function() { - return (this.year < 1) ? -1 : 1; -}; - -/** - * Return the name of the calendar that governs this date. - * - * @return {string} a string giving the name of the calendar - */ -PersianAlgoDate.prototype.getCalendar = function() { - return "persian-algo"; -}; - -// register with the factory method -IDate._constructors["persian-algo"] = PersianAlgoDate; - -/* - * HanCal.js - Represent a Han Chinese Lunar calendar object. - * - * Copyright © 2014-2017, 2018, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - - - - - - -/** - * @class - * Construct a new Han algorithmic calendar object. This class encodes information about - * a Han algorithmic calendar.

    - * - * - * @constructor - * @param {Object=} params optional parameters to load the calendrical data - * @extends Calendar - */ -var HanCal = function(params) { - this.type = "han"; - var sync = params && typeof(params.sync) === 'boolean' ? params.sync : true; - - Astro.initAstro(sync, params && params.loadParams, ilib.bind(this, function (x) { - if (params && typeof(params.onLoad) === 'function') { - params.onLoad(this); - } - })); -}; - -/** - * @private - * @static - * @param {number} year - * @param {number=} cycle - * @return {number} - */ -HanCal._getElapsedYear = function(year, cycle) { - var elapsedYear = year || 0; - if (typeof(year) !== 'undefined' && year < 61 && typeof(cycle) !== 'undefined') { - elapsedYear = 60 * cycle + year; - } - return elapsedYear; -}; - -/** - * @private - * @static - * @param {number} jd julian day to calculate from - * @param {number} longitude longitude to seek - * @returns {number} the julian day of the next time that the solar longitude - * is a multiple of the given longitude - */ -HanCal._hanNextSolarLongitude = function(jd, longitude) { - var tz = HanCal._chineseTZ(jd); - var uni = Astro._universalFromLocal(jd, tz); - var sol = Astro._nextSolarLongitude(uni, longitude); - return Astro._localFromUniversal(sol, tz); -}; - -/** - * @private - * @static - * @param {number} jd julian day to calculate from - * @returns {number} the major solar term for the julian day - */ -HanCal._majorSTOnOrAfter = function(jd) { - var tz = HanCal._chineseTZ(jd); - var uni = Astro._universalFromLocal(jd, tz); - var next = Astro._fixangle(30 * Math.ceil(Astro._solarLongitude(uni)/30)); - return HanCal._hanNextSolarLongitude(jd, next); -}; - -/** - * @private - * @static - * @param {number} year the year for which the leap year information is being sought - * @param {number=} cycle if the given year < 60, this can specify the cycle. If the - * cycle is not given, then the year should be given as elapsed years since the beginning - * of the epoch - */ -HanCal._solsticeBefore = function (year, cycle) { - var elapsedYear = HanCal._getElapsedYear(year, cycle); - var gregyear = elapsedYear - 2697; - var rd = new GregRataDie({ - year: gregyear-1, - month: 12, - day: 15, - hour: 0, - minute: 0, - second: 0, - millisecond: 0 - }); - return HanCal._majorSTOnOrAfter(rd.getRataDie() + RataDie.gregorianEpoch); -}; - -/** - * @private - * @static - * @param {number} jd julian day to calculate from - * @returns {number} the current major solar term - */ -HanCal._chineseTZ = function(jd) { - var year = GregorianDate._calcYear(jd - RataDie.gregorianEpoch); - return year < 1929 ? 465.6666666666666666 : 480; -}; - -/** - * @private - * @static - * @param {number} jd julian day to calculate from - * @returns {number} the julian day of next new moon on or after the given julian day date - */ -HanCal._newMoonOnOrAfter = function(jd) { - var tz = HanCal._chineseTZ(jd); - var uni = Astro._universalFromLocal(jd, tz); - var moon = Astro._newMoonAtOrAfter(uni); - // floor to the start of the julian day - return Astro._floorToJD(Astro._localFromUniversal(moon, tz)); -}; - -/** - * @private - * @static - * @param {number} jd julian day to calculate from - * @returns {number} the julian day of previous new moon before the given julian day date - */ -HanCal._newMoonBefore = function(jd) { - var tz = HanCal._chineseTZ(jd); - var uni = Astro._universalFromLocal(jd, tz); - var moon = Astro._newMoonBefore(uni); - // floor to the start of the julian day - return Astro._floorToJD(Astro._localFromUniversal(moon, tz)); -}; - -/** - * @static - * @private - * @param {number} year the year for which the leap year information is being sought - * @param {number=} cycle if the given year < 60, this can specify the cycle. If the - * cycle is not given, then the year should be given as elapsed years since the beginning - * of the epoch - */ -HanCal._leapYearCalc = function(year, cycle) { - var ret = { - elapsedYear: HanCal._getElapsedYear(year, cycle) - }; - ret.solstice1 = HanCal._solsticeBefore(ret.elapsedYear); - ret.solstice2 = HanCal._solsticeBefore(ret.elapsedYear+1); - // ceil to the end of the julian day - ret.m1 = HanCal._newMoonOnOrAfter(Astro._ceilToJD(ret.solstice1)); - ret.m2 = HanCal._newMoonBefore(Astro._ceilToJD(ret.solstice2)); - - return ret; -}; - -/** - * @private - * @static - * @param {number} jd julian day to calculate from - * @returns {number} the current major solar term - */ -HanCal._currentMajorST = function(jd) { - var s = Astro._solarLongitude(Astro._universalFromLocal(jd, HanCal._chineseTZ(jd))); - return MathUtils.amod(2 + Math.floor(s/30), 12); -}; - -/** - * @private - * @static - * @param {number} jd julian day to calculate from - * @returns {boolean} true if there is no major solar term in the same year - */ -HanCal._noMajorST = function(jd) { - return HanCal._currentMajorST(jd) === HanCal._currentMajorST(HanCal._newMoonOnOrAfter(jd+1)); -}; - -/** - * Return the number of months in the given year. The number of months in a year varies - * for some luni-solar calendars because in some years, an extra month is needed to extend the - * days in a year to an entire solar year. The month is represented as a 1-based number - * where 1=first month, 2=second month, etc. - * - * @param {number} year a year for which the number of months is sought - * @param {number=} cycle if the given year < 60, this can specify the cycle. If the - * cycle is not given, then the year should be given as elapsed years since the beginning - * of the epoch - * @return {number} The number of months in the given year - */ -HanCal.prototype.getNumMonths = function(year, cycle) { - return this.isLeapYear(year, cycle) ? 13 : 12; -}; - -/** - * Return the number of days in a particular month in a particular year. This function - * can return a different number for a month depending on the year because of things - * like leap years. - * - * @param {number} month the elapsed month for which the length is sought - * @param {number} year the elapsed year within which that month can be found - * @return {number} the number of days within the given month in the given year - */ -HanCal.prototype.getMonLength = function(month, year) { - // distance between two new moons in Nanjing China - var calc = HanCal._leapYearCalc(year); - var priorNewMoon = HanCal._newMoonOnOrAfter(calc.m1 + month * 29); - var postNewMoon = HanCal._newMoonOnOrAfter(priorNewMoon + 1); - return postNewMoon - priorNewMoon; -}; - -/** - * Return the equivalent year in the 2820 year cycle that begins on - * Far 1, 474. This particular cycle obeys the cycle-of-years formula - * whereas the others do not specifically. This cycle can be used as - * a proxy for other years outside of the cycle by shifting them into - * the cycle. - * @param {number} year year to find the equivalent cycle year for - * @returns {number} the equivalent cycle year - */ -HanCal.prototype.equivalentCycleYear = function(year) { - var y = year - (year >= 0 ? 474 : 473); - return MathUtils.mod(y, 2820) + 474; -}; - -/** - * Return true if the given year is a leap year in the Han calendar. - * If the year is given as a year/cycle combination, then the year should be in the - * range [1,60] and the given cycle is the cycle in which the year is located. If - * the year is greater than 60, then - * it represents the total number of years elapsed in the proleptic calendar since - * the beginning of the Chinese epoch in on 15 Feb, -2636 (Gregorian). In this - * case, the cycle parameter is ignored. - * - * @param {number} year the year for which the leap year information is being sought - * @param {number=} cycle if the given year < 60, this can specify the cycle. If the - * cycle is not given, then the year should be given as elapsed years since the beginning - * of the epoch - * @return {boolean} true if the given year is a leap year - */ -HanCal.prototype.isLeapYear = function(year, cycle) { - var calc = HanCal._leapYearCalc(year, cycle); - return Math.round((calc.m2 - calc.m1) / 29.530588853000001) === 12; -}; - -/** - * Return the month of the year that is the leap month. If the given year is - * not a leap year, then this method will return -1. - * - * @param {number} year the year for which the leap year information is being sought - * @param {number=} cycle if the given year < 60, this can specify the cycle. If the - * cycle is not given, then the year should be given as elapsed years since the beginning - * of the epoch - * @return {number} the number of the month that is doubled in this leap year, or -1 - * if this is not a leap year - */ -HanCal.prototype.getLeapMonth = function(year, cycle) { - var calc = HanCal._leapYearCalc(year, cycle); - - if (Math.round((calc.m2 - calc.m1) / 29.530588853000001) != 12) { - return -1; // no leap month - } - - // search between rd1 and rd2 for the first month with no major solar term. That is our leap month. - var month = 0; - var m = HanCal._newMoonOnOrAfter(calc.m1+1); - while (!HanCal._noMajorST(m)) { - month++; - m = HanCal._newMoonOnOrAfter(m+1); - } - - // return the number of the month that is doubled - return month; -}; - -/** - * Return the date of Chinese New Years in the given calendar year. - * - * @param {number} year the Chinese year for which the new year information is being sought - * @param {number=} cycle if the given year < 60, this can specify the cycle. If the - * cycle is not given, then the year should be given as elapsed years since the beginning - * of the epoch - * @return {number} the julian day of the beginning of the given year - */ -HanCal.prototype.newYears = function(year, cycle) { - var calc = HanCal._leapYearCalc(year, cycle); - var m2 = HanCal._newMoonOnOrAfter(calc.m1+1); - if (Math.round((calc.m2 - calc.m1) / 29.530588853000001) === 12 && - (HanCal._noMajorST(calc.m1) || HanCal._noMajorST(m2)) ) { - return HanCal._newMoonOnOrAfter(m2+1); - } - return m2; -}; - -/** - * Return the type of this calendar. - * - * @return {string} the name of the type of this calendar - */ -HanCal.prototype.getType = function() { - return this.type; -}; - - -/* register this calendar for the factory method */ -Calendar._constructors["han"] = HanCal; - - -/* - * HanDate.js - Represent a date in the Han algorithmic calendar - * - * Copyright © 2014-2015, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - -/** - * Construct a new Han RD date number object. The constructor parameters can - * contain any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970, Gregorian - * - *
    • julianday - sets the time of this instance according to the given - * Julian Day instance or the Julian Day given as a float - * - *
    • cycle - any integer giving the number of 60-year cycle in which the date is located. - * If the cycle is not given but the year is, it is assumed that the year parameter is a fictitious - * linear count of years since the beginning of the epoch, much like other calendars. This linear - * count is never used. If both the cycle and year are given, the year is wrapped to the range 0 - * to 60 and treated as if it were a year in the regular 60-year cycle. - * - *
    • year - any integer, including 0 - * - *
    • month - 1 to 12, where 1 means Farvardin, 2 means Ordibehesht, etc. - * - *
    • day - 1 to 31 - * - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - * - *
    • minute - 0 to 59 - * - *
    • second - 0 to 59 - * - *
    • millisecond - 0 to 999 - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If the constructor is called with another Han date instance instead of - * a parameter block, the other instance acts as a parameter block and its - * settings are copied into the current instance.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above are present, then the RD is calculate based on - * the current date at the time of instantiation.

    - * - * If any of the properties from year through millisecond are not - * specified in the params, it is assumed that they have the smallest possible - * value in the range for the property (zero or one).

    - * - * - * @private - * @class - * @constructor - * @extends RataDie - * @param {Object=} params parameters that govern the settings and behaviour of this Han RD date - */ -var HanRataDie = function(params) { - this.rd = NaN; - if (params && params.cal) { - this.cal = params.cal; - RataDie.call(this, params); - if (params && typeof(params.callback) === 'function') { - params.callback(this); - } - } else { - new HanCal({ - sync: params && params.sync, - loadParams: params && params.loadParams, - onLoad: ilib.bind(this, function(c) { - this.cal = c; - RataDie.call(this, params); - if (params && typeof(params.callback) === 'function') { - params.callback(this); - } - }) - }); - } -}; - -HanRataDie.prototype = new RataDie(); -HanRataDie.prototype.parent = RataDie; -HanRataDie.prototype.constructor = HanRataDie; - -/** - * The difference between a zero Julian day and the first Han date - * which is February 15, -2636 (Gregorian). - * @private - * @type number - */ -HanRataDie.epoch = 758325.5; - -/** - * Calculate the Rata Die (fixed day) number of the given date from the - * date components. - * - * @protected - * @param {Object} date the date components to calculate the RD from - */ -HanRataDie.prototype._setDateComponents = function(date) { - var calc = HanCal._leapYearCalc(date.year, date.cycle); - var m2 = HanCal._newMoonOnOrAfter(calc.m1+1); - var newYears; - this.leapYear = (Math.round((calc.m2 - calc.m1) / 29.530588853000001) === 12); - if (this.leapYear && (HanCal._noMajorST(calc.m1) || HanCal._noMajorST(m2)) ) { - newYears = HanCal._newMoonOnOrAfter(m2+1); - } else { - newYears = m2; - } - - var priorNewMoon = HanCal._newMoonOnOrAfter(calc.m1 + date.month * 29); // this is a julian day - this.priorLeapMonth = HanRataDie._priorLeapMonth(newYears, HanCal._newMoonBefore(priorNewMoon)); - this.leapMonth = (this.leapYear && HanCal._noMajorST(priorNewMoon) && !this.priorLeapMonth); - - var rdtime = (date.hour * 3600000 + - date.minute * 60000 + - date.second * 1000 + - date.millisecond) / - 86400000; - - /* - console.log("getRataDie: converting " + JSON.stringify(date) + " to an RD"); - console.log("getRataDie: year is " + date.year + " plus cycle " + date.cycle); - console.log("getRataDie: isLeapYear is " + this.leapYear); - console.log("getRataDie: priorNewMoon is " + priorNewMoon); - console.log("getRataDie: day in month is " + date.day); - console.log("getRataDie: rdtime is " + rdtime); - console.log("getRataDie: rd is " + (priorNewMoon + date.day - 1 + rdtime)); - */ - - this.rd = priorNewMoon + date.day - 1 + rdtime - RataDie.gregorianEpoch; -}; - -/** - * Return the rd number of the particular day of the week on or before the - * given rd. eg. The Sunday on or before the given rd. - * @private - * @param {number} rd the rata die date of the reference date - * @param {number} dayOfWeek the day of the week that is being sought relative - * to the current date - * @return {number} the rd of the day of the week - */ -HanRataDie.prototype._onOrBefore = function(rd, dayOfWeek) { - return rd - MathUtils.mod(Math.floor(rd) - dayOfWeek, 7); -}; - -/** - * @protected - * @static - * @param {number} jd1 first julian day - * @param {number} jd2 second julian day - * @returns {boolean} true if there is a leap month earlier in the same year - * as the given months - */ -HanRataDie._priorLeapMonth = function(jd1, jd2) { - return jd2 >= jd1 && - (HanRataDie._priorLeapMonth(jd1, HanCal._newMoonBefore(jd2)) || - HanCal._noMajorST(jd2)); -}; - - -/* - * HanDate.js - Represent a date in the Han algorithmic calendar - * - * Copyright © 2014-2015, 2018, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - - - - - - - - - - - -/** - * @class - * - * Construct a new Han date object. The constructor parameters can - * contain any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970, Gregorian - * - *
    • julianday - sets the time of this instance according to the given - * Julian Day instance or the Julian Day given as a float - * - *
    • cycle - any integer giving the number of 60-year cycle in which the date is located. - * If the cycle is not given but the year is, it is assumed that the year parameter is a fictitious - * linear count of years since the beginning of the epoch, much like other calendars. This linear - * count is never used. If both the cycle and year are given, the year is wrapped to the range 0 - * to 60 and treated as if it were a year in the regular 60-year cycle. - * - *
    • year - any integer, including 0 - * - *
    • month - 1 to 12, where 1 means Farvardin, 2 means Ordibehesht, etc. - * - *
    • day - 1 to 31 - * - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - * - *
    • minute - 0 to 59 - * - *
    • second - 0 to 59 - * - *
    • millisecond - 0 to 999 - * - *
    • timezone - the TimeZone instance or time zone name as a string - * of this han date. The date/time is kept in the local time. The time zone - * is used later if this date is formatted according to a different time zone and - * the difference has to be calculated, or when the date format has a time zone - * component in it. - * - *
    • locale - locale for this han date. If the time zone is not - * given, it can be inferred from this locale. For locales that span multiple - * time zones, the one with the largest population is chosen as the one that - * represents the locale. - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If the constructor is called with another Han date instance instead of - * a parameter block, the other instance acts as a parameter block and its - * settings are copied into the current instance.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above - * from unixtime through millisecond are present, then the date - * components are - * filled in with the current date at the time of instantiation. Note that if - * you do not give the time zone when defaulting to the current time and the - * time zone for all of ilib was not set with ilib.setTimeZone(), then the - * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich - * Mean Time").

    - * - * If any of the properties from year through millisecond are not - * specified in the params, it is assumed that they have the smallest possible - * value in the range for the property (zero or one).

    - * - * - * @constructor - * @extends Date - * @param {Object=} params parameters that govern the settings and behaviour of this Han date - */ -var HanDate = function(params) { - params = params || {}; - if (params.locale) { - this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; - } - if (params.timezone) { - this.timezone = params.timezone; - } - - if (!this.timezone) { - if (this.locale) { - new LocaleInfo(this.locale, { - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(li) { - this.li = li; - this.timezone = li.getTimeZone(); - this._init(params); - }) - }); - } else { - this.timezone = "local"; - this._init(params); - } - } else { - this._init(params); - } -}; - -HanDate.prototype = new IDate({noinstance: true}); -HanDate.prototype.parent = IDate; -HanDate.prototype.constructor = HanDate; - -/** - * Initialize the han date - * @private - */ -HanDate.prototype._init = function (params) { - new HanCal({ - sync: params && typeof(params.sync) === 'boolean' ? params.sync : true, - loadParams: params && params.loadParams, - onLoad: ilib.bind(this, function (cal) { - this.cal = cal; - - if (params.year || params.month || params.day || params.hour || - params.minute || params.second || params.millisecond || params.cycle || params.cycleYear) { - if (typeof(params.cycle) !== 'undefined') { - /** - * Cycle number in the Han calendar. - * @type number - */ - this.cycle = parseInt(params.cycle, 10) || 0; - - var year = (typeof(params.year) !== 'undefined' ? parseInt(params.year, 10) : parseInt(params.cycleYear, 10)) || 0; - - /** - * Year in the Han calendar. - * @type number - */ - this.year = HanCal._getElapsedYear(year, this.cycle); - } else { - if (typeof(params.year) !== 'undefined') { - this.year = parseInt(params.year, 10) || 0; - this.cycle = Math.floor((this.year - 1) / 60); - } else { - this.year = this.cycle = 0; - } - } - - /** - * The month number, ranging from 1 to 13 - * @type number - */ - this.month = parseInt(params.month, 10) || 1; - - /** - * The day of the month. This ranges from 1 to 30. - * @type number - */ - this.day = parseInt(params.day, 10) || 1; - - /** - * The hour of the day. This can be a number from 0 to 23, as times are - * stored unambiguously in the 24-hour clock. - * @type number - */ - this.hour = parseInt(params.hour, 10) || 0; - - /** - * The minute of the hours. Ranges from 0 to 59. - * @type number - */ - this.minute = parseInt(params.minute, 10) || 0; - - /** - * The second of the minute. Ranges from 0 to 59. - * @type number - */ - this.second = parseInt(params.second, 10) || 0; - - /** - * The millisecond of the second. Ranges from 0 to 999. - * @type number - */ - this.millisecond = parseInt(params.millisecond, 10) || 0; - - // derived properties - - /** - * Year in the cycle of the Han calendar - * @type number - */ - this.cycleYear = MathUtils.amod(this.year, 60); - - /** - * The day of the year. Ranges from 1 to 384. - * @type number - */ - this.dayOfYear = parseInt(params.dayOfYear, 10); - - if (typeof(params.dst) === 'boolean') { - this.dst = params.dst; - } - - this.newRd({ - cal: this.cal, - cycle: this.cycle, - year: this.year, - month: this.month, - day: this.day, - hour: this.hour, - minute: this.minute, - second: this.second, - millisecond: this.millisecond, - sync: params.sync, - loadParams: params.loadParams, - callback: ilib.bind(this, function (rd) { - if (rd) { - this.rd = rd; - - // add the time zone offset to the rd to convert to UTC - new TimeZone({ - id: this.timezone, - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(tz) { - this.tz = tz; - // getOffsetMillis requires that this.year, this.rd, and this.dst - // are set in order to figure out which time zone rules apply and - // what the offset is at that point in the year - this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; - if (this.offset !== 0) { - // this newRd can be called synchronously because we already called - // it asynchronously above, so all of the astro data should - // already be loaded. - this.rd = this.newRd({ - cal: this.cal, - rd: this.rd.getRataDie() - this.offset - }); - this._calcLeap(); - } else { - // re-use the derived properties from the RD calculations - this.leapMonth = this.rd.leapMonth; - this.priorLeapMonth = this.rd.priorLeapMonth; - this.leapYear = this.rd.leapYear; - } - - this._init2(params); - }) - }); - } else { - this._init2(params); - } - }) - }); - } else { - this._init2(params); - } - }) - }); -}; - -/** - * Finish the initialization for the han date. - * @private - */ -HanDate.prototype._init2 = function (params) { - if (!this.rd) { - // init2() may be called without newRd having been called before, - // so we cannot guarantee that the astro data is already loaded. - // That means, we have to treat this as a possibly asynchronous - // call. - this.newRd(JSUtils.merge(params || {}, { - cal: this.cal, - sync: params.sync, - loadParams: params.loadParams, - callback: ilib.bind(this, function(rd) { - this.rd = rd; - this._calcDateComponents(); - - if (params && typeof(params.onLoad) === 'function') { - params.onLoad(this); - } - }) - })); - } else { - if (params && typeof(params.onLoad) === 'function') { - params.onLoad(this); - } - } -}; - -/** - * Return a new RD for this date type using the given params. - * @protected - * @param {Object=} params the parameters used to create this rata die instance - * @returns {RataDie} the new RD instance for the given params - */ -HanDate.prototype.newRd = function (params) { - return new HanRataDie(params); -}; - -/** - * Return the year for the given RD - * @private - * @param {number} rd RD to calculate from - * @returns {number} the year for the RD - */ -HanDate.prototype._calcYear = function(rd) { - var gregdate = new GregorianDate({ - rd: rd, - timezone: this.timezone - }); - var hanyear = gregdate.year + 2697; - var newYears = this.cal.newYears(hanyear); - return hanyear - ((rd + RataDie.gregorianEpoch < newYears) ? 1 : 0); -}; - -/** - * Calculate the leap year and months from the RD. - * @private - */ -HanDate.prototype._calcLeap = function() { - var jd = this.rd.getRataDie() + RataDie.gregorianEpoch; - - var calc = HanCal._leapYearCalc(this.year); - var m2 = HanCal._newMoonOnOrAfter(calc.m1+1); - this.leapYear = Math.round((calc.m2 - calc.m1) / 29.530588853000001) === 12; - - var newYears = (this.leapYear && - (HanCal._noMajorST(calc.m1) || HanCal._noMajorST(m2))) ? - HanCal._newMoonOnOrAfter(m2+1) : m2; - - var m = HanCal._newMoonBefore(jd + 1); - this.priorLeapMonth = HanRataDie._priorLeapMonth(newYears, HanCal._newMoonBefore(m)); - this.leapMonth = (this.leapYear && HanCal._noMajorST(m) && !this.priorLeapMonth); -}; - -/** - * Calculate date components for the given RD date. - * @private - */ -HanDate.prototype._calcDateComponents = function () { - var remainder, - jd = this.rd.getRataDie() + RataDie.gregorianEpoch; - - // console.log("HanDate._calcDateComponents: calculating for jd " + jd); - - if (typeof(this.offset) === "undefined") { - // now offset the jd by the time zone, then recalculate in case we were - // near the year boundary - if (!this.tz) { - this.tz = new TimeZone({id: this.timezone}); - } - this.offset = this.tz.getOffsetMillis(this) / 86400000; - } - - if (this.offset !== 0) { - jd += this.offset; - } - - // use the Gregorian calendar objects as a convenient way to short-cut some - // of the date calculations - - var gregyear = GregorianDate._calcYear(this.rd.getRataDie()); - this.year = gregyear + 2697; - var calc = HanCal._leapYearCalc(this.year); - var m2 = HanCal._newMoonOnOrAfter(calc.m1+1); - this.leapYear = Math.round((calc.m2 - calc.m1) / 29.530588853000001) === 12; - var newYears = (this.leapYear && - (HanCal._noMajorST(calc.m1) || HanCal._noMajorST(m2))) ? - HanCal._newMoonOnOrAfter(m2+1) : m2; - - // See if it's between Jan 1 and the Chinese new years of that Gregorian year. If - // so, then the Han year is actually the previous one - if (jd < newYears) { - this.year--; - calc = HanCal._leapYearCalc(this.year); - m2 = HanCal._newMoonOnOrAfter(calc.m1+1); - this.leapYear = Math.round((calc.m2 - calc.m1) / 29.530588853000001) === 12; - newYears = (this.leapYear && - (HanCal._noMajorST(calc.m1) || HanCal._noMajorST(m2))) ? - HanCal._newMoonOnOrAfter(m2+1) : m2; - } - // month is elapsed month, not the month number + leap month boolean - var m = HanCal._newMoonBefore(jd + 1); - this.month = Math.round((m - calc.m1) / 29.530588853000001); - - this.priorLeapMonth = HanRataDie._priorLeapMonth(newYears, HanCal._newMoonBefore(m)); - this.leapMonth = (this.leapYear && HanCal._noMajorST(m) && !this.priorLeapMonth); - - this.cycle = Math.floor((this.year - 1) / 60); - this.cycleYear = MathUtils.amod(this.year, 60); - this.day = Astro._floorToJD(jd) - m + 1; - - /* - console.log("HanDate._calcDateComponents: year is " + this.year); - console.log("HanDate._calcDateComponents: isLeapYear is " + this.leapYear); - console.log("HanDate._calcDateComponents: cycle is " + this.cycle); - console.log("HanDate._calcDateComponents: cycleYear is " + this.cycleYear); - console.log("HanDate._calcDateComponents: month is " + this.month); - console.log("HanDate._calcDateComponents: isLeapMonth is " + this.leapMonth); - console.log("HanDate._calcDateComponents: day is " + this.day); - */ - - // floor to the start of the julian day - remainder = jd - Astro._floorToJD(jd); - - // console.log("HanDate._calcDateComponents: time remainder is " + remainder); - - // now convert to milliseconds for the rest of the calculation - remainder = Math.round(remainder * 86400000); - - this.hour = Math.floor(remainder/3600000); - remainder -= this.hour * 3600000; - - this.minute = Math.floor(remainder/60000); - remainder -= this.minute * 60000; - - this.second = Math.floor(remainder/1000); - remainder -= this.second * 1000; - - this.millisecond = remainder; -}; - -/** - * Return the year within the Chinese cycle of this date. Cycles are 60 - * years long, and the value returned from this method is the number of the year - * within this cycle. The year returned from getYear() is the total elapsed - * years since the beginning of the Chinese epoch and does not include - * the cycles. - * - * @return {number} the year within the current Chinese cycle - */ -HanDate.prototype.getCycleYears = function() { - return this.cycleYear; -}; - -/** - * Return the Chinese cycle number of this date. Cycles are 60 years long, - * and the value returned from getCycleYear() is the number of the year - * within this cycle. The year returned from getYear() is the total elapsed - * years since the beginning of the Chinese epoch and does not include - * the cycles. - * - * @return {number} the current Chinese cycle - */ -HanDate.prototype.getCycles = function() { - return this.cycle; -}; - -/** - * Return whether the year of this date is a leap year in the Chinese Han - * calendar. - * - * @return {boolean} true if the year of this date is a leap year in the - * Chinese Han calendar. - */ -HanDate.prototype.isLeapYear = function() { - return this.leapYear; -}; - -/** - * Return whether the month of this date is a leap month in the Chinese Han - * calendar. - * - * @return {boolean} true if the month of this date is a leap month in the - * Chinese Han calendar. - */ -HanDate.prototype.isLeapMonth = function() { - return this.leapMonth; -}; - -/** - * Return the day of the week of this date. The day of the week is encoded - * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. - * - * @return {number} the day of the week - */ -HanDate.prototype.getDayOfWeek = function() { - var rd = Math.floor(this.rd.getRataDie() + (this.offset || 0)); - return MathUtils.mod(rd, 7); -}; - -/** - * Return the ordinal day of the year. Days are counted from 1 and proceed linearly up to - * 365, regardless of months or weeks, etc. That is, Farvardin 1st is day 1, and - * December 31st is 365 in regular years, or 366 in leap years. - * @return {number} the ordinal day of the year - */ -HanDate.prototype.getDayOfYear = function() { - var newYears = this.cal.newYears(this.year); - var priorNewMoon = HanCal._newMoonOnOrAfter(newYears + (this.month -1) * 29); - return priorNewMoon - newYears + this.day; -}; - -/** - * Return the era for this date as a number. The value for the era for Han - * calendars is -1 for "before the han era" (BP) and 1 for "the han era" (anno - * persico or AP). - * BP dates are any date before Farvardin 1, 1 AP. In the proleptic Han calendar, - * there is a year 0, so any years that are negative or zero are BP. - * @return {number} 1 if this date is in the common era, -1 if it is before the - * common era - */ -HanDate.prototype.getEra = function() { - return (this.year < 1) ? -1 : 1; -}; - -/** - * Return the name of the calendar that governs this date. - * - * @return {string} a string giving the name of the calendar - */ -HanDate.prototype.getCalendar = function() { - return "han"; -}; - -// register with the factory method -IDate._constructors["han"] = HanDate; - -/* - * EthiopicCal.js - Represent a Ethiopic calendar object. - * - * Copyright © 2015-2017, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - -/** - * @class - * Construct a new Ethiopic calendar object. This class encodes information about - * a Ethiopic calendar.

    - * - * @param {Object=} options Options governing the construction of this instance - * @constructor - * @extends Calendar - */ -var EthiopicCal = function(options) { - this.type = "ethiopic"; - - if (options && typeof(options.onLoad) === "function") { - options.onLoad(this); - } -}; - -/** - * Return the number of months in the given year. The number of months in a year varies - * for lunar calendars because in some years, an extra month is needed to extend the - * days in a year to an entire solar year. The month is represented as a 1-based number - * where 1=Maskaram, 2=Teqemt, etc. until 13=Paguemen. - * - * @param {number} year a year for which the number of months is sought - */ -EthiopicCal.prototype.getNumMonths = function(year) { - return 13; -}; - -/** - * Return the number of days in a particular month in a particular year. This function - * can return a different number for a month depending on the year because of things - * like leap years. - * - * @param {number|string} month the month for which the length is sought - * @param {number} year the year within which that month can be found - * @return {number} the number of days within the given month in the given year - */ -EthiopicCal.prototype.getMonLength = function(month, year) { - var m = month; - switch (typeof(m)) { - case "string": - m = parseInt(m, 10); - break; - case "function": - case "object": - case "undefined": - return 30; - } - if (m < 13) { - return 30; - } else { - return this.isLeapYear(year) ? 6 : 5; - } -}; - -/** - * Return true if the given year is a leap year in the Ethiopic calendar. - * The year parameter may be given as a number, or as a JulDate object. - * @param {number|EthiopicDate|string} year the year for which the leap year information is being sought - * @return {boolean} true if the given year is a leap year - */ -EthiopicCal.prototype.isLeapYear = function(year) { - var y = year; - switch (typeof(y)) { - case "string": - y = parseInt(y, 10); - break; - case "object": - if (typeof(y.year) !== "number") { // in case it is an IDate object - return false; - } - y = y.year; - break; - case "function": - case "undefined": - return false; - } - return MathUtils.mod(y, 4) === 3; -}; - -/** - * Return the type of this calendar. - * - * @return {string} the name of the type of this calendar - */ -EthiopicCal.prototype.getType = function() { - return this.type; -}; - - -/* register this calendar for the factory method */ -Calendar._constructors["ethiopic"] = EthiopicCal; - - -/* - * EthiopicRataDie.js - Represent an RD date in the Ethiopic calendar - * - * Copyright © 2015, 2018, 2021 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - -/** - * @class - * Construct a new Ethiopic RD date number object. The constructor parameters can - * contain any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. - * - *
    • julianday - sets the time of this instance according to the given - * Julian Day instance or the Julian Day given as a float - * - *
    • year - any integer, including 0 - * - *
    • month - 1 to 12, where 1 means Maskaram, 2 means Teqemt, etc., and 13 means Paguemen - * - *
    • day - 1 to 30 - * - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - * - *
    • minute - 0 to 59 - * - *
    • second - 0 to 59 - * - *
    • millisecond - 0 to 999 - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If the constructor is called with another Ethiopic date instance instead of - * a parameter block, the other instance acts as a parameter block and its - * settings are copied into the current instance.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above are present, then the RD is calculate based on - * the current date at the time of instantiation.

    - * - * If any of the properties from year through millisecond are not - * specified in the params, it is assumed that they have the smallest possible - * value in the range for the property (zero or one).

    - * - * - * @private - * @constructor - * @extends RataDie - * @param {Object=} params parameters that govern the settings and behaviour of this Ethiopic RD date - */ -var EthiopicRataDie = function(params) { - this.cal = params && params.cal || new EthiopicCal(); - this.rd = NaN; - RataDie.call(this, params); -}; - -EthiopicRataDie.prototype = new RataDie(); -EthiopicRataDie.prototype.parent = RataDie; -EthiopicRataDie.prototype.constructor = EthiopicRataDie; - -/** - * The difference between the zero Julian day and the first Ethiopic date - * of Friday, August 29, 8 CE Julian at 6:00am UTC.

    - * - * See for information about how time is handled in Ethiopia. - * - * @protected - * @type number - */ -EthiopicRataDie.prototype.epoch = 1724219.75; - -/** - * Calculate the Rata Die (fixed day) number of the given date from the - * date components. - * - * @protected - * @param {Object} date the date components to calculate the RD from - */ -EthiopicRataDie.prototype._setDateComponents = function(date) { - var year = date.year; - var years = 365 * (year - 1) + Math.floor(year/4); - var dayInYear = (date.month-1) * 30 + date.day; - var rdtime = (date.hour * 3600000 + - date.minute * 60000 + - date.second * 1000 + - date.millisecond) / - 86400000; - - /* - console.log("calcRataDie: converting " + JSON.stringify(parts)); - console.log("getRataDie: year is " + years); - console.log("getRataDie: day in year is " + dayInYear); - console.log("getRataDie: rdtime is " + rdtime); - console.log("getRataDie: rd is " + (years + dayInYear + rdtime)); - */ - - this.rd = years + dayInYear + rdtime; -}; - - -/* - * EthiopicDate.js - Represent a date in the Ethiopic calendar - * - * Copyright © 2015, 2018, 2021, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - - - - - - -/** - * @class - * Construct a new date object for the Ethiopic Calendar. The constructor can be called - * with a parameter object that contains any of the following properties: - * - *

    - * - * If called with another Ethiopic date argument, the date components of the given - * date are copied into the current one.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above - * from unixtime through millisecond are present, then the date - * components are - * filled in with the current date at the time of instantiation. Note that if - * you do not give the time zone when defaulting to the current time and the - * time zone for all of ilib was not set with ilib.setTimeZone(), then the - * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich - * Mean Time").

    - * - * - * @constructor - * @extends IDate - * @param {Object=} params parameters that govern the settings and behaviour of this Ethiopic date - */ -var EthiopicDate = function(params) { - this.cal = new EthiopicCal(); - - params = params || {}; - - if (typeof(params.noinstance) === 'boolean' && params.noinstance) { - // for doing inheritance, so don't need to fill in the data. The inheriting class only wants the methods. - return; - } - if (params.timezone) { - this.timezone = params.timezone; - } - if (params.locale) { - this.locale = (typeof(params.locale) === 'string') ? new Locale(params.locale) : params.locale; - } - - if (!this.timezone) { - if (this.locale) { - new LocaleInfo(this.locale, { - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(li) { - this.li = li; - this.timezone = li.getTimeZone(); - this._init(params); - }) - }); - } else { - this.timezone = "local"; - this._init(params); - } - } else { - this._init(params); - } -}; - -EthiopicDate.prototype = new IDate({ noinstance: true }); -EthiopicDate.prototype.parent = IDate; -EthiopicDate.prototype.constructor = EthiopicDate; - -/** - * Initialize this instance - * @private - */ -EthiopicDate.prototype._init = function (params) { - new TimeZone({ - id: this.timezone, - sync: params.sync, - loadParams: params.loadParams, - onLoad: ilib.bind(this, function(tz) { - this.tz = tz; - - if (params.year || params.month || params.day || params.hour || - params.minute || params.second || params.millisecond ) { - /** - * Year in the Ethiopic calendar. - * @type number - */ - this.year = parseInt(params.year, 10) || 0; - /** - * The month number, ranging from 1 (Maskaram) to 13 (Paguemen). - * @type number - */ - this.month = parseInt(params.month, 10) || 1; - /** - * The day of the month. This ranges from 1 to 30. - * @type number - */ - this.day = parseInt(params.day, 10) || 1; - /** - * The hour of the day. This can be a number from 0 to 23, as times are - * stored unambiguously in the 24-hour clock. - * @type number - */ - this.hour = parseInt(params.hour, 10) || 0; - /** - * The minute of the hours. Ranges from 0 to 59. - * @type number - */ - this.minute = parseInt(params.minute, 10) || 0; - /** - * The second of the minute. Ranges from 0 to 59. - * @type number - */ - this.second = parseInt(params.second, 10) || 0; - /** - * The millisecond of the second. Ranges from 0 to 999. - * @type number - */ - this.millisecond = parseInt(params.millisecond, 10) || 0; - - /** - * The day of the year. Ranges from 1 to 366. - * @type number - */ - this.dayOfYear = parseInt(params.dayOfYear, 10); - - if (typeof(params.dst) === 'boolean') { - this.dst = params.dst; - } - - this.rd = this.newRd(this); - - // add the time zone offset to the rd to convert to UTC - // getOffsetMillis requires that this.year, this.rd, and this.dst - // are set in order to figure out which time zone rules apply and - // what the offset is at that point in the year - this.offset = this.tz._getOffsetMillisWallTime(this) / 86400000; - if (this.offset !== 0) { - this.rd = this.newRd({ - rd: this.rd.getRataDie() - this.offset - }); - } - } - - if (!this.rd) { - this.rd = this.newRd(params); - this._calcDateComponents(); - } - - if (typeof(params.onLoad) === "function") { - params.onLoad(this); - } - }) - }); -}; - -/** - * Return a new RD for this date type using the given params. - * @protected - * @param {Object=} params the parameters used to create this rata die instance - * @returns {RataDie} the new RD instance for the given params - */ -EthiopicDate.prototype.newRd = function (params) { - return new EthiopicRataDie(params); -}; - -/** - * Return the year for the given RD - * @private - * @param {number} rd RD to calculate from - * @returns {number} the year for the RD - */ -EthiopicDate.prototype._calcYear = function(rd) { - var year = Math.floor((4*(Math.floor(rd)-1) + 1463)/1461); - - return year; -}; - -/** - * Calculate date components for the given RD date. - * @private - */ -EthiopicDate.prototype._calcDateComponents = function () { - var remainder, - rd = this.rd.getRataDie(); - - this.year = this._calcYear(rd); - - if (typeof(this.offset) === "undefined") { - this.year = this._calcYear(rd); - - // now offset the RD by the time zone, then recalculate in case we were - // near the year boundary - if (!this.tz) { - this.tz = new TimeZone({id: this.timezone}); - } - this.offset = this.tz.getOffsetMillis(this) / 86400000; - } - - if (this.offset !== 0) { - rd += this.offset; - this.year = this._calcYear(rd); - } - - var jan1 = this.newRd({ - year: this.year, - month: 1, - day: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0 - }); - remainder = rd + 1 - jan1.getRataDie(); - - this.month = Math.floor((remainder-1)/30) + 1; - remainder = remainder - (this.month-1) * 30; - - this.day = Math.floor(remainder); - remainder -= this.day; - - // now convert to milliseconds for the rest of the calculation - remainder = Math.round(remainder * 86400000); - - this.hour = Math.floor(remainder/3600000); - remainder -= this.hour * 3600000; - - this.minute = Math.floor(remainder/60000); - remainder -= this.minute * 60000; - - this.second = Math.floor(remainder/1000); - remainder -= this.second * 1000; - - this.millisecond = remainder; -}; - -/** - * Return the day of the week of this date. The day of the week is encoded - * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. - * - * @return {number} the day of the week - */ -EthiopicDate.prototype.getDayOfWeek = function() { - var rd = Math.floor(this.rd.getRataDie() + (this.offset || 0)); - return MathUtils.mod(rd-5, 7); -}; - -/** - * Return the name of the calendar that governs this date. - * - * @return {string} a string giving the name of the calendar - */ -EthiopicDate.prototype.getCalendar = function() { - return "ethiopic"; -}; - -//register with the factory method -IDate._constructors["ethiopic"] = EthiopicDate; - - -/* - * CopticCal.js - Represent a Coptic calendar object. - * - * Copyright © 2015,2018, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - -/** - * @class - * Construct a new Coptic calendar object. This class encodes information about - * a Coptic calendar.

    - * - * @param {Object=} options Options governing the construction of this instance - * @constructor - * @extends EthiopicCal - */ -var CopticCal = function(options) { - this.type = "coptic"; - - if (options && typeof(options.onLoad) === "function") { - options.onLoad(this); - } -}; - -CopticCal.prototype = new EthiopicCal(); -CopticCal.prototype.parent = EthiopicCal; -CopticCal.prototype.constructor = CopticCal; - - -/* register this calendar for the factory method */ -Calendar._constructors["coptic"] = CopticCal; - - -/* - * CopticRataDie.js - Represent an RD date in the Coptic calendar - * - * Copyright © 2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - -/** - * @class - * Construct a new Coptic RD date number object. The constructor parameters can - * contain any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970. - * - *
    • julianday - sets the time of this instance according to the given - * Julian Day instance or the Julian Day given as a float - * - *
    • year - any integer, including 0 - * - *
    • month - 1 to 13, where 1 means Thoout, 2 means Paope, etc., and 13 means Epagomene - * - *
    • day - 1 to 30 - * - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - * - *
    • minute - 0 to 59 - * - *
    • second - 0 to 59 - * - *
    • millisecond - 0 to 999 - * - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If the constructor is called with another Coptic date instance instead of - * a parameter block, the other instance acts as a parameter block and its - * settings are copied into the current instance.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above are present, then the RD is calculate based on - * the current date at the time of instantiation.

    - * - * If any of the properties from year through millisecond are not - * specified in the params, it is assumed that they have the smallest possible - * value in the range for the property (zero or one).

    - * - * - * @private - * @constructor - * @extends EthiopicRataDie - * @param {Object=} params parameters that govern the settings and behaviour of this Coptic RD date - */ -var CopticRataDie = function(params) { - this.cal = params && params.cal || new CopticCal(); - this.rd = NaN; - /** - * The difference between the zero Julian day and the first Coptic date - * of Friday, August 29, 284 CE Julian at 7:00am UTC. - * @private - * @type number - */ - this.epoch = 1825028.5; - - var tmp = {}; - if (params) { - JSUtils.shallowCopy(params, tmp); - } - tmp.cal = this.cal; // override the cal parameter that may be passed in - EthiopicRataDie.call(this, tmp); -}; - -CopticRataDie.prototype = new EthiopicRataDie(); -CopticRataDie.prototype.parent = EthiopicRataDie; -CopticRataDie.prototype.constructor = CopticRataDie; - - -/* - * CopticDate.js - Represent a date in the Coptic calendar - * - * Copyright © 2015, 2018, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - - - - - - -/** - * @class - * Construct a new date object for the Coptic Calendar. The constructor can be called - * with a parameter object that contains any of the following properties: - * - *

      - *
    • unixtime - sets the time of this instance according to the given - * unix time. Unix time is the number of milliseconds since midnight on Jan 1, 1970 (Gregorian). - *
    • julianday - the Julian Day to set into this date - *
    • year - any integer - *
    • month - 1 to 13, where 1 means Thoout, 2 means Paope, etc., and 13 means Epagomene - *
    • day - 1 to 30 - *
    • hour - 0 to 23. A formatter is used to display 12 hour clocks, but this representation - * is always done with an unambiguous 24 hour representation - *
    • minute - 0 to 59 - *
    • second - 0 to 59 - *
    • millisecond - 0 to 999 - *
    • locale - the TimeZone instance or time zone name as a string - * of this coptic date. The date/time is kept in the local time. The time zone - * is used later if this date is formatted according to a different time zone and - * the difference has to be calculated, or when the date format has a time zone - * component in it. - *
    • timezone - the time zone of this instance. If the time zone is not - * given, it can be inferred from this locale. For locales that span multiple - * time zones, the one with the largest population is chosen as the one that - * represents the locale. - *
    • date - use the given intrinsic Javascript date to initialize this one. - *
    - * - * If called with another Coptic date argument, the date components of the given - * date are copied into the current one.

    - * - * If the constructor is called with no arguments at all or if none of the - * properties listed above - * from unixtime through millisecond are present, then the date - * components are - * filled in with the current date at the time of instantiation. Note that if - * you do not give the time zone when defaulting to the current time and the - * time zone for all of ilib was not set with ilib.setTimeZone(), then the - * time zone will default to UTC ("Universal Time, Coordinated" or "Greenwich - * Mean Time").

    - * - * - * @constructor - * @extends EthiopicDate - * @param {Object=} params parameters that govern the settings and behaviour of this Coptic date - */ -var CopticDate = function(params) { - this.rd = NaN; // clear these out so that the EthiopicDate constructor can set it - var newparams = ilib.extend({}, params); - newparams.onLoad = function(ed) { - ed.cal = new CopticCal(); - if (typeof(params.onLoad) === "function") { - params.onLoad(ed); - } - }; - EthiopicDate.call(this, params); -}; - -CopticDate.prototype = new EthiopicDate({noinstance: true}); -CopticDate.prototype.parent = EthiopicDate.prototype; -CopticDate.prototype.constructor = CopticDate; - -/** - * Return a new RD for this date type using the given params. - * @protected - * @param {Object=} params the parameters used to create this rata die instance - * @returns {RataDie} the new RD instance for the given params - */ -CopticDate.prototype.newRd = function (params) { - return new CopticRataDie(params); -}; - -/** - * Return the day of the week of this date. The day of the week is encoded - * as number from 0 to 6, with 0=Sunday, 1=Monday, etc., until 6=Saturday. - * - * @return {number} the day of the week - */ -CopticDate.prototype.getDayOfWeek = function() { - var rd = Math.floor(this.rd.getRataDie() + (this.offset || 0)); - return MathUtils.mod(rd-3, 7); -}; - -/** - * Return the name of the calendar that governs this date. - * - * @return {string} a string giving the name of the calendar - */ -CopticDate.prototype.getCalendar = function() { - return "coptic"; -}; - -//register with the factory method -IDate._constructors["coptic"] = CopticDate; - - -/* - * DateFmt.js - Date formatter definition - * - * Copyright © 2012-2015, 2018, 2020, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data dateformats sysres - - - - - - - - - - - - - - - - - - -/** - * @class - * Create a new date formatter instance. The date formatter is immutable once - * it is created, but can format as many different dates as needed with the same - * options. Create different date formatter instances for different purposes - * and then keep them cached for use later if you have more than one date to - * format.

    - * - * The options may contain any of the following properties: - * - *

      - *
    • locale - locale to use when formatting the date/time. If the locale is - * not specified, then the default locale of the app or web page will be used. - * - *
    • calendar - the type of calendar to use for this format. The value should - * be a string containing the name of the calendar. Currently, the supported - * types are "gregorian", "julian", "arabic", "hebrew", or "chinese". If the - * calendar is not specified, then the default calendar for the locale is used. When the - * calendar type is specified, then the format method must be called with an instance of - * the appropriate date type. (eg. Gregorian calendar means that the format method must - * be called with a GregDate instance.) - * - *
    • timezone - time zone to use when formatting times. This may be a time zone - * instance or a time zone specifier from the IANA list of time zone database names - * (eg. "America/Los_Angeles"), - * the string "local", or a string specifying the offset in RFC 822 format. The IANA - * list of time zone names can be viewed at - * this page. - * If the time zone is given as "local", the offset from UTC as given by - * the Javascript system is used. If the offset is given as an RFC 822 style offset - * specifier, it will parse that string and use the resulting offset. If the time zone - * is not specified, the - * default time zone for the locale is used. If both the date object and this formatter - * instance contain time zones and those time zones are different from each other, the - * formatter will calculate the offset between the time zones and subtract it from the - * date before formatting the result for the current time zone. The theory is that a date - * object that contains a time zone specifies a specific instant in time that is valid - * around the world, whereas a date object without one is a local time and can only be - * used for doing things in the local time zone of the user. - * - *
    • type - Specify whether this formatter should format times only, dates only, or - * both times and dates together. Valid values are "time", "date", and "datetime". Note that - * in some locales, the standard format uses the order "time followed by date" and in others, - * the order is exactly opposite, so it is better to create a single "datetime" formatter - * than it is to create a time formatter and a date formatter separately and concatenate the - * results. A "datetime" formatter will get the order correct for the locale.

      - * The default type if none is specified in with the type option is "date".

      - * - *
    • length - Specify the length of the format to use. The length is the approximate size of the - * formatted string. - * - *
        - *
      • short - use a short representation of the time. This is the most compact format possible for the locale. - *
      • medium - use a medium length representation of the time. This is a slightly longer format. - *
      • long - use a long representation of the time. This is a fully specified format, but some of the textual - * components may still be abbreviated - *
      • full - use a full representation of the time. This is a fully specified format where all the textual - * components are spelled out completely - *
      - * eg. The "short" format for an en_US date may be "MM/dd/yy", whereas the long format might be "d MMM, yyyy". In the long - * format, the month name is textual instead of numeric and is longer, the year is 4 digits instead of 2, and the format - * contains slightly more spaces and formatting characters.

      - * Note that the length parameter does not specify which components are to be formatted. Use the "date" and the "time" - * properties to specify the components. Also, very few of the components of a time format differ according to the length, - * so this property has little to no affect on time formatting.

      - * - *
    • date - This property tells - * which components of a date format to use. For example, - * sometimes you may wish to format a date that only contains the month and date - * without the year, such as when displaying a person's yearly birthday. The value - * of this property allows you to specify only those components you want to see in the - * final output, ordered correctly for the locale.

      - * Valid values are: - * - *
        - *
      • dmwy - format all components, weekday, date, month, and year - *
      • dmy - format only date, month, and year - *
      • dmw - format only weekday, date, and month - *
      • dm - format only date and month - *
      • my - format only month and year - *
      • dw - format only the weekday and date - *
      • d - format only the date - *
      • m - format only the month, in numbers for shorter lengths, and letters for - * longer lengths - *
      • n - format only the month, in letters only for all lengths - *
      • y - format only the year - *
      - * Default components, if this property is not specified, is "dmy". This property may be specified - * but has no affect if the current formatter is for times only.

      - * As of ilib 12.0, you can now pass ICU style skeletons in this option similar to the ones you - * get from DateTimePatternGenerator.getSkeleton(). - * It will not extract the length from the skeleton so you still need to pass the length property, - * but it will extract the date components.

      - * - *
    • time - This property gives which components of a time format to use. The time will be formatted - * correctly for the locale with only the time components requested. For example, a clock might only display - * the hour and minute and not need the seconds or the am/pm component. In this case, the time property should be set - * to "hm".

      - * Valid values for this property are: - * - *
        - *
      • ahmsz - format the hours, minutes, seconds, am/pm (if using a 12 hour clock), and the time zone - *
      • ahms - format the hours, minutes, seconds, and am/pm (if using a 12 hour clock) - *
      • hmsz - format the hours, minutes, seconds, and the time zone - *
      • hms - format the hours, minutes, and seconds - *
      • ahmz - format the hours, minutes, am/pm (if using a 12 hour clock), and the time zone - *
      • ahm - format the hours, minutes, and am/pm (if using a 12 hour clock) - *
      • hmz - format the hours, minutes, and the time zone - *
      • ah - format only the hours and am/pm if using a 12 hour clock - *
      • hm - format only the hours and minutes - *
      • ms - format only the minutes and seconds - *
      • h - format only the hours - *
      • m - format only the minutes - *
      • s - format only the seconds - *
      - * If you want to format a length of time instead of a particular instant - * in time, use the duration formatter object (DurationFmt) instead because this - * formatter is geared towards instants. A date formatter will make sure that each component of the - * time is within the normal range - * for that component. That is, the minutes will always be between 0 and 59, no matter - * what is specified in the date to format. A duration format will allow the number - * of minutes to exceed 59 if, for example, you were displaying the length of - * a movie of 198 minutes.

      - * Default value if this property is not specified is "hma".

      - * As of ilib 12.0, you can now pass ICU style skeletons in this option similar to the ones you - * get from DateTimePatternGenerator.getSkeleton(). - * It will not extract the length from the skeleton so you still need to pass the length property, - * but it will extract the time components. - * - *
    • clock - specify that the time formatter should use a 12 or 24 hour clock. - * Valid values are "12" and "24".

      - * In some locales, both clocks are used. For example, in en_US, the general populace uses - * a 12 hour clock with am/pm, but in the US military or in nautical or aeronautical or - * scientific writing, it is more common to use a 24 hour clock. This property allows you to - * construct a formatter that overrides the default for the locale.

      - * If this property is not specified, the default is to use the most widely used convention - * for the locale. - * - *
    • template - use the given template string as a fixed format when formatting - * the date/time. Valid codes to use in a template string are as follows: - * - *
        - *
      • a - am/pm marker - *
      • B - the current day period - *
      • d - 1 or 2 digit date of month, not padded - *
      • dd - 1 or 2 digit date of month, 0 padded to 2 digits - *
      • O - ordinal representation of the date of month (eg. "1st", "2nd", etc.) - *
      • D - 1 to 3 digit day of year - *
      • DD - 1 to 3 digit day of year, 0 padded to 2 digits - *
      • DDD - 1 to 3 digit day of year, 0 padded to 3 digits - *
      • M - 1 or 2 digit month number, not padded - *
      • MM - 1 or 2 digit month number, 0 padded to 2 digits - *
      • N - 1 character month name abbreviation - *
      • NN - 2 character month name abbreviation - *
      • MMM - 3 character month name abbreviation - *
      • MMMM - fully spelled out month name - *
      • L - 1 character stand-alone month name abbreviation - *
      • LL - 2 character stand-alone month name abbreviation - *
      • LLL - 3 character stand-alone month name abbreviation - *
      • LLLL - fully spelled out stand-alone month name - *
      • yy - 2 digit year - *
      • yyyy - 4 digit year - *
      • E - day-of-week name, abbreviated to a single character - *
      • EE - day-of-week name, abbreviated to a max of 2 characters - *
      • EEE - day-of-week name, abbreviated to a max of 3 characters - *
      • EEEE - day-of-week name fully spelled out - *
      • c - stand-alone day-of-week name, abbreviated to a single character - *
      • cc - stand-alone day-of-week name, abbreviated to a max of 2 characters - *
      • ccc - stand-alone day-of-week name, abbreviated to a max of 3 characters - *
      • cccc - stand-alone day-of-week name fully spelled out - *
      • G - era designator - *
      • w - week number in year - *
      • ww - week number in year, 0 padded to 2 digits - *
      • W - week in month - *
      • h - hour (12 followed by 1 to 11) - *
      • hh - hour (12, followed by 1 to 11), 0 padded to 2 digits - *
      • k - hour (1 to 24) - *
      • kk - hour (1 to 24), 0 padded to 2 digits - *
      • H - hour (0 to 23) - *
      • HH - hour (0 to 23), 0 padded to 2 digits - *
      • K - hour (0 to 11) - *
      • KK - hour (0 to 11), 0 padded to 2 digits - *
      • m - minute in hour - *
      • mm - minute in hour, 0 padded to 2 digits - *
      • s - second in minute - *
      • ss - second in minute, 0 padded to 2 digits - *
      • S - millisecond (1 to 3 digits) - *
      • SSS - millisecond, 0 padded to 3 digits - *
      • z - general time zone - *
      • Z - RFC 822 time zone - *
      - * - *
    • useNative - the flag used to determine whether to use the native script settings - * for formatting the numbers. - * - *
    • meridiems - string that specifies what style of meridiems to use with this - * format. The choices are "default", "gregorian", "ethiopic", and "chinese". The "default" - * style is often the simple Gregorian AM/PM, but the actual style is chosen by the locale. - * (For almost all locales, the Gregorian AM/PM style is most frequently used.) - * The "ethiopic" style uses 5 different meridiems for "morning", "noon", "afternoon", - * "evening", and "night". The "chinese" style uses 7 different meridiems corresponding - * to the various parts of the day. N.B. Even for the Chinese locales, the default is "gregorian" - * when formatting dates in the Gregorian calendar. - * - *
    • useIntl - choose whether Intl.DateTimeFormat object for formatting. - * When it is set to true, the Intl object is available, it supports the requested locale, and - * the parameters can be converted to equivalent parameters for the Intl.DateTimeFormat object, - * then it will format the date relatively quickly using Intl. - * When they cannot be converted, the Intl object is not available, or the Intl object does not support - * the requested locale, it will perform the relatively slow formatting using regular ilib code written in Javascript. - * The code will often return different results depending on the platform and version of the Javascript engine - * and which version of CLDR it supports. If you need consistency across versions and platforms, - * do not use the useIntl flag. Just stick with the regular ilib formatting code. - * - *
    • onLoad - a callback function to call when the date format object is fully - * loaded. When the onLoad option is given, the DateFmt object will attempt to - * load any missing locale data using the ilib loader callback. - * When the constructor is done (even if the data is already preassembled), the - * onLoad function is called with the current instance as a parameter, so this - * callback can be used with preassembled or dynamic loading or a mix of the two. - * - *
    • sync - tell whether to load any missing locale data synchronously or - * asynchronously. If this option is given as "false", then the "onLoad" - * callback must be given, as the instance returned from this constructor will - * not be usable for a while. - * - *
    • loadParams - an object containing parameters to pass to the - * loader callback function when locale data is missing. The parameters are not - * interpretted or modified in any way. They are simply passed along. The object - * may contain any property/value pairs as long as the calling code is in - * agreement with the loader callback function as to what those parameters mean. - *
    - * - * Any substring containing letters within single or double quotes will be used - * as-is in the final output and will not be interpretted for codes as above.

    - * - * Example: a date format in Spanish might be given as: "'El' d. 'de' MMMM", where - * the 'El' and the 'de' are left as-is in the output because they are quoted. Typical - * output for this example template might be, "El 5. de Mayo". - * - * The following options will be used when formatting a date/time with an explicit - * template: - * - *

      - *
    • locale - the locale is only used for - * translations of things like month names or day-of-week names. - *
    • calendar - used to translate a date instance into date/time component values - * that can be formatted into the template - *
    • timezone - used to figure out the offset to add or subtract from the time to - * get the final time component values - *
    • clock - used to figure out whether to format times with a 12 or 24 hour clock. - * If this option is specified, it will override the hours portion of a time format. - * That is, "hh" is switched with "HH" and "kk" is switched with "KK" as appropriate. - * If this option is not specified, the 12/24 code in the template will dictate whether - * to use the 12 or 24 clock, and the 12/24 default in the locale will be ignored. - *
    - * - * All other options will be ignored and their corresponding getter methods will - * return the empty string.

    - * - * - * @constructor - * @param {Object} options options governing the way this date formatter instance works - */ -var DateFmt = function(options) { - var arr, i, bad, c, comps, - sync = true, - loadParams = undefined; - - this.locale = new Locale(); - this.type = "date"; - this.length = "s"; - this.dateComponents = "dmy"; - this.timeComponents = "ahm"; - this.meridiems = "default"; - this.useIntl = false; - - options = options || {sync: true}; - if (options.locale) { - this.locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; - } - - if (options.type) { - if (options.type === 'date' || options.type === 'time' || options.type === 'datetime') { - this.type = options.type; - } - } - - if (options.calendar) { - this.calName = options.calendar; - } - - if (options.length) { - if (options.length === 'short' || - options.length === 'medium' || - options.length === 'long' || - options.length === 'full') { - // only use the first char to save space in the json files - this.length = options.length.charAt(0); - } - } - - if (options.date) { - arr = options.date.split(""); - var dateComps = new ISet(); - bad = false; - for (i = 0; i < arr.length; i++) { - c = arr[i].toLowerCase(); - if (c === "e") c = "w"; // map ICU -> ilib - if (c !== 'd' && c !== 'm' && c !== 'y' && c !== 'w' && c !== 'n') { - // ignore time components and the era - if (c !== 'h' && c !== 'm' && c !== 's' && c !== 'a' && c !== 'z' && c !== 'g') { - bad = true; - break; - } - } else { - dateComps.add(c); - } - } - if (!bad) { - comps = dateComps.asArray().sort(function (left, right) { - return (left < right) ? -1 : ((right < left) ? 1 : 0); - }); - this.dateComponents = comps.join(""); - } - } - - if (options.time) { - arr = options.time.split(""); - var timeComps = new ISet(); - this.badTime = false; - for (i = 0; i < arr.length; i++) { - c = arr[i].toLowerCase(); - if (c !== 'h' && c !== 'm' && c !== 's' && c !== 'a' && c !== 'z') { - // ignore the date components - if (c !== 'd' && c !== 'm' && c !== 'y' && c !== 'w' && c !== 'e' && c !== 'n' && c !== 'g') { - this.badTime = true; - break; - } - } else { - timeComps.add(c); - } - } - if (!this.badTime) { - comps = timeComps.asArray().sort(function (left, right) { - return (left < right) ? -1 : ((right < left) ? 1 : 0); - }); - this.timeComponents = comps.join(""); - } - } - - if (options.clock && (options.clock === '12' || options.clock === '24')) { - this.clock = options.clock; - } - - if (options.template) { - // many options are not useful when specifying the template directly, so zero - // them out. - this.type = ""; - this.length = ""; - this.dateComponents = ""; - this.timeComponents = ""; - - this.template = options.template; - } - - if (options.timezone) { - if (options.timezone instanceof TimeZone) { - this.tz = options.timezone; - this.timezone = this.tz.getId(); - } else { - this.timezone = options.timezone; - } - } - - if (typeof(options.useNative) === 'boolean') { - this.useNative = options.useNative; - } - - if (typeof(options.meridiems) !== 'undefined' && - (options.meridiems === "chinese" || - options.meridiems === "gregorian" || - options.meridiems === "ethiopic")) { - this.meridiems = options.meridiems; - } - - if (typeof(options.sync) !== 'undefined') { - sync = (options.sync === true); - } - - if (typeof(options.useIntl) !== 'undefined') { - this.useIntl = options.useIntl; - } - - loadParams = options.loadParams; - - new LocaleInfo(this.locale, { - sync: sync, - loadParams: loadParams, - onLoad: ilib.bind(this, function (li) { - this.locinfo = li; - - // get the default calendar name from the locale, and if the locale doesn't define - // one, use the hard-coded gregorian as the last resort - this.calName = this.calName || this.locinfo.getCalendar() || "gregorian"; - - if (this.useIntl && - typeof(Intl) !== 'undefined' && - typeof(Intl.DateTimeFormat) !== 'undefined' && - typeof(Intl.DateTimeFormat.supportedLocalesOf) !== 'undefined' && - Intl.DateTimeFormat.supportedLocalesOf(this.locale.getSpec()).length > 0 && - (this.locinfo.getDigitsStyle() === "western" && (!options.template) && this.calName === "gregorian")) { - var len = DateFmt.lenmap[this.length]; - if (this.type === "date" && - ((this.dateComponents === "dmy" && len !== "full") || (this.dateComponents === "dmwy" && len === "full"))) { - this.IntlDateTimeObj = new Intl.DateTimeFormat(this.locale.getSpec(), { - dateStyle: len - }); - } else if (this.type === "time" && - this.timeComponents === "ahm" || this.timeComponents === "ahms"){ - var timeMap = { - "ahm": "short", - "ahms": "medium" - } - this.IntlDateTimeObj = new Intl.DateTimeFormat(this.locale.getSpec(), { - timeStyle: timeMap[this.timeComponents] - }); - } else if (this.type === "date" && this.dateComponents === "m" && len === "full") { - this.IntlDateTimeObj = new Intl.DateTimeFormat(this.locale.getSpec(), { - month: "long" - }); - - } else if (this.type === "date" && this.dateComponents === "w" && len === "full") { - this.IntlDateTimeObj = new Intl.DateTimeFormat(this.locale.getSpec(), { - weekday: "long" - }); - } else { - this.useIntl = false; - } - } - if(!this.useIntl){ - if (!this.IntlDateTimeObj && ilib.isDynCode()) { - // If we are running in the dynamic code loading assembly of ilib, the following - // will attempt to dynamically load the calendar date class for this calendar. If - // it doesn't work, this just goes on and it will use Gregorian instead. - DateFactory._init(this.calName); - } - - CalendarFactory({ - type: this.calName, - sync: sync, - loadParams: loadParams, - onLoad: ilib.bind(this, function(cal) { - this.cal = cal; - - if (!this.cal) { - // can be synchronous - this.cal = new GregorianCal(); - } - if (this.meridiems === "default") { - this.meridiems = li.getMeridiemsStyle(); - } - - // load the strings used to translate the components - new ResBundle({ - locale: this.locale, - name: "sysres", - sync: sync, - loadParams: loadParams, - onLoad: ilib.bind(this, function (rb) { - this.sysres = rb; - - if (!this.tz) { - var timezone = options.timezone; - if (!timezone && !options.locale) { - timezone = "local"; - } - - new TimeZone({ - locale: this.locale, - id: timezone, - sync: sync, - loadParams: loadParams, - onLoad: ilib.bind(this, function(tz) { - this.tz = tz; - this._init(options); - }) - }); - } else { - this._init(options); - } - }) - }); - }) - }); - } - else { - if (typeof(options.onLoad) === 'function') { - options.onLoad(this); - } - } - }) - }); -}; - -// used in getLength -DateFmt.lenmap = { - "s": "short", - "m": "medium", - "l": "long", - "f": "full" -}; - -DateFmt.defaultFmt = { - "gregorian": { - "order": "{date} {time}", - "date": { - "dmwy": "EEE d/MM/yyyy", - "dmy": "d/MM/yyyy", - "dmw": "EEE d/MM", - "dm": "d/MM", - "my": "MM/yyyy", - "dw": "EEE d", - "d": "dd", - "m": "MM", - "y": "yyyy", - "n": "NN", - "w": "EEE" - }, - "time": { - "12": "h:mm:ssa", - "24": "H:mm:ss" - }, - "range": { - "c00": "{st} - {et}, {sd}/{sm}/{sy}", - "c01": "{sd}/{sm} {st} - {ed}/{em} {et}, {sy}", - "c02": "{sd}/{sm} {st} - {ed}/{em} {et}, {sy}", - "c03": "{sd}/{sm}/{sy} {st} - {ed}/{em}/{ey} {et}", - "c10": "{sd}-{ed}/{sm}/{sy}", - "c11": "{sd}/{sm} - {ed}/{em} {sy}", - "c12": "{sd}/{sm}/{sy} - {ed}/{em}/{ey}", - "c20": "{sm}/{sy} - {em}/{ey}", - "c30": "{sy} - {ey}" - } - }, - "islamic": "gregorian", - "hebrew": "gregorian", - "julian": "gregorian", - "buddhist": "gregorian", - "persian": "gregorian", - "persian-algo": "gregorian", - "han": "gregorian" -}; - -/** -* @static -* @private -*/ -DateFmt.monthNameLenMap = { - "short" : "N", - "medium": "NN", - "long": "MMM", - "full": "MMMM" -}; - -/** -* @static -* @private -*/ -DateFmt.weekDayLenMap = { - "short" : "E", - "medium": "EE", - "long": "EEE", - "full": "EEEE" -}; - -/** - * Return the range of possible meridiems (times of day like "AM" or - * "PM") in this date formatter.

    - * - * The options may contain any of the following properties: - * - *

      - *
    • locale - locale to use when formatting the date/time. If the locale is - * not specified, then the default locale of the app or web page will be used. - * - *
    • meridiems - string that specifies what style of meridiems to use with this - * format. The choices are "default", "gregorian", "ethiopic", and "chinese". The "default" - * style is often the simple Gregorian AM/PM, but the actual style is chosen by the locale. - * (For almost all locales, the Gregorian AM/PM style is most frequently used.) - * The "ethiopic" style uses 5 different meridiems for "morning", "noon", "afternoon", - * "evening", and "night". The "chinese" style uses 7 different meridiems corresponding - * to the various parts of the day. N.B. Even for the Chinese locales, the default is "gregorian" - * when formatting dates in the Gregorian calendar. - *
    - * - * @static - * @public - * @param {Object} options options governing the way this date formatter instance works for getting meridiems range - * @return {Array.<{name:string,start:string,end:string}>} - */ -DateFmt.getMeridiemsRange = function (options) { - options = options || {sync: true}; - var args = JSUtils.merge({}, options); - args.onLoad = function(fmt) { - if (typeof(options.onLoad) === "function") { - options.onLoad(fmt.getMeridiemsRange()); - } - }; - var fmt = new DateFmt(args); - - return fmt.getMeridiemsRange(); -}; - -/** - * return true if the locale is supported in date and time formatting for Intl.DateTimeFormat Object - *
      - *
    • locale - locale to check if it is available or not. - * If the locale is not specified, then it returns false. - * - *
    - * - * @static - * @public - * @param {string} locale locale to check if it is available or not. - * @return {Boolean} true if it is available to use, false otherwise - */ - -DateFmt.isIntlDateTimeAvailable = function (locale) { - if (!locale || - !ilib._global("Intl") || - typeof(Intl.DateTimeFormat) === 'undefined' || - typeof(Intl.DateTimeFormat.supportedLocalesOf) === 'undefined') { - return false; - } - return (Intl.DateTimeFormat.supportedLocalesOf(locale).length > 0) ? true : false; -}; - -DateFmt.prototype = { - /** - * Finish initializing the formatter object - * @private - */ - _init: function(options) { - if (typeof (options.sync) === 'undefined') { - options.sync = true; - } - Utils.loadData({ - object: "DateFmt", - locale: this.locale, - name: "dateformats.json", - sync: options.sync, - loadParams: options.loadParams, - callback: ilib.bind(this, function (formats) { - if (!formats) { - formats = ilib.data.dateformats || DateFmt.defaultFmt; - } - - this.info = formats; - var ret = this; - - if (this.template) { - this._massageTemplate(); - } else { - if (typeof(this.clock) === 'undefined') { - // default to the locale instead - this.clock = this.locinfo.getClock(); - } - - if (typeof(options.sync) === "boolean" && !options.sync) { - // in async mode, capture the exception and call the callback with "undefined" - try { - this._initTemplate(formats); - this._massageTemplate(); - } catch (e) { - ret = undefined; - } - } else { - // in sync mode, allow the exception to percolate upwards - this._initTemplate(formats); - this._massageTemplate(); - } - } - - if (typeof(options.onLoad) === 'function') { - options.onLoad(ret); - } - }) - }); - }, - /** - * @private - * @param {string|{ - * order:(string|{ - * s:string, - * m:string, - * l:string, - * f:string - * }), - * date:Object., - * time:Object.>, - * range:Object. - * }} formats - */ - _initTemplate: function (formats) { - if (formats[this.calName]) { - var name = formats[this.calName]; - // may be an alias to another calendar type - this.formats = (typeof(name) === "string") ? formats[name] : name; - - this.template = ""; - - switch (this.type) { - case "datetime": - this.template = (this.formats && this._getLengthFormat(this.formats.order, this.length)) || "{date} {time}"; - this.template = this.template.replace("{date}", this._getFormat(this.formats.date, this.dateComponents, this.length) || ""); - this.template = this.template.replace("{time}", this._getFormat(this.formats.time[this.clock], this.timeComponents, this.length) || ""); - break; - case "date": - this.template = this._getFormat(this.formats.date, this.dateComponents, this.length); - break; - case "time": - this.template = this._getFormat(this.formats.time[this.clock], this.timeComponents, this.length); - break; - } - - // calculate what order the components appear in for this locale - this.componentOrder = this._getFormat(this.formats.date, "dmy", "l"). - replace(/[^dMy]/g, ""). - replace(/y+/, "y"). - replace(/d+/, "d"). - replace(/M+/, "m"); - } else { - throw "No formats available for calendar " + this.calName + " in locale " + this.locale.toString(); - } - }, - - /** - * @private - */ - _massageTemplate: function () { - var i; - - if (this.clock && this.template) { - // explicitly set the hours to the requested type - var temp = ""; - switch (this.clock) { - case "24": - for (i = 0; i < this.template.length; i++) { - if (this.template.charAt(i) == "'") { - temp += this.template.charAt(i++); - while (i < this.template.length && this.template.charAt(i) !== "'") { - temp += this.template.charAt(i++); - } - if (i < this.template.length) { - temp += this.template.charAt(i); - } - } else if (this.template.charAt(i) == 'K') { - temp += 'k'; - } else if (this.template.charAt(i) == 'h') { - temp += 'H'; - } else { - temp += this.template.charAt(i); - } - } - this.template = temp; - break; - case "12": - for (i = 0; i < this.template.length; i++) { - if (this.template.charAt(i) == "'") { - temp += this.template.charAt(i++); - while (i < this.template.length && this.template.charAt(i) !== "'") { - temp += this.template.charAt(i++); - } - if (i < this.template.length) { - temp += this.template.charAt(i); - } - } else if (this.template.charAt(i) == 'k') { - temp += 'K'; - } else if (this.template.charAt(i) == 'H') { - temp += 'h'; - } else { - temp += this.template.charAt(i); - } - } - this.template = temp; - break; - } - } - - // tokenize it now for easy formatting - this.templateArr = this._tokenize(this.template); - - var digits; - // set up the mapping to native or alternate digits if necessary - if (typeof(this.useNative) === "boolean") { - if (this.useNative) { - digits = this.locinfo.getNativeDigits(); - if (digits) { - this.digits = digits; - } - } - } else if (this.locinfo.getDigitsStyle() === "native") { - digits = this.locinfo.getNativeDigits(); - if (digits) { - this.useNative = true; - this.digits = digits; - } - } - }, - - /** - * Convert the template into an array of date components separated by formatting chars. - * @private - * @param {string} template Format template to tokenize into components - * @return {Array.} a tokenized array of date format components - */ - _tokenize: function (template) { - var i = 0, start, ch, letter, arr = []; - - // console.log("_tokenize: tokenizing template " + template); - if (template) { - while (i < template.length) { - ch = template.charAt(i); - start = i; - if (ch === "'") { - // console.log("found quoted string"); - i++; - // escaped string - push as-is, then dequote later - while (i < template.length && template.charAt(i) !== "'") { - i++; - } - if (i < template.length) { - i++; // grab the other quote too - } - } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) { - letter = template.charAt(i); - // console.log("found letters " + letter); - while (i < template.length && ch === letter) { - ch = template.charAt(++i); - } - } else { - // console.log("found other"); - while (i < template.length && ch !== "'" && (ch < 'a' || ch > 'z') && (ch < 'A' || ch > 'Z')) { - ch = template.charAt(++i); - } - } - arr.push(template.substring(start,i)); - // console.log("start is " + start + " i is " + i + " and substr is " + template.substring(start,i)); - } - } - return arr; - }, - - /** - * @private - * @param {Object.} obj Object to search - * @param {string} components Format components to search - * @param {string} length Length of the requested format - * @return {string|undefined} the requested format - */ - _getFormatInternal: function getFormatInternal(obj, components, length) { - if (typeof(components) !== 'undefined' && obj && obj[components]) { - return this._getLengthFormat(obj[components], length); - } - return undefined; - }, - - // stand-alone of m (month) is l - // stand-alone of my (month year) is mys - // stand-alone of d (day) is a - // stand-alone of w (weekday) is e - // stand-alone of y (year) is r - _standAlones: { - "m": "l", - "my": "mys", - "d": "a", - "w": "e", - "y": "r" - }, - - /** - * @private - * @param {Object.} obj Object to search - * @param {string} components Format components to search - * @param {string} length Length of the requested format - * @return {string|undefined} the requested format - */ - _getFormat: function getFormat(obj, components, length) { - // handle some special cases for stand-alone formats - if (components && this._standAlones[components]) { - var tmp = this._getFormatInternal(obj, this._standAlones[components], length); - if (tmp) { - return tmp; - } - } - - // if no stand-alone format is available, fall back to the regular format - return this._getFormatInternal(obj, components, length); - }, - - /** - * @private - * @param {(string|{s:string,m:string,l:string,f:string})} obj Object to search - * @param {string} length Length of the requested format - * @return {(string|undefined)} the requested format - */ - _getLengthFormat: function getLengthFormat(obj, length) { - if (typeof(obj) === 'string') { - return obj; - } else if (obj[length]) { - return obj[length]; - } - return undefined; - }, - - /** - * Return the locale used with this formatter instance. - * @return {Locale} the Locale instance for this formatter - */ - getLocale: function() { - return this.locale; - }, - - /** - * Return the template string that is used to format date/times for this - * formatter instance. This will work, even when the template property is not explicitly - * given in the options to the constructor. Without the template option, the constructor - * will build the appropriate template according to the options and use that template - * in the format method. - * - * @return {string} the format template for this formatter - */ - getTemplate: function() { - return this.template; - }, - - /** - * Return the order of the year, month, and date components for the current locale.

    - * - * When implementing a date input widget in a UI, it would be useful to know what - * order to put the year, month, and date input fields so that it conforms to the - * user expectations for the locale. This method gives that order by returning a - * string that has a single "y", "m", and "d" character in it in the correct - * order.

    - * - * For example, the return value "ymd" means that this locale formats the year first, - * the month second, and the date third, and "mdy" means that the month is first, - * the date is second, and the year is third. Four of the 6 possible permutations - * of the three letters have at least one locale that uses that ordering, though some - * combinations are far more likely than others. The ones that are not used by any - * locales are "dym" and "myd", though new locales are still being added to - * CLDR frequently, and possible orderings cannot be predicted. Your code should - * support all 6 possibilities, just in case. - * - * @return {string} a string giving the date component order - */ - getDateComponentOrder: function() { - return this.componentOrder; - }, - - /** - * Return the type of this formatter. The type is a string that has one of the following - * values: "time", "date", "datetime". - * @return {string} the type of the formatter - */ - getType: function() { - return this.type; - }, - - /** - * Return the name of the calendar used to format date/times for this - * formatter instance. - * @return {string} the name of the calendar used by this formatter - */ - getCalendar: function () { - return this.cal.getType() || 'gregorian'; - }, - - /** - * Return the length used to format date/times in this formatter. This is either the - * value of the length option to the constructor, or the default value. - * - * @return {string} the length of formats this formatter returns - */ - getLength: function () { - return DateFmt.lenmap[this.length] || ""; - }, - - /** - * Return the date components that this formatter formats. This is either the - * value of the date option to the constructor, or the default value. If this - * formatter is a time-only formatter, this method will return the empty - * string. The date component letters may be specified in any order in the - * constructor, but this method will reorder the given components to a standard - * order. - * - * @return {string} the date components that this formatter formats - */ - getDateComponents: function () { - return this.dateComponents || ""; - }, - - /** - * Return the time components that this formatter formats. This is either the - * value of the time option to the constructor, or the default value. If this - * formatter is a date-only formatter, this method will return the empty - * string. The time component letters may be specified in any order in the - * constructor, but this method will reorder the given components to a standard - * order. - * - * @return {string} the time components that this formatter formats - */ - getTimeComponents: function () { - return this.timeComponents || ""; - }, - - /** - * Return the time zone used to format date/times for this formatter - * instance. - * @return {TimeZone} a time zone object that this formatter is formatting for - */ - getTimeZone: function () { - return this.tz; - }, - - /** - * Return the clock option set in the constructor. If the clock option was - * not given, the default from the locale is returned instead. - * @return {string} "12" or "24" depending on whether this formatter uses - * the 12-hour or 24-hour clock - */ - getClock: function () { - return this.clock || this.locinfo.getClock(); - }, - - /** - * Return the meridiems range in current locale. - * @return {Array.<{name:string,start:string,end:string}>} the range of available meridiems - */ - getMeridiemsRange: function () { - var result; - var _getSysString = function (key) { - return (this.sysres.getString(undefined, key + "-" + this.calName) || this.sysres.getString(undefined, key)).toString(); - }; - - switch (this.meridiems) { - case "chinese": - result = [ - { - name: _getSysString.call(this, "azh0"), - start: "00:00", - end: "05:59" - }, - { - name: _getSysString.call(this, "azh1"), - start: "06:00", - end: "08:59" - }, - { - name: _getSysString.call(this, "azh2"), - start: "09:00", - end: "11:59" - }, - { - name: _getSysString.call(this, "azh3"), - start: "12:00", - end: "12:59" - }, - { - name: _getSysString.call(this, "azh4"), - start: "13:00", - end: "17:59" - }, - { - name: _getSysString.call(this, "azh5"), - start: "18:00", - end: "20:59" - }, - { - name: _getSysString.call(this, "azh6"), - start: "21:00", - end: "23:59" - } - ]; - break; - case "ethiopic": - result = [ - { - name: _getSysString.call(this, "a0-ethiopic"), - start: "00:00", - end: "05:59" - }, - { - name: _getSysString.call(this, "a1-ethiopic"), - start: "06:00", - end: "06:00" - }, - { - name: _getSysString.call(this, "a2-ethiopic"), - start: "06:01", - end: "11:59" - }, - { - name: _getSysString.call(this, "a3-ethiopic"), - start: "12:00", - end: "17:59" - }, - { - name: _getSysString.call(this, "a4-ethiopic"), - start: "18:00", - end: "23:59" - } - ]; - break; - default: - result = [ - { - name: _getSysString.call(this, "a0"), - start: "00:00", - end: "11:59" - }, - { - name: _getSysString.call(this, "a1"), - start: "12:00", - end: "23:59" - } - ]; - break; - } - - return result; - }, - - _findMeridiem: function(hours, minutes) { - var range = this.info.dayPeriods; - if (!range) { - return ""; - } - // find all day periods that apply, and then choose the shortest one - var minuteOfDay = hours * 60 + minutes; - var shortest = { - name: "", - length: 2000 - }; - for (var i = 0; i < range.length; i++) { - var period = range[i]; - if (minuteOfDay === period.at || (minuteOfDay >= period.from && minuteOfDay < period.to)) { - var periodCode = "B" + i; - var length = typeof(period.at) !== "undefined" ? 0 : (period.to - period.from); - - if (length < shortest.length) { - shortest = { - name: this.sysres.getString(undefined, periodCode + "-" + this.calName) || - this.sysres.getString(undefined, periodCode), - length: length - }; - } - } - } - - return shortest.name; - }, - - /** - * @private - */ - _getTemplate: function (prefix, calendar) { - if (calendar !== "gregorian") { - return prefix + "-" + calendar; - } - return prefix; - }, - - /** - * Returns an array of the months of the year, formatted to the optional length specified. - * i.e. ...getMonthsOfYear() OR ...getMonthsOfYear({length: "short"}) - *

    - * The options parameter may contain any of the following properties: - * - *

      - *
    • length - length of the names of the months being sought. This may be one of - * "short", "medium", "long", or "full" - *
    • date - retrieve the names of the months in the date of the given date - *
    • year - retrieve the names of the months in the given year. In some calendars, - * the months have different names depending if that year is a leap year or not. - *
    - * - * @param {Object=} options an object-literal that contains any of the above properties - * @return {Array} an array of the names of all of the months of the year in the current calendar - */ - getMonthsOfYear: function(options) { - var length = (options && options.length) || this.getLength(), - template = DateFmt.monthNameLenMap[length], - months = [undefined], - date, - monthCount; - - if (options) { - if (options.date) { - date = DateFactory._dateToIlib(options.date); - } - - if (options.year) { - date = DateFactory({year: options.year, month: 1, day: 1, type: this.cal.getType()}); - } - } - - if (!date) { - date = DateFactory({ - calendar: this.cal.getType() - }); - } - - monthCount = this.cal.getNumMonths(date.getYears()); - for (var i = 1; i <= monthCount; i++) { - months[i] = this.sysres.getString(this._getTemplate(template + i, this.cal.getType())).toString(); - } - return months; - }, - - /** - * Returns an array of the days of the week, formatted to the optional length specified. - * i.e. ...getDaysOfWeek() OR ...getDaysOfWeek({length: "short"}) - *

    - * The options parameter may contain any of the following properties: - * - *

      - *
    • length - length of the names of the months being sought. This may be one of - * "short", "medium", "long", or "full" - *
    - * @param {Object=} options an object-literal that contains one key - * "length" with the standard length strings - * @return {Array} an array of all of the names of the days of the week - */ - getDaysOfWeek: function(options) { - var length = (options && options.length) || this.getLength(), - template = DateFmt.weekDayLenMap[length], - days = []; - for (var i = 0; i < 7; i++) { - days[i] = this.sysres.getString(this._getTemplate(template + i, this.cal.getType())).toString(); - } - return days; - }, - - - /** - * Convert this formatter to a string representation by returning the - * format template. This method delegates to getTemplate. - * - * @return {string} the format template - */ - toString: function() { - return this.getTemplate(); - }, - - /** - * Format a date according to a sequence of components. - * @private - * @param {IDate} date a date/time object to format - * @param {Array.} templateArr an array of components to format - * @return {string} the formatted date - */ - _formatTemplate: function (date, templateArr) { - var i, key, temp, tz, str = ""; - for (i = 0; i < templateArr.length; i++) { - switch (templateArr[i]) { - case 'd': - str += (date.day || 1); - break; - case 'dd': - str += JSUtils.pad(date.day || "1", 2); - break; - case 'yy': - temp = "" + ((date.year || 0) % 100); - str += JSUtils.pad(temp, 2); - break; - case 'yyyy': - str += JSUtils.pad(date.year || "0", 4); - break; - case 'M': - str += (date.month || 1); - break; - case 'MM': - str += JSUtils.pad(date.month || "1", 2); - break; - case 'h': - temp = (date.hour || 0) % 12; - if (temp == 0) { - temp = "12"; - } - str += temp; - break; - case 'hh': - temp = (date.hour || 0) % 12; - if (temp == 0) { - temp = "12"; - } - str += JSUtils.pad(temp, 2); - break; - /* - case 'j': - temp = (date.hour || 0) % 12 + 1; - str += temp; - break; - case 'jj': - temp = (date.hour || 0) % 12 + 1; - str += JSUtils.pad(temp, 2); - break; - */ - case 'K': - temp = (date.hour || 0) % 12; - str += temp; - break; - case 'KK': - temp = (date.hour || 0) % 12; - str += JSUtils.pad(temp, 2); - break; - - case 'H': - str += (date.hour || "0"); - break; - case 'HH': - str += JSUtils.pad(date.hour || "0", 2); - break; - case 'k': - str += (date.hour == 0 ? "24" : date.hour); - break; - case 'kk': - temp = (date.hour == 0 ? "24" : date.hour); - str += JSUtils.pad(temp, 2); - break; - - case 'm': - str += (date.minute || "0"); - break; - case 'mm': - str += JSUtils.pad(date.minute || "0", 2); - break; - case 's': - str += (date.second || "0"); - break; - case 'ss': - str += JSUtils.pad(date.second || "0", 2); - break; - case 'S': - str += (date.millisecond || "0"); - break; - case 'SSS': - str += JSUtils.pad(date.millisecond || "0", 3); - break; - - case 'N': - case 'NN': - case 'MMM': - case 'MMMM': - case 'L': - case 'LL': - case 'LLL': - case 'LLLL': - key = templateArr[i] + (date.month || 1); - str += (this.sysres.getString(undefined, key + "-" + this.calName) || this.sysres.getString(undefined, key) || - this.sysres.getString(undefined, key.replace(/L/g,"M") + "-" + this.calName) || this.sysres.getString(undefined, key.replace(/L/g,"M"))); - break; - - case 'E': - case 'EE': - case 'EEE': - case 'EEEE': - case 'c': - case 'cc': - case 'ccc': - case 'cccc': - key = templateArr[i] + date.getDayOfWeek(); - //console.log("finding " + key + " in the resources"); - str += (this.sysres.getString(undefined, key + "-" + this.calName) || this.sysres.getString(undefined, key)); - break; - - case 'a': - switch (this.meridiems) { - case "chinese": - if (date.hour < 6) { - key = "azh0"; // before dawn - } else if (date.hour < 9) { - key = "azh1"; // morning - } else if (date.hour < 12) { - key = "azh2"; // late morning/day before noon - } else if (date.hour < 13) { - key = "azh3"; // noon hour/midday - } else if (date.hour < 18) { - key = "azh4"; // afternoon - } else if (date.hour < 21) { - key = "azh5"; // evening time/dusk - } else { - key = "azh6"; // night time - } - break; - case "ethiopic": - if (date.hour < 6) { - key = "a0-ethiopic"; // morning - } else if (date.hour === 6 && date.minute === 0) { - key = "a1-ethiopic"; // noon - } else if (date.hour >= 6 && date.hour < 12) { - key = "a2-ethiopic"; // afternoon - } else if (date.hour >= 12 && date.hour < 18) { - key = "a3-ethiopic"; // evening - } else if (date.hour >= 18) { - key = "a4-ethiopic"; // night - } - break; - default: - key = date.hour < 12 ? "a0" : "a1"; - break; - } - //console.log("finding " + key + " in the resources"); - str += (this.sysres.getString(undefined, key + "-" + this.calName) || this.sysres.getString(undefined, key)); - break; - - case 'B': - str += this._findMeridiem(date.hour, date.minute); - break; - - case 'w': - str += date.getWeekOfYear(); - break; - case 'ww': - str += JSUtils.pad(date.getWeekOfYear(), 2); - break; - - case 'D': - str += date.getDayOfYear(); - break; - case 'DD': - str += JSUtils.pad(date.getDayOfYear(), 2); - break; - case 'DDD': - str += JSUtils.pad(date.getDayOfYear(), 3); - break; - case 'W': - str += date.getWeekOfMonth(this.locale); - break; - - case 'G': - key = "G" + date.getEra(); - str += (this.sysres.getString(undefined, key + "-" + this.calName) || this.sysres.getString(undefined, key)); - break; - - case 'O': - temp = this.sysres.getString("1#1st|2#2nd|3#3rd|21#21st|22#22nd|23#23rd|31#31st|#{num}th", "ordinalChoice"); - str += temp.formatChoice(date.day, {num: date.day}, false); - break; - - case 'z': // general time zone - tz = this.getTimeZone(); // lazy-load the tz - str += tz.getDisplayName(date, "standard"); - break; - case 'Z': // RFC 822 time zone - tz = this.getTimeZone(); // lazy-load the tz - str += tz.getDisplayName(date, "rfc822"); - break; - - default: - str += templateArr[i].replace(/'/g, ""); - break; - } - } - - if (this.digits) { - str = JSUtils.mapString(str, this.digits); - } - return str; - }, - - /** - * Format a particular date instance according to the settings of this - * formatter object. The type of the date instance being formatted must - * correspond exactly to the calendar type with which this formatter was - * constructed. If the types are not compatible, this formatter will - * produce bogus results. - * - * @param {IDate|number|string|Date|JulianDay|null|undefined} dateLike a date-like object to format - * @return {string} the formatted version of the given date instance - */ - format: function (dateLike) { - var thisZoneName = this.tz && this.tz.getId() || "local"; - - var date = DateFactory._dateToIlib(dateLike, thisZoneName, this.locale); - - if (!date.getCalendar || !(date instanceof IDate)) { - throw "Wrong date type passed to DateFmt.format()"; - } - - if(this.useIntl && this.IntlDateTimeObj){ - var jsDate = DateFactory._ilibToDate(date, thisZoneName, this.locale); - return this.IntlDateTimeObj.format(jsDate); - } - - var dateZoneName = date.timezone || "local"; - - // convert to the time zone of this formatter before formatting - if (dateZoneName !== thisZoneName || date.getCalendar() !== this.calName) { - // console.log("Differing time zones date: " + dateZoneName + " and fmt: " + thisZoneName + ". Converting..."); - // this will recalculate the date components based on the new time zone - // and/or convert a date in another calendar to the current calendar before formatting it - var newDate = DateFactory({ - type: this.calName, - timezone: thisZoneName, - julianday: date.getJulianDay() - }); - - date = newDate; - } - return this._formatTemplate(date, this.templateArr); - }, - - /** - * Return a string that describes a date relative to the given - * reference date. The string returned is text that for the locale that - * was specified when the formatter instance was constructed.

    - * - * The date can be in the future relative to the reference date or in - * the past, and the formatter will generate the appropriate string.

    - * - * The text used to describe the relative reference depends on the length - * of time between the date and the reference. If the time was in the - * past, it will use the "ago" phrase, and in the future, it will use - * the "in" phrase. Examples:

    - * - *

      - *
    • within a minute: either "X seconds ago" or "in X seconds" - *
    • within an hour: either "X minutes ago" or "in X minutes" - *
    • within a day: either "X hours ago" or "in X hours" - *
    • within 2 weeks: either "X days ago" or "in X days" - *
    • within 12 weeks (~3 months): either "X weeks ago" or "in X weeks" - *
    • within two years: either "X months ago" or "in X months" - *
    • longer than 2 years: "X years ago" or "in X years" - *
    - * - * @param {IDate|number|string|Date|JulianDay|null|undefined} reference a date that the date parameter should be relative to - * @param {IDate|number|string|Date|JulianDay|null|undefined} date a date being formatted - * @throws "Wrong calendar type" when the start or end dates are not the same - * calendar type as the formatter itself - * @return {string} the formatted relative date - */ - formatRelative: function(reference, date) { - reference = DateFactory._dateToIlib(reference); - date = DateFactory._dateToIlib(date); - - var referenceRd, dateRd, fmt, diff, absDiff, num; - - if (typeof(reference) !== 'object' || !reference.getCalendar || reference.getCalendar() !== this.calName || - typeof(date) !== 'object' || !date.getCalendar || date.getCalendar() !== this.calName) { - throw "Wrong calendar type"; - } - - referenceRd = reference.getRataDie(); - dateRd = date.getRataDie(); - - diff = referenceRd - dateRd; - absDiff = Math.abs(diff); - - if (absDiff < 0.000694444) { - num = Math.round(absDiff * 86400); - switch (this.length) { - case 's': - fmt = diff > 0 ? this.sysres.getString("#{num}s ago") : this.sysres.getString("#in {num}s"); - break; - case 'm': - fmt = diff > 0 ? this.sysres.getString("1#1 sec ago|#{num} sec ago") : this.sysres.getString("1#in 1 sec|#in {num} sec"); - break; - default: - case 'f': - case 'l': - fmt = diff > 0 ? this.sysres.getString("1#1 second ago|#{num} seconds ago") : this.sysres.getString("1#in 1 second|#in {num} seconds"); - break; - } - } else if (absDiff < 0.041666667) { - num = Math.round(absDiff * 1440); - switch (this.length) { - case 's': - fmt = diff > 0 ? this.sysres.getString("#{num}mi ago") : this.sysres.getString("#in {num}mi"); - break; - case 'm': - fmt = diff > 0 ? this.sysres.getString("1#1 min ago|#{num} min ago") : this.sysres.getString("1#in 1 min|#in {num} min"); - break; - default: - case 'f': - case 'l': - fmt = diff > 0 ? this.sysres.getString("1#1 minute ago|#{num} minutes ago") : this.sysres.getString("1#in 1 minute|#in {num} minutes"); - break; - } - } else if (absDiff < 1) { - num = Math.round(absDiff * 24); - switch (this.length) { - case 's': - fmt = diff > 0 ? this.sysres.getString("#{num}h ago") : this.sysres.getString("#in {num}h"); - break; - case 'm': - fmt = diff > 0 ? this.sysres.getString("1#1 hr ago|#{num} hrs ago") : this.sysres.getString("1#in 1 hr|#in {num} hrs"); - break; - default: - case 'f': - case 'l': - fmt = diff > 0 ? this.sysres.getString("1#1 hour ago|#{num} hours ago") : this.sysres.getString("1#in 1 hour|#in {num} hours"); - break; - } - } else if (absDiff < 14) { - num = Math.round(absDiff); - switch (this.length) { - case 's': - fmt = diff > 0 ? this.sysres.getString("#{num}d ago") : this.sysres.getString("#in {num}d"); - break; - case 'm': - fmt = diff > 0 ? this.sysres.getString("1#1 dy ago|#{num} dys ago") : this.sysres.getString("1#in 1 dy|#in {num} dys"); - break; - default: - case 'f': - case 'l': - fmt = diff > 0 ? this.sysres.getString("1#1 day ago|#{num} days ago") : this.sysres.getString("1#in 1 day|#in {num} days"); - break; - } - } else if (absDiff < 84) { - num = Math.round(absDiff/7); - switch (this.length) { - case 's': - fmt = diff > 0 ? this.sysres.getString("#{num}w ago") : this.sysres.getString("#in {num}w"); - break; - case 'm': - fmt = diff > 0 ? this.sysres.getString("1#1 wk ago|#{num} wks ago") : this.sysres.getString("1#in 1 wk|#in {num} wks"); - break; - default: - case 'f': - case 'l': - fmt = diff > 0 ? this.sysres.getString("1#1 week ago|#{num} weeks ago") : this.sysres.getString("1#in 1 week|#in {num} weeks"); - break; - } - } else if (absDiff < 730) { - num = Math.round(absDiff/30.4); - switch (this.length) { - case 's': - fmt = diff > 0 ? this.sysres.getString("#{num}mo ago") : this.sysres.getString("#in {num}mo"); - break; - case 'm': - fmt = diff > 0 ? this.sysres.getString("1#1 mon ago|#{num} mons ago") : this.sysres.getString("1#in 1 mon|#in {num} mons"); - break; - default: - case 'f': - case 'l': - fmt = diff > 0 ? this.sysres.getString("1#1 month ago|#{num} months ago") : this.sysres.getString("1#in 1 month|#in {num} months"); - break; - } - } else { - num = Math.round(absDiff/365); - switch (this.length) { - case 's': - fmt = diff > 0 ? this.sysres.getString("#{num}y ago") : this.sysres.getString("#in {num}y"); - break; - case 'm': - fmt = diff > 0 ? this.sysres.getString("1#1 yr ago|#{num} yrs ago") : this.sysres.getString("1#in 1 yr|#in {num} yrs"); - break; - default: - case 'f': - case 'l': - fmt = diff > 0 ? this.sysres.getString("1#1 year ago|#{num} years ago") : this.sysres.getString("1#in 1 year|#in {num} years"); - break; - } - } - return fmt.formatChoice(num, {num: num}); - } -}; - - -/* - * TimeZone.js - Definition of a time zone class - * - * Copyright © 2012-2015, 2018, 2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data localeinfo zoneinfo - - - - - - - - - - - - - - -/** - * @class - * Create a time zone instance. - * - * This class reports and transforms - * information about particular time zones.

    - * - * The options parameter may contain any of the following properties: - * - *

      - *
    • id - The id of the requested time zone such as "Europe/London" or - * "America/Los_Angeles". These are taken from the IANA time zone database. (See - * http://www.iana.org/time-zones for more information.)

      - * - * There is one special - * time zone that is not taken from the IANA database called simply "local". In - * this case, this class will attempt to discover the current time zone and - * daylight savings time settings by calling standard Javascript classes to - * determine the offsets from UTC. - * - *

    • locale - The locale for this time zone. - * - *
    • offset - Choose the time zone based on the offset from UTC given in - * number of minutes (negative is west, positive is east). - * - *
    • onLoad - a callback function to call when the data is fully - * loaded. When the onLoad option is given, this class will attempt to - * load any missing locale data using the ilib loader callback. - * When the data is loaded, the onLoad function is called with the current - * instance as a parameter. - * - *
    • sync - tell whether to load any missing locale data synchronously or - * asynchronously. If this option is given as "false", then the "onLoad" - * callback must be given, as the instance returned from this constructor will - * not be usable for a while. - * - *
    • loadParams - an object containing parameters to pass to the - * loader callback function when locale data is missing. The parameters are not - * interpretted or modified in any way. They are simply passed along. The object - * may contain any property/value pairs as long as the calling code is in - * agreement with the loader callback function as to what those parameters mean. - *
    - * - * There is currently no way in the ECMAscript - * standard to tell which exact time zone is currently in use. Choosing the - * id "locale" or specifying an explicit offset will not give a specific time zone, - * as it is impossible to tell with certainty which zone the offsets - * match.

    - * - * When the id "local" is given or the offset option is specified, this class will - * have the following behaviours: - *

      - *
    • The display name will always be given as the RFC822 style, no matter what - * style is requested - *
    • The id will also be returned as the RFC822 style display name - *
    • When the offset is explicitly given, this class will assume the time zone - * does not support daylight savings time, and the offsets will be calculated - * the same way year round. - *
    • When the offset is explicitly given, the inDaylightSavings() method will - * always return false. - *
    • When the id "local" is given, this class will attempt to determine the - * daylight savings time settings by examining the offset from UTC on Jan 1 - * and June 1 of the current year. If they are different, this class assumes - * that the local time zone uses DST. When the offset for a particular date is - * requested, it will use the built-in Javascript support to determine the - * offset for that date. - *
    - * - * If a more specific time zone is - * needed with display names and known start/stop times for DST, use the "id" - * property instead to specify the time zone exactly. You can perhaps ask the - * user which time zone they prefer so that your app does not need to guess.

    - * - * If the id and the offset are both not given, the default time zone for the - * locale is retrieved from - * the locale info. If the locale is not specified, the default locale for the - * library is used.

    - * - * Because this class was designed for use in web sites, and the vast majority - * of dates and times being formatted are recent date/times, this class is simplified - * by not implementing historical time zones. That is, when governments change the - * time zone rules for a particular zone, only the latest such rule is implemented - * in this class. That means that determining the offset for a date that is prior - * to the last change may give the wrong result. Historical time zone calculations - * may be implemented in a later version of iLib if there is enough demand for it, - * but it would entail a much larger set of time zone data that would have to be - * loaded. - * - * - * @constructor - * @param {Object} options Options guiding the construction of this time zone instance - */ -var TimeZone = function(options) { - this.sync = true; - this.locale = new Locale(); - this.isLocal = false; - - if (options) { - if (options.locale) { - this.locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; - } - - if (options.id) { - var id = options.id.toString(); - if (id === 'local') { - this.isLocal = true; - - // use standard Javascript Date to figure out the time zone offsets - var now = new Date(), - jan1 = new Date(now.getFullYear(), 0, 1), // months in std JS Date object are 0-based - jun1 = new Date(now.getFullYear(), 5, 1); - - // Javascript's method returns the offset backwards, so we have to - // take the negative to get the correct offset - this.offsetJan1 = -jan1.getTimezoneOffset(); - this.offsetJun1 = -jun1.getTimezoneOffset(); - // the offset of the standard time for the time zone is always the one that is closest - // to negative infinity of the two, no matter whether you are in the northern or southern - // hemisphere, east or west - this.offset = Math.min(this.offsetJan1, this.offsetJun1); - } - this.id = id; - } else if (options.offset) { - this.offset = (typeof(options.offset) === 'string') ? parseInt(options.offset, 10) : options.offset; - this.id = this.getDisplayName(undefined, undefined); - } - - if (typeof(options.sync) !== 'undefined') { - this.sync = !!options.sync; - } - - this.loadParams = options.loadParams; - this.onLoad = options.onLoad; - } - - //console.log("timezone: locale is " + this.locale); - - if (!this.id) { - new LocaleInfo(this.locale, { - sync: this.sync, - loadParams: this.loadParams, - onLoad: ilib.bind(this, function (li) { - this.id = li.getTimeZone() || "Etc/UTC"; - this._loadtzdata(); - }) - }); - } else { - this._loadtzdata(); - } - - //console.log("localeinfo is: " + JSON.stringify(this.locinfo)); - //console.log("id is: " + JSON.stringify(this.id)); -}; - -/* - * Explanation of the compressed time zone info properties. - * { - * "o": "8:0", // offset from UTC - * "f": "W{c}T", // standard abbreviation. For time zones that observe DST, the {c} replacement is replaced with the - * // letter in the e.c or s.c properties below - * "e": { // info about the end of DST - * "j": 78322.5 // Julian day when the transition happens. Either specify the "j" property or all of the "m", "r", and - * // "t" properties, but not both sets. - * "m": 3, // month that it ends - * "r": "l0", // rule for the day it ends "l" = "last", numbers are Sun=0 through Sat=6. Other syntax is "0>7". - * // This means the 0-day (Sun) after the 7th of the month. Other possible operators are <, >, <=, >= - * "t": "2:0", // time of day that the DST turns off, hours:minutes - * "c": "S" // character to replace into the abbreviation for standard time - * }, - * "s": { // info about the start of DST - * "j": 78189.5 // Julian day when the transition happens. Either specify the "j" property or all of the "m", "r", and - * // "t" properties, but not both sets. - * "m": 10, // month that it starts - * "r": "l0", // rule for the day it starts "l" = "last", numbers are Sun=0 through Sat=6. Other syntax is "0>7". - * // This means the 0-day (Sun) after the 7th of the month. Other possible operators are <, >, <=, >= - * "t": "2:0", // time of day that the DST turns on, hours:minutes - * "v": "1:0", // amount of time saved in hours:minutes - * "c": "D" // character to replace into the abbreviation for daylight time - * }, - * "c": "AU", // ISO code for the country that contains this time zone - * "n": "W. Australia {c} Time" - * // long English name of the zone. The {c} replacement is for the word "Standard" or "Daylight" as appropriate - * } - */ -TimeZone.prototype._loadtzdata = function () { - var zoneName = this.id.replace(/-/g, "m").replace(/\+/g, "p"); - // console.log("id is: " + JSON.stringify(this.id)); - // console.log("zoneinfo is: " + JSON.stringify(ilib.data.zoneinfo[zoneName])); - if (!ilib.data.zoneinfo[zoneName] && typeof(this.offset) === 'undefined') { - Utils.loadData({ - object: "TimeZone", - nonlocale: true, // locale independent - name: "zoneinfo/" + this.id + ".json", - sync: this.sync, - loadParams: this.loadParams, - callback: ilib.bind(this, function (tzdata) { - if (tzdata && !JSUtils.isEmpty(tzdata)) { - ilib.data.zoneinfo[zoneName] = tzdata; - } - this._initZone(zoneName); - }) - }); - } else { - this._initZone(zoneName); - } -}; - -TimeZone.prototype._initZone = function(zoneName) { - /** - * @private - * @type {{o:string,f:string,e:Object.<{m:number,r:string,t:string,z:string}>,s:Object.<{m:number,r:string,t:string,z:string,v:string,c:string}>,c:string,n:string}} - */ - this.zone = ilib.data.zoneinfo[zoneName]; - if (!this.zone && typeof(this.offset) === 'undefined') { - this.id = "Etc/UTC"; - this.zone = ilib.data.zoneinfo[this.id]; - } - - this._calcDSTSavings(); - - if (typeof(this.offset) === 'undefined' && this.zone.o) { - var offsetParts = this._offsetStringToObj(this.zone.o); - /** - * raw offset from UTC without DST, in minutes - * @private - * @type {number} - */ - this.offset = (Math.abs(offsetParts.h || 0) * 60 + (offsetParts.m || 0)) * MathUtils.signum(offsetParts.h || 0); - } - - if (this.onLoad && typeof(this.onLoad) === 'function') { - this.onLoad(this); - } -}; - -/** @private */ -TimeZone._marshallIds = function (country, sync, callback) { - var tz, ids = []; - - if (!country) { - // local is a special zone meaning "the local time zone according to the JS engine we are running upon" - ids.push("local"); - for (tz in ilib.data.timezones) { - if (ilib.data.timezones[tz]) { - ids.push(ilib.data.timezones[tz]); - } - } - if (typeof(callback) === 'function') { - callback(ids); - } - } else { - if (!ilib.data.zoneinfo.zonetab) { - Utils.loadData({ - object: "TimeZone", - nonlocale: true, // locale independent - name: "zoneinfo/zonetab.json", - sync: sync, - callback: ilib.bind(this, function (tzdata) { - if (tzdata) { - ilib.data.zoneinfo.zonetab = tzdata; - } - - ids = ilib.data.zoneinfo.zonetab[country]; - - if (typeof(callback) === 'function') { - callback(ids); - } - }) - }); - } else { - ids = ilib.data.zoneinfo.zonetab[country]; - if (typeof(callback) === 'function') { - callback(ids); - } - } - } - - return ids; -}; - -/** - * Return an array of available zone ids that the constructor knows about. - * The country parameter is optional. If it is not given, all time zones will - * be returned. If it specifies a country code, then only time zones for that - * country will be returned. - * - * @param {string|undefined} country country code for which time zones are being sought - * @param {boolean} sync whether to find the available ids synchronously (true) or asynchronously (false) - * @param {function(Array.)} onLoad callback function to call when the data is finished loading - * @return {Array.} an array of zone id strings - */ -TimeZone.getAvailableIds = function (country, sync, onLoad) { - var tz, ids = []; - - if (typeof(sync) !== 'boolean') { - sync = true; - } - - if (ilib.data.timezones.length === 0) { - if (typeof(ilib._load) !== 'undefined' && typeof(ilib._load.listAvailableFiles) === 'function') { - ilib._load.listAvailableFiles(sync, function(hash) { - for (var dir in hash) { - var files = hash[dir]; - if (ilib.isArray(files)) { - files.forEach(function (filename) { - if (filename && filename.match(/^zoneinfo/)) { - ilib.data.timezones.push(filename.replace(/^zoneinfo\//, "").replace(/\.json$/, "")); - } - }); - } - } - ids = TimeZone._marshallIds(country, sync, onLoad); - }); - } else { - for (tz in ilib.data.zoneinfo) { - if (ilib.data.zoneinfo[tz]) { - ilib.data.timezones.push(tz); - } - } - ids = TimeZone._marshallIds(country, sync, onLoad); - } - } else { - ids = TimeZone._marshallIds(country, sync, onLoad); - } - - return ids; -}; - -/** - * Return the id used to uniquely identify this time zone. - * @return {string} a unique id for this time zone - */ -TimeZone.prototype.getId = function () { - return this.id.toString(); -}; - -/** - * Return the abbreviation that is used for the current time zone on the given date. - * The date may be in DST or during standard time, and many zone names have different - * abbreviations depending on whether or not the date is falls within DST.

    - * - * There are two styles that are supported: - * - *

      - *
    1. standard - returns the 3 to 5 letter abbreviation of the time zone name such - * as "CET" for "Central European Time" or "PDT" for "Pacific Daylight Time" - *
    2. rfc822 - returns an RFC 822 style time zone specifier, which specifies more - * explicitly what the offset is from UTC - *
    3. long - returns the long name of the zone in English - *
    - * - * @param {IDate|Object|JulianDay|Date|string|number=} date a date to determine if it is in daylight time or standard time - * @param {string=} style one of "standard" or "rfc822". Default if not specified is "standard" - * @return {string} the name of the time zone, abbreviated according to the style - */ -TimeZone.prototype.getDisplayName = function (date, style) { - var temp; - style = (this.isLocal || typeof(this.zone) === 'undefined') ? "rfc822" : (style || "standard"); - switch (style) { - default: - case 'standard': - if (this.zone.f && this.zone.f !== "zzz") { - if (this.zone.f.indexOf("{c}") !== -1) { - var letter = ""; - letter = this.inDaylightTime(date) ? this.zone.s && this.zone.s.c : this.zone.e && this.zone.e.c; - temp = new IString(this.zone.f); - return temp.format({c: letter || ""}); - } - return this.zone.f; - } - temp = "GMT" + this.zone.o; - if (this.inDaylightTime(date)) { - temp += "+" + this.zone.s.v; - } - return temp; - - case 'rfc822': - var offset = this.getOffset(date), // includes the DST if applicable - ret = "UTC", - hour = offset.h || 0, - minute = offset.m || 0; - - if (hour !== 0) { - ret += (hour > 0) ? "+" : "-"; - if (Math.abs(hour) < 10) { - ret += "0"; - } - ret += (hour < 0) ? -hour : hour; - if (minute < 10) { - ret += "0"; - } - ret += minute; - } - return ret; - - case 'long': - if (this.zone.n) { - if (this.zone.n.indexOf("{c}") !== -1) { - var str = this.inDaylightTime(date) ? "Daylight" : "Standard"; - temp = new IString(this.zone.n); - return temp.format({c: str || ""}); - } - return this.zone.n; - } - temp = "GMT" + this.zone.o; - if (this.inDaylightTime(date)) { - temp += "+" + this.zone.s.v; - } - return temp; - } -}; - -/** - * Convert the offset string to an object with an h, m, and possibly s property - * to indicate the hours, minutes, and seconds. - * - * @private - * @param {string} str the offset string to convert to an object - * @return {Object.<{h:number,m:number,s:number}>} an object giving the offset for the zone at - * the given date/time, in hours, minutes, and seconds - */ -TimeZone.prototype._offsetStringToObj = function (str) { - var offsetParts = (typeof(str) === 'string') ? str.split(":") : [], - ret = {h:0}, - temp; - - if (offsetParts.length > 0) { - ret.h = parseInt(offsetParts[0], 10); - if (offsetParts.length > 1) { - temp = parseInt(offsetParts[1], 10); - if (temp) { - ret.m = temp; - } - if (offsetParts.length > 2) { - temp = parseInt(offsetParts[2], 10); - if (temp) { - ret.s = temp; - } - } - } - } - - return ret; -}; - -/** - * Returns the offset of this time zone from UTC at the given date/time. If daylight saving - * time is in effect at the given date/time, this method will return the offset value - * adjusted by the amount of daylight saving. - * @param {IDate|Object|JulianDay|Date|string|number=} date the date for which the offset is needed - * @return {Object.<{h:number,m:number}>} an object giving the offset for the zone at - * the given date/time, in hours, minutes, and seconds - */ -TimeZone.prototype.getOffset = function (date) { - if (!date) { - return this.getRawOffset(); - } - var offset = this.getOffsetMillis(date)/60000; - - var hours = MathUtils.down(offset/60), - minutes = Math.abs(offset) - Math.abs(hours)*60; - - var ret = { - h: hours - }; - if (minutes !== 0) { - ret.m = minutes; - } - return ret; -}; - -/** - * Returns the offset of this time zone from UTC at the given date/time expressed in - * milliseconds. If daylight saving - * time is in effect at the given date/time, this method will return the offset value - * adjusted by the amount of daylight saving. Negative numbers indicate offsets west - * of UTC and conversely, positive numbers indicate offset east of UTC. - * - * @param {IDate|Object|JulianDay|Date|string|number=} date the date for which the offset is needed, or null for the - * present date - * @return {number} the number of milliseconds of offset from UTC that the given date is - */ -TimeZone.prototype.getOffsetMillis = function (date) { - var ret; - - // check if the dst property is defined -- the intrinsic JS Date object doesn't work so - // well if we are in the overlap time at the end of DST - if (this.isLocal && typeof(date.dst) === 'undefined') { - var d = (!date) ? new Date() : new Date(date.getTimeExtended()); - return -d.getTimezoneOffset() * 60000; - } - - ret = this.offset; - - if (date && this.inDaylightTime(date)) { - ret += this.dstSavings; - } - - return ret * 60000; -}; - -/** - * Return the offset in milliseconds when the date has an RD number in wall - * time rather than in UTC time. - * @private - * @param {IDate|Object|JulianDay|Date|string|number} date the date to check in wall time - * @returns {number} the number of milliseconds of offset from UTC that the given date is - */ -TimeZone.prototype._getOffsetMillisWallTime = function (date) { - var ret; - - ret = this.offset; - - if (date && this.inDaylightTime(date, true)) { - ret += this.dstSavings; - } - - return ret * 60000; -}; - -/** - * Returns the offset of this time zone from UTC at the given date/time. If daylight saving - * time is in effect at the given date/time, this method will return the offset value - * adjusted by the amount of daylight saving. - * @param {IDate|Object|JulianDay|Date|string|number=} date the date for which the offset is needed - * @return {string} the offset for the zone at the given date/time as a string in the - * format "h:m:s" - */ -TimeZone.prototype.getOffsetStr = function (date) { - var offset = this.getOffset(date), - ret; - - ret = offset.h; - if (typeof(offset.m) !== 'undefined') { - ret += ":" + offset.m; - if (typeof(offset.s) !== 'undefined') { - ret += ":" + offset.s; - } - } else { - ret += ":0"; - } - - return ret; -}; - -/** - * Gets the offset from UTC for this time zone. - * @return {Object.<{h:number,m:number,s:number}>} an object giving the offset from - * UTC for this time zone, in hours, minutes, and seconds - */ -TimeZone.prototype.getRawOffset = function () { - var hours = MathUtils.down(this.offset/60), - minutes = Math.abs(this.offset) - Math.abs(hours)*60; - - var ret = { - h: hours - }; - if (minutes != 0) { - ret.m = minutes; - } - return ret; -}; - -/** - * Gets the offset from UTC for this time zone expressed in milliseconds. Negative numbers - * indicate zones west of UTC, and positive numbers indicate zones east of UTC. - * - * @return {number} an number giving the offset from - * UTC for this time zone in milliseconds - */ -TimeZone.prototype.getRawOffsetMillis = function () { - return this.offset * 60000; -}; - -/** - * Gets the offset from UTC for this time zone without DST savings. - * @return {string} the offset from UTC for this time zone, in the format "h:m:s" - */ -TimeZone.prototype.getRawOffsetStr = function () { - var off = this.getRawOffset(); - return off.h + ":" + (off.m || "0"); -}; - -/** - * Return the amount of time in hours:minutes that the clock is advanced during - * daylight savings time. - * @return {Object.<{h:number,m:number,s:number}>} the amount of time that the - * clock advances for DST in hours, minutes, and seconds - */ -TimeZone.prototype.getDSTSavings = function () { - if (this.isLocal) { - // take the absolute because the difference in the offsets may be positive or - // negative, depending on the hemisphere - var savings = Math.abs(this.offsetJan1 - this.offsetJun1); - var hours = MathUtils.down(savings/60), - minutes = savings - hours*60; - return { - h: hours, - m: minutes - }; - } else if (this.zone && this.zone.s) { - return this._offsetStringToObj(this.zone.s.v); // this.zone.start.savings - } - return {h:0}; -}; - -/** - * Return the amount of time in hours:minutes that the clock is advanced during - * daylight savings time. - * @return {string} the amount of time that the clock advances for DST in the - * format "h:m:s" - */ -TimeZone.prototype.getDSTSavingsStr = function () { - if (this.isLocal) { - var savings = this.getDSTSavings(); - return savings.h + ":" + savings.m; - } else if (typeof(this.offset) !== 'undefined' && this.zone && this.zone.s) { - return this.zone.s.v; // this.zone.start.savings - } - return "0:0"; -}; - -/** - * return the rd of the start of DST transition for the given year - * @private - * @param {Object} rule set of rules - * @param {number} year year to check - * @return {number} the rd of the start of DST for the year - */ -TimeZone.prototype._calcRuleStart = function (rule, year) { - var type = "=", - weekday = 0, - day, - refDay, - cal, - hour = 0, - minute = 0, - second = 0, - time, - i; - - if (typeof(rule.j) !== 'undefined') { - refDay = new GregRataDie({ - julianday: rule.j - }); - } else { - if (rule.r.charAt(0) === 'l' || rule.r.charAt(0) === 'f') { - cal = CalendarFactory({type: "gregorian"}); // can be synchronous - type = rule.r.charAt(0); - weekday = parseInt(rule.r.substring(1), 10); - day = (type === 'l') ? cal.getMonLength(rule.m, year) : 1; - //console.log("_calcRuleStart: Calculating the " + - // (rule.r.charAt(0) == 'f' ? "first " : "last ") + weekday + - // " of month " + rule.m); - } else { - i = rule.r.indexOf('<'); - if (i === -1) { - i = rule.r.indexOf('>'); - } - - if (i !== -1) { - type = rule.r.charAt(i); - weekday = parseInt(rule.r.substring(0, i), 10); - day = parseInt(rule.r.substring(i+1), 10); - //console.log("_calcRuleStart: Calculating the " + weekday + - // type + day + " of month " + rule.m); - } else { - day = parseInt(rule.r, 10); - //console.log("_calcRuleStart: Calculating the " + day + " of month " + rule.m); - } - } - - if (rule.t) { - time = rule.t.split(":"); - hour = parseInt(time[0], 10); - if (time.length > 1) { - minute = parseInt(time[1], 10); - if (time.length > 2) { - second = parseInt(time[2], 10); - } - } - } - //console.log("calculating rd of " + year + "/" + rule.m + "/" + day); - refDay = new GregRataDie({ - year: year, - month: rule.m, - day: day, - hour: hour, - minute: minute, - second: second - }); - } - //console.log("refDay is " + JSON.stringify(refDay)); - var d = refDay.getRataDie(); - - switch (type) { - case 'l': - case '<': - //console.log("returning " + refDay.onOrBefore(rd, weekday)); - d = refDay.onOrBefore(weekday); - break; - case 'f': - case '>': - //console.log("returning " + refDay.onOrAfterRd(rd, weekday)); - d = refDay.onOrAfter(weekday); - break; - } - return d; -}; - -/** - * @private - */ -TimeZone.prototype._calcDSTSavings = function () { - var saveParts = this.getDSTSavings(); - - /** - * savings in minutes when DST is in effect - * @private - * @type {number} - */ - this.dstSavings = (Math.abs(saveParts.h || 0) * 60 + (saveParts.m || 0)) * MathUtils.signum(saveParts.h || 0); -}; - -/** - * @private - */ -TimeZone.prototype._getDSTStartRule = function (year) { - // TODO: update this when historic/future zones are supported - return this.zone.s; -}; - -/** - * @private - */ -TimeZone.prototype._getDSTEndRule = function (year) { - // TODO: update this when historic/future zones are supported - return this.zone.e; -}; - -/** - * Returns whether or not the given date is in daylight saving time for the current - * zone. Note that daylight savings time is observed for the summer. Because - * the seasons are reversed, daylight savings time in the southern hemisphere usually - * runs from the end of the year through New Years into the first few months of the - * next year. This method will correctly calculate the start and end of DST for any - * location. - * - * @param {IDate|Object|JulianDay|Date|string|number=} date a date for which the info about daylight time is being sought, - * or undefined to tell whether we are currently in daylight savings time - * @param {boolean=} wallTime if true, then the given date is in wall time. If false or - * undefined, it is in the usual UTC time. - * @return {boolean} true if the given date is in DST for the current zone, and false - * otherwise. - */ -TimeZone.prototype.inDaylightTime = function (date, wallTime) { - var rd, startRd, endRd, year; - if (date) { - // need an IDate instance, so convert as necessary - date = DateFactory._dateToIlib(date, this.id, this.locale); - } - if (this.isLocal) { - // check if the dst property is defined -- the intrinsic JS Date object doesn't work so - // well if we are in the overlap time at the end of DST, so we have to work around that - // problem by adding in the savings ourselves - var offset = this.offset * 60000; - if (typeof(date.dst) !== 'undefined' && !date.dst) { - offset += this.dstSavings * 60000; - } - - var d = new Date(date ? date.getTimeExtended() - offset: undefined); - // the DST offset is always the one that is closest to positive infinity, no matter - // if you are in the northern or southern hemisphere, east or west - var dst = Math.max(this.offsetJan1, this.offsetJun1); - return (-d.getTimezoneOffset() === dst); - } - - if (!date || !date.cal || date.cal.type !== "gregorian") { - // convert to Gregorian so that we can tell if it is in DST or not - var time = date && typeof(date.getTimeExtended) === 'function' ? date.getTimeExtended() : undefined; - rd = new GregRataDie({unixtime: time}).getRataDie(); - year = new Date(time).getUTCFullYear(); - } else { - rd = date.rd.getRataDie(); - year = date.year; - } - // rd should be a Gregorian RD number now, in UTC - - // if we aren't using daylight time in this zone for the given year, then we are - // not in daylight time - if (!this.useDaylightTime(year)) { - return false; - } - - // these calculate the start/end in local wall time - var startrule = this._getDSTStartRule(year); - var endrule = this._getDSTEndRule(year); - startRd = this._calcRuleStart(startrule, year); - endRd = this._calcRuleStart(endrule, year); - - if (wallTime) { - // rd is in wall time, so we have to make sure to skip the missing time - // at the start of DST when standard time ends and daylight time begins - startRd += this.dstSavings/1440; - } else { - // rd is in UTC, so we have to convert the start/end to UTC time so - // that they can be compared directly to the UTC rd number of the date - - // when DST starts, time is standard time already, so we only have - // to subtract the offset to get to UTC and not worry about the DST savings - startRd -= this.offset/1440; - - // when DST ends, time is in daylight time already, so we have to - // subtract the DST savings to get back to standard time, then the - // offset to get to UTC - endRd -= (this.offset + this.dstSavings)/1440; - } - - // In the northern hemisphere, the start comes first some time in spring (Feb-Apr), - // then the end some time in the fall (Sept-Nov). In the southern - // hemisphere, it is the other way around because the seasons are reversed. Standard - // time is still in the winter, but the winter months are May-Aug, and daylight - // savings time usually starts Aug-Oct of one year and runs through Mar-May of the - // next year. - if (rd < endRd && endRd - rd <= this.dstSavings/1440 && typeof(date.dst) === 'boolean') { - // take care of the magic overlap time at the end of DST - return date.dst; - } - if (startRd < endRd) { - // northern hemisphere - return (rd >= startRd && rd < endRd) ? true : false; - } - // southern hemisphere - return (rd >= startRd || rd < endRd) ? true : false; -}; - -/** - * Returns true if this time zone switches to daylight savings time at some point - * in the year, and false otherwise. - * @param {number} year Whether or not the time zone uses daylight time in the given year. If - * this parameter is not given, the current year is assumed. - * @return {boolean} true if the time zone uses daylight savings time - */ -TimeZone.prototype.useDaylightTime = function (year) { - - // this zone uses daylight savings time iff there is a rule defining when to start - // and when to stop the DST - return (this.isLocal && this.offsetJan1 !== this.offsetJun1) || - (typeof(this.zone) !== 'undefined' && - typeof(this.zone.s) !== 'undefined' && - typeof(this.zone.e) !== 'undefined'); -}; - -/** - * Returns the ISO 3166 code of the country for which this time zone is defined. - * @return {string} the ISO 3166 code of the country for this zone - */ -TimeZone.prototype.getCountry = function () { - return this.zone.c; -}; - - -/* - * ResBundle.js - Resource bundle definition - * - * Copyright © 2012-2016, 2018-2019, 2022-2023 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data pseudomap - - - - - - - - - - -/** - * @class - * Create a new resource bundle instance. The resource bundle loads strings - * appropriate for a particular locale and provides them via the getString - * method.

    - * - * The options object may contain any (or none) of the following properties: - * - *

      - *
    • locale - The locale of the strings to load. If not specified, the default - * locale is the the default for the web page or app in which the bundle is - * being loaded. - * - *
    • name - Base name of the resource bundle to load. If not specified the default - * base name is "resources". - * - *
    • type - Name the type of strings this bundle contains. Valid values are - * "xml", "html", "text", "c", "raw", "ruby", or "template". The default is "text". - * If the type is "xml" or "html", - * then XML/HTML entities and tags are not pseudo-translated. During a real translation, - * HTML character entities are translated to their corresponding characters in a source - * string before looking that string up in the translations. Also, the characters "<", ">", - * and "&" are converted to entities again in the output, but characters are left as they - * are. If the type is "xml", "html", "ruby", or "text" types, then the replacement parameter names - * are not pseudo-translated as well so that the output can be used for formatting with - * the IString class. If the type is "c" then all C language style printf replacement - * parameters (eg. "%s" and "%d") are skipped automatically. This includes iOS/Objective-C/Swift - * substitution parameters like "%@" or "%1$@". If the type is raw, all characters - * are pseudo-translated, including replacement parameters as well as XML/HTML tags and entities. - * - *
    • lengthen - when pseudo-translating the string, tell whether or not to - * automatically lengthen the string to simulate "long" languages such as German - * or French. This is a boolean value. Default is false. - * - *
    • missing - what to do when a resource is missing. The choices are: - *
        - *
      • source - return the source string unchanged - *
      • pseudo - return the pseudo-translated source string, translated to the - * script of the locale if the mapping is available, or just the default Latin - * pseudo-translation if not - *
      • empty - return the empty string - *
      - * The default behaviour is the same as before, which is to return the source string - * unchanged. - * - *
    • basePath - look in the given path for the resource bundle files. This can be - * an absolute path or a relative path that is relative to the application's root. - * Default if this is not specified is to look in the standard path (ie. in the root - * of the app). - * - *
    • onLoad - a callback function to call when the resources are fully - * loaded. When the onLoad option is given, this class will attempt to - * load any missing locale data using the ilib loader callback. - * When the constructor is done (even if the data is already preassembled), the - * onLoad function is called with the current instance as a parameter, so this - * callback can be used with preassembled or dynamic loading or a mix of the two. - * - *
    • sync - tell whether to load any missing locale data synchronously or - * asynchronously. If this option is given as "false", then the "onLoad" - * callback must be given, as the instance returned from this constructor will - * not be usable for a while. - * - *
    • loadParams - an object containing parameters to pass to the - * loader callback function when locale data is missing. The parameters are not - * interpretted or modified in any way. They are simply passed along. The object - * may contain any property/value pairs as long as the calling code is in - * agreement with the loader callback function as to what those parameters mean. - *
    - * - * The locale option may be given as a locale spec string or as an - * Locale object. If the locale option is not specified, then strings for - * the default locale will be loaded.

    - * - * The name option can be used to put groups of strings together in a - * single bundle. The strings will then appear together in a JS object in - * a JS file that can be included before the ilib.

    - * - * A resource bundle with a particular name is actually a set of bundles - * that are each specific to a language, a language plus a region, etc. - * All bundles with the same base name should - * contain the same set of source strings, but with different translations for - * the given locale. The user of the bundle does not need to be aware of - * the locale of the bundle, as long as it contains values for the strings - * it needs.

    - * - * Strings in bundles for a particular locale are inherited from parent bundles - * that are more generic. In general, the hierarchy is as follows (from - * least locale-specific to most locale-specific): - * - *

      - *
    1. language - *
    2. region - *
    3. language_script - *
    4. language_region - *
    5. region_variant - *
    6. language_script_region - *
    7. language_region_variant - *
    8. language_script_region_variant - *
    - * - * That is, if the translation for a string does not exist in the current - * locale, the more-generic parent locale is searched for the string. In the - * worst case scenario, the string is not found in the base locale's strings. - * In this case, the missing option guides this class on what to do. If - * the missing option is "source", then the original source is returned as - * the translation. If it is "empty", the empty string is returned. If it - * is "pseudo", then the pseudo-translated string that is appropriate for - * the default script of the locale is returned.

    - * - * This allows developers to create code with new or changed strings in it and check in that - * code without waiting for the translations to be done first. The translated - * version of the app or web site will still function properly, but will show - * a spurious untranslated string here and there until the translations are - * done and also checked in.

    - * - * The base is whatever language your developers use to code in. For - * a German web site, strings in the source code may be written in German - * for example. Often this base is English, as many web sites are coded in - * English, but that is not required.

    - * - * The strings can be extracted with the ilib localization tool (which will be - * shipped at some future time.) Once the strings - * have been translated, the set of translated files can be generated with the - * same tool. The output from the tool can be used as input to the ResBundle - * object. It is up to the web page or app to make sure the JS file that defines - * the bundle is included before creating the ResBundle instance.

    - * - * A special locale "zxx-XX" is used as the pseudo-translation locale because - * zxx means "no linguistic information" in the ISO 639 standard, and the region - * code XX is defined to be user-defined in the ISO 3166 standard. - * Pseudo-translation is a locale where the translations are generated on - * the fly based on the contents of the source string. Characters in the source - * string are replaced with other characters and returned. - * - * Example. If the source string is: - * - *

    - * "This is a string"
    - * 
    - * - * then the pseudo-translated version might look something like this: - * - *
    - * "Ţħïş ïş á şţřïñĝ"
    - * 
    - *

    - * - * Pseudo-translation can be used to test that your app or web site is translatable - * before an actual translation has happened. These bugs can then be fixed - * before the translation starts, avoiding an explosion of bugs later when - * each language's tester registers the same bug complaining that the same - * string is not translated. When pseudo-localizing with - * the Latin script, this allows the strings to be readable in the UI in the - * source language (if somewhat funky-looking), - * so that a tester can easily verify that the string is properly externalized - * and loaded from a resource bundle without the need to be able to read a - * foreign language.

    - * - * If one of a list of script tags is given in the pseudo-locale specifier, then the - * pseudo-localization can map characters to very rough transliterations of - * characters in the given script. For example, zxx-Hebr-XX maps strings to - * Hebrew characters, which can be used to test your UI in a right-to-left - * language to catch bidi bugs before a translation is done. Currently, the - * list of target scripts includes Hebrew (Hebr), Chinese Simplified Han (Hans), - * and Cyrillic (Cyrl) with more to be added later. If no script is explicitly - * specified in the locale spec, or if the script is not supported, - * then the default mapping maps Latin base characters to accented versions of - * those Latin characters as in the example above. - * - * When the "lengthen" property is set to true in the options, the - * pseudotranslation code will add digits to the end of the string to simulate - * the lengthening that occurs when translating to other languages. The above - * example will come out like this: - * - *

    - * "Ţħïş ïş á şţřïñĝ76543210"
    - * 
    - * - * The string is lengthened according to the length of the source string. If - * the source string is less than 20 characters long, the string is lengthened - * by 50%. If the source string is 20-40 - * characters long, the string is lengthened by 33%. If te string is greater - * than 40 characters long, the string is lengthened by 20%.

    - * - * The pseudotranslation always ends a string with the digit "0". If you do - * not see the digit "0" in the UI for your app, you know that truncation - * has occurred, and the number you see at the end of the string tells you - * how many characters were truncated.

    - * - * - * @constructor - * @param {?Object} options Options controlling how the bundle is created - */ -var ResBundle = function (options) { - var lookupLocale, spec; - - this.locale = new Locale(); // use the default locale - this.baseName = "strings"; - this.type = "text"; - this.loadParams = {}; - this.missing = "source"; - this.sync = true; - - if (options) { - if (options.locale) { - this.locale = (typeof(options.locale) === 'string') ? - new Locale(options.locale) : - options.locale; - } - if (options.name) { - this.baseName = options.name; - } - if (options.type) { - this.type = options.type; - } - this.lengthen = options.lengthen || false; - this.path = options.basePath; - - if (typeof(options.sync) !== 'undefined') { - this.sync = !!options.sync; - } - - if (typeof(options.loadParams) !== 'undefined') { - this.loadParams = options.loadParams; - if (!this.path) { - if (typeof (options.loadParams.root) !== 'undefined') { - this.path = options.loadParams.root; - } else if (typeof (options.loadParams.base) !== 'undefined') { - this.path = options.loadParams.base; - } - } - } - if (typeof(options.missing) !== 'undefined') { - if (options.missing === "pseudo" || options.missing === "empty") { - this.missing = options.missing; - } - } - } else { - options = {sync: true}; - } - - this.map = {}; - - lookupLocale = this.locale.isPseudo() ? new Locale("en-US") : this.locale; - - // ensure that the plural rules are loaded before we proceed - IString.loadPlurals(this.sync, lookupLocale, this.loadParams, ilib.bind(this, function() { - Utils.loadData({ - locale: lookupLocale, - name: this.baseName + ".json", - sync: this.sync, - loadParams: this.loadParams, - root: this.path, - callback: ilib.bind(this, function (map) { - if (!map) { - map = ilib.data[this.baseName] || {}; - } - this.map = map; - if (this.locale.isPseudo()) { - this._loadPseudo(this.locale, options.onLoad); - } else if (this.missing === "pseudo") { - new LocaleInfo(this.locale, { - sync: this.sync, - loadParams: this.loadParams, - onLoad: ilib.bind(this, function (li) { - var pseudoLocale = new Locale("zxx", "XX", undefined, li.getDefaultScript()); - this._loadPseudo(pseudoLocale, options.onLoad); - }) - }); - } else { - if (typeof(options.onLoad) === 'function') { - options.onLoad(this); - } - } - }) - }) - })); - - // console.log("Merged resources " + this.locale.toString() + " are: " + JSON.stringify(this.map)); - //if (!this.locale.isPseudo() && JSUtils.isEmpty(this.map)) { - // console.log("Resources for bundle " + this.baseName + " locale " + this.locale.toString() + " are not available."); - //} -}; - -ResBundle.defaultPseudo = ilib.data.pseudomap || { - "a": "à", - "e": "ë", - "i": "í", - "o": "õ", - "u": "ü", - "y": "ÿ", - "A": "Ã", - "E": "Ë", - "I": "Ï", - "O": "Ø", - "U": "Ú", - "Y": "Ŷ" -}; - -ResBundle.prototype = { - /** - * @private - */ - _loadPseudo: function (pseudoLocale, onLoad) { - Utils.loadData({ - object: "ResBundle", - locale: pseudoLocale, - name: "pseudomap.json", - sync: this.sync, - loadParams: this.loadParams, - callback: ilib.bind(this, function (map) { - this.pseudomap = (!map || JSUtils.isEmpty(map)) ? ResBundle.defaultPseudo : map; - if (typeof(onLoad) === 'function') { - onLoad(this); - } - }) - }); - }, - - /** - * Return the locale of this resource bundle. - * @return {Locale} the locale of this resource bundle object - */ - getLocale: function () { - return this.locale; - }, - - /** - * Return the name of this resource bundle. This corresponds to the name option - * given to the constructor. - * @return {string} name of the the current instance - */ - getName: function () { - return this.baseName; - }, - - /** - * Return the type of this resource bundle. This corresponds to the type option - * given to the constructor. - * @return {string} type of the the current instance - */ - getType: function () { - return this.type; - }, - - percentRE: new RegExp("%(\\d+\\$)?([\\-#\\+ 0,\\(])*(\\d+)?(\\.\\d+)?(h|hh|l|ll|j|z|t|L|q)?[diouxXfFeEgGaAcspnCS%@]"), - - /** - * Pseudo-translate a string - * @private - */ - _pseudo: function (str) { - if (!str) { - return undefined; - } - var ret = "", i; - for (i = 0; i < str.length; i++) { - if (this.type !== "raw") { - if (this.type === "html" || this.type === "xml") { - if (str.charAt(i) === '<') { - ret += str.charAt(i++); - while (i < str.length && str.charAt(i) !== '>') { - ret += str.charAt(i++); - } - } else if (str.charAt(i) === '&') { - ret += str.charAt(i++); - while (i < str.length && str.charAt(i) !== ';' && str.charAt(i) !== ' ') { - ret += str.charAt(i++); - } - } else if (str.charAt(i) === '\\' && str.charAt(i+1) === "u") { - ret += str.substring(i, i+6); - i += 6; - } - } else if (this.type === "c") { - if (str.charAt(i) === "%") { - var m = this.percentRE.exec(str.substring(i)); - if (m && m.length) { - // console.log("Match found: " + JSON.stringify(m[0].replace("%", "%%"))); - ret += m[0]; - i += m[0].length; - } - } - } else if (this.type === "ruby") { - if (str.charAt(i) === "%" && i < str.length && str.charAt(i+1) !== "{") { - ret += str.charAt(i++); - while (i < str.length && str.charAt(i) !== '%') { - ret += str.charAt(i++); - } - } - } else if (this.type === "template") { - if (str.charAt(i) === '<' && str.charAt(i+1) === '%') { - ret += str.charAt(i++); - ret += str.charAt(i++); - while (i < str.length && (str.charAt(i) !== '>' || str.charAt(i-1) !== '%')) { - ret += str.charAt(i++); - } - } else if (str.charAt(i) === '&') { - ret += str.charAt(i++); - while (i < str.length && str.charAt(i) !== ';' && str.charAt(i) !== ' ') { - ret += str.charAt(i++); - } - } else if (str.charAt(i) === '\\' && str.charAt(i+1) === "u") { - ret += str.substring(i, i+6); - i += 6; - } - } - if (i < str.length) { - if (str.charAt(i) === '{') { - ret += str.charAt(i++); - while (i < str.length && str.charAt(i) !== '}') { - ret += str.charAt(i++); - } - if (i < str.length) { - ret += str.charAt(i); - } - } else { - ret += this.pseudomap[str.charAt(i)] || str.charAt(i); - } - } - } else { - ret += this.pseudomap[str.charAt(i)] || str.charAt(i); - } - } - if (this.lengthen) { - var add; - if (ret.length <= 20) { - add = Math.round(ret.length / 2); - } else if (ret.length > 20 && ret.length <= 40) { - add = Math.round(ret.length / 3); - } else { - add = Math.round(ret.length / 5); - } - for (i = add-1; i >= 0; i--) { - ret += (i % 10); - } - } - if (this.locale.getScript() === "Hans" || this.locale.getScript() === "Hant" || - this.locale.getScript() === "Hani" || - this.locale.getScript() === "Hrkt" || this.locale.getScript() === "Jpan" || - this.locale.getScript() === "Hira" || this.locale.getScript() === "Kana" ) { - // simulate Asian languages by getting rid of all the spaces - ret = ret.replace(/ /g, ""); - } - - if (this.pseudomap["tall"] !== undefined) { - ret = this.pseudomap["tall"] + ret; - } - - // All strings are encapsulated in []. - ret = "[" + ret + "]"; - - return ret; - }, - - /** - * Escape html characters in the output. - * @private - */ - _escapeXml: function (str) { - str = str.replace(/&/g, '&'); - str = str.replace(//g, '>'); - return str; - }, - - /** - * @private - * @param {string} str the string to unescape - */ - _unescapeXml: function (str) { - str = str.replace(/&/g, '&'); - str = str.replace(/</g, '<'); - str = str.replace(/>/g, '>'); - return str; - }, - - /** - * Create a key name out of a source string. All this does so far is - * compress sequences of white space into a single space on the assumption - * that this doesn't really change the meaning of the string, and therefore - * all such strings that compress to the same thing should share the same - * translation. - * @private - * @param {null|string=} source the source string to make a key out of - */ - _makeKey: function (source) { - if (!source) return undefined; - var key = source.replace(/\s+/gm, ' '); - return (this.type === "xml" || this.type === "html") ? this._unescapeXml(key) : key; - }, - - /** - * @private - */ - _getStringSingle: function(source, key, escapeMode) { - if (!source && !key) return new IString(""); - - var trans; - if (this.locale.isPseudo()) { - var str = source ? source : this.map[key]; - trans = this._pseudo(str || key); - } else { - var keyName = key || this._makeKey(source); - if (typeof(this.map[keyName]) !== 'undefined') { - trans = this.map[keyName]; - } else if (this.missing === "pseudo") { - trans = this._pseudo(source || key); - } else if (this.missing === "empty") { - trans = ""; - } else { - trans = source; - } - } - - if (escapeMode && escapeMode !== "none") { - if (escapeMode === "default") { - escapeMode = this.type; - } - if (escapeMode === "xml" || escapeMode === "html") { - trans = this._escapeXml(trans); - } else if (escapeMode === "js" || escapeMode === "attribute") { - trans = trans.replace(/'/g, "\\\'").replace(/"/g, "\\\""); - } - } - if (trans === undefined) { - return undefined; - } else { - var ret = new IString(trans); - ret.setLocale(this.locale.getSpec(), true, this.loadParams); // no callback - return ret; - } - }, - - /** - * Return a localized string, array, or object. This method can localize individual - * strings or arrays of strings.

    - * - * If the source parameter is a string, the translation of that string is looked - * up and returned. If the source parameter is an array of strings, then the translation - * of each of the elements of that array is looked up, and an array of translated strings - * is returned.

    - * - * If any string is not found in the loaded set of - * resources, the original source string is returned. If the key is not given, - * then the source string itself is used as the key. In the case where the - * source string is used as the key, the whitespace is compressed down to 1 space - * each, and the whitespace at the beginning and end of the string is trimmed.

    - * - * The escape mode specifies what type of output you are escaping the returned - * string for. Modes are similar to the types: - * - *

      - *
    • "html" -- prevents HTML injection by escaping the characters < > and & - *
    • "xml" -- currently same as "html" mode - *
    • "js" -- prevents breaking Javascript syntax by backslash escaping all quote and - * double-quote characters - *
    • "attribute" -- meant for HTML attribute values. Currently this is the same as - * "js" escape mode. - *
    • "default" -- use the type parameter from the constructor as the escape mode as well - *
    • "none" or undefined -- no escaping at all. - *
    - * - * The type parameter of the constructor specifies what type of strings this bundle - * is operating upon. This allows pseudo-translation and automatic key generation - * to happen properly by telling this class how to parse the string. The escape mode - * for this method is different in that it specifies how this string will be used in - * the calling code and therefore how to escape it properly.

    - * - * For example, a section of Javascript code may be constructing an HTML snippet in a - * string to add to the web page. In this case, the type parameter in the constructor should - * be "html" so that the source string can be parsed properly, but the escape mode should - * be "js" so that the output string can be used in Javascript without causing syntax - * errors. - * - * @param {?string|Array.=} source the source string or strings to translate - * @param {?string|Array.=} key optional name of the key, if any - * @param {?string=} escapeMode escape mode, if any - * @return {IString|Array.|undefined} the translation of the given source/key or undefined - * if the translation is not found and the source is undefined - */ - getString: function (source, key, escapeMode) { - if (!source && !key) return new IString(""); - - //if (typeof(source) === "object") { - // TODO localize objects - //} else - - if (ilib.isArray(source)) { - return source.map(ilib.bind(this, function(str) { - return typeof(str) === "string" ? this._getStringSingle(str, key, escapeMode) : str; - })); - } else { - return this._getStringSingle(source, key, escapeMode); - } - }, - - /** - * Return a localized string as an intrinsic Javascript String object. This does the same thing as - * the getString() method, but it returns a regular Javascript string instead of - * and IString instance. This means it cannot be formatted with the format() - * method without being wrapped in an IString instance first. - * - * @param {?string|Array.=} source the source string to translate - * @param {?string|Array.=} key optional name of the key, if any - * @param {?string=} escapeMode escape mode, if any - * @return {string|Array.|undefined} the translation of the given source/key or undefined - * if the translation is not found and the source is undefined - */ - getStringJS: function(source, key, escapeMode) { - if (typeof(source) === 'undefined' && typeof(key) === 'undefined') { - return undefined; - } - //if (typeof(source) === "object") { - // TODO localize objects - //} else - - if (ilib.isArray(source)) { - return this.getString(source, key, escapeMode).map(function(str) { - return (str && str instanceof IString) ? str.toString() : str; - }); - } else { - var s = this.getString(source, key, escapeMode); - return s ? s.toString() : undefined; - } - }, - - /** - * Return true if the current bundle contains a translation for the given key and - * source. The - * getString method will always return a string for any given key and source - * combination, so it cannot be used to tell if a translation exists. Either one - * or both of the source and key must be specified. If both are not specified, - * this method will return false. - * - * @param {?string=} source source string to look up - * @param {?string=} key key to look up - * @return {boolean} true if this bundle contains a translation for the key, and - * false otherwise - */ - containsKey: function(source, key) { - if (typeof(source) === 'undefined' && typeof(key) === 'undefined') { - return false; - } - - var keyName = key || this._makeKey(source); - return typeof(this.map[keyName]) !== 'undefined'; - }, - - /** - * Return the merged resources as an entire object. When loading resources for a - * locale that are not just a set of translated strings, but instead an entire - * structured javascript object, you can gain access to that object via this call. This method - * will ensure that all the of the parts of the object are correct for the locale.

    - * - * For pre-assembled data, it starts by loading ilib.data[name], where - * name is the base name for this set of resources. Then, it successively - * merges objects in the base data using progressively more locale-specific data. - * It loads it in this order from ilib.data: - * - *

      - *
    1. language - *
    2. region - *
    3. language_script - *
    4. language_region - *
    5. region_variant - *
    6. language_script_region - *
    7. language_region_variant - *
    8. language_script_region_variant - *
    - * - * For dynamically loaded data, the code attempts to load the same sequence as - * above, but with slash path separators instead of underscores.

    - * - * Loading the resources this way allows the program to share resources between all - * locales that share a common language, region, or script. As a - * general rule-of-thumb, resources should be as generic as possible in order to - * cover as many locales as possible. - * - * @return {Object} returns the object that is the basis for this resources instance - */ - getResObj: function () { - return this.map; - } -}; - - -/* - * DurationFmt.js - Date formatter definition - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data dateformats sysres - - - - - - - - - - -/** - * @class - * Create a new duration formatter instance. The duration formatter is immutable once - * it is created, but can format as many different durations as needed with the same - * options. Create different duration formatter instances for different purposes - * and then keep them cached for use later if you have more than one duration to - * format.

    - * - * Duration formatters format lengths of time. The duration formatter is meant to format - * durations of such things as the length of a song or a movie or a meeting, or the - * current position in that song or movie while playing it. If you wish to format a - * period of time that has a specific start and end date/time, then use a - * [DateRngFmt] instance instead and call its format method.

    - * - * The options may contain any of the following properties: - * - *

      - *
    • locale - locale to use when formatting the duration. If the locale is - * not specified, then the default locale of the app or web page will be used. - * - *
    • length - Specify the length of the format to use. The length is the approximate size of the - * formatted string. - * - *
        - *
      • short - use a short representation of the duration. This is the most compact format possible for the locale. eg. 1y 1m 1w 1d 1:01:01 - *
      • medium - use a medium length representation of the duration. This is a slightly longer format. eg. 1 yr 1 mo 1 wk 1 dy 1 hr 1 mi 1 se - *
      • long - use a long representation of the duration. This is a fully specified format, but some of the textual - * parts may still be abbreviated. eg. 1 yr 1 mo 1 wk 1 day 1 hr 1 min 1 sec - *
      • full - use a full representation of the duration. This is a fully specified format where all the textual - * parts are spelled out completely. eg. 1 year, 1 month, 1 week, 1 day, 1 hour, 1 minute and 1 second - *
      - * - *
    • style - whether hours, minutes, and seconds should be formatted as a text string - * or as a regular time as on a clock. eg. text is "1 hour, 15 minutes", whereas clock is "1:15:00". Valid - * values for this property are "text" or "clock". Default if this property is not specified - * is "text". - * - *
    • useNative - the flag used to determaine whether to use the native script settings - * for formatting the numbers . - * - *
    • onLoad - a callback function to call when the format data is fully - * loaded. When the onLoad option is given, this class will attempt to - * load any missing locale data using the ilib loader callback. - * When the constructor is done (even if the data is already preassembled), the - * onLoad function is called with the current instance as a parameter, so this - * callback can be used with preassembled or dynamic loading or a mix of the two. - * - *
    • sync - tell whether to load any missing locale data synchronously or - * asynchronously. If this option is given as "false", then the "onLoad" - * callback must be given, as the instance returned from this constructor will - * not be usable for a while. - * - *
    • loadParams - an object containing parameters to pass to the - * loader callback function when locale data is missing. The parameters are not - * interpretted or modified in any way. They are simply passed along. The object - * may contain any property/value pairs as long as the calling code is in - * agreement with the loader callback function as to what those parameters mean. - *
    - *

    - * - * - * @constructor - * @param {?Object} options options governing the way this date formatter instance works - */ -var DurationFmt = function(options) { - var sync = true; - var loadParams = undefined; - - this.locale = new Locale(); - this.length = "short"; - this.style = "text"; - - if (options) { - if (options.locale) { - this.locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; - } - - if (options.length) { - if (options.length === 'short' || - options.length === 'medium' || - options.length === 'long' || - options.length === 'full') { - this.length = options.length; - } - } - - if (options.style) { - if (options.style === 'text' || options.style === 'clock') { - this.style = options.style; - } - } - - if (typeof(options.sync) !== 'undefined') { - sync = !!options.sync; - } - - if (typeof(options.useNative) === 'boolean') { - this.useNative = options.useNative; - } - - loadParams = options.loadParams; - } - options = options || {sync: true}; - - new LocaleInfo(this.locale, { - sync: sync, - loadParams: loadParams, - onLoad: ilib.bind(this, function (li) { - this.script = li.getScript(); - new ResBundle({ - locale: this.locale, - name: "sysres", - sync: sync, - loadParams: loadParams, - onLoad: ilib.bind(this, function (sysres) { - IString.loadPlurals(sync, this.locale, loadParams, ilib.bind(this, function() { - if (this.length === 'medium' && !(this.script === 'Latn' || this.script ==='Grek' || this.script ==='Cyrl')) { - this.length = 'short'; - } - switch (this.length) { - case 'short': - this.components = { - year: sysres.getString("#{num}y"), - month: sysres.getString("#{num}m", "durationShortMonths"), - week: sysres.getString("#{num}w"), - day: sysres.getString("#{num}d"), - hour: sysres.getString("#{num}h"), - minute: sysres.getString("#{num}m", "durationShortMinutes"), - second: sysres.getString("#{num}s"), - millisecond: sysres.getString("#{num}m", "durationShortMillis"), - separator: sysres.getString(" ", "separatorShort"), - finalSeparator: "" // not used at this length - }; - break; - - case 'medium': - this.components = { - year: sysres.getString("1#1 yr|#{num} yrs", "durationMediumYears"), - month: sysres.getString("1#1 mo|#{num} mos"), - week: sysres.getString("1#1 wk|#{num} wks", "durationMediumWeeks"), - day: sysres.getString("1#1 dy|#{num} dys"), - hour: sysres.getString("1#1 hr|#{num} hrs", "durationMediumHours"), - minute: sysres.getString("1#1 mi|#{num} min"), - second: sysres.getString("1#1 se|#{num} sec"), - millisecond: sysres.getString("#{num} ms", "durationMediumMillis"), - separator: sysres.getString(" ", "separatorMedium"), - finalSeparator: "" // not used at this length - }; - break; - - case 'long': - this.components = { - year: sysres.getString("1#1 yr|#{num} yrs"), - month: sysres.getString("1#1 mon|#{num} mons"), - week: sysres.getString("1#1 wk|#{num} wks"), - day: sysres.getString("1#1 day|#{num} days", "durationLongDays"), - hour: sysres.getString("1#1 hr|#{num} hrs"), - minute: sysres.getString("1#1 min|#{num} min"), - second: sysres.getString("1#1 sec|#{num} sec"), - millisecond: sysres.getString("#{num} ms"), - separator: sysres.getString(", ", "separatorLong"), - finalSeparator: "" // not used at this length - }; - break; - - case 'full': - this.components = { - year: sysres.getString("1#1 year|#{num} years"), - month: sysres.getString("1#1 month|#{num} months"), - week: sysres.getString("1#1 week|#{num} weeks"), - day: sysres.getString("1#1 day|#{num} days"), - hour: sysres.getString("1#1 hour|#{num} hours"), - minute: sysres.getString("1#1 minute|#{num} minutes"), - second: sysres.getString("1#1 second|#{num} seconds"), - millisecond: sysres.getString("1#1 millisecond|#{num} milliseconds"), - separator: sysres.getString(", ", "separatorFull"), - finalSeparator: sysres.getString(" and ", "finalSeparatorFull") - }; - break; - } - - if (this.style === 'clock') { - new DateFmt({ - locale: this.locale, - calendar: "gregorian", - type: "time", - time: "ms", - sync: sync, - loadParams: loadParams, - useNative: this.useNative, - onLoad: ilib.bind(this, function (fmtMS) { - this.timeFmtMS = fmtMS; - new DateFmt({ - locale: this.locale, - calendar: "gregorian", - type: "time", - time: "hm", - sync: sync, - loadParams: loadParams, - useNative: this.useNative, - onLoad: ilib.bind(this, function (fmtHM) { - this.timeFmtHM = fmtHM; - new DateFmt({ - locale: this.locale, - calendar: "gregorian", - type: "time", - time: "hms", - sync: sync, - loadParams: loadParams, - useNative: this.useNative, - onLoad: ilib.bind(this, function (fmtHMS) { - this.timeFmtHMS = fmtHMS; - - // munge with the template to make sure that the hours are not formatted mod 12 - this.timeFmtHM.template = this.timeFmtHM.template.replace(/hh?/, 'H'); - this.timeFmtHM.templateArr = this.timeFmtHM._tokenize(this.timeFmtHM.template); - this.timeFmtHMS.template = this.timeFmtHMS.template.replace(/hh?/, 'H'); - this.timeFmtHMS.templateArr = this.timeFmtHMS._tokenize(this.timeFmtHMS.template); - - this._init(this.timeFmtHM.locinfo, options); - }) - }); - }) - }); - }) - }); - return; - } - this._init(li, options); - })); - }) - }); - }) - }); -}; - -/** - * @private - * @static - */ -DurationFmt.complist = { - "text": ["year", "month", "week", "day", "hour", "minute", "second", "millisecond"], - "clock": ["year", "month", "week", "day"] -}; - -/** - * @private - */ -DurationFmt.prototype._mapDigits = function(str) { - if (this.useNative && this.digits) { - return JSUtils.mapString(str.toString(), this.digits); - } - return str; -}; - -/** - * @private - * @param {LocaleInfo} locinfo - * @param {Object|undefined} options - */ -DurationFmt.prototype._init = function(locinfo, options) { - var digits; - new ScriptInfo(locinfo.getScript(), { - sync: options.sync, - loadParams: options.loadParams, - onLoad: ilib.bind(this, function(scriptInfo) { - this.scriptDirection = scriptInfo.getScriptDirection(); - - if (typeof(this.useNative) === 'boolean') { - // if the caller explicitly said to use native or not, honour that despite what the locale data says... - if (this.useNative) { - digits = locinfo.getNativeDigits(); - if (digits) { - this.digits = digits; - } - } - } else if (locinfo.getDigitsStyle() === "native") { - // else if the locale usually uses native digits, then use them - digits = locinfo.getNativeDigits(); - if (digits) { - this.useNative = true; - this.digits = digits; - } - } // else use western digits always - - if (typeof(options.onLoad) === 'function') { - options.onLoad(this); - } - }) - }); -}; - -/** - * Format a duration according to the format template of this formatter instance.

    - * - * The components parameter should be an object that contains any or all of these - * numeric properties: - * - *

      - *
    • year - *
    • month - *
    • week - *
    • day - *
    • hour - *
    • minute - *
    • second - *
    - *

    - * - * When a property is left out of the components parameter or has a value of 0, it will not - * be formatted into the output string, except for times that include 0 minutes and 0 seconds. - * - * This formatter will not ensure that numbers for each component property is within the - * valid range for that component. This allows you to format durations that are longer - * than normal range. For example, you could format a duration has being "33 hours" rather - * than "1 day, 9 hours". - * - * @param {Object} components date/time components to be formatted into a duration string - * @return {IString} a string with the duration formatted according to the style and - * locale set up for this formatter instance. If the components parameter is empty or - * undefined, an empty string is returned. - */ -DurationFmt.prototype.format = function (components) { - var i, list, fmt, secondlast = true, str = ""; - - list = DurationFmt.complist[this.style]; - //for (i = 0; i < list.length; i++) { - for (i = list.length-1; i >= 0; i--) { - //console.log("Now dealing with " + list[i]); - if (typeof(components[list[i]]) !== 'undefined' && components[list[i]] !== 0) { - if (str.length > 0) { - str = ((this.length === 'full' && secondlast) ? this.components.finalSeparator : this.components.separator) + str; - secondlast = false; - } - str = this.components[list[i]].formatChoice(components[list[i]], {num: this._mapDigits(components[list[i]])}) + str; - } - } - - if (this.style === 'clock') { - if (typeof(components.hour) !== 'undefined') { - fmt = (typeof(components.second) !== 'undefined') ? this.timeFmtHMS : this.timeFmtHM; - } else { - fmt = this.timeFmtMS; - } - - if (str.length > 0) { - str += this.components.separator; - } - str += fmt._formatTemplate(components, fmt.templateArr); - } - - if (this.scriptDirection === 'rtl') { - str = "\u200F" + str; - } - return new IString(str); -}; - -/** - * Return the locale that was used to construct this duration formatter object. If the - * locale was not given as parameter to the constructor, this method returns the default - * locale of the system. - * - * @return {Locale} locale that this duration formatter was constructed with - */ -DurationFmt.prototype.getLocale = function () { - return this.locale; -}; - -/** - * Return the length that was used to construct this duration formatter object. If the - * length was not given as parameter to the constructor, this method returns the default - * length. Valid values are "short", "medium", "long", and "full". - * - * @return {string} length that this duration formatter was constructed with - */ -DurationFmt.prototype.getLength = function () { - return this.length; -}; - -/** - * Return the style that was used to construct this duration formatter object. Returns - * one of "text" or "clock". - * - * @return {string} style that this duration formatter was constructed with - */ -DurationFmt.prototype.getStyle = function () { - return this.style; -}; - - -/* - * DurationFmt.js - Date formatter definition - * - * Copyright © 2012-2015, 2018, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data dateformats sysres - - - - - - - - - - -/** - * @class - * Create a new duration formatter instance. The duration formatter is immutable once - * it is created, but can format as many different durations as needed with the same - * options. Create different duration formatter instances for different purposes - * and then keep them cached for use later if you have more than one duration to - * format.

    - * - * Duration formatters format lengths of time. The duration formatter is meant to format - * durations of such things as the length of a song or a movie or a meeting, or the - * current position in that song or movie while playing it. If you wish to format a - * period of time that has a specific start and end date/time, then use a - * [DateRngFmt] instance instead and call its format method.

    - * - * The options may contain any of the following properties: - * - *

      - *
    • locale - locale to use when formatting the duration. If the locale is - * not specified, then the default locale of the app or web page will be used. - * - *
    • length - Specify the length of the format to use. The length is the approximate size of the - * formatted string. - * - *
        - *
      • short - use a short representation of the duration. This is the most compact format possible for the locale. eg. 1y 1m 1w 1d 1:01:01 - *
      • medium - use a medium length representation of the duration. This is a slightly longer format. eg. 1 yr 1 mo 1 wk 1 dy 1 hr 1 mi 1 se - *
      • long - use a long representation of the duration. This is a fully specified format, but some of the textual - * parts may still be abbreviated. eg. 1 yr 1 mo 1 wk 1 day 1 hr 1 min 1 sec - *
      • full - use a full representation of the duration. This is a fully specified format where all the textual - * parts are spelled out completely. eg. 1 year, 1 month, 1 week, 1 day, 1 hour, 1 minute and 1 second - *
      - * - *
    • style - whether hours, minutes, and seconds should be formatted as a text string - * or as a regular time as on a clock. eg. text is "1 hour, 15 minutes", whereas clock is "1:15:00". Valid - * values for this property are "text" or "clock". Default if this property is not specified - * is "text". - * - *
    • useNative - the flag used to determaine whether to use the native script settings - * for formatting the numbers . - * - *
    • onLoad - a callback function to call when the format data is fully - * loaded. When the onLoad option is given, this class will attempt to - * load any missing locale data using the ilib loader callback. - * When the constructor is done (even if the data is already preassembled), the - * onLoad function is called with the current instance as a parameter, so this - * callback can be used with preassembled or dynamic loading or a mix of the two. - * - *
    • sync - tell whether to load any missing locale data synchronously or - * asynchronously. If this option is given as "false", then the "onLoad" - * callback must be given, as the instance returned from this constructor will - * not be usable for a while. - * - *
    • loadParams - an object containing parameters to pass to the - * loader callback function when locale data is missing. The parameters are not - * interpretted or modified in any way. They are simply passed along. The object - * may contain any property/value pairs as long as the calling code is in - * agreement with the loader callback function as to what those parameters mean. - *
    - *

    - * - * - * @constructor - * @param {?Object} options options governing the way this date formatter instance works - */ -var DurationFmt = function(options) { - var sync = true; - var loadParams = undefined; - - this.locale = new Locale(); - this.length = "short"; - this.style = "text"; - - if (options) { - if (options.locale) { - this.locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; - } - - if (options.length) { - if (options.length === 'short' || - options.length === 'medium' || - options.length === 'long' || - options.length === 'full') { - this.length = options.length; - } - } - - if (options.style) { - if (options.style === 'text' || options.style === 'clock') { - this.style = options.style; - } - } - - if (typeof(options.sync) !== 'undefined') { - sync = !!options.sync; - } - - if (typeof(options.useNative) === 'boolean') { - this.useNative = options.useNative; - } - - loadParams = options.loadParams; - } - options = options || {sync: true}; - - new LocaleInfo(this.locale, { - sync: sync, - loadParams: loadParams, - onLoad: ilib.bind(this, function (li) { - this.script = li.getScript(); - new ResBundle({ - locale: this.locale, - name: "sysres", - sync: sync, - loadParams: loadParams, - onLoad: ilib.bind(this, function (sysres) { - IString.loadPlurals(sync, this.locale, loadParams, ilib.bind(this, function() { - if (this.length === 'medium' && !(this.script === 'Latn' || this.script ==='Grek' || this.script ==='Cyrl')) { - this.length = 'short'; - } - switch (this.length) { - case 'short': - this.components = { - year: sysres.getString("#{num}y"), - month: sysres.getString("#{num}m", "durationShortMonths"), - week: sysres.getString("#{num}w"), - day: sysres.getString("#{num}d"), - hour: sysres.getString("#{num}h"), - minute: sysres.getString("#{num}m", "durationShortMinutes"), - second: sysres.getString("#{num}s"), - millisecond: sysres.getString("#{num}m", "durationShortMillis"), - separator: sysres.getString(" ", "separatorShort"), - finalSeparator: "" // not used at this length - }; - break; - - case 'medium': - this.components = { - year: sysres.getString("1#1 yr|#{num} yrs", "durationMediumYears"), - month: sysres.getString("1#1 mo|#{num} mos"), - week: sysres.getString("1#1 wk|#{num} wks", "durationMediumWeeks"), - day: sysres.getString("1#1 dy|#{num} dys"), - hour: sysres.getString("1#1 hr|#{num} hrs", "durationMediumHours"), - minute: sysres.getString("1#1 mi|#{num} min"), - second: sysres.getString("1#1 se|#{num} sec"), - millisecond: sysres.getString("#{num} ms", "durationMediumMillis"), - separator: sysres.getString(" ", "separatorMedium"), - finalSeparator: "" // not used at this length - }; - break; - - case 'long': - this.components = { - year: sysres.getString("1#1 yr|#{num} yrs"), - month: sysres.getString("1#1 mon|#{num} mons"), - week: sysres.getString("1#1 wk|#{num} wks"), - day: sysres.getString("1#1 day|#{num} days", "durationLongDays"), - hour: sysres.getString("1#1 hr|#{num} hrs"), - minute: sysres.getString("1#1 min|#{num} min"), - second: sysres.getString("1#1 sec|#{num} sec"), - millisecond: sysres.getString("#{num} ms"), - separator: sysres.getString(", ", "separatorLong"), - finalSeparator: "" // not used at this length - }; - break; - - case 'full': - this.components = { - year: sysres.getString("1#1 year|#{num} years"), - month: sysres.getString("1#1 month|#{num} months"), - week: sysres.getString("1#1 week|#{num} weeks"), - day: sysres.getString("1#1 day|#{num} days"), - hour: sysres.getString("1#1 hour|#{num} hours"), - minute: sysres.getString("1#1 minute|#{num} minutes"), - second: sysres.getString("1#1 second|#{num} seconds"), - millisecond: sysres.getString("1#1 millisecond|#{num} milliseconds"), - separator: sysres.getString(", ", "separatorFull"), - finalSeparator: sysres.getString(" and ", "finalSeparatorFull") - }; - break; - } - - if (this.style === 'clock') { - new DateFmt({ - locale: this.locale, - calendar: "gregorian", - type: "time", - time: "ms", - sync: sync, - loadParams: loadParams, - useNative: this.useNative, - onLoad: ilib.bind(this, function (fmtMS) { - this.timeFmtMS = fmtMS; - new DateFmt({ - locale: this.locale, - calendar: "gregorian", - type: "time", - time: "hm", - sync: sync, - loadParams: loadParams, - useNative: this.useNative, - onLoad: ilib.bind(this, function (fmtHM) { - this.timeFmtHM = fmtHM; - new DateFmt({ - locale: this.locale, - calendar: "gregorian", - type: "time", - time: "hms", - sync: sync, - loadParams: loadParams, - useNative: this.useNative, - onLoad: ilib.bind(this, function (fmtHMS) { - this.timeFmtHMS = fmtHMS; - - // munge with the template to make sure that the hours are not formatted mod 12 - this.timeFmtHM.template = this.timeFmtHM.template.replace(/hh?/, 'H'); - this.timeFmtHM.templateArr = this.timeFmtHM._tokenize(this.timeFmtHM.template); - this.timeFmtHMS.template = this.timeFmtHMS.template.replace(/hh?/, 'H'); - this.timeFmtHMS.templateArr = this.timeFmtHMS._tokenize(this.timeFmtHMS.template); - - this._init(this.timeFmtHM.locinfo, options); - }) - }); - }) - }); - }) - }); - return; - } - this._init(li, options); - })); - }) - }); - }) - }); -}; - -/** - * @private - * @static - */ -DurationFmt.complist = { - "text": ["year", "month", "week", "day", "hour", "minute", "second", "millisecond"], - "clock": ["year", "month", "week", "day"] -}; - -/** - * @private - */ -DurationFmt.prototype._mapDigits = function(str) { - if (this.useNative && this.digits) { - return JSUtils.mapString(str.toString(), this.digits); - } - return str; -}; - -/** - * @private - * @param {LocaleInfo} locinfo - * @param {Object|undefined} options - */ -DurationFmt.prototype._init = function(locinfo, options) { - var digits; - new ScriptInfo(locinfo.getScript(), { - sync: options.sync, - loadParams: options.loadParams, - onLoad: ilib.bind(this, function(scriptInfo) { - this.scriptDirection = scriptInfo.getScriptDirection(); - - if (typeof(this.useNative) === 'boolean') { - // if the caller explicitly said to use native or not, honour that despite what the locale data says... - if (this.useNative) { - digits = locinfo.getNativeDigits(); - if (digits) { - this.digits = digits; - } - } - } else if (locinfo.getDigitsStyle() === "native") { - // else if the locale usually uses native digits, then use them - digits = locinfo.getNativeDigits(); - if (digits) { - this.useNative = true; - this.digits = digits; - } - } // else use western digits always - - if (typeof(options.onLoad) === 'function') { - options.onLoad(this); - } - }) - }); -}; - -/** - * Format a duration according to the format template of this formatter instance.

    - * - * The components parameter should be an object that contains any or all of these - * numeric properties: - * - *

      - *
    • year - *
    • month - *
    • week - *
    • day - *
    • hour - *
    • minute - *
    • second - *
    - *

    - * - * When a property is left out of the components parameter or has a value of 0, it will not - * be formatted into the output string, except for times that include 0 minutes and 0 seconds. - * - * This formatter will not ensure that numbers for each component property is within the - * valid range for that component. This allows you to format durations that are longer - * than normal range. For example, you could format a duration has being "33 hours" rather - * than "1 day, 9 hours". - * - * @param {Object} components date/time components to be formatted into a duration string - * @return {IString} a string with the duration formatted according to the style and - * locale set up for this formatter instance. If the components parameter is empty or - * undefined, an empty string is returned. - */ -DurationFmt.prototype.format = function (components) { - var i, list, fmt, secondlast = true, str = ""; - - list = DurationFmt.complist[this.style]; - //for (i = 0; i < list.length; i++) { - for (i = list.length-1; i >= 0; i--) { - //console.log("Now dealing with " + list[i]); - if (typeof(components[list[i]]) !== 'undefined' && components[list[i]] !== 0) { - if (str.length > 0) { - str = ((this.length === 'full' && secondlast) ? this.components.finalSeparator : this.components.separator) + str; - secondlast = false; - } - str = this.components[list[i]].formatChoice(components[list[i]], {num: this._mapDigits(components[list[i]])}) + str; - } - } - - if (this.style === 'clock') { - if (typeof(components.hour) !== 'undefined') { - fmt = (typeof(components.second) !== 'undefined') ? this.timeFmtHMS : this.timeFmtHM; - } else { - fmt = this.timeFmtMS; - } - - if (str.length > 0) { - str += this.components.separator; - } - str += fmt._formatTemplate(components, fmt.templateArr); - } - - if (this.scriptDirection === 'rtl') { - str = "\u200F" + str; - } - return new IString(str); -}; - -/** - * Return the locale that was used to construct this duration formatter object. If the - * locale was not given as parameter to the constructor, this method returns the default - * locale of the system. - * - * @return {Locale} locale that this duration formatter was constructed with - */ -DurationFmt.prototype.getLocale = function () { - return this.locale; -}; - -/** - * Return the length that was used to construct this duration formatter object. If the - * length was not given as parameter to the constructor, this method returns the default - * length. Valid values are "short", "medium", "long", and "full". - * - * @return {string} length that this duration formatter was constructed with - */ -DurationFmt.prototype.getLength = function () { - return this.length; -}; - -/** - * Return the style that was used to construct this duration formatter object. Returns - * one of "text" or "clock". - * - * @return {string} style that this duration formatter was constructed with - */ -DurationFmt.prototype.getStyle = function () { - return this.style; -}; - - -/* - * Currency.js - Currency definition - * - * Copyright © 2012-2015, 2018, 2022 JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// !data currency - - - - - - - -/** - * @class - * Create a new currency information instance. Instances of this class encode - * information about a particular currency.

    - * - * Note: that if you are looking to format currency for display, please see - * the number formatting class {NumFmt}. This class only gives information - * about currencies.

    - * - * The options can contain any of the following properties: - * - *

      - *
    • locale - specify the locale for this instance - *
    • code - find info on a specific currency with the given ISO 4217 code - *
    • sign - search for a currency that uses this sign - *
    • onLoad - a callback function to call when the currency data is fully - * loaded. When the onLoad option is given, this class will attempt to - * load any missing locale data using the ilib loader callback. - * When the constructor is done (even if the data is already preassembled), the - * onLoad function is called with the current instance as a parameter, so this - * callback can be used with preassembled or dynamic loading or a mix of the two. - *
    • sync - tell whether to load any missing locale data synchronously or - * asynchronously. If this option is given as "false", then the "onLoad" - * callback must be given, as the instance returned from this constructor will - * not be usable for a while. - *
    • loadParams - an object containing parameters to pass to the - * loader callback function when locale data is missing. The parameters are not - * interpretted or modified in any way. They are simply passed along. The object - * may contain any property/value pairs as long as the calling code is in - * agreement with the loader callback function as to what those parameters mean. - *
    - * - * When searching for a currency by its sign, this class cannot guarantee - * that it will return info about a specific currency. The reason is that currency - * signs are sometimes shared between different currencies and the sign is - * therefore ambiguous. If you need a - * guarantee, find the currency using the code instead.

    - * - * The way this class finds a currency by sign is the following. If the sign is - * unambiguous, then - * the currency is returned. If there are multiple currencies that use the same - * sign, and the current locale uses that sign, then the default currency for - * the current locale is returned. If there are multiple, but the current locale - * does not use that sign, then the currency with the largest circulation is - * returned. For example, if you are in the en-GB locale, and the sign is "$", - * then this class will notice that there are multiple currencies with that - * sign (USD, CAD, AUD, HKD, MXP, etc.) Since "$" is not used in en-GB, it will - * pick the one with the largest circulation, which in this case is the US Dollar - * (USD).

    - * - * If neither the code or sign property is set, the currency that is most common - * for the locale - * will be used instead. If the locale is not set, the default locale will be used. - * If the code is given, but it is not found in the list of known currencies, this - * constructor will throw an exception. If the sign is given, but it is not found, - * this constructor will default to the currency for the current locale. If both - * the code and sign properties are given, then the sign property will be ignored - * and only the code property used. If the locale is given, but it is not a known - * locale, this class will default to the default locale instead.

    - * - * - * @constructor - * @param options {Object} a set of properties to govern how this instance is constructed. - * @throws "currency xxx is unknown" when the given currency code is not in the list of - * known currencies. xxx is replaced with the requested code. - */ -var Currency = function (options) { - if (options) { - if (options.code) { - this.code = options.code; - } - if (options.locale) { - this.locale = (typeof(options.locale) === 'string') ? new Locale(options.locale) : options.locale; - } - if (options.sign) { - this.sign = options.sign; - } - if (options.loadParams) { - this.loadParams = options.loadParams; - } - options.sync = (typeof(options.sync) !== 'undefined') ? options.sync : true; - } else { - options = {sync: true}; - } - - this.locale = this.locale || new Locale(); - if (typeof(ilib.data.currency) === 'undefined') { - Utils.loadData({ - name: "currency.json", - object: "Currency", - locale: "-", - sync: options.sync, - loadParams: this.loadParams, - callback: ilib.bind(this, function(currency) { - ilib.data.currency = currency; - this._loadLocinfo(options); - }) - }); - } else { - this._loadLocinfo(options); - } -}; - -/** - * Return an array of the ids for all ISO 4217 currencies that - * this copy of ilib knows about. - * - * @static - * @return {Array.} an array of currency ids that this copy of ilib knows about. - */ -Currency.getAvailableCurrencies = function() { - var ret = [], - cur, - currencies = new ResBundle({ - name: "currency" - }).getResObj(); - - for (cur in currencies) { - if (cur && currencies[cur]) { - ret.push(cur); - } - } - - return ret; -}; - -Currency.prototype = { - /** - * @private - */ - _loadLocinfo: function(options) { - new LocaleInfo(this.locale, { - sync: options.sync, - loadParams: options.loadParams, - onLoad: ilib.bind(this, function (li) { - var currInfo; - - this.locinfo = li; - if (this.code) { - currInfo = ilib.data.currency[this.code]; - if (!currInfo) { - if (options.sync) { - throw "currency " + this.code + " is unknown"; - } else if (typeof(options.onLoad) === "function") { - options.onLoad(undefined); - return; - } - } - } else if (this.sign) { - currInfo = ilib.data.currency[this.sign]; // maybe it is really a code... - if (typeof(currInfo) !== 'undefined') { - this.code = this.sign; - } else { - this.code = this.locinfo.getCurrency(); - currInfo = ilib.data.currency[this.code]; - if (currInfo.sign !== this.sign) { - // current locale does not use the sign, so search for it - for (var cur in ilib.data.currency) { - if (cur && ilib.data.currency[cur]) { - currInfo = ilib.data.currency[cur]; - if (currInfo.sign === this.sign) { - // currency data is already ordered so that the currency with the - // largest circulation is at the beginning, so all we have to do - // is take the first one in the list that matches - this.code = cur; - break; - } - } - } - } - } - } - - if (!currInfo || !this.code) { - this.code = this.locinfo.getCurrency(); - currInfo = ilib.data.currency[this.code]; - } - - this.name = currInfo.name; - this.fractionDigits = currInfo.decimals; - this.sign = currInfo.sign; - - if (typeof(options.onLoad) === 'function') { - options.onLoad(this); - } - }) - }); - }, - - /** - * Return the ISO 4217 currency code for this instance. - * @return {string} the ISO 4217 currency code for this instance - */ - getCode: function () { - return this.code; - }, - - /** - * Return the default number of fraction digits that is typically used - * with this type of currency. - * @return {number} the number of fraction digits for this currency - */ - getFractionDigits: function () { - return this.fractionDigits; - }, - - /** - * Return the sign commonly used to represent this currency. - * @return {string} the sign commonly used to represent this currency - */ - getSign: function () { - return this.sign; - }, - - /** - * Return the name of the currency in English. - * @return {string} the name of the currency in English - */ - getName: function () { - return this.name; - }, - - /** - * Return the locale for this currency. If the options to the constructor - * included a locale property in order to find the currency that is appropriate - * for that locale, then the locale is returned here. If the options did not - * include a locale, then this method returns undefined. - * @return {Locale} the locale used in the constructor of this instance, - * or undefined if no locale was given in the constructor - */ - getLocale: function () { - return this.locale; - } -}; - - -/* - * Path.js - minimal pure js implementation of the nodejs path module - * - * Copyright © 2015, JEDLSoft - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var Path = { - /** - * Return the parent directory of the given pathname - * similar to the dirname shell function. - * @static - * @param {string} pathname path to check - * @return {string} the parent dir of the given pathname - */ - dirname: function(pathname) { - if (!pathname) return pathname; - pathname = Path.normalize(pathname); - return (pathname === ".") ? ".." : Path.normalize(pathname + "/.."); - }, - - /** - * Return the normalized version of the given pathname. This - * cleans up things like double directory separators and such. - * @static - * @param {string} pathname path to check - * @return {string} the normalized version of the given pathname - */ - normalize: function(pathname) { - if (pathname) { - pathname = pathname.replace(/\\/g, "/"); - pathname = pathname.replace(/\/\//g, "/"); - pathname = pathname.replace(/\/\//g, "/"); - pathname = pathname.replace(/\/[^/]*[^\./]\/\.\./g, "/."); - pathname = pathname.replace(/^[^/]*[^\./]\/\.\./g, "."); - pathname = pathname.replace(/\/\.\//g, "/"); - pathname = pathname.replace(/^\.\//, ""); - pathname = pathname.replace(/\/\//g, "/"); - pathname = pathname.replace(/\/\.$/, ""); - pathname = pathname.replace(/\/\//g, "/"); - if (pathname.length > 1) pathname = pathname.replace(/\/$/, ""); - if (pathname.length === 0) pathname = '.'; - } - return pathname; - }, - - /** - * Return a path that is the concatenation of all the of the arguments - * which each name a path segment. - * @static - * @param {...string} var_args - * @return {string} the concatenated pathname - */ - join: function(var_args) { - var arr = []; - for (var i = 0; i < arguments.length; i++) { - arr.push(arguments[i] && arguments[i].length > 0 ? arguments[i] : "."); - } - return Path.normalize(arr.join("/")); - }, - - /** - * Return the base file name of the path. If the extension is given, - * with or without the leading dot, then the extension is removed from - * the base name. - * @param {string} pathname the path to take the base name of - * @param {string|undefined} extension the optional extension to remove - * @return {string} the base name of the file without the extension - */ - basename: function(pathname, extension) { - var base = pathname; - var slash = pathname.lastIndexOf("/"); - if (slash !== -1) { - base = pathname.substring(slash+1); - } - - if (extension) { - var ext = extension[0] === "." ? extension : "." + extension; - var index = base.lastIndexOf(ext); - if (index > -1) { - base = base.substring(0, index); - } - } - - return base; - } -}; - - -ilib.data.plurals = undefined; -ilib.data.localeinfo = { - "calendar": "gregorian", - "clock": "24", - "currency": "USD", - "delimiter": { - "alternateQuotationEnd": "’", - "alternateQuotationStart": "‘", - "quotationEnd": "”", - "quotationStart": "“" - }, - "firstDayOfWeek": 1, - "language.name": "Root", - "meridiems": "gregorian", - "numfmt": { - "currencyFormats": { - "common": "{s} {n}", - "commonNegative": "-{s} {n}" - }, - "decimalChar": ".", - "exponential": "E", - "groupChar": ",", - "negativenumFmt": "-{n}", - "negativepctFmt": "-{n}%", - "pctChar": "%", - "pctFmt": "{n}%", - "prigroupSize": 3, - "roundingMode": "halfdown", - "script": "Latn", - "useNative": false - }, - "paperSizes": { - "regular": "A4" - }, - "timezone": "Etc/UTC", - "units": "metric", - "weekendEnd": 0, - "weekendStart": 6 -}; -ilib.data.localematch = { - "likelyLocales": { - "002": "en-Latn-NG", - "003": "en-Latn-US", - "005": "pt-Latn-BR", - "009": "en-Latn-AU", - "011": "en-Latn-NG", - "013": "es-Latn-MX", - "014": "sw-Latn-TZ", - "015": "ar-Arab-EG", - "017": "sw-Latn-CD", - "018": "en-Latn-ZA", - "019": "en-Latn-US", - "021": "en-Latn-US", - "029": "es-Latn-CU", - "030": "zh-Hans-CN", - "034": "hi-Deva-IN", - "035": "id-Latn-ID", - "039": "it-Latn-IT", - "053": "en-Latn-AU", - "054": "en-Latn-PG", - "057": "en-Latn-GU", - "061": "sm-Latn-WS", - "142": "zh-Hans-CN", - "143": "uz-Latn-UZ", - "145": "ar-Arab-SA", - "150": "ru-Cyrl-RU", - "151": "ru-Cyrl-RU", - "154": "en-Latn-GB", - "155": "de-Latn-DE", - "202": "en-Latn-NG", - "419": "es-Latn-419", - "AC": "en-Latn-AC", - "AD": "ca-Latn-AD", - "AE": "ar-Arab-AE", - "AF": "fa-Arab-AF", - "AG": "en-Latn-AG", - "AI": "en-Latn-AI", - "AL": "sq-Latn-AL", - "AM": "hy-Armn-AM", - "AO": "pt-Latn-AO", - "AQ": "en-Latn-AQ", - "AR": "es-Latn-AR", - "AS": "sm-Latn-AS", - "AT": "de-Latn-AT", - "AU": "en-Latn-AU", - "AW": "nl-Latn-AW", - "AX": "sv-Latn-AX", - "AZ": "az-Latn-AZ", - "Adlm": "ff-Adlm-GN", - "Afak": "djk-Afak-SR", - "Afak-SR": "djk-Afak-SR", - "Aghb": "xag-Aghb-AZ", - "Ahom": "aho-Ahom-IN", - "Arab": "ar-Arab-EG", - "Arab-AE": "ar-Arab-AE", - "Arab-AF": "fa-Arab-AF", - "Arab-BH": "ar-Arab-BH", - "Arab-BN": "ms-Arab-BN", - "Arab-CC": "ms-Arab-CC", - "Arab-CN": "ug-Arab-CN", - "Arab-DJ": "ar-Arab-DJ", - "Arab-DZ": "ar-Arab-DZ", - "Arab-EG": "ar-Arab-EG", - "Arab-EH": "ar-Arab-EH", - "Arab-GB": "ur-Arab-GB", - "Arab-ID": "ms-Arab-ID", - "Arab-IN": "ur-Arab-IN", - "Arab-IQ": "ar-Arab-IQ", - "Arab-IR": "fa-Arab-IR", - "Arab-JO": "ar-Arab-JO", - "Arab-KH": "cja-Arab-KH", - "Arab-KM": "ar-Arab-KM", - "Arab-KW": "ar-Arab-KW", - "Arab-LB": "ar-Arab-LB", - "Arab-LY": "ar-Arab-LY", - "Arab-MA": "ar-Arab-MA", - "Arab-MM": "rhg-Arab-MM", - "Arab-MN": "kk-Arab-MN", - "Arab-MR": "ar-Arab-MR", - "Arab-MU": "ur-Arab-MU", - "Arab-NG": "ha-Arab-NG", - "Arab-OM": "ar-Arab-OM", - "Arab-PK": "ur-Arab-PK", - "Arab-PS": "ar-Arab-PS", - "Arab-QA": "ar-Arab-QA", - "Arab-SA": "ar-Arab-SA", - "Arab-SD": "ar-Arab-SD", - "Arab-SY": "ar-Arab-SY", - "Arab-TD": "shu-Arab-TD", - "Arab-TG": "apd-Arab-TG", - "Arab-TH": "mfa-Arab-TH", - "Arab-TJ": "fa-Arab-TJ", - "Arab-TN": "ar-Arab-TN", - "Arab-TR": "apc-Arab-TR", - "Arab-YE": "ar-Arab-YE", - "Arab-YT": "swb-Arab-YT", - "Aran": "fa-Aran-IR", - "Aran-IR": "fa-Aran-IR", - "Armi": "arc-Armi-IR", - "Armn": "hy-Armn-AM", - "Avst": "ae-Avst-IR", - "BA": "bs-Latn-BA", - "BB": "en-Latn-BB", - "BD": "bn-Beng-BD", - "BE": "nl-Latn-BE", - "BF": "fr-Latn-BF", - "BG": "bg-Cyrl-BG", - "BH": "ar-Arab-BH", - "BI": "rn-Latn-BI", - "BJ": "fr-Latn-BJ", - "BL": "fr-Latn-BL", - "BM": "en-Latn-BM", - "BN": "ms-Latn-BN", - "BO": "es-Latn-BO", - "BQ": "pap-Latn-BQ", - "BR": "pt-Latn-BR", - "BS": "en-Latn-BS", - "BT": "dz-Tibt-BT", - "BV": "no-Latn-BV", - "BW": "en-Latn-BW", - "BY": "be-Cyrl-BY", - "BZ": "en-Latn-BZ", - "Bali": "ban-Bali-ID", - "Bamu": "bax-Bamu-CM", - "Bass": "bsq-Bass-LR", - "Batk": "bbc-Batk-ID", - "Beng": "bn-Beng-BD", - "Beng-BD": "bn-Beng-BD", - "Bhks": "sa-Bhks-IN", - "Bopo": "zh-Bopo-TW", - "Brah": "pka-Brah-IN", - "Brai": "fr-Brai-FR", - "Bugi": "bug-Bugi-ID", - "Buhd": "bku-Buhd-PH", - "CA": "en-Latn-CA", - "CC": "ms-Arab-CC", - "CD": "sw-Latn-CD", - "CF": "fr-Latn-CF", - "CG": "fr-Latn-CG", - "CH": "de-Latn-CH", - "CI": "fr-Latn-CI", - "CK": "en-Latn-CK", - "CL": "es-Latn-CL", - "CM": "fr-Latn-CM", - "CN": "zh-Hans-CN", - "CO": "es-Latn-CO", - "CP": "en-Latn-CP", - "CQ": "en-Latn-CQ", - "CR": "es-Latn-CR", - "CU": "es-Latn-CU", - "CV": "pt-Latn-CV", - "CW": "pap-Latn-CW", - "CX": "en-Latn-CX", - "CY": "el-Grek-CY", - "CZ": "cs-Latn-CZ", - "Cakm": "ccp-Cakm-BD", - "Cans": "iu-Cans-CA", - "Cari": "xcr-Cari-TR", - "Cham": "cjm-Cham-VN", - "Cher": "chr-Cher-US", - "Chrs": "xco-Chrs-UZ", - "Copt": "cop-Copt-EG", - "Cpmn": "und-Cpmn-CY", - "Cprt": "grc-Cprt-CY", - "Cyrl": "ru-Cyrl-RU", - "Cyrl-AF": "kaa-Cyrl-AF", - "Cyrl-AL": "mk-Cyrl-AL", - "Cyrl-AZ": "az-Cyrl-AZ", - "Cyrl-BA": "sr-Cyrl-BA", - "Cyrl-BG": "bg-Cyrl-BG", - "Cyrl-BY": "be-Cyrl-BY", - "Cyrl-GE": "ab-Cyrl-GE", - "Cyrl-GR": "mk-Cyrl-GR", - "Cyrl-IR": "kaa-Cyrl-IR", - "Cyrl-KG": "ky-Cyrl-KG", - "Cyrl-KZ": "kk-Cyrl-KZ", - "Cyrl-MD": "uk-Cyrl-MD", - "Cyrl-ME": "sr-Cyrl-ME", - "Cyrl-MK": "mk-Cyrl-MK", - "Cyrl-MN": "mn-Cyrl-MN", - "Cyrl-RO": "bg-Cyrl-RO", - "Cyrl-RS": "sr-Cyrl-RS", - "Cyrl-RU": "ru-Cyrl-RU", - "Cyrl-SK": "uk-Cyrl-SK", - "Cyrl-TJ": "tg-Cyrl-TJ", - "Cyrl-TR": "kbd-Cyrl-TR", - "Cyrl-UA": "uk-Cyrl-UA", - "Cyrl-UZ": "uz-Cyrl-UZ", - "Cyrl-XK": "sr-Cyrl-XK", - "Cyrs": "ru-Cyrs-RU", - "Cyrs-RU": "ru-Cyrs-RU", - "DE": "de-Latn-DE", - "DG": "en-Latn-DG", - "DJ": "aa-Latn-DJ", - "DK": "da-Latn-DK", - "DM": "en-Latn-DM", - "DO": "es-Latn-DO", - "DZ": "ar-Arab-DZ", - "Deva": "hi-Deva-IN", - "Deva-BT": "ne-Deva-BT", - "Deva-FJ": "hif-Deva-FJ", - "Deva-MU": "bho-Deva-MU", - "Deva-NP": "ne-Deva-NP", - "Deva-PK": "btv-Deva-PK", - "Diak": "dv-Diak-MV", - "Dogr": "doi-Dogr-IN", - "Dogr-IN": "doi-Dogr-IN", - "Dsrt": "en-Dsrt-US", - "Dsrt-US": "en-Dsrt-US", - "Dupl": "fr-Dupl-FR", - "EA": "es-Latn-EA", - "EC": "es-Latn-EC", - "EE": "et-Latn-EE", - "EG": "ar-Arab-EG", - "EH": "ar-Arab-EH", - "ER": "ti-Ethi-ER", - "ES": "es-Latn-ES", - "ET": "am-Ethi-ET", - "Egyp": "egy-Egyp-EG", - "Elba": "sq-Elba-AL", - "Elym": "arc-Elym-IR", - "Ethi": "am-Ethi-ET", - "Ethi-ER": "ti-Ethi-ER", - "Ethi-ET": "am-Ethi-ET", - "FI": "fi-Latn-FI", - "FJ": "en-Latn-FJ", - "FK": "en-Latn-FK", - "FM": "en-Latn-FM", - "FO": "fo-Latn-FO", - "FR": "fr-Latn-FR", - "GA": "fr-Latn-GA", - "GB": "en-Latn-GB", - "GD": "en-Latn-GD", - "GE": "ka-Geor-GE", - "GF": "fr-Latn-GF", - "GG": "en-Latn-GG", - "GH": "ak-Latn-GH", - "GI": "en-Latn-GI", - "GL": "kl-Latn-GL", - "GM": "en-Latn-GM", - "GN": "fr-Latn-GN", - "GP": "fr-Latn-GP", - "GQ": "es-Latn-GQ", - "GR": "el-Grek-GR", - "GS": "en-Latn-GS", - "GT": "es-Latn-GT", - "GU": "en-Latn-GU", - "GW": "pt-Latn-GW", - "GY": "en-Latn-GY", - "Gara": "wo-Gara-SN", - "Geok": "ka-Geok-GE", - "Geok-GE": "ka-Geok-GE", - "Geor": "ka-Geor-GE", - "Geor-GE": "ka-Geor-GE", - "Glag": "cu-Glag-BG", - "Gong": "wsg-Gong-IN", - "Gong-GE": "ka-Gong-GE", - "Gonm": "esg-Gonm-IN", - "Goth": "got-Goth-UA", - "Gran": "sa-Gran-IN", - "Grek": "el-Grek-GR", - "Grek-GR": "el-Grek-GR", - "Grek-TR": "bgx-Grek-TR", - "Gujr": "gu-Gujr-IN", - "Gukh": "gvr-Gukh-NP", - "Guru": "pa-Guru-IN", - "Guru-IN": "pa-Guru-IN", - "HK": "zh-Hant-HK", - "HM": "en-Latn-HM", - "HN": "es-Latn-HN", - "HR": "hr-Latn-HR", - "HT": "ht-Latn-HT", - "HU": "hu-Latn-HU", - "Hanb": "zh-Hanb-TW", - "Hang": "ko-Hang-KR", - "Hani": "zh-Hani-CN", - "Hano": "hnn-Hano-PH", - "Hans": "zh-Hans-CN", - "Hans-CN": "zh-Hans-CN", - "Hant": "zh-Hant-TW", - "Hant-CA": "yue-Hant-CA", - "Hant-CN": "yue-Hant-CN", - "Hant-MO": "zh-Hant-MO", - "Hatr": "arc-Hatr-IQ", - "Hebr": "he-Hebr-IL", - "Hebr-IL": "he-Hebr-IL", - "Hebr-SE": "yi-Hebr-SE", - "Hebr-UA": "yi-Hebr-UA", - "Hebr-US": "yi-Hebr-US", - "Hira": "ja-Hira-JP", - "Hluw": "hlu-Hluw-TR", - "Hmng": "hnj-Hmng-LA", - "Hmnp": "hnj-Hmnp-US", - "Hrkt": "ja-Hrkt-JP", - "Hrkt-JP": "ja-Hrkt-JP", - "Hung": "hu-Hung-HU", - "IC": "es-Latn-IC", - "ID": "id-Latn-ID", - "IE": "en-Latn-IE", - "IL": "he-Hebr-IL", - "IM": "en-Latn-IM", - "IN": "hi-Deva-IN", - "IO": "en-Latn-IO", - "IQ": "ar-Arab-IQ", - "IR": "fa-Arab-IR", - "IS": "is-Latn-IS", - "IT": "it-Latn-IT", - "Ital": "ett-Ital-IT", - "JE": "en-Latn-JE", - "JM": "en-Latn-JM", - "JO": "ar-Arab-JO", - "JP": "ja-Jpan-JP", - "Jamo": "ko-Jamo-KR", - "Java": "jv-Java-ID", - "Jpan": "ja-Jpan-JP", - "Jpan-JP": "ja-Jpan-JP", - "KE": "sw-Latn-KE", - "KG": "ky-Cyrl-KG", - "KH": "km-Khmr-KH", - "KI": "en-Latn-KI", - "KM": "ar-Arab-KM", - "KN": "en-Latn-KN", - "KP": "ko-Kore-KP", - "KR": "ko-Kore-KR", - "KW": "ar-Arab-KW", - "KY": "en-Latn-KY", - "KZ": "ru-Cyrl-KZ", - "Kali": "eky-Kali-MM", - "Kana": "ja-Kana-JP", - "Kawi": "kaw-Kawi-ID", - "Khar": "pra-Khar-PK", - "Khmr": "km-Khmr-KH", - "Khmr-KH": "km-Khmr-KH", - "Khmr-MM": "my-Khmr-MM", - "Khmr-MV": "bh-Khmr-MV", - "Khoj": "sd-Khoj-IN", - "Kits": "zkt-Kits-CN", - "Knda": "kn-Knda-IN", - "Kore": "ko-Kore-KR", - "Kore-KP": "ko-Kore-KP", - "Kore-KR": "ko-Kore-KR", - "Krai": "bap-Krai-IN", - "Kthi": "bho-Kthi-IN", - "LA": "lo-Laoo-LA", - "LB": "ar-Arab-LB", - "LC": "en-Latn-LC", - "LI": "de-Latn-LI", - "LK": "si-Sinh-LK", - "LR": "en-Latn-LR", - "LS": "st-Latn-LS", - "LT": "lt-Latn-LT", - "LU": "fr-Latn-LU", - "LV": "lv-Latn-LV", - "LY": "ar-Arab-LY", - "Lana": "nod-Lana-TH", - "Laoo": "lo-Laoo-LA", - "Laoo-AU": "hnj-Laoo-AU", - "Laoo-CN": "hnj-Laoo-CN", - "Laoo-FR": "hnj-Laoo-FR", - "Laoo-GF": "hnj-Laoo-GF", - "Laoo-LA": "lo-Laoo-LA", - "Laoo-MM": "hnj-Laoo-MM", - "Laoo-SR": "hnj-Laoo-SR", - "Laoo-TH": "hnj-Laoo-TH", - "Laoo-US": "hnj-Laoo-US", - "Laoo-VN": "hnj-Laoo-VN", - "Latn": "en-Latn-US", - "Latn-419": "es-Latn-419", - "Latn-AC": "en-Latn-AC", - "Latn-AD": "ca-Latn-AD", - "Latn-AE": "en-Latn-AE", - "Latn-AF": "tk-Latn-AF", - "Latn-AG": "en-Latn-AG", - "Latn-AI": "en-Latn-AI", - "Latn-AL": "sq-Latn-AL", - "Latn-AM": "ku-Latn-AM", - "Latn-AO": "pt-Latn-AO", - "Latn-AQ": "en-Latn-AQ", - "Latn-AR": "es-Latn-AR", - "Latn-AS": "sm-Latn-AS", - "Latn-AT": "de-Latn-AT", - "Latn-AU": "en-Latn-AU", - "Latn-AW": "nl-Latn-AW", - "Latn-AX": "sv-Latn-AX", - "Latn-AZ": "az-Latn-AZ", - "Latn-BA": "bs-Latn-BA", - "Latn-BB": "en-Latn-BB", - "Latn-BD": "en-Latn-BD", - "Latn-BE": "nl-Latn-BE", - "Latn-BF": "fr-Latn-BF", - "Latn-BG": "en-Latn-BG", - "Latn-BI": "fr-Latn-BI", - "Latn-BJ": "fr-Latn-BJ", - "Latn-BL": "fr-Latn-BL", - "Latn-BM": "en-Latn-BM", - "Latn-BN": "id-Latn-BN", - "Latn-BO": "es-Latn-BO", - "Latn-BQ": "nl-Latn-BQ", - "Latn-BR": "pt-Latn-BR", - "Latn-BS": "en-Latn-BS", - "Latn-BT": "en-Latn-BT", - "Latn-BV": "no-Latn-BV", - "Latn-BW": "en-Latn-BW", - "Latn-BZ": "en-Latn-BZ", - "Latn-CA": "en-Latn-CA", - "Latn-CC": "en-Latn-CC", - "Latn-CD": "fr-Latn-CD", - "Latn-CF": "fr-Latn-CF", - "Latn-CG": "fr-Latn-CG", - "Latn-CH": "de-Latn-CH", - "Latn-CI": "fr-Latn-CI", - "Latn-CK": "en-Latn-CK", - "Latn-CL": "es-Latn-CL", - "Latn-CM": "fr-Latn-CM", - "Latn-CN": "za-Latn-CN", - "Latn-CO": "es-Latn-CO", - "Latn-CP": "en-Latn-CP", - "Latn-CQ": "en-Latn-CQ", - "Latn-CR": "es-Latn-CR", - "Latn-CU": "es-Latn-CU", - "Latn-CV": "pt-Latn-CV", - "Latn-CW": "nl-Latn-CW", - "Latn-CX": "en-Latn-CX", - "Latn-CY": "tr-Latn-CY", - "Latn-CZ": "cs-Latn-CZ", - "Latn-DE": "de-Latn-DE", - "Latn-DG": "en-Latn-DG", - "Latn-DJ": "so-Latn-DJ", - "Latn-DK": "da-Latn-DK", - "Latn-DM": "en-Latn-DM", - "Latn-DO": "es-Latn-DO", - "Latn-DZ": "fr-Latn-DZ", - "Latn-EA": "es-Latn-EA", - "Latn-EC": "es-Latn-EC", - "Latn-EE": "et-Latn-EE", - "Latn-EG": "en-Latn-EG", - "Latn-ER": "en-Latn-ER", - "Latn-ES": "es-Latn-ES", - "Latn-ET": "en-Latn-ET", - "Latn-FI": "fi-Latn-FI", - "Latn-FJ": "en-Latn-FJ", - "Latn-FK": "en-Latn-FK", - "Latn-FM": "en-Latn-FM", - "Latn-FO": "fo-Latn-FO", - "Latn-FR": "fr-Latn-FR", - "Latn-GA": "fr-Latn-GA", - "Latn-GB": "en-Latn-GB", - "Latn-GD": "en-Latn-GD", - "Latn-GE": "ku-Latn-GE", - "Latn-GF": "fr-Latn-GF", - "Latn-GG": "en-Latn-GG", - "Latn-GH": "en-Latn-GH", - "Latn-GI": "en-Latn-GI", - "Latn-GL": "kl-Latn-GL", - "Latn-GM": "en-Latn-GM", - "Latn-GN": "fr-Latn-GN", - "Latn-GP": "fr-Latn-GP", - "Latn-GQ": "es-Latn-GQ", - "Latn-GR": "en-Latn-GR", - "Latn-GS": "en-Latn-GS", - "Latn-GT": "es-Latn-GT", - "Latn-GU": "en-Latn-GU", - "Latn-GW": "pt-Latn-GW", - "Latn-GY": "en-Latn-GY", - "Latn-HK": "en-Latn-HK", - "Latn-HM": "en-Latn-HM", - "Latn-HN": "es-Latn-HN", - "Latn-HR": "hr-Latn-HR", - "Latn-HT": "fr-Latn-HT", - "Latn-HU": "hu-Latn-HU", - "Latn-IC": "es-Latn-IC", - "Latn-ID": "id-Latn-ID", - "Latn-IE": "en-Latn-IE", - "Latn-IL": "en-Latn-IL", - "Latn-IM": "en-Latn-IM", - "Latn-IN": "en-Latn-IN", - "Latn-IO": "en-Latn-IO", - "Latn-IQ": "en-Latn-IQ", - "Latn-IR": "tk-Latn-IR", - "Latn-IS": "is-Latn-IS", - "Latn-IT": "it-Latn-IT", - "Latn-JE": "en-Latn-JE", - "Latn-JM": "en-Latn-JM", - "Latn-JO": "en-Latn-JO", - "Latn-JP": "en-Latn-JP", - "Latn-KE": "en-Latn-KE", - "Latn-KI": "en-Latn-KI", - "Latn-KM": "fr-Latn-KM", - "Latn-KN": "en-Latn-KN", - "Latn-KY": "en-Latn-KY", - "Latn-KZ": "en-Latn-KZ", - "Latn-LB": "en-Latn-LB", - "Latn-LC": "en-Latn-LC", - "Latn-LI": "de-Latn-LI", - "Latn-LK": "en-Latn-LK", - "Latn-LR": "en-Latn-LR", - "Latn-LS": "st-Latn-LS", - "Latn-LT": "lt-Latn-LT", - "Latn-LU": "lb-Latn-LU", - "Latn-LV": "lv-Latn-LV", - "Latn-MA": "fr-Latn-MA", - "Latn-MC": "fr-Latn-MC", - "Latn-MD": "ro-Latn-MD", - "Latn-ME": "hr-Latn-ME", - "Latn-MF": "fr-Latn-MF", - "Latn-MG": "mg-Latn-MG", - "Latn-MH": "en-Latn-MH", - "Latn-MK": "sq-Latn-MK", - "Latn-ML": "fr-Latn-ML", - "Latn-MM": "kac-Latn-MM", - "Latn-MO": "pt-Latn-MO", - "Latn-MP": "en-Latn-MP", - "Latn-MQ": "fr-Latn-MQ", - "Latn-MR": "fr-Latn-MR", - "Latn-MS": "en-Latn-MS", - "Latn-MT": "en-Latn-MT", - "Latn-MU": "en-Latn-MU", - "Latn-MV": "en-Latn-MV", - "Latn-MW": "en-Latn-MW", - "Latn-MX": "es-Latn-MX", - "Latn-MY": "ms-Latn-MY", - "Latn-MZ": "pt-Latn-MZ", - "Latn-NA": "en-Latn-NA", - "Latn-NC": "fr-Latn-NC", - "Latn-NE": "fr-Latn-NE", - "Latn-NF": "en-Latn-NF", - "Latn-NG": "en-Latn-NG", - "Latn-NI": "es-Latn-NI", - "Latn-NL": "nl-Latn-NL", - "Latn-NO": "no-Latn-NO", - "Latn-NP": "en-Latn-NP", - "Latn-NR": "na-Latn-NR", - "Latn-NU": "en-Latn-NU", - "Latn-NZ": "en-Latn-NZ", - "Latn-PA": "es-Latn-PA", - "Latn-PE": "es-Latn-PE", - "Latn-PF": "fr-Latn-PF", - "Latn-PG": "en-Latn-PG", - "Latn-PH": "tl-Latn-PH", - "Latn-PK": "en-Latn-PK", - "Latn-PL": "pl-Latn-PL", - "Latn-PM": "fr-Latn-PM", - "Latn-PN": "en-Latn-PN", - "Latn-PR": "es-Latn-PR", - "Latn-PT": "pt-Latn-PT", - "Latn-PW": "en-Latn-PW", - "Latn-PY": "es-Latn-PY", - "Latn-RE": "fr-Latn-RE", - "Latn-RO": "ro-Latn-RO", - "Latn-RS": "sr-Latn-RS", - "Latn-RU": "krl-Latn-RU", - "Latn-RW": "rw-Latn-RW", - "Latn-SB": "en-Latn-SB", - "Latn-SC": "crs-Latn-SC", - "Latn-SD": "en-Latn-SD", - "Latn-SE": "sv-Latn-SE", - "Latn-SG": "en-Latn-SG", - "Latn-SH": "en-Latn-SH", - "Latn-SI": "sl-Latn-SI", - "Latn-SJ": "no-Latn-SJ", - "Latn-SK": "sk-Latn-SK", - "Latn-SL": "en-Latn-SL", - "Latn-SM": "it-Latn-SM", - "Latn-SN": "fr-Latn-SN", - "Latn-SO": "so-Latn-SO", - "Latn-SR": "nl-Latn-SR", - "Latn-SS": "en-Latn-SS", - "Latn-ST": "pt-Latn-ST", - "Latn-SV": "es-Latn-SV", - "Latn-SX": "en-Latn-SX", - "Latn-SY": "fr-Latn-SY", - "Latn-SZ": "ss-Latn-SZ", - "Latn-TA": "en-Latn-TA", - "Latn-TC": "en-Latn-TC", - "Latn-TD": "fr-Latn-TD", - "Latn-TF": "fr-Latn-TF", - "Latn-TG": "fr-Latn-TG", - "Latn-TH": "en-Latn-TH", - "Latn-TK": "en-Latn-TK", - "Latn-TL": "tet-Latn-TL", - "Latn-TM": "tk-Latn-TM", - "Latn-TN": "fr-Latn-TN", - "Latn-TO": "to-Latn-TO", - "Latn-TR": "tr-Latn-TR", - "Latn-TT": "en-Latn-TT", - "Latn-TV": "en-Latn-TV", - "Latn-TW": "trv-Latn-TW", - "Latn-TZ": "sw-Latn-TZ", - "Latn-UA": "pl-Latn-UA", - "Latn-UG": "en-Latn-UG", - "Latn-UM": "en-Latn-UM", - "Latn-US": "en-Latn-US", - "Latn-UY": "es-Latn-UY", - "Latn-UZ": "uz-Latn-UZ", - "Latn-VA": "it-Latn-VA", - "Latn-VC": "en-Latn-VC", - "Latn-VE": "es-Latn-VE", - "Latn-VG": "en-Latn-VG", - "Latn-VI": "en-Latn-VI", - "Latn-VN": "vi-Latn-VN", - "Latn-VU": "bi-Latn-VU", - "Latn-WF": "fr-Latn-WF", - "Latn-WS": "sm-Latn-WS", - "Latn-XK": "sq-Latn-XK", - "Latn-XX": "zxx-Latn-XX", - "Latn-YE": "en-Latn-YE", - "Latn-YT": "fr-Latn-YT", - "Latn-ZA": "en-Latn-ZA", - "Latn-ZM": "en-Latn-ZM", - "Latn-ZW": "sn-Latn-ZW", - "Lepc": "lep-Lepc-IN", - "Limb": "lif-Limb-IN", - "Lina": "lab-Lina-GR", - "Linb": "grc-Linb-GR", - "Lisu": "lis-Lisu-CN", - "Lyci": "xlc-Lyci-TR", - "Lydi": "xld-Lydi-TR", - "MA": "ar-Arab-MA", - "MC": "fr-Latn-MC", - "MD": "ro-Latn-MD", - "ME": "sr-Latn-ME", - "MF": "fr-Latn-MF", - "MG": "mg-Latn-MG", - "MH": "en-Latn-MH", - "MK": "mk-Cyrl-MK", - "ML": "bm-Latn-ML", - "MM": "my-Mymr-MM", - "MN": "mn-Cyrl-MN", - "MO": "zh-Hant-MO", - "MP": "en-Latn-MP", - "MQ": "fr-Latn-MQ", - "MR": "ar-Arab-MR", - "MS": "en-Latn-MS", - "MT": "mt-Latn-MT", - "MU": "mfe-Latn-MU", - "MV": "dv-Thaa-MV", - "MW": "en-Latn-MW", - "MX": "es-Latn-MX", - "MY": "ms-Latn-MY", - "MZ": "pt-Latn-MZ", - "Mahj": "hi-Mahj-IN", - "Maka": "mak-Maka-ID", - "Mand": "myz-Mand-IR", - "Mani": "xmn-Mani-CN", - "Marc": "bo-Marc-CN", - "Medf": "dmf-Medf-NG", - "Mend": "men-Mend-SL", - "Merc": "xmr-Merc-SD", - "Mero": "xmr-Mero-SD", - "Mlym": "ml-Mlym-IN", - "Modi": "mr-Modi-IN", - "Mong": "mn-Mong-CN", - "Mroo": "mro-Mroo-BD", - "Mtei": "mni-Mtei-IN", - "Mult": "skr-Mult-PK", - "Mymr": "my-Mymr-MM", - "Mymr-IN": "kht-Mymr-IN", - "Mymr-TH": "mnw-Mymr-TH", - "NA": "af-Latn-NA", - "NC": "fr-Latn-NC", - "NE": "ha-Latn-NE", - "NF": "en-Latn-NF", - "NG": "en-Latn-NG", - "NI": "es-Latn-NI", - "NL": "nl-Latn-NL", - "NO": "nb-Latn-NO", - "NP": "ne-Deva-NP", - "NR": "na-Latn-NR", - "NU": "en-Latn-NU", - "NZ": "en-Latn-NZ", - "Nagm": "unr-Nagm-IN", - "Nand": "sa-Nand-IN", - "Narb": "xna-Narb-SA", - "Nbat": "arc-Nbat-JO", - "Newa": "new-Newa-NP", - "Nkoo": "man-Nkoo-GN", - "Nkoo-ML": "bm-Nkoo-ML", - "Nshu": "zhx-Nshu-CN", - "OM": "ar-Arab-OM", - "Ogam": "sga-Ogam-IE", - "Olck": "sat-Olck-IN", - "Onao": "unr-Onao-IN", - "Orkh": "otk-Orkh-MN", - "Orya": "or-Orya-IN", - "Osge": "osa-Osge-US", - "Osma": "so-Osma-SO", - "Ougr": "oui-Ougr-CN", - "PA": "es-Latn-PA", - "PE": "es-Latn-PE", - "PF": "fr-Latn-PF", - "PG": "tpi-Latn-PG", - "PH": "fil-Latn-PH", - "PK": "ur-Arab-PK", - "PL": "pl-Latn-PL", - "PM": "fr-Latn-PM", - "PN": "en-Latn-PN", - "PR": "es-Latn-PR", - "PS": "ar-Arab-PS", - "PT": "pt-Latn-PT", - "PW": "pau-Latn-PW", - "PY": "gn-Latn-PY", - "Palm": "arc-Palm-SY", - "Pauc": "ctd-Pauc-MM", - "Perm": "kv-Perm-RU", - "Phag": "lzh-Phag-CN", - "Phli": "pal-Phli-IR", - "Phlp": "pal-Phlp-CN", - "Phnx": "phn-Phnx-LB", - "Piqd": "tlh-Piqd-XX", - "Piqd-XX": "tlh-Piqd-XX", - "Plrd": "hmd-Plrd-CN", - "Prti": "xpr-Prti-IR", - "QA": "ar-Arab-QA", - "RE": "fr-Latn-RE", - "RO": "ro-Latn-RO", - "RS": "sr-Cyrl-RS", - "RU": "ru-Cyrl-RU", - "RW": "rw-Latn-RW", - "Rjng": "rej-Rjng-ID", - "Rohg": "rhg-Rohg-MM", - "Runr": "non-Runr-SE", - "SA": "ar-Arab-SA", - "SB": "en-Latn-SB", - "SC": "fr-Latn-SC", - "SD": "ar-Arab-SD", - "SE": "sv-Latn-SE", - "SG": "en-Latn-SG", - "SH": "en-Latn-SH", - "SI": "sl-Latn-SI", - "SJ": "nb-Latn-SJ", - "SK": "sk-Latn-SK", - "SL": "kri-Latn-SL", - "SM": "it-Latn-SM", - "SN": "fr-Latn-SN", - "SO": "so-Latn-SO", - "SR": "nl-Latn-SR", - "SS": "ar-Arab-SS", - "ST": "pt-Latn-ST", - "SV": "es-Latn-SV", - "SX": "en-Latn-SX", - "SY": "ar-Arab-SY", - "SZ": "ss-Latn-SZ", - "Samr": "smp-Samr-IL", - "Sarb": "xsa-Sarb-YE", - "Saur": "saz-Saur-IN", - "Sgnw": "ase-Sgnw-US", - "Shaw": "en-Shaw-GB", - "Shrd": "sa-Shrd-IN", - "Sidd": "sa-Sidd-IN", - "Sind": "sd-Sind-IN", - "Sinh": "si-Sinh-LK", - "Sinh-LK": "si-Sinh-LK", - "Sogd": "sog-Sogd-UZ", - "Sogo": "sog-Sogo-UZ", - "Sora": "srb-Sora-IN", - "Soyo": "cmg-Soyo-MN", - "Sund": "su-Sund-ID", - "Sunu": "suz-Sunu-NP", - "Sylo": "syl-Sylo-BD", - "Syrc": "syr-Syrc-IQ", - "TA": "en-Latn-TA", - "TC": "en-Latn-TC", - "TD": "fr-Latn-TD", - "TF": "fr-Latn-TF", - "TG": "fr-Latn-TG", - "TH": "th-Thai-TH", - "TJ": "tg-Cyrl-TJ", - "TK": "tkl-Latn-TK", - "TL": "pt-Latn-TL", - "TM": "tk-Latn-TM", - "TN": "ar-Arab-TN", - "TO": "to-Latn-TO", - "TR": "tr-Latn-TR", - "TT": "en-Latn-TT", - "TV": "tvl-Latn-TV", - "TW": "zh-Hant-TW", - "TZ": "sw-Latn-TZ", - "Tagb": "tbw-Tagb-PH", - "Takr": "doi-Takr-IN", - "Tale": "tdd-Tale-CN", - "Talu": "khb-Talu-CN", - "Taml": "ta-Taml-IN", - "Tang": "txg-Tang-CN", - "Tavt": "blt-Tavt-VN", - "Telu": "te-Telu-IN", - "Tfng": "zgh-Tfng-MA", - "Tglg": "fil-Tglg-PH", - "Thaa": "dv-Thaa-MV", - "Thai": "th-Thai-TH", - "Thai-CN": "lcp-Thai-CN", - "Thai-KH": "kdt-Thai-KH", - "Thai-LA": "kdt-Thai-LA", - "Thai-TH": "th-Thai-TH", - "Tibt": "bo-Tibt-CN", - "Tibt-BT": "dz-Tibt-BT", - "Tirh": "mai-Tirh-IN", - "Tnsa": "nst-Tnsa-IN", - "Todr": "sq-Todr-AL", - "Toto": "txo-Toto-IN", - "Tutg": "sa-Tutg-IN", - "UA": "uk-Cyrl-UA", - "UG": "sw-Latn-UG", - "UM": "en-Latn-UM", - "US": "en-Latn-US", - "UY": "es-Latn-UY", - "UZ": "uz-Latn-UZ", - "Ugar": "uga-Ugar-SY", - "VA": "it-Latn-VA", - "VC": "en-Latn-VC", - "VE": "es-Latn-VE", - "VG": "en-Latn-VG", - "VI": "en-Latn-VI", - "VN": "vi-Latn-VN", - "VU": "bi-Latn-VU", - "Vaii": "vai-Vaii-LR", - "Vith": "sq-Vith-AL", - "WF": "fr-Latn-WF", - "WS": "sm-Latn-WS", - "Wara": "hoc-Wara-IN", - "Wcho": "nnp-Wcho-IN", - "XK": "sq-Latn-XK", - "XX": "zxx-Latn-XX", - "Xpeo": "peo-Xpeo-IR", - "Xsux": "akk-Xsux-IQ", - "YE": "ar-Arab-YE", - "YT": "fr-Latn-YT", - "Yezi": "ku-Yezi-GE", - "Yiii": "ii-Yiii-CN", - "ZA": "en-Latn-ZA", - "ZM": "bem-Latn-ZM", - "ZW": "sn-Latn-ZW", - "Zanb": "cmg-Zanb-MN", - "aa": "aa-Latn-ET", - "aa-DJ": "aa-Latn-DJ", - "aa-ET": "aa-Latn-ET", - "aa-Latn": "aa-Latn-ET", - "aaa": "aaa-Latn-NG", - "aaa-Latn": "aaa-Latn-NG", - "aaa-NG": "aaa-Latn-NG", - "aab": "aab-Latn-NG", - "aab-Latn": "aab-Latn-NG", - "aab-NG": "aab-Latn-NG", - "aac": "aac-Latn-PG", - "aac-Latn": "aac-Latn-PG", - "aac-PG": "aac-Latn-PG", - "aad": "aad-Latn-PG", - "aad-Latn": "aad-Latn-PG", - "aad-PG": "aad-Latn-PG", - "aae": "aae-Latn-IT", - "aae-IT": "aae-Latn-IT", - "aae-Latn": "aae-Latn-IT", - "aaf": "aaf-Mlym-IN", - "aaf-IN": "aaf-Mlym-IN", - "aaf-Mlym": "aaf-Mlym-IN", - "aag": "aag-Latn-PG", - "aag-Latn": "aag-Latn-PG", - "aag-PG": "aag-Latn-PG", - "aah": "aah-Latn-PG", - "aah-Latn": "aah-Latn-PG", - "aah-PG": "aah-Latn-PG", - "aai": "aai-Latn-PG", - "aai-Latn": "aai-Latn-PG", - "aai-PG": "aai-Latn-PG", - "aak": "aak-Latn-PG", - "aak-Latn": "aak-Latn-PG", - "aak-PG": "aak-Latn-PG", - "aal": "aal-Latn-CM", - "aal-CM": "aal-Latn-CM", - "aal-Latn": "aal-Latn-CM", - "aan": "aan-Latn-BR", - "aan-BR": "aan-Latn-BR", - "aan-Latn": "aan-Latn-BR", - "aao": "aao-Arab-DZ", - "aao-Arab": "aao-Arab-DZ", - "aao-DZ": "aao-Arab-DZ", - "aap": "aap-Latn-BR", - "aap-BR": "aap-Latn-BR", - "aap-Latn": "aap-Latn-BR", - "aaq": "aaq-Latn-US", - "aaq-Latn": "aaq-Latn-US", - "aaq-US": "aaq-Latn-US", - "aas": "aas-Latn-TZ", - "aas-Latn": "aas-Latn-TZ", - "aas-TZ": "aas-Latn-TZ", - "aat": "aat-Grek-GR", - "aat-GR": "aat-Grek-GR", - "aat-Grek": "aat-Grek-GR", - "aau": "aau-Latn-PG", - "aau-Latn": "aau-Latn-PG", - "aau-PG": "aau-Latn-PG", - "aaw": "aaw-Latn-PG", - "aaw-Latn": "aaw-Latn-PG", - "aaw-PG": "aaw-Latn-PG", - "aax": "aax-Latn-ID", - "aax-ID": "aax-Latn-ID", - "aax-Latn": "aax-Latn-ID", - "aaz": "aaz-Latn-ID", - "aaz-ID": "aaz-Latn-ID", - "aaz-Latn": "aaz-Latn-ID", - "ab": "ab-Cyrl-GE", - "ab-Cyrl": "ab-Cyrl-GE", - "ab-Cyrl-GE": "ab-Cyrl-GE", - "ab-GE": "ab-Cyrl-GE", - "aba": "aba-Latn-CI", - "aba-CI": "aba-Latn-CI", - "aba-Latn": "aba-Latn-CI", - "abb": "abb-Latn-CM", - "abb-CM": "abb-Latn-CM", - "abb-Latn": "abb-Latn-CM", - "abc": "abc-Latn-PH", - "abc-Latn": "abc-Latn-PH", - "abc-PH": "abc-Latn-PH", - "abd": "abd-Latn-PH", - "abd-Latn": "abd-Latn-PH", - "abd-PH": "abd-Latn-PH", - "abe": "abe-Latn-CA", - "abe-CA": "abe-Latn-CA", - "abe-Latn": "abe-Latn-CA", - "abf": "abf-Latn-MY", - "abf-Latn": "abf-Latn-MY", - "abf-MY": "abf-Latn-MY", - "abg": "abg-Latn-PG", - "abg-Latn": "abg-Latn-PG", - "abg-PG": "abg-Latn-PG", - "abh": "abh-Arab-TJ", - "abh-Arab": "abh-Arab-TJ", - "abh-TJ": "abh-Arab-TJ", - "abi": "abi-Latn-CI", - "abi-CI": "abi-Latn-CI", - "abi-Latn": "abi-Latn-CI", - "abl": "abl-Rjng-ID", - "abl-ID": "abl-Rjng-ID", - "abl-Rjng": "abl-Rjng-ID", - "abm": "abm-Latn-NG", - "abm-Latn": "abm-Latn-NG", - "abm-NG": "abm-Latn-NG", - "abn": "abn-Latn-NG", - "abn-Latn": "abn-Latn-NG", - "abn-NG": "abn-Latn-NG", - "abo": "abo-Latn-NG", - "abo-Latn": "abo-Latn-NG", - "abo-NG": "abo-Latn-NG", - "abp": "abp-Latn-PH", - "abp-Latn": "abp-Latn-PH", - "abp-PH": "abp-Latn-PH", - "abr": "abr-Latn-GH", - "abr-GH": "abr-Latn-GH", - "abr-Latn": "abr-Latn-GH", - "abs": "abs-Latn-ID", - "abs-ID": "abs-Latn-ID", - "abs-Latn": "abs-Latn-ID", - "abt": "abt-Latn-PG", - "abt-Latn": "abt-Latn-PG", - "abt-PG": "abt-Latn-PG", - "abu": "abu-Latn-CI", - "abu-CI": "abu-Latn-CI", - "abu-Latn": "abu-Latn-CI", - "abv": "abv-Arab-BH", - "abv-Arab": "abv-Arab-BH", - "abv-BH": "abv-Arab-BH", - "abw": "abw-Latn-PG", - "abw-Latn": "abw-Latn-PG", - "abw-PG": "abw-Latn-PG", - "abx": "abx-Latn-PH", - "abx-Latn": "abx-Latn-PH", - "abx-PH": "abx-Latn-PH", - "aby": "aby-Latn-PG", - "aby-Latn": "aby-Latn-PG", - "aby-PG": "aby-Latn-PG", - "abz": "abz-Latn-ID", - "abz-ID": "abz-Latn-ID", - "abz-Latn": "abz-Latn-ID", - "aca": "aca-Latn-CO", - "aca-CO": "aca-Latn-CO", - "aca-Latn": "aca-Latn-CO", - "acb": "acb-Latn-NG", - "acb-Latn": "acb-Latn-NG", - "acb-NG": "acb-Latn-NG", - "acd": "acd-Latn-GH", - "acd-GH": "acd-Latn-GH", - "acd-Latn": "acd-Latn-GH", - "ace": "ace-Latn-ID", - "ace-ID": "ace-Latn-ID", - "ace-Latn": "ace-Latn-ID", - "acf": "acf-Latn-LC", - "acf-LC": "acf-Latn-LC", - "acf-Latn": "acf-Latn-LC", - "ach": "ach-Latn-UG", - "ach-Latn": "ach-Latn-UG", - "ach-UG": "ach-Latn-UG", - "acm": "acm-Arab-IQ", - "acm-Arab": "acm-Arab-IQ", - "acm-IQ": "acm-Arab-IQ", - "acn": "acn-Latn-CN", - "acn-CN": "acn-Latn-CN", - "acn-Latn": "acn-Latn-CN", - "acp": "acp-Latn-NG", - "acp-Latn": "acp-Latn-NG", - "acp-NG": "acp-Latn-NG", - "acq": "acq-Arab-YE", - "acq-Arab": "acq-Arab-YE", - "acq-YE": "acq-Arab-YE", - "acr": "acr-Latn-GT", - "acr-GT": "acr-Latn-GT", - "acr-Latn": "acr-Latn-GT", - "acs": "acs-Latn-BR", - "acs-BR": "acs-Latn-BR", - "acs-Latn": "acs-Latn-BR", - "act": "act-Latn-NL", - "act-Latn": "act-Latn-NL", - "act-NL": "act-Latn-NL", - "acu": "acu-Latn-EC", - "acu-EC": "acu-Latn-EC", - "acu-Latn": "acu-Latn-EC", - "acv": "acv-Latn-US", - "acv-Latn": "acv-Latn-US", - "acv-US": "acv-Latn-US", - "acw": "acw-Arab-SA", - "acw-Arab": "acw-Arab-SA", - "acw-SA": "acw-Arab-SA", - "acx": "acx-Arab-OM", - "acx-Arab": "acx-Arab-OM", - "acx-OM": "acx-Arab-OM", - "acy": "acy-Latn-CY", - "acy-CY": "acy-Latn-CY", - "acy-Latn": "acy-Latn-CY", - "acz": "acz-Latn-SD", - "acz-Latn": "acz-Latn-SD", - "acz-SD": "acz-Latn-SD", - "ada": "ada-Latn-GH", - "ada-GH": "ada-Latn-GH", - "ada-Latn": "ada-Latn-GH", - "adb": "adb-Latn-TL", - "adb-Latn": "adb-Latn-TL", - "adb-TL": "adb-Latn-TL", - "add": "add-Latn-CM", - "add-CM": "add-Latn-CM", - "add-Latn": "add-Latn-CM", - "ade": "ade-Latn-TG", - "ade-Latn": "ade-Latn-TG", - "ade-TG": "ade-Latn-TG", - "adf": "adf-Arab-OM", - "adf-Arab": "adf-Arab-OM", - "adf-OM": "adf-Arab-OM", - "adg": "adg-Latn-AU", - "adg-AU": "adg-Latn-AU", - "adg-Latn": "adg-Latn-AU", - "adh": "adh-Latn-UG", - "adh-Latn": "adh-Latn-UG", - "adh-UG": "adh-Latn-UG", - "adi": "adi-Latn-IN", - "adi-IN": "adi-Latn-IN", - "adi-Latn": "adi-Latn-IN", - "adj": "adj-Latn-CI", - "adj-CI": "adj-Latn-CI", - "adj-Latn": "adj-Latn-CI", - "adl": "adl-Latn-IN", - "adl-IN": "adl-Latn-IN", - "adl-Latn": "adl-Latn-IN", - "adn": "adn-Latn-ID", - "adn-ID": "adn-Latn-ID", - "adn-Latn": "adn-Latn-ID", - "ado": "ado-Latn-PG", - "ado-Latn": "ado-Latn-PG", - "ado-PG": "ado-Latn-PG", - "adq": "adq-Latn-GH", - "adq-GH": "adq-Latn-GH", - "adq-Latn": "adq-Latn-GH", - "adr": "adr-Latn-ID", - "adr-ID": "adr-Latn-ID", - "adr-Latn": "adr-Latn-ID", - "adt": "adt-Latn-AU", - "adt-AU": "adt-Latn-AU", - "adt-Latn": "adt-Latn-AU", - "adu": "adu-Latn-NG", - "adu-Latn": "adu-Latn-NG", - "adu-NG": "adu-Latn-NG", - "adw": "adw-Latn-BR", - "adw-BR": "adw-Latn-BR", - "adw-Latn": "adw-Latn-BR", - "adx": "adx-Tibt-CN", - "adx-CN": "adx-Tibt-CN", - "adx-Tibt": "adx-Tibt-CN", - "ady": "ady-Cyrl-RU", - "ady-Cyrl": "ady-Cyrl-RU", - "ady-RU": "ady-Cyrl-RU", - "adz": "adz-Latn-PG", - "adz-Latn": "adz-Latn-PG", - "adz-PG": "adz-Latn-PG", - "ae": "ae-Avst-IR", - "ae-Avst": "ae-Avst-IR", - "ae-IR": "ae-Avst-IR", - "aea": "aea-Latn-AU", - "aea-AU": "aea-Latn-AU", - "aea-Latn": "aea-Latn-AU", - "aeb": "aeb-Arab-TN", - "aeb-Arab": "aeb-Arab-TN", - "aeb-TN": "aeb-Arab-TN", - "aec": "aec-Arab-EG", - "aec-Arab": "aec-Arab-EG", - "aec-EG": "aec-Arab-EG", - "aee": "aee-Arab-AF", - "aee-AF": "aee-Arab-AF", - "aee-Arab": "aee-Arab-AF", - "aek": "aek-Latn-NC", - "aek-Latn": "aek-Latn-NC", - "aek-NC": "aek-Latn-NC", - "ael": "ael-Latn-CM", - "ael-CM": "ael-Latn-CM", - "ael-Latn": "ael-Latn-CM", - "aem": "aem-Latn-VN", - "aem-Latn": "aem-Latn-VN", - "aem-VN": "aem-Latn-VN", - "aeq": "aeq-Arab-PK", - "aeq-Arab": "aeq-Arab-PK", - "aeq-PK": "aeq-Arab-PK", - "aer": "aer-Latn-AU", - "aer-AU": "aer-Latn-AU", - "aer-Latn": "aer-Latn-AU", - "aeu": "aeu-Latn-CN", - "aeu-CN": "aeu-Latn-CN", - "aeu-Latn": "aeu-Latn-CN", - "aew": "aew-Latn-PG", - "aew-Latn": "aew-Latn-PG", - "aew-PG": "aew-Latn-PG", - "aey": "aey-Latn-PG", - "aey-Latn": "aey-Latn-PG", - "aey-PG": "aey-Latn-PG", - "aez": "aez-Latn-PG", - "aez-Latn": "aez-Latn-PG", - "aez-PG": "aez-Latn-PG", - "af": "af-Latn-ZA", - "af-Latn": "af-Latn-ZA", - "af-NA": "af-Latn-NA", - "af-ZA": "af-Latn-ZA", - "afb": "afb-Arab-KW", - "afb-Arab": "afb-Arab-KW", - "afb-KW": "afb-Arab-KW", - "afd": "afd-Latn-PG", - "afd-Latn": "afd-Latn-PG", - "afd-PG": "afd-Latn-PG", - "afe": "afe-Latn-NG", - "afe-Latn": "afe-Latn-NG", - "afe-NG": "afe-Latn-NG", - "afh": "afh-Latn-GH", - "afh-GH": "afh-Latn-GH", - "afh-Latn": "afh-Latn-GH", - "afi": "afi-Latn-PG", - "afi-Latn": "afi-Latn-PG", - "afi-PG": "afi-Latn-PG", - "afk": "afk-Latn-PG", - "afk-Latn": "afk-Latn-PG", - "afk-PG": "afk-Latn-PG", - "afn": "afn-Latn-NG", - "afn-Latn": "afn-Latn-NG", - "afn-NG": "afn-Latn-NG", - "afo": "afo-Latn-NG", - "afo-Latn": "afo-Latn-NG", - "afo-NG": "afo-Latn-NG", - "afp": "afp-Latn-PG", - "afp-Latn": "afp-Latn-PG", - "afp-PG": "afp-Latn-PG", - "afs": "afs-Latn-MX", - "afs-Latn": "afs-Latn-MX", - "afs-MX": "afs-Latn-MX", - "afu": "afu-Latn-GH", - "afu-GH": "afu-Latn-GH", - "afu-Latn": "afu-Latn-GH", - "afz": "afz-Latn-ID", - "afz-ID": "afz-Latn-ID", - "afz-Latn": "afz-Latn-ID", - "aga": "aga-Latn-PE", - "aga-Latn": "aga-Latn-PE", - "aga-PE": "aga-Latn-PE", - "agb": "agb-Latn-NG", - "agb-Latn": "agb-Latn-NG", - "agb-NG": "agb-Latn-NG", - "agc": "agc-Latn-NG", - "agc-Latn": "agc-Latn-NG", - "agc-NG": "agc-Latn-NG", - "agd": "agd-Latn-PG", - "agd-Latn": "agd-Latn-PG", - "agd-PG": "agd-Latn-PG", - "age": "age-Latn-PG", - "age-Latn": "age-Latn-PG", - "age-PG": "age-Latn-PG", - "agf": "agf-Latn-ID", - "agf-ID": "agf-Latn-ID", - "agf-Latn": "agf-Latn-ID", - "agg": "agg-Latn-PG", - "agg-Latn": "agg-Latn-PG", - "agg-PG": "agg-Latn-PG", - "agh": "agh-Latn-CD", - "agh-CD": "agh-Latn-CD", - "agh-Latn": "agh-Latn-CD", - "agi": "agi-Deva-IN", - "agi-Deva": "agi-Deva-IN", - "agi-IN": "agi-Deva-IN", - "agj": "agj-Ethi-ET", - "agj-ET": "agj-Ethi-ET", - "agj-Ethi": "agj-Ethi-ET", - "agk": "agk-Latn-PH", - "agk-Latn": "agk-Latn-PH", - "agk-PH": "agk-Latn-PH", - "agl": "agl-Latn-PG", - "agl-Latn": "agl-Latn-PG", - "agl-PG": "agl-Latn-PG", - "agm": "agm-Latn-PG", - "agm-Latn": "agm-Latn-PG", - "agm-PG": "agm-Latn-PG", - "agn": "agn-Latn-PH", - "agn-Latn": "agn-Latn-PH", - "agn-PH": "agn-Latn-PH", - "ago": "ago-Latn-PG", - "ago-Latn": "ago-Latn-PG", - "ago-PG": "ago-Latn-PG", - "agq": "agq-Latn-CM", - "agq-CM": "agq-Latn-CM", - "agq-Latn": "agq-Latn-CM", - "agr": "agr-Latn-PE", - "agr-Latn": "agr-Latn-PE", - "agr-PE": "agr-Latn-PE", - "ags": "ags-Latn-CM", - "ags-CM": "ags-Latn-CM", - "ags-Latn": "ags-Latn-CM", - "agt": "agt-Latn-PH", - "agt-Latn": "agt-Latn-PH", - "agt-PH": "agt-Latn-PH", - "agu": "agu-Latn-GT", - "agu-GT": "agu-Latn-GT", - "agu-Latn": "agu-Latn-GT", - "agv": "agv-Latn-PH", - "agv-Latn": "agv-Latn-PH", - "agv-PH": "agv-Latn-PH", - "agw": "agw-Latn-SB", - "agw-Latn": "agw-Latn-SB", - "agw-SB": "agw-Latn-SB", - "agx": "agx-Cyrl-RU", - "agx-Cyrl": "agx-Cyrl-RU", - "agx-RU": "agx-Cyrl-RU", - "agy": "agy-Latn-PH", - "agy-Latn": "agy-Latn-PH", - "agy-PH": "agy-Latn-PH", - "agz": "agz-Latn-PH", - "agz-Latn": "agz-Latn-PH", - "agz-PH": "agz-Latn-PH", - "aha": "aha-Latn-GH", - "aha-GH": "aha-Latn-GH", - "aha-Latn": "aha-Latn-GH", - "ahb": "ahb-Latn-VU", - "ahb-Latn": "ahb-Latn-VU", - "ahb-VU": "ahb-Latn-VU", - "ahg": "ahg-Ethi-ET", - "ahg-ET": "ahg-Ethi-ET", - "ahg-Ethi": "ahg-Ethi-ET", - "ahh": "ahh-Latn-ID", - "ahh-ID": "ahh-Latn-ID", - "ahh-Latn": "ahh-Latn-ID", - "ahi": "ahi-Latn-CI", - "ahi-CI": "ahi-Latn-CI", - "ahi-Latn": "ahi-Latn-CI", - "ahk": "ahk-Latn-MM", - "ahk-Latn": "ahk-Latn-MM", - "ahk-MM": "ahk-Latn-MM", - "ahl": "ahl-Latn-TG", - "ahl-Latn": "ahl-Latn-TG", - "ahl-TG": "ahl-Latn-TG", - "ahm": "ahm-Latn-CI", - "ahm-CI": "ahm-Latn-CI", - "ahm-Latn": "ahm-Latn-CI", - "ahn": "ahn-Latn-NG", - "ahn-Latn": "ahn-Latn-NG", - "ahn-NG": "ahn-Latn-NG", - "aho": "aho-Ahom-IN", - "aho-Ahom": "aho-Ahom-IN", - "aho-IN": "aho-Ahom-IN", - "ahp": "ahp-Latn-CI", - "ahp-CI": "ahp-Latn-CI", - "ahp-Latn": "ahp-Latn-CI", - "ahr": "ahr-Deva-IN", - "ahr-Deva": "ahr-Deva-IN", - "ahr-IN": "ahr-Deva-IN", - "ahs": "ahs-Latn-NG", - "ahs-Latn": "ahs-Latn-NG", - "ahs-NG": "ahs-Latn-NG", - "aht": "aht-Latn-US", - "aht-Latn": "aht-Latn-US", - "aht-US": "aht-Latn-US", - "aia": "aia-Latn-SB", - "aia-Latn": "aia-Latn-SB", - "aia-SB": "aia-Latn-SB", - "aib": "aib-Arab-CN", - "aib-Arab": "aib-Arab-CN", - "aib-CN": "aib-Arab-CN", - "aic": "aic-Latn-PG", - "aic-Latn": "aic-Latn-PG", - "aic-PG": "aic-Latn-PG", - "aid": "aid-Latn-AU", - "aid-AU": "aid-Latn-AU", - "aid-Latn": "aid-Latn-AU", - "aie": "aie-Latn-PG", - "aie-Latn": "aie-Latn-PG", - "aie-PG": "aie-Latn-PG", - "aif": "aif-Latn-PG", - "aif-Latn": "aif-Latn-PG", - "aif-PG": "aif-Latn-PG", - "aig": "aig-Latn-AG", - "aig-AG": "aig-Latn-AG", - "aig-Latn": "aig-Latn-AG", - "aii": "aii-Syrc-IQ", - "aii-IQ": "aii-Syrc-IQ", - "aii-Syrc": "aii-Syrc-IQ", - "aij": "aij-Hebr-IL", - "aij-Hebr": "aij-Hebr-IL", - "aij-IL": "aij-Hebr-IL", - "aik": "aik-Latn-NG", - "aik-Latn": "aik-Latn-NG", - "aik-NG": "aik-Latn-NG", - "ail": "ail-Latn-PG", - "ail-Latn": "ail-Latn-PG", - "ail-PG": "ail-Latn-PG", - "aim": "aim-Latn-IN", - "aim-IN": "aim-Latn-IN", - "aim-Latn": "aim-Latn-IN", - "ain": "ain-Kana-JP", - "ain-JP": "ain-Kana-JP", - "ain-Kana": "ain-Kana-JP", - "aio": "aio-Mymr-IN", - "aio-IN": "aio-Mymr-IN", - "aio-Mymr": "aio-Mymr-IN", - "aip": "aip-Latn-ID", - "aip-ID": "aip-Latn-ID", - "aip-Latn": "aip-Latn-ID", - "aiq": "aiq-Arab-AF", - "aiq-AF": "aiq-Arab-AF", - "aiq-Arab": "aiq-Arab-AF", - "air": "air-Latn-ID", - "air-ID": "air-Latn-ID", - "air-Latn": "air-Latn-ID", - "ait": "ait-Latn-BR", - "ait-BR": "ait-Latn-BR", - "ait-Latn": "ait-Latn-BR", - "aiw": "aiw-Latn-ET", - "aiw-ET": "aiw-Latn-ET", - "aiw-Latn": "aiw-Latn-ET", - "aix": "aix-Latn-PG", - "aix-Latn": "aix-Latn-PG", - "aix-PG": "aix-Latn-PG", - "aiy": "aiy-Latn-CF", - "aiy-CF": "aiy-Latn-CF", - "aiy-Latn": "aiy-Latn-CF", - "aja": "aja-Latn-SS", - "aja-Latn": "aja-Latn-SS", - "aja-SS": "aja-Latn-SS", - "ajg": "ajg-Latn-BJ", - "ajg-BJ": "ajg-Latn-BJ", - "ajg-Latn": "ajg-Latn-BJ", - "aji": "aji-Latn-NC", - "aji-Latn": "aji-Latn-NC", - "aji-NC": "aji-Latn-NC", - "ajn": "ajn-Latn-AU", - "ajn-AU": "ajn-Latn-AU", - "ajn-Latn": "ajn-Latn-AU", - "ajw": "ajw-Latn-NG", - "ajw-Latn": "ajw-Latn-NG", - "ajw-NG": "ajw-Latn-NG", - "ajz": "ajz-Latn-IN", - "ajz-IN": "ajz-Latn-IN", - "ajz-Latn": "ajz-Latn-IN", - "ak": "ak-Latn-GH", - "ak-GH": "ak-Latn-GH", - "ak-Latn": "ak-Latn-GH", - "akb": "akb-Latn-ID", - "akb-ID": "akb-Latn-ID", - "akb-Latn": "akb-Latn-ID", - "akc": "akc-Latn-ID", - "akc-ID": "akc-Latn-ID", - "akc-Latn": "akc-Latn-ID", - "akd": "akd-Latn-NG", - "akd-Latn": "akd-Latn-NG", - "akd-NG": "akd-Latn-NG", - "ake": "ake-Latn-GY", - "ake-GY": "ake-Latn-GY", - "ake-Latn": "ake-Latn-GY", - "akf": "akf-Latn-NG", - "akf-Latn": "akf-Latn-NG", - "akf-NG": "akf-Latn-NG", - "akg": "akg-Latn-ID", - "akg-ID": "akg-Latn-ID", - "akg-Latn": "akg-Latn-ID", - "akh": "akh-Latn-PG", - "akh-Latn": "akh-Latn-PG", - "akh-PG": "akh-Latn-PG", - "aki": "aki-Latn-PG", - "aki-Latn": "aki-Latn-PG", - "aki-PG": "aki-Latn-PG", - "akk": "akk-Xsux-IQ", - "akk-IQ": "akk-Xsux-IQ", - "akk-Xsux": "akk-Xsux-IQ", - "akl": "akl-Latn-PH", - "akl-Latn": "akl-Latn-PH", - "akl-PH": "akl-Latn-PH", - "ako": "ako-Latn-SR", - "ako-Latn": "ako-Latn-SR", - "ako-SR": "ako-Latn-SR", - "akp": "akp-Latn-GH", - "akp-GH": "akp-Latn-GH", - "akp-Latn": "akp-Latn-GH", - "akq": "akq-Latn-PG", - "akq-Latn": "akq-Latn-PG", - "akq-PG": "akq-Latn-PG", - "akr": "akr-Latn-VU", - "akr-Latn": "akr-Latn-VU", - "akr-VU": "akr-Latn-VU", - "aks": "aks-Latn-TG", - "aks-Latn": "aks-Latn-TG", - "aks-TG": "aks-Latn-TG", - "akt": "akt-Latn-PG", - "akt-Latn": "akt-Latn-PG", - "akt-PG": "akt-Latn-PG", - "aku": "aku-Latn-CM", - "aku-CM": "aku-Latn-CM", - "aku-Latn": "aku-Latn-CM", - "akv": "akv-Cyrl-RU", - "akv-Cyrl": "akv-Cyrl-RU", - "akv-RU": "akv-Cyrl-RU", - "akw": "akw-Latn-CG", - "akw-CG": "akw-Latn-CG", - "akw-Latn": "akw-Latn-CG", - "akz": "akz-Latn-US", - "akz-Latn": "akz-Latn-US", - "akz-US": "akz-Latn-US", - "ala": "ala-Latn-NG", - "ala-Latn": "ala-Latn-NG", - "ala-NG": "ala-Latn-NG", - "alc": "alc-Latn-CL", - "alc-CL": "alc-Latn-CL", - "alc-Latn": "alc-Latn-CL", - "ald": "ald-Latn-CI", - "ald-CI": "ald-Latn-CI", - "ald-Latn": "ald-Latn-CI", - "ale": "ale-Latn-US", - "ale-Latn": "ale-Latn-US", - "ale-US": "ale-Latn-US", - "alf": "alf-Latn-NG", - "alf-Latn": "alf-Latn-NG", - "alf-NG": "alf-Latn-NG", - "alh": "alh-Latn-AU", - "alh-AU": "alh-Latn-AU", - "alh-Latn": "alh-Latn-AU", - "ali": "ali-Latn-PG", - "ali-Latn": "ali-Latn-PG", - "ali-PG": "ali-Latn-PG", - "alj": "alj-Latn-PH", - "alj-Latn": "alj-Latn-PH", - "alj-PH": "alj-Latn-PH", - "alk": "alk-Laoo-LA", - "alk-LA": "alk-Laoo-LA", - "alk-Laoo": "alk-Laoo-LA", - "all": "all-Mlym-IN", - "all-IN": "all-Mlym-IN", - "all-Mlym": "all-Mlym-IN", - "alm": "alm-Latn-VU", - "alm-Latn": "alm-Latn-VU", - "alm-VU": "alm-Latn-VU", - "aln": "aln-Latn-XK", - "aln-Latn": "aln-Latn-XK", - "aln-XK": "aln-Latn-XK", - "alo": "alo-Latn-ID", - "alo-ID": "alo-Latn-ID", - "alo-Latn": "alo-Latn-ID", - "alp": "alp-Latn-ID", - "alp-ID": "alp-Latn-ID", - "alp-Latn": "alp-Latn-ID", - "alq": "alq-Latn-CA", - "alq-CA": "alq-Latn-CA", - "alq-Latn": "alq-Latn-CA", - "alr": "alr-Cyrl-RU", - "alr-Cyrl": "alr-Cyrl-RU", - "alr-RU": "alr-Cyrl-RU", - "alt": "alt-Cyrl-RU", - "alt-Cyrl": "alt-Cyrl-RU", - "alt-RU": "alt-Cyrl-RU", - "alu": "alu-Latn-SB", - "alu-Latn": "alu-Latn-SB", - "alu-SB": "alu-Latn-SB", - "alw": "alw-Ethi-ET", - "alw-ET": "alw-Ethi-ET", - "alw-Ethi": "alw-Ethi-ET", - "alx": "alx-Latn-PG", - "alx-Latn": "alx-Latn-PG", - "alx-PG": "alx-Latn-PG", - "aly": "aly-Latn-AU", - "aly-AU": "aly-Latn-AU", - "aly-Latn": "aly-Latn-AU", - "alz": "alz-Latn-CD", - "alz-CD": "alz-Latn-CD", - "alz-Latn": "alz-Latn-CD", - "am": "am-Ethi-ET", - "am-ET": "am-Ethi-ET", - "am-Ethi": "am-Ethi-ET", - "am-XX": "am-Ethi-XX", - "ama": "ama-Latn-BR", - "ama-BR": "ama-Latn-BR", - "ama-Latn": "ama-Latn-BR", - "amb": "amb-Latn-NG", - "amb-Latn": "amb-Latn-NG", - "amb-NG": "amb-Latn-NG", - "amc": "amc-Latn-PE", - "amc-Latn": "amc-Latn-PE", - "amc-PE": "amc-Latn-PE", - "ame": "ame-Latn-PE", - "ame-Latn": "ame-Latn-PE", - "ame-PE": "ame-Latn-PE", - "amf": "amf-Latn-ET", - "amf-ET": "amf-Latn-ET", - "amf-Latn": "amf-Latn-ET", - "amg": "amg-Latn-AU", - "amg-AU": "amg-Latn-AU", - "amg-Latn": "amg-Latn-AU", - "ami": "ami-Latn-TW", - "ami-Latn": "ami-Latn-TW", - "ami-TW": "ami-Latn-TW", - "amj": "amj-Latn-TD", - "amj-Latn": "amj-Latn-TD", - "amj-TD": "amj-Latn-TD", - "amk": "amk-Latn-ID", - "amk-ID": "amk-Latn-ID", - "amk-Latn": "amk-Latn-ID", - "amm": "amm-Latn-PG", - "amm-Latn": "amm-Latn-PG", - "amm-PG": "amm-Latn-PG", - "amn": "amn-Latn-PG", - "amn-Latn": "amn-Latn-PG", - "amn-PG": "amn-Latn-PG", - "amo": "amo-Latn-NG", - "amo-Latn": "amo-Latn-NG", - "amo-NG": "amo-Latn-NG", - "amp": "amp-Latn-PG", - "amp-Latn": "amp-Latn-PG", - "amp-PG": "amp-Latn-PG", - "amq": "amq-Latn-ID", - "amq-ID": "amq-Latn-ID", - "amq-Latn": "amq-Latn-ID", - "amr": "amr-Latn-PE", - "amr-Latn": "amr-Latn-PE", - "amr-PE": "amr-Latn-PE", - "ams": "ams-Jpan-JP", - "ams-JP": "ams-Jpan-JP", - "ams-Jpan": "ams-Jpan-JP", - "amt": "amt-Latn-PG", - "amt-Latn": "amt-Latn-PG", - "amt-PG": "amt-Latn-PG", - "amu": "amu-Latn-MX", - "amu-Latn": "amu-Latn-MX", - "amu-MX": "amu-Latn-MX", - "amv": "amv-Latn-ID", - "amv-ID": "amv-Latn-ID", - "amv-Latn": "amv-Latn-ID", - "amw": "amw-Syrc-SY", - "amw-SY": "amw-Syrc-SY", - "amw-Syrc": "amw-Syrc-SY", - "amx": "amx-Latn-AU", - "amx-AU": "amx-Latn-AU", - "amx-Latn": "amx-Latn-AU", - "amy": "amy-Latn-AU", - "amy-AU": "amy-Latn-AU", - "amy-Latn": "amy-Latn-AU", - "amz": "amz-Latn-AU", - "amz-AU": "amz-Latn-AU", - "amz-Latn": "amz-Latn-AU", - "an": "an-Latn-ES", - "an-ES": "an-Latn-ES", - "an-Latn": "an-Latn-ES", - "ana": "ana-Latn-CO", - "ana-CO": "ana-Latn-CO", - "ana-Latn": "ana-Latn-CO", - "anb": "anb-Latn-PE", - "anb-Latn": "anb-Latn-PE", - "anb-PE": "anb-Latn-PE", - "anc": "anc-Latn-NG", - "anc-Latn": "anc-Latn-NG", - "anc-NG": "anc-Latn-NG", - "and": "and-Latn-ID", - "and-ID": "and-Latn-ID", - "and-Latn": "and-Latn-ID", - "ane": "ane-Latn-NC", - "ane-Latn": "ane-Latn-NC", - "ane-NC": "ane-Latn-NC", - "anf": "anf-Latn-GH", - "anf-GH": "anf-Latn-GH", - "anf-Latn": "anf-Latn-GH", - "ang": "ang-Latn-GB", - "ang-GB": "ang-Latn-GB", - "ang-Latn": "ang-Latn-GB", - "anh": "anh-Latn-PG", - "anh-Latn": "anh-Latn-PG", - "anh-PG": "anh-Latn-PG", - "ani": "ani-Cyrl-RU", - "ani-Cyrl": "ani-Cyrl-RU", - "ani-RU": "ani-Cyrl-RU", - "anj": "anj-Latn-PG", - "anj-Latn": "anj-Latn-PG", - "anj-PG": "anj-Latn-PG", - "ank": "ank-Latn-NG", - "ank-Latn": "ank-Latn-NG", - "ank-NG": "ank-Latn-NG", - "anl": "anl-Latn-MM", - "anl-Latn": "anl-Latn-MM", - "anl-MM": "anl-Latn-MM", - "anm": "anm-Latn-IN", - "anm-IN": "anm-Latn-IN", - "anm-Latn": "anm-Latn-IN", - "ann": "ann-Latn-NG", - "ann-Latn": "ann-Latn-NG", - "ann-NG": "ann-Latn-NG", - "ano": "ano-Latn-CO", - "ano-CO": "ano-Latn-CO", - "ano-Latn": "ano-Latn-CO", - "anp": "anp-Deva-IN", - "anp-Deva": "anp-Deva-IN", - "anp-IN": "anp-Deva-IN", - "anq": "anq-Deva-IN", - "anq-Deva": "anq-Deva-IN", - "anq-IN": "anq-Deva-IN", - "anr": "anr-Deva-IN", - "anr-Deva": "anr-Deva-IN", - "anr-IN": "anr-Deva-IN", - "ans": "ans-Latn-CO", - "ans-CO": "ans-Latn-CO", - "ans-Latn": "ans-Latn-CO", - "ant": "ant-Latn-AU", - "ant-AU": "ant-Latn-AU", - "ant-Latn": "ant-Latn-AU", - "anu": "anu-Ethi-ET", - "anu-ET": "anu-Ethi-ET", - "anu-Ethi": "anu-Ethi-ET", - "anv": "anv-Latn-CM", - "anv-CM": "anv-Latn-CM", - "anv-Latn": "anv-Latn-CM", - "anw": "anw-Latn-NG", - "anw-Latn": "anw-Latn-NG", - "anw-NG": "anw-Latn-NG", - "anx": "anx-Latn-PG", - "anx-Latn": "anx-Latn-PG", - "anx-PG": "anx-Latn-PG", - "any": "any-Latn-CI", - "any-CI": "any-Latn-CI", - "any-Latn": "any-Latn-CI", - "anz": "anz-Latn-PG", - "anz-Latn": "anz-Latn-PG", - "anz-PG": "anz-Latn-PG", - "aoa": "aoa-Latn-ST", - "aoa-Latn": "aoa-Latn-ST", - "aoa-ST": "aoa-Latn-ST", - "aob": "aob-Latn-PG", - "aob-Latn": "aob-Latn-PG", - "aob-PG": "aob-Latn-PG", - "aoc": "aoc-Latn-VE", - "aoc-Latn": "aoc-Latn-VE", - "aoc-VE": "aoc-Latn-VE", - "aod": "aod-Latn-PG", - "aod-Latn": "aod-Latn-PG", - "aod-PG": "aod-Latn-PG", - "aoe": "aoe-Latn-PG", - "aoe-Latn": "aoe-Latn-PG", - "aoe-PG": "aoe-Latn-PG", - "aof": "aof-Latn-PG", - "aof-Latn": "aof-Latn-PG", - "aof-PG": "aof-Latn-PG", - "aog": "aog-Latn-PG", - "aog-Latn": "aog-Latn-PG", - "aog-PG": "aog-Latn-PG", - "aoi": "aoi-Latn-AU", - "aoi-AU": "aoi-Latn-AU", - "aoi-Latn": "aoi-Latn-AU", - "aoj": "aoj-Latn-PG", - "aoj-Latn": "aoj-Latn-PG", - "aoj-PG": "aoj-Latn-PG", - "aok": "aok-Latn-NC", - "aok-Latn": "aok-Latn-NC", - "aok-NC": "aok-Latn-NC", - "aol": "aol-Latn-ID", - "aol-ID": "aol-Latn-ID", - "aol-Latn": "aol-Latn-ID", - "aom": "aom-Latn-PG", - "aom-Latn": "aom-Latn-PG", - "aom-PG": "aom-Latn-PG", - "aon": "aon-Latn-PG", - "aon-Latn": "aon-Latn-PG", - "aon-PG": "aon-Latn-PG", - "aor": "aor-Latn-VU", - "aor-Latn": "aor-Latn-VU", - "aor-VU": "aor-Latn-VU", - "aos": "aos-Latn-ID", - "aos-ID": "aos-Latn-ID", - "aos-Latn": "aos-Latn-ID", - "aot": "aot-Beng-BD", - "aot-BD": "aot-Beng-BD", - "aot-Beng": "aot-Beng-BD", - "aox": "aox-Latn-GY", - "aox-GY": "aox-Latn-GY", - "aox-Latn": "aox-Latn-GY", - "aoz": "aoz-Latn-ID", - "aoz-ID": "aoz-Latn-ID", - "aoz-Latn": "aoz-Latn-ID", - "apb": "apb-Latn-SB", - "apb-Latn": "apb-Latn-SB", - "apb-SB": "apb-Latn-SB", - "apc": "apc-Arab-SY", - "apc-Arab": "apc-Arab-SY", - "apc-Arab-TR": "apc-Arab-TR", - "apc-SY": "apc-Arab-SY", - "apd": "apd-Arab-TG", - "apd-Arab": "apd-Arab-TG", - "apd-Arab-TG": "apd-Arab-TG", - "apd-TG": "apd-Arab-TG", - "ape": "ape-Latn-PG", - "ape-Latn": "ape-Latn-PG", - "ape-PG": "ape-Latn-PG", - "apf": "apf-Latn-PH", - "apf-Latn": "apf-Latn-PH", - "apf-PH": "apf-Latn-PH", - "apg": "apg-Latn-ID", - "apg-ID": "apg-Latn-ID", - "apg-Latn": "apg-Latn-ID", - "aph": "aph-Deva-NP", - "aph-Deva": "aph-Deva-NP", - "aph-NP": "aph-Deva-NP", - "api": "api-Latn-BR", - "api-BR": "api-Latn-BR", - "api-Latn": "api-Latn-BR", - "apj": "apj-Latn-US", - "apj-Latn": "apj-Latn-US", - "apj-US": "apj-Latn-US", - "apk": "apk-Latn-US", - "apk-Latn": "apk-Latn-US", - "apk-US": "apk-Latn-US", - "apl": "apl-Latn-US", - "apl-Latn": "apl-Latn-US", - "apl-US": "apl-Latn-US", - "apm": "apm-Latn-US", - "apm-Latn": "apm-Latn-US", - "apm-US": "apm-Latn-US", - "apn": "apn-Latn-BR", - "apn-BR": "apn-Latn-BR", - "apn-Latn": "apn-Latn-BR", - "apo": "apo-Latn-PG", - "apo-Latn": "apo-Latn-PG", - "apo-PG": "apo-Latn-PG", - "app": "app-Latn-VU", - "app-Latn": "app-Latn-VU", - "app-VU": "app-Latn-VU", - "apr": "apr-Latn-PG", - "apr-Latn": "apr-Latn-PG", - "apr-PG": "apr-Latn-PG", - "aps": "aps-Latn-PG", - "aps-Latn": "aps-Latn-PG", - "aps-PG": "aps-Latn-PG", - "apt": "apt-Latn-IN", - "apt-IN": "apt-Latn-IN", - "apt-Latn": "apt-Latn-IN", - "apu": "apu-Latn-BR", - "apu-BR": "apu-Latn-BR", - "apu-Latn": "apu-Latn-BR", - "apv": "apv-Latn-BR", - "apv-BR": "apv-Latn-BR", - "apv-Latn": "apv-Latn-BR", - "apw": "apw-Latn-US", - "apw-Latn": "apw-Latn-US", - "apw-US": "apw-Latn-US", - "apx": "apx-Latn-ID", - "apx-ID": "apx-Latn-ID", - "apx-Latn": "apx-Latn-ID", - "apy": "apy-Latn-BR", - "apy-BR": "apy-Latn-BR", - "apy-Latn": "apy-Latn-BR", - "apz": "apz-Latn-PG", - "apz-Latn": "apz-Latn-PG", - "apz-PG": "apz-Latn-PG", - "aqc": "aqc-Cyrl-RU", - "aqc-Cyrl": "aqc-Cyrl-RU", - "aqc-RU": "aqc-Cyrl-RU", - "aqd": "aqd-Latn-ML", - "aqd-Latn": "aqd-Latn-ML", - "aqd-ML": "aqd-Latn-ML", - "aqg": "aqg-Latn-NG", - "aqg-Latn": "aqg-Latn-NG", - "aqg-NG": "aqg-Latn-NG", - "aqk": "aqk-Latn-NG", - "aqk-Latn": "aqk-Latn-NG", - "aqk-NG": "aqk-Latn-NG", - "aqm": "aqm-Latn-ID", - "aqm-ID": "aqm-Latn-ID", - "aqm-Latn": "aqm-Latn-ID", - "aqn": "aqn-Latn-PH", - "aqn-Latn": "aqn-Latn-PH", - "aqn-PH": "aqn-Latn-PH", - "aqr": "aqr-Latn-NC", - "aqr-Latn": "aqr-Latn-NC", - "aqr-NC": "aqr-Latn-NC", - "aqt": "aqt-Latn-PY", - "aqt-Latn": "aqt-Latn-PY", - "aqt-PY": "aqt-Latn-PY", - "aqz": "aqz-Latn-BR", - "aqz-BR": "aqz-Latn-BR", - "aqz-Latn": "aqz-Latn-BR", - "ar": "ar-Arab-EG", - "ar-AE": "ar-Arab-AE", - "ar-Arab": "ar-Arab-EG", - "ar-BH": "ar-Arab-BH", - "ar-DJ": "ar-Arab-DJ", - "ar-DZ": "ar-Arab-DZ", - "ar-EG": "ar-Arab-EG", - "ar-EH": "ar-Arab-EH", - "ar-Hebr": "ar-Hebr-IL", - "ar-IL": "ar-Hebr-IL", - "ar-IQ": "ar-Arab-IQ", - "ar-JO": "ar-Arab-JO", - "ar-KM": "ar-Arab-KM", - "ar-KW": "ar-Arab-KW", - "ar-LB": "ar-Arab-LB", - "ar-LY": "ar-Arab-LY", - "ar-MA": "ar-Arab-MA", - "ar-MR": "ar-Arab-MR", - "ar-OM": "ar-Arab-OM", - "ar-PS": "ar-Arab-PS", - "ar-QA": "ar-Arab-QA", - "ar-SA": "ar-Arab-SA", - "ar-SD": "ar-Arab-SD", - "ar-SS": "ar-Arab-SS", - "ar-SY": "ar-Arab-SY", - "ar-TN": "ar-Arab-TN", - "ar-YE": "ar-Arab-YE", - "arc": "arc-Armi-IR", - "arc-Armi": "arc-Armi-IR", - "arc-Elym": "arc-Elym-IR", - "arc-Hatr": "arc-Hatr-IQ", - "arc-IR": "arc-Armi-IR", - "arc-Nbat": "arc-Nbat-JO", - "arc-Palm": "arc-Palm-SY", - "ard": "ard-Latn-AU", - "ard-AU": "ard-Latn-AU", - "ard-Latn": "ard-Latn-AU", - "are": "are-Latn-AU", - "are-AU": "are-Latn-AU", - "are-Latn": "are-Latn-AU", - "arh": "arh-Latn-CO", - "arh-CO": "arh-Latn-CO", - "arh-Latn": "arh-Latn-CO", - "ari": "ari-Latn-US", - "ari-Latn": "ari-Latn-US", - "ari-US": "ari-Latn-US", - "arj": "arj-Latn-BR", - "arj-BR": "arj-Latn-BR", - "arj-Latn": "arj-Latn-BR", - "ark": "ark-Latn-BR", - "ark-BR": "ark-Latn-BR", - "ark-Latn": "ark-Latn-BR", - "arl": "arl-Latn-PE", - "arl-Latn": "arl-Latn-PE", - "arl-PE": "arl-Latn-PE", - "arn": "arn-Latn-CL", - "arn-CL": "arn-Latn-CL", - "arn-Latn": "arn-Latn-CL", - "aro": "aro-Latn-BO", - "aro-BO": "aro-Latn-BO", - "aro-Latn": "aro-Latn-BO", - "arp": "arp-Latn-US", - "arp-Latn": "arp-Latn-US", - "arp-US": "arp-Latn-US", - "arq": "arq-Arab-DZ", - "arq-Arab": "arq-Arab-DZ", - "arq-DZ": "arq-Arab-DZ", - "arr": "arr-Latn-BR", - "arr-BR": "arr-Latn-BR", - "arr-Latn": "arr-Latn-BR", - "ars": "ars-Arab-SA", - "ars-Arab": "ars-Arab-SA", - "ars-SA": "ars-Arab-SA", - "aru": "aru-Latn-BR", - "aru-BR": "aru-Latn-BR", - "aru-Latn": "aru-Latn-BR", - "arw": "arw-Latn-SR", - "arw-Latn": "arw-Latn-SR", - "arw-SR": "arw-Latn-SR", - "arx": "arx-Latn-BR", - "arx-BR": "arx-Latn-BR", - "arx-Latn": "arx-Latn-BR", - "ary": "ary-Arab-MA", - "ary-Arab": "ary-Arab-MA", - "ary-MA": "ary-Arab-MA", - "arz": "arz-Arab-EG", - "arz-Arab": "arz-Arab-EG", - "arz-EG": "arz-Arab-EG", - "as": "as-Beng-IN", - "as-Beng": "as-Beng-IN", - "as-IN": "as-Beng-IN", - "as-XX": "as-Beng-XX", - "asa": "asa-Latn-TZ", - "asa-Latn": "asa-Latn-TZ", - "asa-TZ": "asa-Latn-TZ", - "asb": "asb-Latn-CA", - "asb-CA": "asb-Latn-CA", - "asb-Latn": "asb-Latn-CA", - "asc": "asc-Latn-ID", - "asc-ID": "asc-Latn-ID", - "asc-Latn": "asc-Latn-ID", - "ase": "ase-Sgnw-US", - "ase-Sgnw": "ase-Sgnw-US", - "ase-US": "ase-Sgnw-US", - "asg": "asg-Latn-NG", - "asg-Latn": "asg-Latn-NG", - "asg-NG": "asg-Latn-NG", - "ash": "ash-Latn-PE", - "ash-Latn": "ash-Latn-PE", - "ash-PE": "ash-Latn-PE", - "asi": "asi-Latn-ID", - "asi-ID": "asi-Latn-ID", - "asi-Latn": "asi-Latn-ID", - "asj": "asj-Latn-CM", - "asj-CM": "asj-Latn-CM", - "asj-Latn": "asj-Latn-CM", - "ask": "ask-Arab-AF", - "ask-AF": "ask-Arab-AF", - "ask-Arab": "ask-Arab-AF", - "asl": "asl-Latn-ID", - "asl-ID": "asl-Latn-ID", - "asl-Latn": "asl-Latn-ID", - "asn": "asn-Latn-BR", - "asn-BR": "asn-Latn-BR", - "asn-Latn": "asn-Latn-BR", - "aso": "aso-Latn-PG", - "aso-Latn": "aso-Latn-PG", - "aso-PG": "aso-Latn-PG", - "asr": "asr-Deva-IN", - "asr-Deva": "asr-Deva-IN", - "asr-IN": "asr-Deva-IN", - "ass": "ass-Latn-CM", - "ass-CM": "ass-Latn-CM", - "ass-Latn": "ass-Latn-CM", - "ast": "ast-Latn-ES", - "ast-ES": "ast-Latn-ES", - "ast-Latn": "ast-Latn-ES", - "asu": "asu-Latn-BR", - "asu-BR": "asu-Latn-BR", - "asu-Latn": "asu-Latn-BR", - "asv": "asv-Latn-CD", - "asv-CD": "asv-Latn-CD", - "asv-Latn": "asv-Latn-CD", - "asx": "asx-Latn-PG", - "asx-Latn": "asx-Latn-PG", - "asx-PG": "asx-Latn-PG", - "asy": "asy-Latn-ID", - "asy-ID": "asy-Latn-ID", - "asy-Latn": "asy-Latn-ID", - "asz": "asz-Latn-ID", - "asz-ID": "asz-Latn-ID", - "asz-Latn": "asz-Latn-ID", - "ata": "ata-Latn-PG", - "ata-Latn": "ata-Latn-PG", - "ata-PG": "ata-Latn-PG", - "atb": "atb-Latn-CN", - "atb-CN": "atb-Latn-CN", - "atb-Latn": "atb-Latn-CN", - "atc": "atc-Latn-PE", - "atc-Latn": "atc-Latn-PE", - "atc-PE": "atc-Latn-PE", - "atd": "atd-Latn-PH", - "atd-Latn": "atd-Latn-PH", - "atd-PH": "atd-Latn-PH", - "ate": "ate-Latn-PG", - "ate-Latn": "ate-Latn-PG", - "ate-PG": "ate-Latn-PG", - "atg": "atg-Latn-NG", - "atg-Latn": "atg-Latn-NG", - "atg-NG": "atg-Latn-NG", - "ati": "ati-Latn-CI", - "ati-CI": "ati-Latn-CI", - "ati-Latn": "ati-Latn-CI", - "atj": "atj-Latn-CA", - "atj-CA": "atj-Latn-CA", - "atj-Latn": "atj-Latn-CA", - "atk": "atk-Latn-PH", - "atk-Latn": "atk-Latn-PH", - "atk-PH": "atk-Latn-PH", - "atl": "atl-Latn-PH", - "atl-Latn": "atl-Latn-PH", - "atl-PH": "atl-Latn-PH", - "atm": "atm-Latn-PH", - "atm-Latn": "atm-Latn-PH", - "atm-PH": "atm-Latn-PH", - "atn": "atn-Arab-IR", - "atn-Arab": "atn-Arab-IR", - "atn-IR": "atn-Arab-IR", - "ato": "ato-Latn-CM", - "ato-CM": "ato-Latn-CM", - "ato-Latn": "ato-Latn-CM", - "atp": "atp-Latn-PH", - "atp-Latn": "atp-Latn-PH", - "atp-PH": "atp-Latn-PH", - "atq": "atq-Latn-ID", - "atq-ID": "atq-Latn-ID", - "atq-Latn": "atq-Latn-ID", - "atr": "atr-Latn-BR", - "atr-BR": "atr-Latn-BR", - "atr-Latn": "atr-Latn-BR", - "ats": "ats-Latn-US", - "ats-Latn": "ats-Latn-US", - "ats-US": "ats-Latn-US", - "att": "att-Latn-PH", - "att-Latn": "att-Latn-PH", - "att-PH": "att-Latn-PH", - "atu": "atu-Latn-SS", - "atu-Latn": "atu-Latn-SS", - "atu-SS": "atu-Latn-SS", - "atv": "atv-Cyrl-RU", - "atv-Cyrl": "atv-Cyrl-RU", - "atv-RU": "atv-Cyrl-RU", - "atw": "atw-Latn-US", - "atw-Latn": "atw-Latn-US", - "atw-US": "atw-Latn-US", - "atx": "atx-Latn-BR", - "atx-BR": "atx-Latn-BR", - "atx-Latn": "atx-Latn-BR", - "aty": "aty-Latn-VU", - "aty-Latn": "aty-Latn-VU", - "aty-VU": "aty-Latn-VU", - "atz": "atz-Latn-PH", - "atz-Latn": "atz-Latn-PH", - "atz-PH": "atz-Latn-PH", - "aua": "aua-Latn-SB", - "aua-Latn": "aua-Latn-SB", - "aua-SB": "aua-Latn-SB", - "auc": "auc-Latn-EC", - "auc-EC": "auc-Latn-EC", - "auc-Latn": "auc-Latn-EC", - "aud": "aud-Latn-SB", - "aud-Latn": "aud-Latn-SB", - "aud-SB": "aud-Latn-SB", - "aug": "aug-Latn-BJ", - "aug-BJ": "aug-Latn-BJ", - "aug-Latn": "aug-Latn-BJ", - "auh": "auh-Latn-ZM", - "auh-Latn": "auh-Latn-ZM", - "auh-ZM": "auh-Latn-ZM", - "aui": "aui-Latn-PG", - "aui-Latn": "aui-Latn-PG", - "aui-PG": "aui-Latn-PG", - "auj": "auj-Arab-LY", - "auj-Arab": "auj-Arab-LY", - "auj-LY": "auj-Arab-LY", - "auk": "auk-Latn-PG", - "auk-Latn": "auk-Latn-PG", - "auk-PG": "auk-Latn-PG", - "aul": "aul-Latn-VU", - "aul-Latn": "aul-Latn-VU", - "aul-VU": "aul-Latn-VU", - "aum": "aum-Latn-NG", - "aum-Latn": "aum-Latn-NG", - "aum-NG": "aum-Latn-NG", - "aun": "aun-Latn-PG", - "aun-Latn": "aun-Latn-PG", - "aun-PG": "aun-Latn-PG", - "auo": "auo-Latn-NG", - "auo-Latn": "auo-Latn-NG", - "auo-NG": "auo-Latn-NG", - "aup": "aup-Latn-PG", - "aup-Latn": "aup-Latn-PG", - "aup-PG": "aup-Latn-PG", - "auq": "auq-Latn-ID", - "auq-ID": "auq-Latn-ID", - "auq-Latn": "auq-Latn-ID", - "aur": "aur-Latn-PG", - "aur-Latn": "aur-Latn-PG", - "aur-PG": "aur-Latn-PG", - "aut": "aut-Latn-PF", - "aut-Latn": "aut-Latn-PF", - "aut-PF": "aut-Latn-PF", - "auu": "auu-Latn-ID", - "auu-ID": "auu-Latn-ID", - "auu-Latn": "auu-Latn-ID", - "auw": "auw-Latn-ID", - "auw-ID": "auw-Latn-ID", - "auw-Latn": "auw-Latn-ID", - "auy": "auy-Latn-PG", - "auy-Latn": "auy-Latn-PG", - "auy-PG": "auy-Latn-PG", - "auz": "auz-Arab-UZ", - "auz-Arab": "auz-Arab-UZ", - "auz-UZ": "auz-Arab-UZ", - "av": "av-Cyrl-RU", - "av-Cyrl": "av-Cyrl-RU", - "av-RU": "av-Cyrl-RU", - "avb": "avb-Latn-PG", - "avb-Latn": "avb-Latn-PG", - "avb-PG": "avb-Latn-PG", - "avd": "avd-Arab-IR", - "avd-Arab": "avd-Arab-IR", - "avd-IR": "avd-Arab-IR", - "avi": "avi-Latn-CI", - "avi-CI": "avi-Latn-CI", - "avi-Latn": "avi-Latn-CI", - "avk": "avk-Latn-001", - "avk-001": "avk-Latn-001", - "avk-Latn": "avk-Latn-001", - "avl": "avl-Arab-EG", - "avl-Arab": "avl-Arab-EG", - "avl-EG": "avl-Arab-EG", - "avm": "avm-Latn-AU", - "avm-AU": "avm-Latn-AU", - "avm-Latn": "avm-Latn-AU", - "avn": "avn-Latn-GH", - "avn-GH": "avn-Latn-GH", - "avn-Latn": "avn-Latn-GH", - "avo": "avo-Latn-BR", - "avo-BR": "avo-Latn-BR", - "avo-Latn": "avo-Latn-BR", - "avs": "avs-Latn-PE", - "avs-Latn": "avs-Latn-PE", - "avs-PE": "avs-Latn-PE", - "avt": "avt-Latn-PG", - "avt-Latn": "avt-Latn-PG", - "avt-PG": "avt-Latn-PG", - "avu": "avu-Latn-SS", - "avu-Latn": "avu-Latn-SS", - "avu-SS": "avu-Latn-SS", - "avv": "avv-Latn-BR", - "avv-BR": "avv-Latn-BR", - "avv-Latn": "avv-Latn-BR", - "awa": "awa-Deva-IN", - "awa-Deva": "awa-Deva-IN", - "awa-IN": "awa-Deva-IN", - "awb": "awb-Latn-PG", - "awb-Latn": "awb-Latn-PG", - "awb-PG": "awb-Latn-PG", - "awc": "awc-Latn-NG", - "awc-Latn": "awc-Latn-NG", - "awc-NG": "awc-Latn-NG", - "awe": "awe-Latn-BR", - "awe-BR": "awe-Latn-BR", - "awe-Latn": "awe-Latn-BR", - "awg": "awg-Latn-AU", - "awg-AU": "awg-Latn-AU", - "awg-Latn": "awg-Latn-AU", - "awh": "awh-Latn-ID", - "awh-ID": "awh-Latn-ID", - "awh-Latn": "awh-Latn-ID", - "awi": "awi-Latn-PG", - "awi-Latn": "awi-Latn-PG", - "awi-PG": "awi-Latn-PG", - "awk": "awk-Latn-AU", - "awk-AU": "awk-Latn-AU", - "awk-Latn": "awk-Latn-AU", - "awm": "awm-Latn-PG", - "awm-Latn": "awm-Latn-PG", - "awm-PG": "awm-Latn-PG", - "awn": "awn-Ethi-ET", - "awn-ET": "awn-Ethi-ET", - "awn-Ethi": "awn-Ethi-ET", - "awo": "awo-Latn-NG", - "awo-Latn": "awo-Latn-NG", - "awo-NG": "awo-Latn-NG", - "awr": "awr-Latn-ID", - "awr-ID": "awr-Latn-ID", - "awr-Latn": "awr-Latn-ID", - "aws": "aws-Latn-ID", - "aws-ID": "aws-Latn-ID", - "aws-Latn": "aws-Latn-ID", - "awt": "awt-Latn-BR", - "awt-BR": "awt-Latn-BR", - "awt-Latn": "awt-Latn-BR", - "awu": "awu-Latn-ID", - "awu-ID": "awu-Latn-ID", - "awu-Latn": "awu-Latn-ID", - "awv": "awv-Latn-ID", - "awv-ID": "awv-Latn-ID", - "awv-Latn": "awv-Latn-ID", - "aww": "aww-Latn-PG", - "aww-Latn": "aww-Latn-PG", - "aww-PG": "aww-Latn-PG", - "awx": "awx-Latn-PG", - "awx-Latn": "awx-Latn-PG", - "awx-PG": "awx-Latn-PG", - "awy": "awy-Latn-ID", - "awy-ID": "awy-Latn-ID", - "awy-Latn": "awy-Latn-ID", - "axb": "axb-Latn-AR", - "axb-AR": "axb-Latn-AR", - "axb-Latn": "axb-Latn-AR", - "axe": "axe-Latn-AU", - "axe-AU": "axe-Latn-AU", - "axe-Latn": "axe-Latn-AU", - "axg": "axg-Latn-BR", - "axg-BR": "axg-Latn-BR", - "axg-Latn": "axg-Latn-BR", - "axk": "axk-Latn-CF", - "axk-CF": "axk-Latn-CF", - "axk-Latn": "axk-Latn-CF", - "axl": "axl-Latn-AU", - "axl-AU": "axl-Latn-AU", - "axl-Latn": "axl-Latn-AU", - "axm": "axm-Armn-AM", - "axm-AM": "axm-Armn-AM", - "axm-Armn": "axm-Armn-AM", - "axx": "axx-Latn-NC", - "axx-Latn": "axx-Latn-NC", - "axx-NC": "axx-Latn-NC", - "ay": "ay-Latn-BO", - "ay-BO": "ay-Latn-BO", - "ay-Latn": "ay-Latn-BO", - "aya": "aya-Latn-PG", - "aya-Latn": "aya-Latn-PG", - "aya-PG": "aya-Latn-PG", - "ayb": "ayb-Latn-BJ", - "ayb-BJ": "ayb-Latn-BJ", - "ayb-Latn": "ayb-Latn-BJ", - "ayc": "ayc-Latn-PE", - "ayc-Latn": "ayc-Latn-PE", - "ayc-PE": "ayc-Latn-PE", - "ayd": "ayd-Latn-AU", - "ayd-AU": "ayd-Latn-AU", - "ayd-Latn": "ayd-Latn-AU", - "aye": "aye-Latn-NG", - "aye-Latn": "aye-Latn-NG", - "aye-NG": "aye-Latn-NG", - "ayg": "ayg-Latn-TG", - "ayg-Latn": "ayg-Latn-TG", - "ayg-TG": "ayg-Latn-TG", - "ayh": "ayh-Arab-YE", - "ayh-Arab": "ayh-Arab-YE", - "ayh-YE": "ayh-Arab-YE", - "ayi": "ayi-Latn-NG", - "ayi-Latn": "ayi-Latn-NG", - "ayi-NG": "ayi-Latn-NG", - "ayk": "ayk-Latn-NG", - "ayk-Latn": "ayk-Latn-NG", - "ayk-NG": "ayk-Latn-NG", - "ayl": "ayl-Arab-LY", - "ayl-Arab": "ayl-Arab-LY", - "ayl-LY": "ayl-Arab-LY", - "ayn": "ayn-Arab-YE", - "ayn-Arab": "ayn-Arab-YE", - "ayn-YE": "ayn-Arab-YE", - "ayo": "ayo-Latn-PY", - "ayo-Latn": "ayo-Latn-PY", - "ayo-PY": "ayo-Latn-PY", - "ayp": "ayp-Arab-IQ", - "ayp-Arab": "ayp-Arab-IQ", - "ayp-IQ": "ayp-Arab-IQ", - "ayq": "ayq-Latn-PG", - "ayq-Latn": "ayq-Latn-PG", - "ayq-PG": "ayq-Latn-PG", - "ays": "ays-Latn-PH", - "ays-Latn": "ays-Latn-PH", - "ays-PH": "ays-Latn-PH", - "ayt": "ayt-Latn-PH", - "ayt-Latn": "ayt-Latn-PH", - "ayt-PH": "ayt-Latn-PH", - "ayu": "ayu-Latn-NG", - "ayu-Latn": "ayu-Latn-NG", - "ayu-NG": "ayu-Latn-NG", - "ayz": "ayz-Latn-ID", - "ayz-ID": "ayz-Latn-ID", - "ayz-Latn": "ayz-Latn-ID", - "az": "az-Latn-AZ", - "az-AZ": "az-Latn-AZ", - "az-Arab": "az-Arab-IR", - "az-Cyrl-AZ": "az-Cyrl-AZ", - "az-IQ": "az-Arab-IQ", - "az-IR": "az-Arab-IR", - "az-Latn": "az-Latn-AZ", - "az-RU": "az-Cyrl-RU", - "azb": "azb-Arab-IR", - "azb-Arab": "azb-Arab-IR", - "azb-IR": "azb-Arab-IR", - "azd": "azd-Latn-MX", - "azd-Latn": "azd-Latn-MX", - "azd-MX": "azd-Latn-MX", - "azg": "azg-Latn-MX", - "azg-Latn": "azg-Latn-MX", - "azg-MX": "azg-Latn-MX", - "azm": "azm-Latn-MX", - "azm-Latn": "azm-Latn-MX", - "azm-MX": "azm-Latn-MX", - "azn": "azn-Latn-MX", - "azn-Latn": "azn-Latn-MX", - "azn-MX": "azn-Latn-MX", - "azo": "azo-Latn-CM", - "azo-CM": "azo-Latn-CM", - "azo-Latn": "azo-Latn-CM", - "azt": "azt-Latn-PH", - "azt-Latn": "azt-Latn-PH", - "azt-PH": "azt-Latn-PH", - "azz": "azz-Latn-MX", - "azz-Latn": "azz-Latn-MX", - "azz-MX": "azz-Latn-MX", - "ba": "ba-Cyrl-RU", - "ba-Cyrl": "ba-Cyrl-RU", - "ba-RU": "ba-Cyrl-RU", - "baa": "baa-Latn-SB", - "baa-Latn": "baa-Latn-SB", - "baa-SB": "baa-Latn-SB", - "bab": "bab-Latn-GW", - "bab-GW": "bab-Latn-GW", - "bab-Latn": "bab-Latn-GW", - "bac": "bac-Latn-ID", - "bac-ID": "bac-Latn-ID", - "bac-Latn": "bac-Latn-ID", - "bae": "bae-Latn-VE", - "bae-Latn": "bae-Latn-VE", - "bae-VE": "bae-Latn-VE", - "baf": "baf-Latn-CM", - "baf-CM": "baf-Latn-CM", - "baf-Latn": "baf-Latn-CM", - "bag": "bag-Latn-CM", - "bag-CM": "bag-Latn-CM", - "bag-Latn": "bag-Latn-CM", - "bah": "bah-Latn-BS", - "bah-BS": "bah-Latn-BS", - "bah-Latn": "bah-Latn-BS", - "baj": "baj-Latn-ID", - "baj-ID": "baj-Latn-ID", - "baj-Latn": "baj-Latn-ID", - "bal": "bal-Arab-PK", - "bal-Arab": "bal-Arab-PK", - "bal-PK": "bal-Arab-PK", - "ban": "ban-Latn-ID", - "ban-Bali": "ban-Bali-ID", - "ban-ID": "ban-Latn-ID", - "ban-Latn": "ban-Latn-ID", - "bao": "bao-Latn-CO", - "bao-CO": "bao-Latn-CO", - "bao-Latn": "bao-Latn-CO", - "bap": "bap-Deva-NP", - "bap-Deva": "bap-Deva-NP", - "bap-Krai": "bap-Krai-IN", - "bap-NP": "bap-Deva-NP", - "bar": "bar-Latn-AT", - "bar-AT": "bar-Latn-AT", - "bar-Latn": "bar-Latn-AT", - "bas": "bas-Latn-CM", - "bas-CM": "bas-Latn-CM", - "bas-Latn": "bas-Latn-CM", - "bau": "bau-Latn-NG", - "bau-Latn": "bau-Latn-NG", - "bau-NG": "bau-Latn-NG", - "bav": "bav-Latn-CM", - "bav-CM": "bav-Latn-CM", - "bav-Latn": "bav-Latn-CM", - "baw": "baw-Latn-CM", - "baw-CM": "baw-Latn-CM", - "baw-Latn": "baw-Latn-CM", - "bax": "bax-Bamu-CM", - "bax-Bamu": "bax-Bamu-CM", - "bax-CM": "bax-Bamu-CM", - "bay": "bay-Latn-ID", - "bay-ID": "bay-Latn-ID", - "bay-Latn": "bay-Latn-ID", - "bba": "bba-Latn-BJ", - "bba-BJ": "bba-Latn-BJ", - "bba-Latn": "bba-Latn-BJ", - "bbb": "bbb-Latn-PG", - "bbb-Latn": "bbb-Latn-PG", - "bbb-PG": "bbb-Latn-PG", - "bbc": "bbc-Latn-ID", - "bbc-Batk": "bbc-Batk-ID", - "bbc-ID": "bbc-Latn-ID", - "bbc-Latn": "bbc-Latn-ID", - "bbd": "bbd-Latn-PG", - "bbd-Latn": "bbd-Latn-PG", - "bbd-PG": "bbd-Latn-PG", - "bbe": "bbe-Latn-CD", - "bbe-CD": "bbe-Latn-CD", - "bbe-Latn": "bbe-Latn-CD", - "bbf": "bbf-Latn-PG", - "bbf-Latn": "bbf-Latn-PG", - "bbf-PG": "bbf-Latn-PG", - "bbg": "bbg-Latn-GA", - "bbg-GA": "bbg-Latn-GA", - "bbg-Latn": "bbg-Latn-GA", - "bbi": "bbi-Latn-CM", - "bbi-CM": "bbi-Latn-CM", - "bbi-Latn": "bbi-Latn-CM", - "bbj": "bbj-Latn-CM", - "bbj-CM": "bbj-Latn-CM", - "bbj-Latn": "bbj-Latn-CM", - "bbk": "bbk-Latn-CM", - "bbk-CM": "bbk-Latn-CM", - "bbk-Latn": "bbk-Latn-CM", - "bbl": "bbl-Geor-GE", - "bbl-GE": "bbl-Geor-GE", - "bbl-Geor": "bbl-Geor-GE", - "bbm": "bbm-Latn-CD", - "bbm-CD": "bbm-Latn-CD", - "bbm-Latn": "bbm-Latn-CD", - "bbn": "bbn-Latn-PG", - "bbn-Latn": "bbn-Latn-PG", - "bbn-PG": "bbn-Latn-PG", - "bbo": "bbo-Latn-BF", - "bbo-BF": "bbo-Latn-BF", - "bbo-Latn": "bbo-Latn-BF", - "bbp": "bbp-Latn-CF", - "bbp-CF": "bbp-Latn-CF", - "bbp-Latn": "bbp-Latn-CF", - "bbq": "bbq-Latn-CM", - "bbq-CM": "bbq-Latn-CM", - "bbq-Latn": "bbq-Latn-CM", - "bbr": "bbr-Latn-PG", - "bbr-Latn": "bbr-Latn-PG", - "bbr-PG": "bbr-Latn-PG", - "bbs": "bbs-Latn-NG", - "bbs-Latn": "bbs-Latn-NG", - "bbs-NG": "bbs-Latn-NG", - "bbt": "bbt-Latn-NG", - "bbt-Latn": "bbt-Latn-NG", - "bbt-NG": "bbt-Latn-NG", - "bbu": "bbu-Latn-NG", - "bbu-Latn": "bbu-Latn-NG", - "bbu-NG": "bbu-Latn-NG", - "bbv": "bbv-Latn-PG", - "bbv-Latn": "bbv-Latn-PG", - "bbv-PG": "bbv-Latn-PG", - "bbw": "bbw-Latn-CM", - "bbw-CM": "bbw-Latn-CM", - "bbw-Latn": "bbw-Latn-CM", - "bbx": "bbx-Latn-CM", - "bbx-CM": "bbx-Latn-CM", - "bbx-Latn": "bbx-Latn-CM", - "bby": "bby-Latn-CM", - "bby-CM": "bby-Latn-CM", - "bby-Latn": "bby-Latn-CM", - "bca": "bca-Latn-CN", - "bca-CN": "bca-Latn-CN", - "bca-Latn": "bca-Latn-CN", - "bcb": "bcb-Latn-SN", - "bcb-Latn": "bcb-Latn-SN", - "bcb-SN": "bcb-Latn-SN", - "bcd": "bcd-Latn-ID", - "bcd-ID": "bcd-Latn-ID", - "bcd-Latn": "bcd-Latn-ID", - "bce": "bce-Latn-CM", - "bce-CM": "bce-Latn-CM", - "bce-Latn": "bce-Latn-CM", - "bcf": "bcf-Latn-PG", - "bcf-Latn": "bcf-Latn-PG", - "bcf-PG": "bcf-Latn-PG", - "bcg": "bcg-Latn-GN", - "bcg-GN": "bcg-Latn-GN", - "bcg-Latn": "bcg-Latn-GN", - "bch": "bch-Latn-PG", - "bch-Latn": "bch-Latn-PG", - "bch-PG": "bch-Latn-PG", - "bci": "bci-Latn-CI", - "bci-CI": "bci-Latn-CI", - "bci-Latn": "bci-Latn-CI", - "bcj": "bcj-Latn-AU", - "bcj-AU": "bcj-Latn-AU", - "bcj-Latn": "bcj-Latn-AU", - "bck": "bck-Latn-AU", - "bck-AU": "bck-Latn-AU", - "bck-Latn": "bck-Latn-AU", - "bcm": "bcm-Latn-PG", - "bcm-Latn": "bcm-Latn-PG", - "bcm-PG": "bcm-Latn-PG", - "bcn": "bcn-Latn-NG", - "bcn-Latn": "bcn-Latn-NG", - "bcn-NG": "bcn-Latn-NG", - "bco": "bco-Latn-PG", - "bco-Latn": "bco-Latn-PG", - "bco-PG": "bco-Latn-PG", - "bcp": "bcp-Latn-CD", - "bcp-CD": "bcp-Latn-CD", - "bcp-Latn": "bcp-Latn-CD", - "bcq": "bcq-Ethi-ET", - "bcq-ET": "bcq-Ethi-ET", - "bcq-Ethi": "bcq-Ethi-ET", - "bcr": "bcr-Latn-CA", - "bcr-CA": "bcr-Latn-CA", - "bcr-Latn": "bcr-Latn-CA", - "bcs": "bcs-Latn-NG", - "bcs-Latn": "bcs-Latn-NG", - "bcs-NG": "bcs-Latn-NG", - "bct": "bct-Latn-CD", - "bct-CD": "bct-Latn-CD", - "bct-Latn": "bct-Latn-CD", - "bcu": "bcu-Latn-PG", - "bcu-Latn": "bcu-Latn-PG", - "bcu-PG": "bcu-Latn-PG", - "bcv": "bcv-Latn-NG", - "bcv-Latn": "bcv-Latn-NG", - "bcv-NG": "bcv-Latn-NG", - "bcw": "bcw-Latn-CM", - "bcw-CM": "bcw-Latn-CM", - "bcw-Latn": "bcw-Latn-CM", - "bcy": "bcy-Latn-NG", - "bcy-Latn": "bcy-Latn-NG", - "bcy-NG": "bcy-Latn-NG", - "bcz": "bcz-Latn-SN", - "bcz-Latn": "bcz-Latn-SN", - "bcz-SN": "bcz-Latn-SN", - "bda": "bda-Latn-SN", - "bda-Latn": "bda-Latn-SN", - "bda-SN": "bda-Latn-SN", - "bdb": "bdb-Latn-ID", - "bdb-ID": "bdb-Latn-ID", - "bdb-Latn": "bdb-Latn-ID", - "bdc": "bdc-Latn-CO", - "bdc-CO": "bdc-Latn-CO", - "bdc-Latn": "bdc-Latn-CO", - "bdd": "bdd-Latn-PG", - "bdd-Latn": "bdd-Latn-PG", - "bdd-PG": "bdd-Latn-PG", - "bde": "bde-Latn-NG", - "bde-Latn": "bde-Latn-NG", - "bde-NG": "bde-Latn-NG", - "bdf": "bdf-Latn-PG", - "bdf-Latn": "bdf-Latn-PG", - "bdf-PG": "bdf-Latn-PG", - "bdg": "bdg-Latn-MY", - "bdg-Latn": "bdg-Latn-MY", - "bdg-MY": "bdg-Latn-MY", - "bdh": "bdh-Latn-SS", - "bdh-Latn": "bdh-Latn-SS", - "bdh-SS": "bdh-Latn-SS", - "bdi": "bdi-Latn-SD", - "bdi-Latn": "bdi-Latn-SD", - "bdi-SD": "bdi-Latn-SD", - "bdj": "bdj-Latn-SS", - "bdj-Latn": "bdj-Latn-SS", - "bdj-SS": "bdj-Latn-SS", - "bdk": "bdk-Latn-AZ", - "bdk-AZ": "bdk-Latn-AZ", - "bdk-Latn": "bdk-Latn-AZ", - "bdl": "bdl-Latn-ID", - "bdl-ID": "bdl-Latn-ID", - "bdl-Latn": "bdl-Latn-ID", - "bdm": "bdm-Latn-TD", - "bdm-Latn": "bdm-Latn-TD", - "bdm-TD": "bdm-Latn-TD", - "bdn": "bdn-Latn-CM", - "bdn-CM": "bdn-Latn-CM", - "bdn-Latn": "bdn-Latn-CM", - "bdo": "bdo-Latn-TD", - "bdo-Latn": "bdo-Latn-TD", - "bdo-TD": "bdo-Latn-TD", - "bdp": "bdp-Latn-TZ", - "bdp-Latn": "bdp-Latn-TZ", - "bdp-TZ": "bdp-Latn-TZ", - "bdq": "bdq-Latn-VN", - "bdq-Latn": "bdq-Latn-VN", - "bdq-VN": "bdq-Latn-VN", - "bdr": "bdr-Latn-MY", - "bdr-Latn": "bdr-Latn-MY", - "bdr-MY": "bdr-Latn-MY", - "bds": "bds-Latn-TZ", - "bds-Latn": "bds-Latn-TZ", - "bds-TZ": "bds-Latn-TZ", - "bdt": "bdt-Latn-CF", - "bdt-CF": "bdt-Latn-CF", - "bdt-Latn": "bdt-Latn-CF", - "bdu": "bdu-Latn-CM", - "bdu-CM": "bdu-Latn-CM", - "bdu-Latn": "bdu-Latn-CM", - "bdv": "bdv-Orya-IN", - "bdv-IN": "bdv-Orya-IN", - "bdv-Orya": "bdv-Orya-IN", - "bdw": "bdw-Latn-ID", - "bdw-ID": "bdw-Latn-ID", - "bdw-Latn": "bdw-Latn-ID", - "bdx": "bdx-Latn-ID", - "bdx-ID": "bdx-Latn-ID", - "bdx-Latn": "bdx-Latn-ID", - "bdy": "bdy-Latn-AU", - "bdy-AU": "bdy-Latn-AU", - "bdy-Latn": "bdy-Latn-AU", - "bdz": "bdz-Arab-PK", - "bdz-Arab": "bdz-Arab-PK", - "bdz-PK": "bdz-Arab-PK", - "be": "be-Cyrl-BY", - "be-BY": "be-Cyrl-BY", - "be-Cyrl": "be-Cyrl-BY", - "be-Cyrl-BY": "be-Cyrl-BY", - "bea": "bea-Latn-CA", - "bea-CA": "bea-Latn-CA", - "bea-Latn": "bea-Latn-CA", - "beb": "beb-Latn-CM", - "beb-CM": "beb-Latn-CM", - "beb-Latn": "beb-Latn-CM", - "bec": "bec-Latn-CM", - "bec-CM": "bec-Latn-CM", - "bec-Latn": "bec-Latn-CM", - "bed": "bed-Latn-ID", - "bed-ID": "bed-Latn-ID", - "bed-Latn": "bed-Latn-ID", - "bee": "bee-Deva-IN", - "bee-Deva": "bee-Deva-IN", - "bee-IN": "bee-Deva-IN", - "bef": "bef-Latn-PG", - "bef-Latn": "bef-Latn-PG", - "bef-PG": "bef-Latn-PG", - "beh": "beh-Latn-BJ", - "beh-BJ": "beh-Latn-BJ", - "beh-Latn": "beh-Latn-BJ", - "bei": "bei-Latn-ID", - "bei-ID": "bei-Latn-ID", - "bei-Latn": "bei-Latn-ID", - "bej": "bej-Arab-SD", - "bej-Arab": "bej-Arab-SD", - "bej-SD": "bej-Arab-SD", - "bek": "bek-Latn-PG", - "bek-Latn": "bek-Latn-PG", - "bek-PG": "bek-Latn-PG", - "bem": "bem-Latn-ZM", - "bem-Latn": "bem-Latn-ZM", - "bem-ZM": "bem-Latn-ZM", - "beo": "beo-Latn-PG", - "beo-Latn": "beo-Latn-PG", - "beo-PG": "beo-Latn-PG", - "bep": "bep-Latn-ID", - "bep-ID": "bep-Latn-ID", - "bep-Latn": "bep-Latn-ID", - "beq": "beq-Latn-CG", - "beq-CG": "beq-Latn-CG", - "beq-Latn": "beq-Latn-CG", - "bes": "bes-Latn-TD", - "bes-Latn": "bes-Latn-TD", - "bes-TD": "bes-Latn-TD", - "bet": "bet-Latn-CI", - "bet-CI": "bet-Latn-CI", - "bet-Latn": "bet-Latn-CI", - "beu": "beu-Latn-ID", - "beu-ID": "beu-Latn-ID", - "beu-Latn": "beu-Latn-ID", - "bev": "bev-Latn-CI", - "bev-CI": "bev-Latn-CI", - "bev-Latn": "bev-Latn-CI", - "bew": "bew-Latn-ID", - "bew-ID": "bew-Latn-ID", - "bew-Latn": "bew-Latn-ID", - "bex": "bex-Latn-SS", - "bex-Latn": "bex-Latn-SS", - "bex-SS": "bex-Latn-SS", - "bey": "bey-Latn-PG", - "bey-Latn": "bey-Latn-PG", - "bey-PG": "bey-Latn-PG", - "bez": "bez-Latn-TZ", - "bez-Latn": "bez-Latn-TZ", - "bez-TZ": "bez-Latn-TZ", - "bfa": "bfa-Latn-SS", - "bfa-Latn": "bfa-Latn-SS", - "bfa-SS": "bfa-Latn-SS", - "bfb": "bfb-Deva-IN", - "bfb-Deva": "bfb-Deva-IN", - "bfb-IN": "bfb-Deva-IN", - "bfc": "bfc-Latn-CN", - "bfc-CN": "bfc-Latn-CN", - "bfc-Latn": "bfc-Latn-CN", - "bfd": "bfd-Latn-CM", - "bfd-CM": "bfd-Latn-CM", - "bfd-Latn": "bfd-Latn-CM", - "bfe": "bfe-Latn-ID", - "bfe-ID": "bfe-Latn-ID", - "bfe-Latn": "bfe-Latn-ID", - "bff": "bff-Latn-CF", - "bff-CF": "bff-Latn-CF", - "bff-Latn": "bff-Latn-CF", - "bfg": "bfg-Latn-ID", - "bfg-ID": "bfg-Latn-ID", - "bfg-Latn": "bfg-Latn-ID", - "bfh": "bfh-Latn-PG", - "bfh-Latn": "bfh-Latn-PG", - "bfh-PG": "bfh-Latn-PG", - "bfj": "bfj-Latn-CM", - "bfj-CM": "bfj-Latn-CM", - "bfj-Latn": "bfj-Latn-CM", - "bfl": "bfl-Latn-CF", - "bfl-CF": "bfl-Latn-CF", - "bfl-Latn": "bfl-Latn-CF", - "bfm": "bfm-Latn-CM", - "bfm-CM": "bfm-Latn-CM", - "bfm-Latn": "bfm-Latn-CM", - "bfn": "bfn-Latn-TL", - "bfn-Latn": "bfn-Latn-TL", - "bfn-TL": "bfn-Latn-TL", - "bfo": "bfo-Latn-BF", - "bfo-BF": "bfo-Latn-BF", - "bfo-Latn": "bfo-Latn-BF", - "bfp": "bfp-Latn-CM", - "bfp-CM": "bfp-Latn-CM", - "bfp-Latn": "bfp-Latn-CM", - "bfq": "bfq-Taml-IN", - "bfq-IN": "bfq-Taml-IN", - "bfq-Taml": "bfq-Taml-IN", - "bfs": "bfs-Latn-CN", - "bfs-CN": "bfs-Latn-CN", - "bfs-Latn": "bfs-Latn-CN", - "bft": "bft-Arab-PK", - "bft-Arab": "bft-Arab-PK", - "bft-PK": "bft-Arab-PK", - "bfu": "bfu-Tibt-IN", - "bfu-IN": "bfu-Tibt-IN", - "bfu-Tibt": "bfu-Tibt-IN", - "bfw": "bfw-Orya-IN", - "bfw-IN": "bfw-Orya-IN", - "bfw-Orya": "bfw-Orya-IN", - "bfx": "bfx-Latn-PH", - "bfx-Latn": "bfx-Latn-PH", - "bfx-PH": "bfx-Latn-PH", - "bfy": "bfy-Deva-IN", - "bfy-Deva": "bfy-Deva-IN", - "bfy-IN": "bfy-Deva-IN", - "bfz": "bfz-Deva-IN", - "bfz-Deva": "bfz-Deva-IN", - "bfz-IN": "bfz-Deva-IN", - "bg": "bg-Cyrl-BG", - "bg-BG": "bg-Cyrl-BG", - "bg-Cyrl": "bg-Cyrl-BG", - "bg-Cyrl-BG": "bg-Cyrl-BG", - "bg-Cyrl-RO": "bg-Cyrl-RO", - "bga": "bga-Latn-NG", - "bga-Latn": "bga-Latn-NG", - "bga-NG": "bga-Latn-NG", - "bgb": "bgb-Latn-ID", - "bgb-ID": "bgb-Latn-ID", - "bgb-Latn": "bgb-Latn-ID", - "bgc": "bgc-Deva-IN", - "bgc-Deva": "bgc-Deva-IN", - "bgc-IN": "bgc-Deva-IN", - "bgd": "bgd-Deva-IN", - "bgd-Deva": "bgd-Deva-IN", - "bgd-IN": "bgd-Deva-IN", - "bgf": "bgf-Latn-CM", - "bgf-CM": "bgf-Latn-CM", - "bgf-Latn": "bgf-Latn-CM", - "bgg": "bgg-Latn-IN", - "bgg-IN": "bgg-Latn-IN", - "bgg-Latn": "bgg-Latn-IN", - "bgi": "bgi-Latn-PH", - "bgi-Latn": "bgi-Latn-PH", - "bgi-PH": "bgi-Latn-PH", - "bgj": "bgj-Latn-CM", - "bgj-CM": "bgj-Latn-CM", - "bgj-Latn": "bgj-Latn-CM", - "bgn": "bgn-Arab-PK", - "bgn-Arab": "bgn-Arab-PK", - "bgn-PK": "bgn-Arab-PK", - "bgo": "bgo-Latn-GN", - "bgo-GN": "bgo-Latn-GN", - "bgo-Latn": "bgo-Latn-GN", - "bgp": "bgp-Arab-PK", - "bgp-Arab": "bgp-Arab-PK", - "bgp-PK": "bgp-Arab-PK", - "bgq": "bgq-Deva-IN", - "bgq-Deva": "bgq-Deva-IN", - "bgq-IN": "bgq-Deva-IN", - "bgr": "bgr-Latn-IN", - "bgr-IN": "bgr-Latn-IN", - "bgr-Latn": "bgr-Latn-IN", - "bgs": "bgs-Latn-PH", - "bgs-Latn": "bgs-Latn-PH", - "bgs-PH": "bgs-Latn-PH", - "bgt": "bgt-Latn-SB", - "bgt-Latn": "bgt-Latn-SB", - "bgt-SB": "bgt-Latn-SB", - "bgu": "bgu-Latn-NG", - "bgu-Latn": "bgu-Latn-NG", - "bgu-NG": "bgu-Latn-NG", - "bgv": "bgv-Latn-ID", - "bgv-ID": "bgv-Latn-ID", - "bgv-Latn": "bgv-Latn-ID", - "bgw": "bgw-Deva-IN", - "bgw-Deva": "bgw-Deva-IN", - "bgw-IN": "bgw-Deva-IN", - "bgx": "bgx-Grek-TR", - "bgx-Grek": "bgx-Grek-TR", - "bgx-Grek-TR": "bgx-Grek-TR", - "bgx-TR": "bgx-Grek-TR", - "bgy": "bgy-Latn-ID", - "bgy-ID": "bgy-Latn-ID", - "bgy-Latn": "bgy-Latn-ID", - "bgz": "bgz-Latn-ID", - "bgz-ID": "bgz-Latn-ID", - "bgz-Latn": "bgz-Latn-ID", - "bh": "bh-Khmr-MV", - "bh-Khmr": "bh-Khmr-MV", - "bh-MV": "bh-Khmr-MV", - "bha": "bha-Deva-IN", - "bha-Deva": "bha-Deva-IN", - "bha-IN": "bha-Deva-IN", - "bhb": "bhb-Deva-IN", - "bhb-Deva": "bhb-Deva-IN", - "bhb-IN": "bhb-Deva-IN", - "bhc": "bhc-Latn-ID", - "bhc-ID": "bhc-Latn-ID", - "bhc-Latn": "bhc-Latn-ID", - "bhd": "bhd-Deva-IN", - "bhd-Deva": "bhd-Deva-IN", - "bhd-IN": "bhd-Deva-IN", - "bhe": "bhe-Arab-PK", - "bhe-Arab": "bhe-Arab-PK", - "bhe-PK": "bhe-Arab-PK", - "bhf": "bhf-Latn-PG", - "bhf-Latn": "bhf-Latn-PG", - "bhf-PG": "bhf-Latn-PG", - "bhg": "bhg-Latn-PG", - "bhg-Latn": "bhg-Latn-PG", - "bhg-PG": "bhg-Latn-PG", - "bhh": "bhh-Cyrl-IL", - "bhh-Cyrl": "bhh-Cyrl-IL", - "bhh-IL": "bhh-Cyrl-IL", - "bhi": "bhi-Deva-IN", - "bhi-Deva": "bhi-Deva-IN", - "bhi-IN": "bhi-Deva-IN", - "bhj": "bhj-Deva-NP", - "bhj-Deva": "bhj-Deva-NP", - "bhj-NP": "bhj-Deva-NP", - "bhl": "bhl-Latn-PG", - "bhl-Latn": "bhl-Latn-PG", - "bhl-PG": "bhl-Latn-PG", - "bhm": "bhm-Arab-OM", - "bhm-Arab": "bhm-Arab-OM", - "bhm-OM": "bhm-Arab-OM", - "bhn": "bhn-Syrc-GE", - "bhn-GE": "bhn-Syrc-GE", - "bhn-Syrc": "bhn-Syrc-GE", - "bho": "bho-Deva-IN", - "bho-Deva": "bho-Deva-IN", - "bho-Deva-MU": "bho-Deva-MU", - "bho-IN": "bho-Deva-IN", - "bho-Kthi": "bho-Kthi-IN", - "bhp": "bhp-Latn-ID", - "bhp-ID": "bhp-Latn-ID", - "bhp-Latn": "bhp-Latn-ID", - "bhq": "bhq-Latn-ID", - "bhq-ID": "bhq-Latn-ID", - "bhq-Latn": "bhq-Latn-ID", - "bhr": "bhr-Latn-MG", - "bhr-Latn": "bhr-Latn-MG", - "bhr-MG": "bhr-Latn-MG", - "bhs": "bhs-Latn-CM", - "bhs-CM": "bhs-Latn-CM", - "bhs-Latn": "bhs-Latn-CM", - "bht": "bht-Deva-IN", - "bht-Deva": "bht-Deva-IN", - "bht-IN": "bht-Deva-IN", - "bhu": "bhu-Deva-IN", - "bhu-Deva": "bhu-Deva-IN", - "bhu-IN": "bhu-Deva-IN", - "bhv": "bhv-Latn-ID", - "bhv-ID": "bhv-Latn-ID", - "bhv-Latn": "bhv-Latn-ID", - "bhw": "bhw-Latn-ID", - "bhw-ID": "bhw-Latn-ID", - "bhw-Latn": "bhw-Latn-ID", - "bhy": "bhy-Latn-CD", - "bhy-CD": "bhy-Latn-CD", - "bhy-Latn": "bhy-Latn-CD", - "bhz": "bhz-Latn-ID", - "bhz-ID": "bhz-Latn-ID", - "bhz-Latn": "bhz-Latn-ID", - "bi": "bi-Latn-VU", - "bi-Latn": "bi-Latn-VU", - "bi-VU": "bi-Latn-VU", - "bia": "bia-Latn-AU", - "bia-AU": "bia-Latn-AU", - "bia-Latn": "bia-Latn-AU", - "bib": "bib-Latn-BF", - "bib-BF": "bib-Latn-BF", - "bib-Latn": "bib-Latn-BF", - "bid": "bid-Latn-TD", - "bid-Latn": "bid-Latn-TD", - "bid-TD": "bid-Latn-TD", - "bie": "bie-Latn-PG", - "bie-Latn": "bie-Latn-PG", - "bie-PG": "bie-Latn-PG", - "bif": "bif-Latn-GW", - "bif-GW": "bif-Latn-GW", - "bif-Latn": "bif-Latn-GW", - "big": "big-Latn-PG", - "big-Latn": "big-Latn-PG", - "big-PG": "big-Latn-PG", - "bik": "bik-Latn-PH", - "bik-Latn": "bik-Latn-PH", - "bik-PH": "bik-Latn-PH", - "bil": "bil-Latn-NG", - "bil-Latn": "bil-Latn-NG", - "bil-NG": "bil-Latn-NG", - "bim": "bim-Latn-GH", - "bim-GH": "bim-Latn-GH", - "bim-Latn": "bim-Latn-GH", - "bin": "bin-Latn-NG", - "bin-Latn": "bin-Latn-NG", - "bin-NG": "bin-Latn-NG", - "bio": "bio-Latn-PG", - "bio-Latn": "bio-Latn-PG", - "bio-PG": "bio-Latn-PG", - "bip": "bip-Latn-CD", - "bip-CD": "bip-Latn-CD", - "bip-Latn": "bip-Latn-CD", - "biq": "biq-Latn-PG", - "biq-Latn": "biq-Latn-PG", - "biq-PG": "biq-Latn-PG", - "bir": "bir-Latn-PG", - "bir-Latn": "bir-Latn-PG", - "bir-PG": "bir-Latn-PG", - "bit": "bit-Latn-PG", - "bit-Latn": "bit-Latn-PG", - "bit-PG": "bit-Latn-PG", - "biu": "biu-Latn-IN", - "biu-IN": "biu-Latn-IN", - "biu-Latn": "biu-Latn-IN", - "biv": "biv-Latn-GH", - "biv-GH": "biv-Latn-GH", - "biv-Latn": "biv-Latn-GH", - "biw": "biw-Latn-CM", - "biw-CM": "biw-Latn-CM", - "biw-Latn": "biw-Latn-CM", - "biy": "biy-Deva-IN", - "biy-Deva": "biy-Deva-IN", - "biy-IN": "biy-Deva-IN", - "biz": "biz-Latn-CD", - "biz-CD": "biz-Latn-CD", - "biz-Latn": "biz-Latn-CD", - "bja": "bja-Latn-CD", - "bja-CD": "bja-Latn-CD", - "bja-Latn": "bja-Latn-CD", - "bjb": "bjb-Latn-AU", - "bjb-AU": "bjb-Latn-AU", - "bjb-Latn": "bjb-Latn-AU", - "bjc": "bjc-Latn-PG", - "bjc-Latn": "bjc-Latn-PG", - "bjc-PG": "bjc-Latn-PG", - "bjf": "bjf-Syrc-IL", - "bjf-IL": "bjf-Syrc-IL", - "bjf-Syrc": "bjf-Syrc-IL", - "bjg": "bjg-Latn-GW", - "bjg-GW": "bjg-Latn-GW", - "bjg-Latn": "bjg-Latn-GW", - "bjh": "bjh-Latn-PG", - "bjh-Latn": "bjh-Latn-PG", - "bjh-PG": "bjh-Latn-PG", - "bji": "bji-Latn-ET", - "bji-ET": "bji-Latn-ET", - "bji-Latn": "bji-Latn-ET", - "bjj": "bjj-Deva-IN", - "bjj-Deva": "bjj-Deva-IN", - "bjj-IN": "bjj-Deva-IN", - "bjk": "bjk-Latn-PG", - "bjk-Latn": "bjk-Latn-PG", - "bjk-PG": "bjk-Latn-PG", - "bjl": "bjl-Latn-PG", - "bjl-Latn": "bjl-Latn-PG", - "bjl-PG": "bjl-Latn-PG", - "bjm": "bjm-Arab-IQ", - "bjm-Arab": "bjm-Arab-IQ", - "bjm-IQ": "bjm-Arab-IQ", - "bjn": "bjn-Latn-ID", - "bjn-ID": "bjn-Latn-ID", - "bjn-Latn": "bjn-Latn-ID", - "bjo": "bjo-Latn-CF", - "bjo-CF": "bjo-Latn-CF", - "bjo-Latn": "bjo-Latn-CF", - "bjp": "bjp-Latn-PG", - "bjp-Latn": "bjp-Latn-PG", - "bjp-PG": "bjp-Latn-PG", - "bjr": "bjr-Latn-PG", - "bjr-Latn": "bjr-Latn-PG", - "bjr-PG": "bjr-Latn-PG", - "bjs": "bjs-Latn-BB", - "bjs-BB": "bjs-Latn-BB", - "bjs-Latn": "bjs-Latn-BB", - "bjt": "bjt-Latn-SN", - "bjt-Latn": "bjt-Latn-SN", - "bjt-SN": "bjt-Latn-SN", - "bju": "bju-Latn-CM", - "bju-CM": "bju-Latn-CM", - "bju-Latn": "bju-Latn-CM", - "bjv": "bjv-Latn-TD", - "bjv-Latn": "bjv-Latn-TD", - "bjv-TD": "bjv-Latn-TD", - "bjw": "bjw-Latn-CI", - "bjw-CI": "bjw-Latn-CI", - "bjw-Latn": "bjw-Latn-CI", - "bjx": "bjx-Latn-PH", - "bjx-Latn": "bjx-Latn-PH", - "bjx-PH": "bjx-Latn-PH", - "bjy": "bjy-Latn-AU", - "bjy-AU": "bjy-Latn-AU", - "bjy-Latn": "bjy-Latn-AU", - "bjz": "bjz-Latn-PG", - "bjz-Latn": "bjz-Latn-PG", - "bjz-PG": "bjz-Latn-PG", - "bka": "bka-Latn-NG", - "bka-Latn": "bka-Latn-NG", - "bka-NG": "bka-Latn-NG", - "bkc": "bkc-Latn-CM", - "bkc-CM": "bkc-Latn-CM", - "bkc-Latn": "bkc-Latn-CM", - "bkd": "bkd-Latn-PH", - "bkd-Latn": "bkd-Latn-PH", - "bkd-PH": "bkd-Latn-PH", - "bkf": "bkf-Latn-CD", - "bkf-CD": "bkf-Latn-CD", - "bkf-Latn": "bkf-Latn-CD", - "bkg": "bkg-Latn-CF", - "bkg-CF": "bkg-Latn-CF", - "bkg-Latn": "bkg-Latn-CF", - "bkh": "bkh-Latn-CM", - "bkh-CM": "bkh-Latn-CM", - "bkh-Latn": "bkh-Latn-CM", - "bki": "bki-Latn-VU", - "bki-Latn": "bki-Latn-VU", - "bki-VU": "bki-Latn-VU", - "bkj": "bkj-Latn-CF", - "bkj-CF": "bkj-Latn-CF", - "bkj-Latn": "bkj-Latn-CF", - "bkk": "bkk-Tibt-IN", - "bkk-IN": "bkk-Tibt-IN", - "bkk-Tibt": "bkk-Tibt-IN", - "bkl": "bkl-Latn-ID", - "bkl-ID": "bkl-Latn-ID", - "bkl-Latn": "bkl-Latn-ID", - "bkm": "bkm-Latn-CM", - "bkm-CM": "bkm-Latn-CM", - "bkm-Latn": "bkm-Latn-CM", - "bkn": "bkn-Latn-ID", - "bkn-ID": "bkn-Latn-ID", - "bkn-Latn": "bkn-Latn-ID", - "bko": "bko-Latn-CM", - "bko-CM": "bko-Latn-CM", - "bko-Latn": "bko-Latn-CM", - "bkp": "bkp-Latn-CD", - "bkp-CD": "bkp-Latn-CD", - "bkp-Latn": "bkp-Latn-CD", - "bkq": "bkq-Latn-BR", - "bkq-BR": "bkq-Latn-BR", - "bkq-Latn": "bkq-Latn-BR", - "bkr": "bkr-Latn-ID", - "bkr-ID": "bkr-Latn-ID", - "bkr-Latn": "bkr-Latn-ID", - "bks": "bks-Latn-PH", - "bks-Latn": "bks-Latn-PH", - "bks-PH": "bks-Latn-PH", - "bkt": "bkt-Latn-CD", - "bkt-CD": "bkt-Latn-CD", - "bkt-Latn": "bkt-Latn-CD", - "bku": "bku-Latn-PH", - "bku-Buhd": "bku-Buhd-PH", - "bku-Latn": "bku-Latn-PH", - "bku-PH": "bku-Latn-PH", - "bkv": "bkv-Latn-NG", - "bkv-Latn": "bkv-Latn-NG", - "bkv-NG": "bkv-Latn-NG", - "bkw": "bkw-Latn-CG", - "bkw-CG": "bkw-Latn-CG", - "bkw-Latn": "bkw-Latn-CG", - "bkx": "bkx-Latn-TL", - "bkx-Latn": "bkx-Latn-TL", - "bkx-TL": "bkx-Latn-TL", - "bky": "bky-Latn-NG", - "bky-Latn": "bky-Latn-NG", - "bky-NG": "bky-Latn-NG", - "bkz": "bkz-Latn-ID", - "bkz-ID": "bkz-Latn-ID", - "bkz-Latn": "bkz-Latn-ID", - "bla": "bla-Latn-CA", - "bla-CA": "bla-Latn-CA", - "bla-Latn": "bla-Latn-CA", - "blb": "blb-Latn-SB", - "blb-Latn": "blb-Latn-SB", - "blb-SB": "blb-Latn-SB", - "blc": "blc-Latn-CA", - "blc-CA": "blc-Latn-CA", - "blc-Latn": "blc-Latn-CA", - "bld": "bld-Latn-ID", - "bld-ID": "bld-Latn-ID", - "bld-Latn": "bld-Latn-ID", - "ble": "ble-Latn-GW", - "ble-GW": "ble-Latn-GW", - "ble-Latn": "ble-Latn-GW", - "blf": "blf-Latn-ID", - "blf-ID": "blf-Latn-ID", - "blf-Latn": "blf-Latn-ID", - "blh": "blh-Latn-LR", - "blh-LR": "blh-Latn-LR", - "blh-Latn": "blh-Latn-LR", - "bli": "bli-Latn-CD", - "bli-CD": "bli-Latn-CD", - "bli-Latn": "bli-Latn-CD", - "blj": "blj-Latn-ID", - "blj-ID": "blj-Latn-ID", - "blj-Latn": "blj-Latn-ID", - "blk": "blk-Mymr-MM", - "blk-MM": "blk-Mymr-MM", - "blk-Mymr": "blk-Mymr-MM", - "blm": "blm-Latn-SS", - "blm-Latn": "blm-Latn-SS", - "blm-SS": "blm-Latn-SS", - "bln": "bln-Latn-PH", - "bln-Latn": "bln-Latn-PH", - "bln-PH": "bln-Latn-PH", - "blo": "blo-Latn-BJ", - "blo-BJ": "blo-Latn-BJ", - "blo-Latn": "blo-Latn-BJ", - "blp": "blp-Latn-SB", - "blp-Latn": "blp-Latn-SB", - "blp-SB": "blp-Latn-SB", - "blq": "blq-Latn-PG", - "blq-Latn": "blq-Latn-PG", - "blq-PG": "blq-Latn-PG", - "blr": "blr-Latn-CN", - "blr-CN": "blr-Latn-CN", - "blr-Latn": "blr-Latn-CN", - "bls": "bls-Latn-ID", - "bls-ID": "bls-Latn-ID", - "bls-Latn": "bls-Latn-ID", - "blt": "blt-Tavt-VN", - "blt-Tavt": "blt-Tavt-VN", - "blt-VN": "blt-Tavt-VN", - "blv": "blv-Latn-AO", - "blv-AO": "blv-Latn-AO", - "blv-Latn": "blv-Latn-AO", - "blw": "blw-Latn-PH", - "blw-Latn": "blw-Latn-PH", - "blw-PH": "blw-Latn-PH", - "blx": "blx-Latn-PH", - "blx-Latn": "blx-Latn-PH", - "blx-PH": "blx-Latn-PH", - "bly": "bly-Latn-BJ", - "bly-BJ": "bly-Latn-BJ", - "bly-Latn": "bly-Latn-BJ", - "blz": "blz-Latn-ID", - "blz-ID": "blz-Latn-ID", - "blz-Latn": "blz-Latn-ID", - "bm": "bm-Latn-ML", - "bm-Latn": "bm-Latn-ML", - "bm-ML": "bm-Latn-ML", - "bm-Nkoo-ML": "bm-Nkoo-ML", - "bma": "bma-Latn-NG", - "bma-Latn": "bma-Latn-NG", - "bma-NG": "bma-Latn-NG", - "bmb": "bmb-Latn-CD", - "bmb-CD": "bmb-Latn-CD", - "bmb-Latn": "bmb-Latn-CD", - "bmc": "bmc-Latn-PG", - "bmc-Latn": "bmc-Latn-PG", - "bmc-PG": "bmc-Latn-PG", - "bmd": "bmd-Latn-GN", - "bmd-GN": "bmd-Latn-GN", - "bmd-Latn": "bmd-Latn-GN", - "bme": "bme-Latn-CF", - "bme-CF": "bme-Latn-CF", - "bme-Latn": "bme-Latn-CF", - "bmf": "bmf-Latn-SL", - "bmf-Latn": "bmf-Latn-SL", - "bmf-SL": "bmf-Latn-SL", - "bmg": "bmg-Latn-CD", - "bmg-CD": "bmg-Latn-CD", - "bmg-Latn": "bmg-Latn-CD", - "bmh": "bmh-Latn-PG", - "bmh-Latn": "bmh-Latn-PG", - "bmh-PG": "bmh-Latn-PG", - "bmi": "bmi-Latn-TD", - "bmi-Latn": "bmi-Latn-TD", - "bmi-TD": "bmi-Latn-TD", - "bmj": "bmj-Deva-NP", - "bmj-Deva": "bmj-Deva-NP", - "bmj-NP": "bmj-Deva-NP", - "bmk": "bmk-Latn-PG", - "bmk-Latn": "bmk-Latn-PG", - "bmk-PG": "bmk-Latn-PG", - "bml": "bml-Latn-CD", - "bml-CD": "bml-Latn-CD", - "bml-Latn": "bml-Latn-CD", - "bmm": "bmm-Latn-MG", - "bmm-Latn": "bmm-Latn-MG", - "bmm-MG": "bmm-Latn-MG", - "bmn": "bmn-Latn-PG", - "bmn-Latn": "bmn-Latn-PG", - "bmn-PG": "bmn-Latn-PG", - "bmo": "bmo-Latn-CM", - "bmo-CM": "bmo-Latn-CM", - "bmo-Latn": "bmo-Latn-CM", - "bmp": "bmp-Latn-PG", - "bmp-Latn": "bmp-Latn-PG", - "bmp-PG": "bmp-Latn-PG", - "bmq": "bmq-Latn-ML", - "bmq-Latn": "bmq-Latn-ML", - "bmq-ML": "bmq-Latn-ML", - "bmr": "bmr-Latn-CO", - "bmr-CO": "bmr-Latn-CO", - "bmr-Latn": "bmr-Latn-CO", - "bms": "bms-Latn-NE", - "bms-Latn": "bms-Latn-NE", - "bms-NE": "bms-Latn-NE", - "bmu": "bmu-Latn-PG", - "bmu-Latn": "bmu-Latn-PG", - "bmu-PG": "bmu-Latn-PG", - "bmv": "bmv-Latn-CM", - "bmv-CM": "bmv-Latn-CM", - "bmv-Latn": "bmv-Latn-CM", - "bmw": "bmw-Latn-CG", - "bmw-CG": "bmw-Latn-CG", - "bmw-Latn": "bmw-Latn-CG", - "bmx": "bmx-Latn-PG", - "bmx-Latn": "bmx-Latn-PG", - "bmx-PG": "bmx-Latn-PG", - "bmz": "bmz-Latn-PG", - "bmz-Latn": "bmz-Latn-PG", - "bmz-PG": "bmz-Latn-PG", - "bn": "bn-Beng-BD", - "bn-BD": "bn-Beng-BD", - "bn-Beng": "bn-Beng-BD", - "bn-IN": "bn-Beng-IN", - "bn-XX": "bn-Beng-XX", - "bna": "bna-Latn-ID", - "bna-ID": "bna-Latn-ID", - "bna-Latn": "bna-Latn-ID", - "bnb": "bnb-Latn-MY", - "bnb-Latn": "bnb-Latn-MY", - "bnb-MY": "bnb-Latn-MY", - "bnc": "bnc-Latn-PH", - "bnc-Latn": "bnc-Latn-PH", - "bnc-PH": "bnc-Latn-PH", - "bnd": "bnd-Latn-ID", - "bnd-ID": "bnd-Latn-ID", - "bnd-Latn": "bnd-Latn-ID", - "bne": "bne-Latn-ID", - "bne-ID": "bne-Latn-ID", - "bne-Latn": "bne-Latn-ID", - "bnf": "bnf-Latn-ID", - "bnf-ID": "bnf-Latn-ID", - "bnf-Latn": "bnf-Latn-ID", - "bng": "bng-Latn-GQ", - "bng-GQ": "bng-Latn-GQ", - "bng-Latn": "bng-Latn-GQ", - "bni": "bni-Latn-CD", - "bni-CD": "bni-Latn-CD", - "bni-Latn": "bni-Latn-CD", - "bnj": "bnj-Latn-PH", - "bnj-Latn": "bnj-Latn-PH", - "bnj-PH": "bnj-Latn-PH", - "bnk": "bnk-Latn-VU", - "bnk-Latn": "bnk-Latn-VU", - "bnk-VU": "bnk-Latn-VU", - "bnm": "bnm-Latn-GQ", - "bnm-GQ": "bnm-Latn-GQ", - "bnm-Latn": "bnm-Latn-GQ", - "bnn": "bnn-Latn-TW", - "bnn-Latn": "bnn-Latn-TW", - "bnn-TW": "bnn-Latn-TW", - "bno": "bno-Latn-PH", - "bno-Latn": "bno-Latn-PH", - "bno-PH": "bno-Latn-PH", - "bnp": "bnp-Latn-PG", - "bnp-Latn": "bnp-Latn-PG", - "bnp-PG": "bnp-Latn-PG", - "bnq": "bnq-Latn-ID", - "bnq-ID": "bnq-Latn-ID", - "bnq-Latn": "bnq-Latn-ID", - "bnr": "bnr-Latn-VU", - "bnr-Latn": "bnr-Latn-VU", - "bnr-VU": "bnr-Latn-VU", - "bns": "bns-Deva-IN", - "bns-Deva": "bns-Deva-IN", - "bns-IN": "bns-Deva-IN", - "bnu": "bnu-Latn-ID", - "bnu-ID": "bnu-Latn-ID", - "bnu-Latn": "bnu-Latn-ID", - "bnv": "bnv-Latn-ID", - "bnv-ID": "bnv-Latn-ID", - "bnv-Latn": "bnv-Latn-ID", - "bnw": "bnw-Latn-PG", - "bnw-Latn": "bnw-Latn-PG", - "bnw-PG": "bnw-Latn-PG", - "bnx": "bnx-Latn-CD", - "bnx-CD": "bnx-Latn-CD", - "bnx-Latn": "bnx-Latn-CD", - "bny": "bny-Latn-MY", - "bny-Latn": "bny-Latn-MY", - "bny-MY": "bny-Latn-MY", - "bnz": "bnz-Latn-CM", - "bnz-CM": "bnz-Latn-CM", - "bnz-Latn": "bnz-Latn-CM", - "bo": "bo-Tibt-CN", - "bo-CN": "bo-Tibt-CN", - "bo-Marc": "bo-Marc-CN", - "bo-Tibt": "bo-Tibt-CN", - "boa": "boa-Latn-PE", - "boa-Latn": "boa-Latn-PE", - "boa-PE": "boa-Latn-PE", - "bob": "bob-Latn-KE", - "bob-KE": "bob-Latn-KE", - "bob-Latn": "bob-Latn-KE", - "boe": "boe-Latn-CM", - "boe-CM": "boe-Latn-CM", - "boe-Latn": "boe-Latn-CM", - "bof": "bof-Latn-BF", - "bof-BF": "bof-Latn-BF", - "bof-Latn": "bof-Latn-BF", - "boh": "boh-Latn-CD", - "boh-CD": "boh-Latn-CD", - "boh-Latn": "boh-Latn-CD", - "boj": "boj-Latn-PG", - "boj-Latn": "boj-Latn-PG", - "boj-PG": "boj-Latn-PG", - "bok": "bok-Latn-CG", - "bok-CG": "bok-Latn-CG", - "bok-Latn": "bok-Latn-CG", - "bol": "bol-Latn-NG", - "bol-Latn": "bol-Latn-NG", - "bol-NG": "bol-Latn-NG", - "bom": "bom-Latn-NG", - "bom-Latn": "bom-Latn-NG", - "bom-NG": "bom-Latn-NG", - "bon": "bon-Latn-PG", - "bon-Latn": "bon-Latn-PG", - "bon-PG": "bon-Latn-PG", - "boo": "boo-Latn-ML", - "boo-Latn": "boo-Latn-ML", - "boo-ML": "boo-Latn-ML", - "bop": "bop-Latn-PG", - "bop-Latn": "bop-Latn-PG", - "bop-PG": "bop-Latn-PG", - "boq": "boq-Latn-PG", - "boq-Latn": "boq-Latn-PG", - "boq-PG": "boq-Latn-PG", - "bor": "bor-Latn-BR", - "bor-BR": "bor-Latn-BR", - "bor-Latn": "bor-Latn-BR", - "bot": "bot-Latn-SS", - "bot-Latn": "bot-Latn-SS", - "bot-SS": "bot-Latn-SS", - "bou": "bou-Latn-TZ", - "bou-Latn": "bou-Latn-TZ", - "bou-TZ": "bou-Latn-TZ", - "bov": "bov-Latn-GH", - "bov-GH": "bov-Latn-GH", - "bov-Latn": "bov-Latn-GH", - "bow": "bow-Latn-PG", - "bow-Latn": "bow-Latn-PG", - "bow-PG": "bow-Latn-PG", - "box": "box-Latn-BF", - "box-BF": "box-Latn-BF", - "box-Latn": "box-Latn-BF", - "boy": "boy-Latn-CF", - "boy-CF": "boy-Latn-CF", - "boy-Latn": "boy-Latn-CF", - "boz": "boz-Latn-ML", - "boz-Latn": "boz-Latn-ML", - "boz-ML": "boz-Latn-ML", - "bpa": "bpa-Latn-VU", - "bpa-Latn": "bpa-Latn-VU", - "bpa-VU": "bpa-Latn-VU", - "bpc": "bpc-Latn-CM", - "bpc-CM": "bpc-Latn-CM", - "bpc-Latn": "bpc-Latn-CM", - "bpd": "bpd-Latn-CF", - "bpd-CF": "bpd-Latn-CF", - "bpd-Latn": "bpd-Latn-CF", - "bpe": "bpe-Latn-PG", - "bpe-Latn": "bpe-Latn-PG", - "bpe-PG": "bpe-Latn-PG", - "bpg": "bpg-Latn-ID", - "bpg-ID": "bpg-Latn-ID", - "bpg-Latn": "bpg-Latn-ID", - "bph": "bph-Cyrl-RU", - "bph-Cyrl": "bph-Cyrl-RU", - "bph-RU": "bph-Cyrl-RU", - "bpi": "bpi-Latn-PG", - "bpi-Latn": "bpi-Latn-PG", - "bpi-PG": "bpi-Latn-PG", - "bpj": "bpj-Latn-CD", - "bpj-CD": "bpj-Latn-CD", - "bpj-Latn": "bpj-Latn-CD", - "bpk": "bpk-Latn-NC", - "bpk-Latn": "bpk-Latn-NC", - "bpk-NC": "bpk-Latn-NC", - "bpl": "bpl-Latn-AU", - "bpl-AU": "bpl-Latn-AU", - "bpl-Latn": "bpl-Latn-AU", - "bpm": "bpm-Latn-PG", - "bpm-Latn": "bpm-Latn-PG", - "bpm-PG": "bpm-Latn-PG", - "bpo": "bpo-Latn-ID", - "bpo-ID": "bpo-Latn-ID", - "bpo-Latn": "bpo-Latn-ID", - "bpp": "bpp-Latn-ID", - "bpp-ID": "bpp-Latn-ID", - "bpp-Latn": "bpp-Latn-ID", - "bpq": "bpq-Latn-ID", - "bpq-ID": "bpq-Latn-ID", - "bpq-Latn": "bpq-Latn-ID", - "bpr": "bpr-Latn-PH", - "bpr-Latn": "bpr-Latn-PH", - "bpr-PH": "bpr-Latn-PH", - "bps": "bps-Latn-PH", - "bps-Latn": "bps-Latn-PH", - "bps-PH": "bps-Latn-PH", - "bpt": "bpt-Latn-AU", - "bpt-AU": "bpt-Latn-AU", - "bpt-Latn": "bpt-Latn-AU", - "bpu": "bpu-Latn-PG", - "bpu-Latn": "bpu-Latn-PG", - "bpu-PG": "bpu-Latn-PG", - "bpv": "bpv-Latn-ID", - "bpv-ID": "bpv-Latn-ID", - "bpv-Latn": "bpv-Latn-ID", - "bpw": "bpw-Latn-PG", - "bpw-Latn": "bpw-Latn-PG", - "bpw-PG": "bpw-Latn-PG", - "bpx": "bpx-Deva-IN", - "bpx-Deva": "bpx-Deva-IN", - "bpx-IN": "bpx-Deva-IN", - "bpy": "bpy-Beng-IN", - "bpy-Beng": "bpy-Beng-IN", - "bpy-IN": "bpy-Beng-IN", - "bpz": "bpz-Latn-ID", - "bpz-ID": "bpz-Latn-ID", - "bpz-Latn": "bpz-Latn-ID", - "bqa": "bqa-Latn-BJ", - "bqa-BJ": "bqa-Latn-BJ", - "bqa-Latn": "bqa-Latn-BJ", - "bqb": "bqb-Latn-ID", - "bqb-ID": "bqb-Latn-ID", - "bqb-Latn": "bqb-Latn-ID", - "bqc": "bqc-Latn-BJ", - "bqc-BJ": "bqc-Latn-BJ", - "bqc-Latn": "bqc-Latn-BJ", - "bqd": "bqd-Latn-CM", - "bqd-CM": "bqd-Latn-CM", - "bqd-Latn": "bqd-Latn-CM", - "bqf": "bqf-Latn-GN", - "bqf-GN": "bqf-Latn-GN", - "bqf-Latn": "bqf-Latn-GN", - "bqg": "bqg-Latn-TG", - "bqg-Latn": "bqg-Latn-TG", - "bqg-TG": "bqg-Latn-TG", - "bqi": "bqi-Arab-IR", - "bqi-Arab": "bqi-Arab-IR", - "bqi-IR": "bqi-Arab-IR", - "bqj": "bqj-Latn-SN", - "bqj-Latn": "bqj-Latn-SN", - "bqj-SN": "bqj-Latn-SN", - "bqk": "bqk-Latn-CF", - "bqk-CF": "bqk-Latn-CF", - "bqk-Latn": "bqk-Latn-CF", - "bql": "bql-Latn-PG", - "bql-Latn": "bql-Latn-PG", - "bql-PG": "bql-Latn-PG", - "bqm": "bqm-Latn-CM", - "bqm-CM": "bqm-Latn-CM", - "bqm-Latn": "bqm-Latn-CM", - "bqo": "bqo-Latn-CM", - "bqo-CM": "bqo-Latn-CM", - "bqo-Latn": "bqo-Latn-CM", - "bqp": "bqp-Latn-NG", - "bqp-Latn": "bqp-Latn-NG", - "bqp-NG": "bqp-Latn-NG", - "bqq": "bqq-Latn-ID", - "bqq-ID": "bqq-Latn-ID", - "bqq-Latn": "bqq-Latn-ID", - "bqr": "bqr-Latn-ID", - "bqr-ID": "bqr-Latn-ID", - "bqr-Latn": "bqr-Latn-ID", - "bqs": "bqs-Latn-PG", - "bqs-Latn": "bqs-Latn-PG", - "bqs-PG": "bqs-Latn-PG", - "bqt": "bqt-Latn-CM", - "bqt-CM": "bqt-Latn-CM", - "bqt-Latn": "bqt-Latn-CM", - "bqu": "bqu-Latn-CD", - "bqu-CD": "bqu-Latn-CD", - "bqu-Latn": "bqu-Latn-CD", - "bqv": "bqv-Latn-CI", - "bqv-CI": "bqv-Latn-CI", - "bqv-Latn": "bqv-Latn-CI", - "bqw": "bqw-Latn-NG", - "bqw-Latn": "bqw-Latn-NG", - "bqw-NG": "bqw-Latn-NG", - "bqx": "bqx-Latn-NG", - "bqx-Latn": "bqx-Latn-NG", - "bqx-NG": "bqx-Latn-NG", - "bqz": "bqz-Latn-CM", - "bqz-CM": "bqz-Latn-CM", - "bqz-Latn": "bqz-Latn-CM", - "br": "br-Latn-FR", - "br-FR": "br-Latn-FR", - "br-Latn": "br-Latn-FR", - "bra": "bra-Deva-IN", - "bra-Deva": "bra-Deva-IN", - "bra-IN": "bra-Deva-IN", - "brb": "brb-Khmr-KH", - "brb-KH": "brb-Khmr-KH", - "brb-Khmr": "brb-Khmr-KH", - "brc": "brc-Latn-GY", - "brc-GY": "brc-Latn-GY", - "brc-Latn": "brc-Latn-GY", - "brd": "brd-Deva-NP", - "brd-Deva": "brd-Deva-NP", - "brd-NP": "brd-Deva-NP", - "brf": "brf-Latn-CD", - "brf-CD": "brf-Latn-CD", - "brf-Latn": "brf-Latn-CD", - "brg": "brg-Latn-BO", - "brg-BO": "brg-Latn-BO", - "brg-Latn": "brg-Latn-BO", - "brh": "brh-Arab-PK", - "brh-Arab": "brh-Arab-PK", - "brh-PK": "brh-Arab-PK", - "bri": "bri-Latn-CM", - "bri-CM": "bri-Latn-CM", - "bri-Latn": "bri-Latn-CM", - "brj": "brj-Latn-VU", - "brj-Latn": "brj-Latn-VU", - "brj-VU": "brj-Latn-VU", - "brk": "brk-Arab-SD", - "brk-Arab": "brk-Arab-SD", - "brk-SD": "brk-Arab-SD", - "brl": "brl-Latn-BW", - "brl-BW": "brl-Latn-BW", - "brl-Latn": "brl-Latn-BW", - "brm": "brm-Latn-CD", - "brm-CD": "brm-Latn-CD", - "brm-Latn": "brm-Latn-CD", - "brn": "brn-Latn-CR", - "brn-CR": "brn-Latn-CR", - "brn-Latn": "brn-Latn-CR", - "bro": "bro-Tibt-BT", - "bro-BT": "bro-Tibt-BT", - "bro-Tibt": "bro-Tibt-BT", - "brp": "brp-Latn-ID", - "brp-ID": "brp-Latn-ID", - "brp-Latn": "brp-Latn-ID", - "brq": "brq-Latn-PG", - "brq-Latn": "brq-Latn-PG", - "brq-PG": "brq-Latn-PG", - "brr": "brr-Latn-SB", - "brr-Latn": "brr-Latn-SB", - "brr-SB": "brr-Latn-SB", - "brs": "brs-Latn-ID", - "brs-ID": "brs-Latn-ID", - "brs-Latn": "brs-Latn-ID", - "brt": "brt-Latn-NG", - "brt-Latn": "brt-Latn-NG", - "brt-NG": "brt-Latn-NG", - "bru": "bru-Latn-VN", - "bru-Latn": "bru-Latn-VN", - "bru-VN": "bru-Latn-VN", - "brv": "brv-Laoo-LA", - "brv-LA": "brv-Laoo-LA", - "brv-Laoo": "brv-Laoo-LA", - "brw": "brw-Knda-IN", - "brw-IN": "brw-Knda-IN", - "brw-Knda": "brw-Knda-IN", - "brx": "brx-Deva-IN", - "brx-Deva": "brx-Deva-IN", - "brx-IN": "brx-Deva-IN", - "bry": "bry-Latn-PG", - "bry-Latn": "bry-Latn-PG", - "bry-PG": "bry-Latn-PG", - "brz": "brz-Latn-PG", - "brz-Latn": "brz-Latn-PG", - "brz-PG": "brz-Latn-PG", - "bs": "bs-Latn-BA", - "bs-BA": "bs-Latn-BA", - "bs-Latn": "bs-Latn-BA", - "bsa": "bsa-Latn-ID", - "bsa-ID": "bsa-Latn-ID", - "bsa-Latn": "bsa-Latn-ID", - "bsb": "bsb-Latn-BN", - "bsb-BN": "bsb-Latn-BN", - "bsb-Latn": "bsb-Latn-BN", - "bsc": "bsc-Latn-SN", - "bsc-Latn": "bsc-Latn-SN", - "bsc-SN": "bsc-Latn-SN", - "bse": "bse-Latn-CM", - "bse-CM": "bse-Latn-CM", - "bse-Latn": "bse-Latn-CM", - "bsf": "bsf-Latn-NG", - "bsf-Latn": "bsf-Latn-NG", - "bsf-NG": "bsf-Latn-NG", - "bsh": "bsh-Arab-AF", - "bsh-AF": "bsh-Arab-AF", - "bsh-Arab": "bsh-Arab-AF", - "bsi": "bsi-Latn-CM", - "bsi-CM": "bsi-Latn-CM", - "bsi-Latn": "bsi-Latn-CM", - "bsj": "bsj-Latn-NG", - "bsj-Latn": "bsj-Latn-NG", - "bsj-NG": "bsj-Latn-NG", - "bsk": "bsk-Arab-PK", - "bsk-Arab": "bsk-Arab-PK", - "bsk-PK": "bsk-Arab-PK", - "bsl": "bsl-Latn-NG", - "bsl-Latn": "bsl-Latn-NG", - "bsl-NG": "bsl-Latn-NG", - "bsm": "bsm-Latn-ID", - "bsm-ID": "bsm-Latn-ID", - "bsm-Latn": "bsm-Latn-ID", - "bsn": "bsn-Latn-CO", - "bsn-CO": "bsn-Latn-CO", - "bsn-Latn": "bsn-Latn-CO", - "bso": "bso-Latn-TD", - "bso-Latn": "bso-Latn-TD", - "bso-TD": "bso-Latn-TD", - "bsp": "bsp-Latn-GN", - "bsp-GN": "bsp-Latn-GN", - "bsp-Latn": "bsp-Latn-GN", - "bsq": "bsq-Bass-LR", - "bsq-Bass": "bsq-Bass-LR", - "bsq-LR": "bsq-Bass-LR", - "bsr": "bsr-Latn-NG", - "bsr-Latn": "bsr-Latn-NG", - "bsr-NG": "bsr-Latn-NG", - "bss": "bss-Latn-CM", - "bss-CM": "bss-Latn-CM", - "bss-Latn": "bss-Latn-CM", - "bst": "bst-Ethi-ET", - "bst-ET": "bst-Ethi-ET", - "bst-Ethi": "bst-Ethi-ET", - "bsu": "bsu-Latn-ID", - "bsu-ID": "bsu-Latn-ID", - "bsu-Latn": "bsu-Latn-ID", - "bsv": "bsv-Latn-GN", - "bsv-GN": "bsv-Latn-GN", - "bsv-Latn": "bsv-Latn-GN", - "bsw": "bsw-Latn-ET", - "bsw-ET": "bsw-Latn-ET", - "bsw-Latn": "bsw-Latn-ET", - "bsx": "bsx-Latn-NG", - "bsx-Latn": "bsx-Latn-NG", - "bsx-NG": "bsx-Latn-NG", - "bsy": "bsy-Latn-MY", - "bsy-Latn": "bsy-Latn-MY", - "bsy-MY": "bsy-Latn-MY", - "bta": "bta-Latn-NG", - "bta-Latn": "bta-Latn-NG", - "bta-NG": "bta-Latn-NG", - "btc": "btc-Latn-CM", - "btc-CM": "btc-Latn-CM", - "btc-Latn": "btc-Latn-CM", - "btd": "btd-Batk-ID", - "btd-Batk": "btd-Batk-ID", - "btd-ID": "btd-Batk-ID", - "bte": "bte-Latn-NG", - "bte-Latn": "bte-Latn-NG", - "bte-NG": "bte-Latn-NG", - "btf": "btf-Latn-TD", - "btf-Latn": "btf-Latn-TD", - "btf-TD": "btf-Latn-TD", - "btg": "btg-Latn-CI", - "btg-CI": "btg-Latn-CI", - "btg-Latn": "btg-Latn-CI", - "bth": "bth-Latn-MY", - "bth-Latn": "bth-Latn-MY", - "bth-MY": "bth-Latn-MY", - "bti": "bti-Latn-ID", - "bti-ID": "bti-Latn-ID", - "bti-Latn": "bti-Latn-ID", - "btj": "btj-Latn-ID", - "btj-ID": "btj-Latn-ID", - "btj-Latn": "btj-Latn-ID", - "btm": "btm-Batk-ID", - "btm-Batk": "btm-Batk-ID", - "btm-ID": "btm-Batk-ID", - "btn": "btn-Latn-PH", - "btn-Latn": "btn-Latn-PH", - "btn-PH": "btn-Latn-PH", - "bto": "bto-Latn-PH", - "bto-Latn": "bto-Latn-PH", - "bto-PH": "bto-Latn-PH", - "btp": "btp-Latn-PG", - "btp-Latn": "btp-Latn-PG", - "btp-PG": "btp-Latn-PG", - "btq": "btq-Latn-MY", - "btq-Latn": "btq-Latn-MY", - "btq-MY": "btq-Latn-MY", - "btr": "btr-Latn-VU", - "btr-Latn": "btr-Latn-VU", - "btr-VU": "btr-Latn-VU", - "bts": "bts-Latn-ID", - "bts-ID": "bts-Latn-ID", - "bts-Latn": "bts-Latn-ID", - "btt": "btt-Latn-NG", - "btt-Latn": "btt-Latn-NG", - "btt-NG": "btt-Latn-NG", - "btu": "btu-Latn-NG", - "btu-Latn": "btu-Latn-NG", - "btu-NG": "btu-Latn-NG", - "btv": "btv-Deva-PK", - "btv-Deva": "btv-Deva-PK", - "btv-Deva-PK": "btv-Deva-PK", - "btv-PK": "btv-Deva-PK", - "btw": "btw-Latn-PH", - "btw-Latn": "btw-Latn-PH", - "btw-PH": "btw-Latn-PH", - "btx": "btx-Latn-ID", - "btx-ID": "btx-Latn-ID", - "btx-Latn": "btx-Latn-ID", - "bty": "bty-Latn-ID", - "bty-ID": "bty-Latn-ID", - "bty-Latn": "bty-Latn-ID", - "btz": "btz-Latn-ID", - "btz-ID": "btz-Latn-ID", - "btz-Latn": "btz-Latn-ID", - "bua": "bua-Cyrl-RU", - "bua-Cyrl": "bua-Cyrl-RU", - "bua-RU": "bua-Cyrl-RU", - "bub": "bub-Latn-TD", - "bub-Latn": "bub-Latn-TD", - "bub-TD": "bub-Latn-TD", - "buc": "buc-Latn-YT", - "buc-Latn": "buc-Latn-YT", - "buc-YT": "buc-Latn-YT", - "bud": "bud-Latn-TG", - "bud-Latn": "bud-Latn-TG", - "bud-TG": "bud-Latn-TG", - "bue": "bue-Latn-CA", - "bue-CA": "bue-Latn-CA", - "bue-Latn": "bue-Latn-CA", - "buf": "buf-Latn-CD", - "buf-CD": "buf-Latn-CD", - "buf-Latn": "buf-Latn-CD", - "bug": "bug-Latn-ID", - "bug-Bugi": "bug-Bugi-ID", - "bug-ID": "bug-Latn-ID", - "bug-Latn": "bug-Latn-ID", - "buh": "buh-Latn-CN", - "buh-CN": "buh-Latn-CN", - "buh-Latn": "buh-Latn-CN", - "bui": "bui-Latn-CG", - "bui-CG": "bui-Latn-CG", - "bui-Latn": "bui-Latn-CG", - "buj": "buj-Latn-NG", - "buj-Latn": "buj-Latn-NG", - "buj-NG": "buj-Latn-NG", - "buk": "buk-Latn-PG", - "buk-Latn": "buk-Latn-PG", - "buk-PG": "buk-Latn-PG", - "bum": "bum-Latn-CM", - "bum-CM": "bum-Latn-CM", - "bum-Latn": "bum-Latn-CM", - "bun": "bun-Latn-SL", - "bun-Latn": "bun-Latn-SL", - "bun-SL": "bun-Latn-SL", - "buo": "buo-Latn-PG", - "buo-Latn": "buo-Latn-PG", - "buo-PG": "buo-Latn-PG", - "bup": "bup-Latn-ID", - "bup-ID": "bup-Latn-ID", - "bup-Latn": "bup-Latn-ID", - "buq": "buq-Latn-PG", - "buq-Latn": "buq-Latn-PG", - "buq-PG": "buq-Latn-PG", - "bus": "bus-Latn-NG", - "bus-Latn": "bus-Latn-NG", - "bus-NG": "bus-Latn-NG", - "but": "but-Latn-PG", - "but-Latn": "but-Latn-PG", - "but-PG": "but-Latn-PG", - "buu": "buu-Latn-CD", - "buu-CD": "buu-Latn-CD", - "buu-Latn": "buu-Latn-CD", - "buv": "buv-Latn-PG", - "buv-Latn": "buv-Latn-PG", - "buv-PG": "buv-Latn-PG", - "buw": "buw-Latn-GA", - "buw-GA": "buw-Latn-GA", - "buw-Latn": "buw-Latn-GA", - "bux": "bux-Latn-NG", - "bux-Latn": "bux-Latn-NG", - "bux-NG": "bux-Latn-NG", - "buy": "buy-Latn-SL", - "buy-Latn": "buy-Latn-SL", - "buy-SL": "buy-Latn-SL", - "buz": "buz-Latn-NG", - "buz-Latn": "buz-Latn-NG", - "buz-NG": "buz-Latn-NG", - "bva": "bva-Latn-TD", - "bva-Latn": "bva-Latn-TD", - "bva-TD": "bva-Latn-TD", - "bvb": "bvb-Latn-GQ", - "bvb-GQ": "bvb-Latn-GQ", - "bvb-Latn": "bvb-Latn-GQ", - "bvc": "bvc-Latn-SB", - "bvc-Latn": "bvc-Latn-SB", - "bvc-SB": "bvc-Latn-SB", - "bvd": "bvd-Latn-SB", - "bvd-Latn": "bvd-Latn-SB", - "bvd-SB": "bvd-Latn-SB", - "bve": "bve-Latn-ID", - "bve-ID": "bve-Latn-ID", - "bve-Latn": "bve-Latn-ID", - "bvf": "bvf-Latn-TD", - "bvf-Latn": "bvf-Latn-TD", - "bvf-TD": "bvf-Latn-TD", - "bvg": "bvg-Latn-CM", - "bvg-CM": "bvg-Latn-CM", - "bvg-Latn": "bvg-Latn-CM", - "bvh": "bvh-Latn-NG", - "bvh-Latn": "bvh-Latn-NG", - "bvh-NG": "bvh-Latn-NG", - "bvi": "bvi-Latn-SS", - "bvi-Latn": "bvi-Latn-SS", - "bvi-SS": "bvi-Latn-SS", - "bvj": "bvj-Latn-NG", - "bvj-Latn": "bvj-Latn-NG", - "bvj-NG": "bvj-Latn-NG", - "bvk": "bvk-Latn-ID", - "bvk-ID": "bvk-Latn-ID", - "bvk-Latn": "bvk-Latn-ID", - "bvm": "bvm-Latn-CM", - "bvm-CM": "bvm-Latn-CM", - "bvm-Latn": "bvm-Latn-CM", - "bvn": "bvn-Latn-PG", - "bvn-Latn": "bvn-Latn-PG", - "bvn-PG": "bvn-Latn-PG", - "bvo": "bvo-Latn-TD", - "bvo-Latn": "bvo-Latn-TD", - "bvo-TD": "bvo-Latn-TD", - "bvq": "bvq-Latn-CF", - "bvq-CF": "bvq-Latn-CF", - "bvq-Latn": "bvq-Latn-CF", - "bvr": "bvr-Latn-AU", - "bvr-AU": "bvr-Latn-AU", - "bvr-Latn": "bvr-Latn-AU", - "bvt": "bvt-Latn-ID", - "bvt-ID": "bvt-Latn-ID", - "bvt-Latn": "bvt-Latn-ID", - "bvu": "bvu-Latn-ID", - "bvu-ID": "bvu-Latn-ID", - "bvu-Latn": "bvu-Latn-ID", - "bvv": "bvv-Latn-VE", - "bvv-Latn": "bvv-Latn-VE", - "bvv-VE": "bvv-Latn-VE", - "bvw": "bvw-Latn-NG", - "bvw-Latn": "bvw-Latn-NG", - "bvw-NG": "bvw-Latn-NG", - "bvx": "bvx-Latn-CG", - "bvx-CG": "bvx-Latn-CG", - "bvx-Latn": "bvx-Latn-CG", - "bvy": "bvy-Latn-PH", - "bvy-Latn": "bvy-Latn-PH", - "bvy-PH": "bvy-Latn-PH", - "bvz": "bvz-Latn-ID", - "bvz-ID": "bvz-Latn-ID", - "bvz-Latn": "bvz-Latn-ID", - "bwa": "bwa-Latn-NC", - "bwa-Latn": "bwa-Latn-NC", - "bwa-NC": "bwa-Latn-NC", - "bwb": "bwb-Latn-FJ", - "bwb-FJ": "bwb-Latn-FJ", - "bwb-Latn": "bwb-Latn-FJ", - "bwc": "bwc-Latn-ZM", - "bwc-Latn": "bwc-Latn-ZM", - "bwc-ZM": "bwc-Latn-ZM", - "bwd": "bwd-Latn-PG", - "bwd-Latn": "bwd-Latn-PG", - "bwd-PG": "bwd-Latn-PG", - "bwe": "bwe-Mymr-MM", - "bwe-MM": "bwe-Mymr-MM", - "bwe-Mymr": "bwe-Mymr-MM", - "bwf": "bwf-Latn-PG", - "bwf-Latn": "bwf-Latn-PG", - "bwf-PG": "bwf-Latn-PG", - "bwg": "bwg-Latn-MZ", - "bwg-Latn": "bwg-Latn-MZ", - "bwg-MZ": "bwg-Latn-MZ", - "bwh": "bwh-Latn-CM", - "bwh-CM": "bwh-Latn-CM", - "bwh-Latn": "bwh-Latn-CM", - "bwi": "bwi-Latn-VE", - "bwi-Latn": "bwi-Latn-VE", - "bwi-VE": "bwi-Latn-VE", - "bwj": "bwj-Latn-BF", - "bwj-BF": "bwj-Latn-BF", - "bwj-Latn": "bwj-Latn-BF", - "bwk": "bwk-Latn-PG", - "bwk-Latn": "bwk-Latn-PG", - "bwk-PG": "bwk-Latn-PG", - "bwl": "bwl-Latn-CD", - "bwl-CD": "bwl-Latn-CD", - "bwl-Latn": "bwl-Latn-CD", - "bwm": "bwm-Latn-PG", - "bwm-Latn": "bwm-Latn-PG", - "bwm-PG": "bwm-Latn-PG", - "bwo": "bwo-Latn-ET", - "bwo-ET": "bwo-Latn-ET", - "bwo-Latn": "bwo-Latn-ET", - "bwp": "bwp-Latn-ID", - "bwp-ID": "bwp-Latn-ID", - "bwp-Latn": "bwp-Latn-ID", - "bwq": "bwq-Latn-BF", - "bwq-BF": "bwq-Latn-BF", - "bwq-Latn": "bwq-Latn-BF", - "bwr": "bwr-Latn-NG", - "bwr-Latn": "bwr-Latn-NG", - "bwr-NG": "bwr-Latn-NG", - "bws": "bws-Latn-CD", - "bws-CD": "bws-Latn-CD", - "bws-Latn": "bws-Latn-CD", - "bwt": "bwt-Latn-CM", - "bwt-CM": "bwt-Latn-CM", - "bwt-Latn": "bwt-Latn-CM", - "bwu": "bwu-Latn-GH", - "bwu-GH": "bwu-Latn-GH", - "bwu-Latn": "bwu-Latn-GH", - "bww": "bww-Latn-CD", - "bww-CD": "bww-Latn-CD", - "bww-Latn": "bww-Latn-CD", - "bwx": "bwx-Latn-CN", - "bwx-CN": "bwx-Latn-CN", - "bwx-Latn": "bwx-Latn-CN", - "bwy": "bwy-Latn-BF", - "bwy-BF": "bwy-Latn-BF", - "bwy-Latn": "bwy-Latn-BF", - "bwz": "bwz-Latn-CG", - "bwz-CG": "bwz-Latn-CG", - "bwz-Latn": "bwz-Latn-CG", - "bxa": "bxa-Latn-SB", - "bxa-Latn": "bxa-Latn-SB", - "bxa-SB": "bxa-Latn-SB", - "bxb": "bxb-Latn-SS", - "bxb-Latn": "bxb-Latn-SS", - "bxb-SS": "bxb-Latn-SS", - "bxc": "bxc-Latn-GQ", - "bxc-GQ": "bxc-Latn-GQ", - "bxc-Latn": "bxc-Latn-GQ", - "bxf": "bxf-Latn-PG", - "bxf-Latn": "bxf-Latn-PG", - "bxf-PG": "bxf-Latn-PG", - "bxg": "bxg-Latn-CD", - "bxg-CD": "bxg-Latn-CD", - "bxg-Latn": "bxg-Latn-CD", - "bxh": "bxh-Latn-PG", - "bxh-Latn": "bxh-Latn-PG", - "bxh-PG": "bxh-Latn-PG", - "bxi": "bxi-Latn-AU", - "bxi-AU": "bxi-Latn-AU", - "bxi-Latn": "bxi-Latn-AU", - "bxj": "bxj-Latn-AU", - "bxj-AU": "bxj-Latn-AU", - "bxj-Latn": "bxj-Latn-AU", - "bxl": "bxl-Latn-BF", - "bxl-BF": "bxl-Latn-BF", - "bxl-Latn": "bxl-Latn-BF", - "bxm": "bxm-Cyrl-MN", - "bxm-Cyrl": "bxm-Cyrl-MN", - "bxm-MN": "bxm-Cyrl-MN", - "bxn": "bxn-Latn-AU", - "bxn-AU": "bxn-Latn-AU", - "bxn-Latn": "bxn-Latn-AU", - "bxo": "bxo-Latn-NG", - "bxo-Latn": "bxo-Latn-NG", - "bxo-NG": "bxo-Latn-NG", - "bxp": "bxp-Latn-CM", - "bxp-CM": "bxp-Latn-CM", - "bxp-Latn": "bxp-Latn-CM", - "bxq": "bxq-Latn-NG", - "bxq-Latn": "bxq-Latn-NG", - "bxq-NG": "bxq-Latn-NG", - "bxs": "bxs-Latn-CM", - "bxs-CM": "bxs-Latn-CM", - "bxs-Latn": "bxs-Latn-CM", - "bxu": "bxu-Mong-CN", - "bxu-CN": "bxu-Mong-CN", - "bxu-Mong": "bxu-Mong-CN", - "bxv": "bxv-Latn-TD", - "bxv-Latn": "bxv-Latn-TD", - "bxv-TD": "bxv-Latn-TD", - "bxw": "bxw-Latn-ML", - "bxw-Latn": "bxw-Latn-ML", - "bxw-ML": "bxw-Latn-ML", - "bxz": "bxz-Latn-PG", - "bxz-Latn": "bxz-Latn-PG", - "bxz-PG": "bxz-Latn-PG", - "bya": "bya-Latn-PH", - "bya-Latn": "bya-Latn-PH", - "bya-PH": "bya-Latn-PH", - "byb": "byb-Latn-CM", - "byb-CM": "byb-Latn-CM", - "byb-Latn": "byb-Latn-CM", - "byc": "byc-Latn-NG", - "byc-Latn": "byc-Latn-NG", - "byc-NG": "byc-Latn-NG", - "byd": "byd-Latn-ID", - "byd-ID": "byd-Latn-ID", - "byd-Latn": "byd-Latn-ID", - "bye": "bye-Latn-PG", - "bye-Latn": "bye-Latn-PG", - "bye-PG": "bye-Latn-PG", - "byf": "byf-Latn-NG", - "byf-Latn": "byf-Latn-NG", - "byf-NG": "byf-Latn-NG", - "byh": "byh-Deva-NP", - "byh-Deva": "byh-Deva-NP", - "byh-NP": "byh-Deva-NP", - "byi": "byi-Latn-CD", - "byi-CD": "byi-Latn-CD", - "byi-Latn": "byi-Latn-CD", - "byj": "byj-Latn-NG", - "byj-Latn": "byj-Latn-NG", - "byj-NG": "byj-Latn-NG", - "byk": "byk-Latn-CN", - "byk-CN": "byk-Latn-CN", - "byk-Latn": "byk-Latn-CN", - "byl": "byl-Latn-ID", - "byl-ID": "byl-Latn-ID", - "byl-Latn": "byl-Latn-ID", - "bym": "bym-Latn-AU", - "bym-AU": "bym-Latn-AU", - "bym-Latn": "bym-Latn-AU", - "byn": "byn-Ethi-ER", - "byn-ER": "byn-Ethi-ER", - "byn-Ethi": "byn-Ethi-ER", - "byp": "byp-Latn-NG", - "byp-Latn": "byp-Latn-NG", - "byp-NG": "byp-Latn-NG", - "byr": "byr-Latn-PG", - "byr-Latn": "byr-Latn-PG", - "byr-PG": "byr-Latn-PG", - "bys": "bys-Latn-NG", - "bys-Latn": "bys-Latn-NG", - "bys-NG": "bys-Latn-NG", - "byv": "byv-Latn-CM", - "byv-CM": "byv-Latn-CM", - "byv-Latn": "byv-Latn-CM", - "byw": "byw-Deva-NP", - "byw-Deva": "byw-Deva-NP", - "byw-NP": "byw-Deva-NP", - "byx": "byx-Latn-PG", - "byx-Latn": "byx-Latn-PG", - "byx-PG": "byx-Latn-PG", - "byz": "byz-Latn-PG", - "byz-Latn": "byz-Latn-PG", - "byz-PG": "byz-Latn-PG", - "bza": "bza-Latn-LR", - "bza-LR": "bza-Latn-LR", - "bza-Latn": "bza-Latn-LR", - "bzb": "bzb-Latn-ID", - "bzb-ID": "bzb-Latn-ID", - "bzb-Latn": "bzb-Latn-ID", - "bzc": "bzc-Latn-MG", - "bzc-Latn": "bzc-Latn-MG", - "bzc-MG": "bzc-Latn-MG", - "bzd": "bzd-Latn-CR", - "bzd-CR": "bzd-Latn-CR", - "bzd-Latn": "bzd-Latn-CR", - "bze": "bze-Latn-ML", - "bze-Latn": "bze-Latn-ML", - "bze-ML": "bze-Latn-ML", - "bzf": "bzf-Latn-PG", - "bzf-Latn": "bzf-Latn-PG", - "bzf-PG": "bzf-Latn-PG", - "bzh": "bzh-Latn-PG", - "bzh-Latn": "bzh-Latn-PG", - "bzh-PG": "bzh-Latn-PG", - "bzi": "bzi-Thai-TH", - "bzi-TH": "bzi-Thai-TH", - "bzi-Thai": "bzi-Thai-TH", - "bzj": "bzj-Latn-BZ", - "bzj-BZ": "bzj-Latn-BZ", - "bzj-Latn": "bzj-Latn-BZ", - "bzk": "bzk-Latn-NI", - "bzk-Latn": "bzk-Latn-NI", - "bzk-NI": "bzk-Latn-NI", - "bzl": "bzl-Latn-ID", - "bzl-ID": "bzl-Latn-ID", - "bzl-Latn": "bzl-Latn-ID", - "bzm": "bzm-Latn-CD", - "bzm-CD": "bzm-Latn-CD", - "bzm-Latn": "bzm-Latn-CD", - "bzn": "bzn-Latn-ID", - "bzn-ID": "bzn-Latn-ID", - "bzn-Latn": "bzn-Latn-ID", - "bzo": "bzo-Latn-CD", - "bzo-CD": "bzo-Latn-CD", - "bzo-Latn": "bzo-Latn-CD", - "bzp": "bzp-Latn-ID", - "bzp-ID": "bzp-Latn-ID", - "bzp-Latn": "bzp-Latn-ID", - "bzq": "bzq-Latn-ID", - "bzq-ID": "bzq-Latn-ID", - "bzq-Latn": "bzq-Latn-ID", - "bzr": "bzr-Latn-AU", - "bzr-AU": "bzr-Latn-AU", - "bzr-Latn": "bzr-Latn-AU", - "bzt": "bzt-Latn-001", - "bzt-001": "bzt-Latn-001", - "bzt-Latn": "bzt-Latn-001", - "bzu": "bzu-Latn-ID", - "bzu-ID": "bzu-Latn-ID", - "bzu-Latn": "bzu-Latn-ID", - "bzv": "bzv-Latn-CM", - "bzv-CM": "bzv-Latn-CM", - "bzv-Latn": "bzv-Latn-CM", - "bzw": "bzw-Latn-NG", - "bzw-Latn": "bzw-Latn-NG", - "bzw-NG": "bzw-Latn-NG", - "bzx": "bzx-Latn-ML", - "bzx-Latn": "bzx-Latn-ML", - "bzx-ML": "bzx-Latn-ML", - "bzy": "bzy-Latn-NG", - "bzy-Latn": "bzy-Latn-NG", - "bzy-NG": "bzy-Latn-NG", - "bzz": "bzz-Latn-NG", - "bzz-Latn": "bzz-Latn-NG", - "bzz-NG": "bzz-Latn-NG", - "ca": "ca-Latn-ES", - "ca-AD": "ca-Latn-AD", - "ca-ES": "ca-Latn-ES", - "ca-Latn": "ca-Latn-ES", - "caa": "caa-Latn-GT", - "caa-GT": "caa-Latn-GT", - "caa-Latn": "caa-Latn-GT", - "cab": "cab-Latn-HN", - "cab-HN": "cab-Latn-HN", - "cab-Latn": "cab-Latn-HN", - "cac": "cac-Latn-GT", - "cac-GT": "cac-Latn-GT", - "cac-Latn": "cac-Latn-GT", - "cad": "cad-Latn-US", - "cad-Latn": "cad-Latn-US", - "cad-US": "cad-Latn-US", - "cae": "cae-Latn-SN", - "cae-Latn": "cae-Latn-SN", - "cae-SN": "cae-Latn-SN", - "caf": "caf-Latn-CA", - "caf-CA": "caf-Latn-CA", - "caf-Latn": "caf-Latn-CA", - "cag": "cag-Latn-PY", - "cag-Latn": "cag-Latn-PY", - "cag-PY": "cag-Latn-PY", - "cah": "cah-Latn-PE", - "cah-Latn": "cah-Latn-PE", - "cah-PE": "cah-Latn-PE", - "caj": "caj-Latn-BO", - "caj-BO": "caj-Latn-BO", - "caj-Latn": "caj-Latn-BO", - "cak": "cak-Latn-GT", - "cak-GT": "cak-Latn-GT", - "cak-Latn": "cak-Latn-GT", - "cal": "cal-Latn-MP", - "cal-Latn": "cal-Latn-MP", - "cal-MP": "cal-Latn-MP", - "cam": "cam-Latn-NC", - "cam-Latn": "cam-Latn-NC", - "cam-NC": "cam-Latn-NC", - "can": "can-Latn-PG", - "can-Latn": "can-Latn-PG", - "can-PG": "can-Latn-PG", - "cao": "cao-Latn-BO", - "cao-BO": "cao-Latn-BO", - "cao-Latn": "cao-Latn-BO", - "cap": "cap-Latn-BO", - "cap-BO": "cap-Latn-BO", - "cap-Latn": "cap-Latn-BO", - "caq": "caq-Latn-IN", - "caq-IN": "caq-Latn-IN", - "caq-Latn": "caq-Latn-IN", - "car": "car-Latn-VE", - "car-Latn": "car-Latn-VE", - "car-VE": "car-Latn-VE", - "cas": "cas-Latn-BO", - "cas-BO": "cas-Latn-BO", - "cas-Latn": "cas-Latn-BO", - "cav": "cav-Latn-BO", - "cav-BO": "cav-Latn-BO", - "cav-Latn": "cav-Latn-BO", - "caw": "caw-Latn-BO", - "caw-BO": "caw-Latn-BO", - "caw-Latn": "caw-Latn-BO", - "cax": "cax-Latn-BO", - "cax-BO": "cax-Latn-BO", - "cax-Latn": "cax-Latn-BO", - "cay": "cay-Latn-CA", - "cay-CA": "cay-Latn-CA", - "cay-Latn": "cay-Latn-CA", - "caz": "caz-Latn-BO", - "caz-BO": "caz-Latn-BO", - "caz-Latn": "caz-Latn-BO", - "cbb": "cbb-Latn-CO", - "cbb-CO": "cbb-Latn-CO", - "cbb-Latn": "cbb-Latn-CO", - "cbc": "cbc-Latn-CO", - "cbc-CO": "cbc-Latn-CO", - "cbc-Latn": "cbc-Latn-CO", - "cbd": "cbd-Latn-CO", - "cbd-CO": "cbd-Latn-CO", - "cbd-Latn": "cbd-Latn-CO", - "cbg": "cbg-Latn-CO", - "cbg-CO": "cbg-Latn-CO", - "cbg-Latn": "cbg-Latn-CO", - "cbi": "cbi-Latn-EC", - "cbi-EC": "cbi-Latn-EC", - "cbi-Latn": "cbi-Latn-EC", - "cbj": "cbj-Latn-BJ", - "cbj-BJ": "cbj-Latn-BJ", - "cbj-Latn": "cbj-Latn-BJ", - "cbk": "cbk-Latn-PH", - "cbk-Latn": "cbk-Latn-PH", - "cbk-PH": "cbk-Latn-PH", - "cbl": "cbl-Latn-MM", - "cbl-Latn": "cbl-Latn-MM", - "cbl-MM": "cbl-Latn-MM", - "cbn": "cbn-Thai-TH", - "cbn-TH": "cbn-Thai-TH", - "cbn-Thai": "cbn-Thai-TH", - "cbo": "cbo-Latn-NG", - "cbo-Latn": "cbo-Latn-NG", - "cbo-NG": "cbo-Latn-NG", - "cbq": "cbq-Latn-NG", - "cbq-Latn": "cbq-Latn-NG", - "cbq-NG": "cbq-Latn-NG", - "cbr": "cbr-Latn-PE", - "cbr-Latn": "cbr-Latn-PE", - "cbr-PE": "cbr-Latn-PE", - "cbs": "cbs-Latn-PE", - "cbs-Latn": "cbs-Latn-PE", - "cbs-PE": "cbs-Latn-PE", - "cbt": "cbt-Latn-PE", - "cbt-Latn": "cbt-Latn-PE", - "cbt-PE": "cbt-Latn-PE", - "cbu": "cbu-Latn-PE", - "cbu-Latn": "cbu-Latn-PE", - "cbu-PE": "cbu-Latn-PE", - "cbv": "cbv-Latn-CO", - "cbv-CO": "cbv-Latn-CO", - "cbv-Latn": "cbv-Latn-CO", - "cbw": "cbw-Latn-PH", - "cbw-Latn": "cbw-Latn-PH", - "cbw-PH": "cbw-Latn-PH", - "cby": "cby-Latn-CO", - "cby-CO": "cby-Latn-CO", - "cby-Latn": "cby-Latn-CO", - "ccc": "ccc-Latn-PE", - "ccc-Latn": "ccc-Latn-PE", - "ccc-PE": "ccc-Latn-PE", - "ccd": "ccd-Latn-BR", - "ccd-BR": "ccd-Latn-BR", - "ccd-Latn": "ccd-Latn-BR", - "cce": "cce-Latn-MZ", - "cce-Latn": "cce-Latn-MZ", - "cce-MZ": "cce-Latn-MZ", - "ccg": "ccg-Latn-NG", - "ccg-Latn": "ccg-Latn-NG", - "ccg-NG": "ccg-Latn-NG", - "cch": "cch-Latn-NG", - "cch-Latn": "cch-Latn-NG", - "cch-NG": "cch-Latn-NG", - "ccj": "ccj-Latn-GW", - "ccj-GW": "ccj-Latn-GW", - "ccj-Latn": "ccj-Latn-GW", - "ccl": "ccl-Latn-TZ", - "ccl-Latn": "ccl-Latn-TZ", - "ccl-TZ": "ccl-Latn-TZ", - "ccm": "ccm-Latn-MY", - "ccm-Latn": "ccm-Latn-MY", - "ccm-MY": "ccm-Latn-MY", - "cco": "cco-Latn-MX", - "cco-Latn": "cco-Latn-MX", - "cco-MX": "cco-Latn-MX", - "ccp": "ccp-Cakm-BD", - "ccp-BD": "ccp-Cakm-BD", - "ccp-Cakm": "ccp-Cakm-BD", - "ccr": "ccr-Latn-SV", - "ccr-Latn": "ccr-Latn-SV", - "ccr-SV": "ccr-Latn-SV", - "cde": "cde-Telu-IN", - "cde-IN": "cde-Telu-IN", - "cde-Telu": "cde-Telu-IN", - "cdf": "cdf-Latn-IN", - "cdf-IN": "cdf-Latn-IN", - "cdf-Latn": "cdf-Latn-IN", - "cdh": "cdh-Deva-IN", - "cdh-Deva": "cdh-Deva-IN", - "cdh-IN": "cdh-Deva-IN", - "cdi": "cdi-Gujr-IN", - "cdi-Gujr": "cdi-Gujr-IN", - "cdi-IN": "cdi-Gujr-IN", - "cdj": "cdj-Deva-IN", - "cdj-Deva": "cdj-Deva-IN", - "cdj-IN": "cdj-Deva-IN", - "cdm": "cdm-Deva-NP", - "cdm-Deva": "cdm-Deva-NP", - "cdm-NP": "cdm-Deva-NP", - "cdo": "cdo-Hans-CN", - "cdo-CN": "cdo-Hans-CN", - "cdo-Hans": "cdo-Hans-CN", - "cdr": "cdr-Latn-NG", - "cdr-Latn": "cdr-Latn-NG", - "cdr-NG": "cdr-Latn-NG", - "cdz": "cdz-Beng-IN", - "cdz-Beng": "cdz-Beng-IN", - "cdz-IN": "cdz-Beng-IN", - "ce": "ce-Cyrl-RU", - "ce-Cyrl": "ce-Cyrl-RU", - "ce-RU": "ce-Cyrl-RU", - "cea": "cea-Latn-US", - "cea-Latn": "cea-Latn-US", - "cea-US": "cea-Latn-US", - "ceb": "ceb-Latn-PH", - "ceb-Latn": "ceb-Latn-PH", - "ceb-PH": "ceb-Latn-PH", - "ceg": "ceg-Latn-PY", - "ceg-Latn": "ceg-Latn-PY", - "ceg-PY": "ceg-Latn-PY", - "cek": "cek-Latn-MM", - "cek-Latn": "cek-Latn-MM", - "cek-MM": "cek-Latn-MM", - "cen": "cen-Latn-NG", - "cen-Latn": "cen-Latn-NG", - "cen-NG": "cen-Latn-NG", - "cet": "cet-Latn-NG", - "cet-Latn": "cet-Latn-NG", - "cet-NG": "cet-Latn-NG", - "cey": "cey-Latn-MM", - "cey-Latn": "cey-Latn-MM", - "cey-MM": "cey-Latn-MM", - "cfa": "cfa-Latn-NG", - "cfa-Latn": "cfa-Latn-NG", - "cfa-NG": "cfa-Latn-NG", - "cfd": "cfd-Latn-NG", - "cfd-Latn": "cfd-Latn-NG", - "cfd-NG": "cfd-Latn-NG", - "cfg": "cfg-Latn-NG", - "cfg-Latn": "cfg-Latn-NG", - "cfg-NG": "cfg-Latn-NG", - "cfm": "cfm-Latn-MM", - "cfm-Latn": "cfm-Latn-MM", - "cfm-MM": "cfm-Latn-MM", - "cga": "cga-Latn-PG", - "cga-Latn": "cga-Latn-PG", - "cga-PG": "cga-Latn-PG", - "cgc": "cgc-Latn-PH", - "cgc-Latn": "cgc-Latn-PH", - "cgc-PH": "cgc-Latn-PH", - "cgg": "cgg-Latn-UG", - "cgg-Latn": "cgg-Latn-UG", - "cgg-UG": "cgg-Latn-UG", - "cgk": "cgk-Tibt-BT", - "cgk-BT": "cgk-Tibt-BT", - "cgk-Tibt": "cgk-Tibt-BT", - "ch": "ch-Latn-GU", - "ch-GU": "ch-Latn-GU", - "ch-Latn": "ch-Latn-GU", - "chb": "chb-Latn-CO", - "chb-CO": "chb-Latn-CO", - "chb-Latn": "chb-Latn-CO", - "chd": "chd-Latn-MX", - "chd-Latn": "chd-Latn-MX", - "chd-MX": "chd-Latn-MX", - "chf": "chf-Latn-MX", - "chf-Latn": "chf-Latn-MX", - "chf-MX": "chf-Latn-MX", - "chg": "chg-Arab-TM", - "chg-Arab": "chg-Arab-TM", - "chg-TM": "chg-Arab-TM", - "chh": "chh-Latn-US", - "chh-Latn": "chh-Latn-US", - "chh-US": "chh-Latn-US", - "chj": "chj-Latn-MX", - "chj-Latn": "chj-Latn-MX", - "chj-MX": "chj-Latn-MX", - "chk": "chk-Latn-FM", - "chk-FM": "chk-Latn-FM", - "chk-Latn": "chk-Latn-FM", - "chl": "chl-Latn-US", - "chl-Latn": "chl-Latn-US", - "chl-US": "chl-Latn-US", - "chm": "chm-Cyrl-RU", - "chm-Cyrl": "chm-Cyrl-RU", - "chm-RU": "chm-Cyrl-RU", - "chn": "chn-Latn-US", - "chn-Latn": "chn-Latn-US", - "chn-US": "chn-Latn-US", - "cho": "cho-Latn-US", - "cho-Latn": "cho-Latn-US", - "cho-US": "cho-Latn-US", - "chp": "chp-Latn-CA", - "chp-CA": "chp-Latn-CA", - "chp-Latn": "chp-Latn-CA", - "chq": "chq-Latn-MX", - "chq-Latn": "chq-Latn-MX", - "chq-MX": "chq-Latn-MX", - "chr": "chr-Cher-US", - "chr-Cher": "chr-Cher-US", - "chr-US": "chr-Cher-US", - "cht": "cht-Latn-PE", - "cht-Latn": "cht-Latn-PE", - "cht-PE": "cht-Latn-PE", - "chw": "chw-Latn-MZ", - "chw-Latn": "chw-Latn-MZ", - "chw-MZ": "chw-Latn-MZ", - "chx": "chx-Deva-NP", - "chx-Deva": "chx-Deva-NP", - "chx-NP": "chx-Deva-NP", - "chy": "chy-Latn-US", - "chy-Latn": "chy-Latn-US", - "chy-US": "chy-Latn-US", - "chz": "chz-Latn-MX", - "chz-Latn": "chz-Latn-MX", - "chz-MX": "chz-Latn-MX", - "cia": "cia-Latn-ID", - "cia-ID": "cia-Latn-ID", - "cia-Latn": "cia-Latn-ID", - "cib": "cib-Latn-BJ", - "cib-BJ": "cib-Latn-BJ", - "cib-Latn": "cib-Latn-BJ", - "cic": "cic-Latn-US", - "cic-Latn": "cic-Latn-US", - "cic-US": "cic-Latn-US", - "cie": "cie-Latn-NG", - "cie-Latn": "cie-Latn-NG", - "cie-NG": "cie-Latn-NG", - "cih": "cih-Deva-IN", - "cih-Deva": "cih-Deva-IN", - "cih-IN": "cih-Deva-IN", - "cim": "cim-Latn-IT", - "cim-IT": "cim-Latn-IT", - "cim-Latn": "cim-Latn-IT", - "cin": "cin-Latn-BR", - "cin-BR": "cin-Latn-BR", - "cin-Latn": "cin-Latn-BR", - "cip": "cip-Latn-MX", - "cip-Latn": "cip-Latn-MX", - "cip-MX": "cip-Latn-MX", - "cir": "cir-Latn-NC", - "cir-Latn": "cir-Latn-NC", - "cir-NC": "cir-Latn-NC", - "ciw": "ciw-Latn-US", - "ciw-Latn": "ciw-Latn-US", - "ciw-US": "ciw-Latn-US", - "ciy": "ciy-Latn-VE", - "ciy-Latn": "ciy-Latn-VE", - "ciy-VE": "ciy-Latn-VE", - "cja": "cja-Arab-KH", - "cja-Arab": "cja-Arab-KH", - "cja-Arab-KH": "cja-Arab-KH", - "cja-KH": "cja-Arab-KH", - "cje": "cje-Latn-VN", - "cje-Latn": "cje-Latn-VN", - "cje-VN": "cje-Latn-VN", - "cjh": "cjh-Latn-US", - "cjh-Latn": "cjh-Latn-US", - "cjh-US": "cjh-Latn-US", - "cji": "cji-Cyrl-RU", - "cji-Cyrl": "cji-Cyrl-RU", - "cji-RU": "cji-Cyrl-RU", - "cjk": "cjk-Latn-AO", - "cjk-AO": "cjk-Latn-AO", - "cjk-Latn": "cjk-Latn-AO", - "cjm": "cjm-Cham-VN", - "cjm-Cham": "cjm-Cham-VN", - "cjm-VN": "cjm-Cham-VN", - "cjn": "cjn-Latn-PG", - "cjn-Latn": "cjn-Latn-PG", - "cjn-PG": "cjn-Latn-PG", - "cjo": "cjo-Latn-PE", - "cjo-Latn": "cjo-Latn-PE", - "cjo-PE": "cjo-Latn-PE", - "cjp": "cjp-Latn-CR", - "cjp-CR": "cjp-Latn-CR", - "cjp-Latn": "cjp-Latn-CR", - "cjs": "cjs-Latn-RU", - "cjs-Latn": "cjs-Latn-RU", - "cjs-RU": "cjs-Latn-RU", - "cjv": "cjv-Latn-PG", - "cjv-Latn": "cjv-Latn-PG", - "cjv-PG": "cjv-Latn-PG", - "cjy": "cjy-Hans-CN", - "cjy-CN": "cjy-Hans-CN", - "cjy-Hans": "cjy-Hans-CN", - "ckb": "ckb-Arab-IQ", - "ckb-Arab": "ckb-Arab-IQ", - "ckb-IQ": "ckb-Arab-IQ", - "ckl": "ckl-Latn-NG", - "ckl-Latn": "ckl-Latn-NG", - "ckl-NG": "ckl-Latn-NG", - "ckm": "ckm-Latn-HR", - "ckm-HR": "ckm-Latn-HR", - "ckm-Latn": "ckm-Latn-HR", - "ckn": "ckn-Latn-MM", - "ckn-Latn": "ckn-Latn-MM", - "ckn-MM": "ckn-Latn-MM", - "cko": "cko-Latn-GH", - "cko-GH": "cko-Latn-GH", - "cko-Latn": "cko-Latn-GH", - "ckq": "ckq-Latn-TD", - "ckq-Latn": "ckq-Latn-TD", - "ckq-TD": "ckq-Latn-TD", - "ckr": "ckr-Latn-PG", - "ckr-Latn": "ckr-Latn-PG", - "ckr-PG": "ckr-Latn-PG", - "cks": "cks-Latn-NC", - "cks-Latn": "cks-Latn-NC", - "cks-NC": "cks-Latn-NC", - "ckt": "ckt-Cyrl-RU", - "ckt-Cyrl": "ckt-Cyrl-RU", - "ckt-RU": "ckt-Cyrl-RU", - "cku": "cku-Latn-US", - "cku-Latn": "cku-Latn-US", - "cku-US": "cku-Latn-US", - "ckv": "ckv-Latn-TW", - "ckv-Latn": "ckv-Latn-TW", - "ckv-TW": "ckv-Latn-TW", - "ckx": "ckx-Latn-CM", - "ckx-CM": "ckx-Latn-CM", - "ckx-Latn": "ckx-Latn-CM", - "cky": "cky-Latn-NG", - "cky-Latn": "cky-Latn-NG", - "cky-NG": "cky-Latn-NG", - "ckz": "ckz-Latn-GT", - "ckz-GT": "ckz-Latn-GT", - "ckz-Latn": "ckz-Latn-GT", - "cla": "cla-Latn-NG", - "cla-Latn": "cla-Latn-NG", - "cla-NG": "cla-Latn-NG", - "clc": "clc-Latn-CA", - "clc-CA": "clc-Latn-CA", - "clc-Latn": "clc-Latn-CA", - "cle": "cle-Latn-MX", - "cle-Latn": "cle-Latn-MX", - "cle-MX": "cle-Latn-MX", - "clh": "clh-Arab-PK", - "clh-Arab": "clh-Arab-PK", - "clh-PK": "clh-Arab-PK", - "cli": "cli-Latn-GH", - "cli-GH": "cli-Latn-GH", - "cli-Latn": "cli-Latn-GH", - "clj": "clj-Latn-MM", - "clj-Latn": "clj-Latn-MM", - "clj-MM": "clj-Latn-MM", - "clk": "clk-Latn-IN", - "clk-IN": "clk-Latn-IN", - "clk-Latn": "clk-Latn-IN", - "cll": "cll-Latn-GH", - "cll-GH": "cll-Latn-GH", - "cll-Latn": "cll-Latn-GH", - "clm": "clm-Latn-US", - "clm-Latn": "clm-Latn-US", - "clm-US": "clm-Latn-US", - "clo": "clo-Latn-MX", - "clo-Latn": "clo-Latn-MX", - "clo-MX": "clo-Latn-MX", - "clt": "clt-Latn-MM", - "clt-Latn": "clt-Latn-MM", - "clt-MM": "clt-Latn-MM", - "clu": "clu-Latn-PH", - "clu-Latn": "clu-Latn-PH", - "clu-PH": "clu-Latn-PH", - "clw": "clw-Cyrl-RU", - "clw-Cyrl": "clw-Cyrl-RU", - "clw-RU": "clw-Cyrl-RU", - "cly": "cly-Latn-MX", - "cly-Latn": "cly-Latn-MX", - "cly-MX": "cly-Latn-MX", - "cma": "cma-Latn-VN", - "cma-Latn": "cma-Latn-VN", - "cma-VN": "cma-Latn-VN", - "cme": "cme-Latn-BF", - "cme-BF": "cme-Latn-BF", - "cme-Latn": "cme-Latn-BF", - "cmg": "cmg-Soyo-MN", - "cmg-MN": "cmg-Soyo-MN", - "cmg-Soyo": "cmg-Soyo-MN", - "cmg-Zanb": "cmg-Zanb-MN", - "cmi": "cmi-Latn-CO", - "cmi-CO": "cmi-Latn-CO", - "cmi-Latn": "cmi-Latn-CO", - "cml": "cml-Latn-ID", - "cml-ID": "cml-Latn-ID", - "cml-Latn": "cml-Latn-ID", - "cmo": "cmo-Latn-VN", - "cmo-Latn": "cmo-Latn-VN", - "cmo-VN": "cmo-Latn-VN", - "cmr": "cmr-Latn-MM", - "cmr-Latn": "cmr-Latn-MM", - "cmr-MM": "cmr-Latn-MM", - "cms": "cms-Latn-IT", - "cms-IT": "cms-Latn-IT", - "cms-Latn": "cms-Latn-IT", - "cmt": "cmt-Latn-ZA", - "cmt-Latn": "cmt-Latn-ZA", - "cmt-ZA": "cmt-Latn-ZA", - "cna": "cna-Tibt-IN", - "cna-IN": "cna-Tibt-IN", - "cna-Tibt": "cna-Tibt-IN", - "cnb": "cnb-Latn-MM", - "cnb-Latn": "cnb-Latn-MM", - "cnb-MM": "cnb-Latn-MM", - "cnc": "cnc-Latn-VN", - "cnc-Latn": "cnc-Latn-VN", - "cnc-VN": "cnc-Latn-VN", - "cng": "cng-Latn-CN", - "cng-CN": "cng-Latn-CN", - "cng-Latn": "cng-Latn-CN", - "cnh": "cnh-Latn-MM", - "cnh-Latn": "cnh-Latn-MM", - "cnh-MM": "cnh-Latn-MM", - "cni": "cni-Latn-PE", - "cni-Latn": "cni-Latn-PE", - "cni-PE": "cni-Latn-PE", - "cnk": "cnk-Latn-MM", - "cnk-Latn": "cnk-Latn-MM", - "cnk-MM": "cnk-Latn-MM", - "cnl": "cnl-Latn-MX", - "cnl-Latn": "cnl-Latn-MX", - "cnl-MX": "cnl-Latn-MX", - "cnp": "cnp-Hans-CN", - "cnp-CN": "cnp-Hans-CN", - "cnp-Hans": "cnp-Hans-CN", - "cnq": "cnq-Latn-CM", - "cnq-CM": "cnq-Latn-CM", - "cnq-Latn": "cnq-Latn-CM", - "cnr": "cnr-Cyrl-ME", - "cnr-Cyrl": "cnr-Cyrl-ME", - "cnr-ME": "cnr-Cyrl-ME", - "cns": "cns-Latn-ID", - "cns-ID": "cns-Latn-ID", - "cns-Latn": "cns-Latn-ID", - "cnt": "cnt-Latn-MX", - "cnt-Latn": "cnt-Latn-MX", - "cnt-MX": "cnt-Latn-MX", - "cnw": "cnw-Latn-MM", - "cnw-Latn": "cnw-Latn-MM", - "cnw-MM": "cnw-Latn-MM", - "cnx": "cnx-Latn-GB", - "cnx-GB": "cnx-Latn-GB", - "cnx-Latn": "cnx-Latn-GB", - "co": "co-Latn-FR", - "co-FR": "co-Latn-FR", - "co-Latn": "co-Latn-FR", - "coa": "coa-Latn-AU", - "coa-AU": "coa-Latn-AU", - "coa-Latn": "coa-Latn-AU", - "cob": "cob-Latn-MX", - "cob-Latn": "cob-Latn-MX", - "cob-MX": "cob-Latn-MX", - "coc": "coc-Latn-MX", - "coc-Latn": "coc-Latn-MX", - "coc-MX": "coc-Latn-MX", - "cod": "cod-Latn-PE", - "cod-Latn": "cod-Latn-PE", - "cod-PE": "cod-Latn-PE", - "coe": "coe-Latn-CO", - "coe-CO": "coe-Latn-CO", - "coe-Latn": "coe-Latn-CO", - "cof": "cof-Latn-EC", - "cof-EC": "cof-Latn-EC", - "cof-Latn": "cof-Latn-EC", - "cog": "cog-Thai-TH", - "cog-TH": "cog-Thai-TH", - "cog-Thai": "cog-Thai-TH", - "coh": "coh-Latn-KE", - "coh-KE": "coh-Latn-KE", - "coh-Latn": "coh-Latn-KE", - "coj": "coj-Latn-MX", - "coj-Latn": "coj-Latn-MX", - "coj-MX": "coj-Latn-MX", - "cok": "cok-Latn-MX", - "cok-Latn": "cok-Latn-MX", - "cok-MX": "cok-Latn-MX", - "col": "col-Latn-US", - "col-Latn": "col-Latn-US", - "col-US": "col-Latn-US", - "com": "com-Latn-US", - "com-Latn": "com-Latn-US", - "com-US": "com-Latn-US", - "coo": "coo-Latn-CA", - "coo-CA": "coo-Latn-CA", - "coo-Latn": "coo-Latn-CA", - "cop": "cop-Copt-EG", - "cop-Copt": "cop-Copt-EG", - "cop-EG": "cop-Copt-EG", - "coq": "coq-Latn-US", - "coq-Latn": "coq-Latn-US", - "coq-US": "coq-Latn-US", - "cot": "cot-Latn-PE", - "cot-Latn": "cot-Latn-PE", - "cot-PE": "cot-Latn-PE", - "cou": "cou-Latn-SN", - "cou-Latn": "cou-Latn-SN", - "cou-SN": "cou-Latn-SN", - "cox": "cox-Latn-PE", - "cox-Latn": "cox-Latn-PE", - "cox-PE": "cox-Latn-PE", - "coz": "coz-Latn-MX", - "coz-Latn": "coz-Latn-MX", - "coz-MX": "coz-Latn-MX", - "cpa": "cpa-Latn-MX", - "cpa-Latn": "cpa-Latn-MX", - "cpa-MX": "cpa-Latn-MX", - "cpb": "cpb-Latn-PE", - "cpb-Latn": "cpb-Latn-PE", - "cpb-PE": "cpb-Latn-PE", - "cpc": "cpc-Latn-PE", - "cpc-Latn": "cpc-Latn-PE", - "cpc-PE": "cpc-Latn-PE", - "cpg": "cpg-Grek-GR", - "cpg-GR": "cpg-Grek-GR", - "cpg-Grek": "cpg-Grek-GR", - "cpi": "cpi-Latn-NR", - "cpi-Latn": "cpi-Latn-NR", - "cpi-NR": "cpi-Latn-NR", - "cpn": "cpn-Latn-GH", - "cpn-GH": "cpn-Latn-GH", - "cpn-Latn": "cpn-Latn-GH", - "cpo": "cpo-Latn-BF", - "cpo-BF": "cpo-Latn-BF", - "cpo-Latn": "cpo-Latn-BF", - "cps": "cps-Latn-PH", - "cps-Latn": "cps-Latn-PH", - "cps-PH": "cps-Latn-PH", - "cpu": "cpu-Latn-PE", - "cpu-Latn": "cpu-Latn-PE", - "cpu-PE": "cpu-Latn-PE", - "cpx": "cpx-Latn-CN", - "cpx-CN": "cpx-Latn-CN", - "cpx-Latn": "cpx-Latn-CN", - "cpy": "cpy-Latn-PE", - "cpy-Latn": "cpy-Latn-PE", - "cpy-PE": "cpy-Latn-PE", - "cqd": "cqd-Latn-CN", - "cqd-CN": "cqd-Latn-CN", - "cqd-Latn": "cqd-Latn-CN", - "cr": "cr-Cans-CA", - "cr-CA": "cr-Cans-CA", - "cr-Cans": "cr-Cans-CA", - "cra": "cra-Latn-ET", - "cra-ET": "cra-Latn-ET", - "cra-Latn": "cra-Latn-ET", - "crb": "crb-Latn-VC", - "crb-Latn": "crb-Latn-VC", - "crb-VC": "crb-Latn-VC", - "crc": "crc-Latn-VU", - "crc-Latn": "crc-Latn-VU", - "crc-VU": "crc-Latn-VU", - "crd": "crd-Latn-US", - "crd-Latn": "crd-Latn-US", - "crd-US": "crd-Latn-US", - "crf": "crf-Latn-CO", - "crf-CO": "crf-Latn-CO", - "crf-Latn": "crf-Latn-CO", - "crg": "crg-Latn-CA", - "crg-CA": "crg-Latn-CA", - "crg-Latn": "crg-Latn-CA", - "crh": "crh-Cyrl-UA", - "crh-Cyrl": "crh-Cyrl-UA", - "crh-UA": "crh-Cyrl-UA", - "cri": "cri-Latn-ST", - "cri-Latn": "cri-Latn-ST", - "cri-ST": "cri-Latn-ST", - "crj": "crj-Cans-CA", - "crj-CA": "crj-Cans-CA", - "crj-Cans": "crj-Cans-CA", - "crk": "crk-Cans-CA", - "crk-CA": "crk-Cans-CA", - "crk-Cans": "crk-Cans-CA", - "crl": "crl-Cans-CA", - "crl-CA": "crl-Cans-CA", - "crl-Cans": "crl-Cans-CA", - "crm": "crm-Cans-CA", - "crm-CA": "crm-Cans-CA", - "crm-Cans": "crm-Cans-CA", - "crn": "crn-Latn-MX", - "crn-Latn": "crn-Latn-MX", - "crn-MX": "crn-Latn-MX", - "cro": "cro-Latn-US", - "cro-Latn": "cro-Latn-US", - "cro-US": "cro-Latn-US", - "crq": "crq-Latn-AR", - "crq-AR": "crq-Latn-AR", - "crq-Latn": "crq-Latn-AR", - "crs": "crs-Latn-SC", - "crs-Latn": "crs-Latn-SC", - "crs-SC": "crs-Latn-SC", - "crt": "crt-Latn-AR", - "crt-AR": "crt-Latn-AR", - "crt-Latn": "crt-Latn-AR", - "crv": "crv-Latn-IN", - "crv-IN": "crv-Latn-IN", - "crv-Latn": "crv-Latn-IN", - "crw": "crw-Latn-VN", - "crw-Latn": "crw-Latn-VN", - "crw-VN": "crw-Latn-VN", - "crx": "crx-Latn-CA", - "crx-CA": "crx-Latn-CA", - "crx-Latn": "crx-Latn-CA", - "cry": "cry-Latn-NG", - "cry-Latn": "cry-Latn-NG", - "cry-NG": "cry-Latn-NG", - "crz": "crz-Latn-US", - "crz-Latn": "crz-Latn-US", - "crz-US": "crz-Latn-US", - "cs": "cs-Latn-CZ", - "cs-CZ": "cs-Latn-CZ", - "cs-Latn": "cs-Latn-CZ", - "csa": "csa-Latn-MX", - "csa-Latn": "csa-Latn-MX", - "csa-MX": "csa-Latn-MX", - "csb": "csb-Latn-PL", - "csb-Latn": "csb-Latn-PL", - "csb-PL": "csb-Latn-PL", - "csh": "csh-Mymr-MM", - "csh-MM": "csh-Mymr-MM", - "csh-Mymr": "csh-Mymr-MM", - "csj": "csj-Latn-MM", - "csj-Latn": "csj-Latn-MM", - "csj-MM": "csj-Latn-MM", - "csk": "csk-Latn-SN", - "csk-Latn": "csk-Latn-SN", - "csk-SN": "csk-Latn-SN", - "csm": "csm-Latn-US", - "csm-Latn": "csm-Latn-US", - "csm-US": "csm-Latn-US", - "cso": "cso-Latn-MX", - "cso-Latn": "cso-Latn-MX", - "cso-MX": "cso-Latn-MX", - "csp": "csp-Hans-CN", - "csp-CN": "csp-Hans-CN", - "csp-Hans": "csp-Hans-CN", - "css": "css-Latn-US", - "css-Latn": "css-Latn-US", - "css-US": "css-Latn-US", - "cst": "cst-Latn-US", - "cst-Latn": "cst-Latn-US", - "cst-US": "cst-Latn-US", - "csv": "csv-Latn-MM", - "csv-Latn": "csv-Latn-MM", - "csv-MM": "csv-Latn-MM", - "csw": "csw-Cans-CA", - "csw-CA": "csw-Cans-CA", - "csw-Cans": "csw-Cans-CA", - "csy": "csy-Latn-MM", - "csy-Latn": "csy-Latn-MM", - "csy-MM": "csy-Latn-MM", - "csz": "csz-Latn-US", - "csz-Latn": "csz-Latn-US", - "csz-US": "csz-Latn-US", - "cta": "cta-Latn-MX", - "cta-Latn": "cta-Latn-MX", - "cta-MX": "cta-Latn-MX", - "ctc": "ctc-Latn-US", - "ctc-Latn": "ctc-Latn-US", - "ctc-US": "ctc-Latn-US", - "ctd": "ctd-Pauc-MM", - "ctd-MM": "ctd-Pauc-MM", - "ctd-Pauc": "ctd-Pauc-MM", - "cte": "cte-Latn-MX", - "cte-Latn": "cte-Latn-MX", - "cte-MX": "cte-Latn-MX", - "ctg": "ctg-Beng-BD", - "ctg-BD": "ctg-Beng-BD", - "ctg-Beng": "ctg-Beng-BD", - "cth": "cth-Latn-MM", - "cth-Latn": "cth-Latn-MM", - "cth-MM": "cth-Latn-MM", - "ctl": "ctl-Latn-MX", - "ctl-Latn": "ctl-Latn-MX", - "ctl-MX": "ctl-Latn-MX", - "ctm": "ctm-Latn-US", - "ctm-Latn": "ctm-Latn-US", - "ctm-US": "ctm-Latn-US", - "ctn": "ctn-Deva-NP", - "ctn-Deva": "ctn-Deva-NP", - "ctn-NP": "ctn-Deva-NP", - "cto": "cto-Latn-CO", - "cto-CO": "cto-Latn-CO", - "cto-Latn": "cto-Latn-CO", - "ctp": "ctp-Latn-MX", - "ctp-Latn": "ctp-Latn-MX", - "ctp-MX": "ctp-Latn-MX", - "cts": "cts-Latn-PH", - "cts-Latn": "cts-Latn-PH", - "cts-PH": "cts-Latn-PH", - "ctt": "ctt-Taml-IN", - "ctt-IN": "ctt-Taml-IN", - "ctt-Taml": "ctt-Taml-IN", - "ctu": "ctu-Latn-MX", - "ctu-Latn": "ctu-Latn-MX", - "ctu-MX": "ctu-Latn-MX", - "cty": "cty-Taml-IN", - "cty-IN": "cty-Taml-IN", - "cty-Taml": "cty-Taml-IN", - "ctz": "ctz-Latn-MX", - "ctz-Latn": "ctz-Latn-MX", - "ctz-MX": "ctz-Latn-MX", - "cu": "cu-Cyrl-RU", - "cu-Cyrl": "cu-Cyrl-RU", - "cu-Glag": "cu-Glag-BG", - "cu-RU": "cu-Cyrl-RU", - "cua": "cua-Latn-VN", - "cua-Latn": "cua-Latn-VN", - "cua-VN": "cua-Latn-VN", - "cub": "cub-Latn-CO", - "cub-CO": "cub-Latn-CO", - "cub-Latn": "cub-Latn-CO", - "cuc": "cuc-Latn-MX", - "cuc-Latn": "cuc-Latn-MX", - "cuc-MX": "cuc-Latn-MX", - "cuh": "cuh-Latn-KE", - "cuh-KE": "cuh-Latn-KE", - "cuh-Latn": "cuh-Latn-KE", - "cui": "cui-Latn-CO", - "cui-CO": "cui-Latn-CO", - "cui-Latn": "cui-Latn-CO", - "cuj": "cuj-Latn-PE", - "cuj-Latn": "cuj-Latn-PE", - "cuj-PE": "cuj-Latn-PE", - "cuk": "cuk-Latn-PA", - "cuk-Latn": "cuk-Latn-PA", - "cuk-PA": "cuk-Latn-PA", - "cul": "cul-Latn-BR", - "cul-BR": "cul-Latn-BR", - "cul-Latn": "cul-Latn-BR", - "cuo": "cuo-Latn-VE", - "cuo-Latn": "cuo-Latn-VE", - "cuo-VE": "cuo-Latn-VE", - "cup": "cup-Latn-US", - "cup-Latn": "cup-Latn-US", - "cup-US": "cup-Latn-US", - "cut": "cut-Latn-MX", - "cut-Latn": "cut-Latn-MX", - "cut-MX": "cut-Latn-MX", - "cuu": "cuu-Lana-CN", - "cuu-CN": "cuu-Lana-CN", - "cuu-Lana": "cuu-Lana-CN", - "cuv": "cuv-Latn-CM", - "cuv-CM": "cuv-Latn-CM", - "cuv-Latn": "cuv-Latn-CM", - "cux": "cux-Latn-MX", - "cux-Latn": "cux-Latn-MX", - "cux-MX": "cux-Latn-MX", - "cuy": "cuy-Latn-MX", - "cuy-Latn": "cuy-Latn-MX", - "cuy-MX": "cuy-Latn-MX", - "cv": "cv-Cyrl-RU", - "cv-Cyrl": "cv-Cyrl-RU", - "cv-RU": "cv-Cyrl-RU", - "cvg": "cvg-Latn-IN", - "cvg-IN": "cvg-Latn-IN", - "cvg-Latn": "cvg-Latn-IN", - "cvn": "cvn-Latn-MX", - "cvn-Latn": "cvn-Latn-MX", - "cvn-MX": "cvn-Latn-MX", - "cwa": "cwa-Latn-TZ", - "cwa-Latn": "cwa-Latn-TZ", - "cwa-TZ": "cwa-Latn-TZ", - "cwb": "cwb-Latn-MZ", - "cwb-Latn": "cwb-Latn-MZ", - "cwb-MZ": "cwb-Latn-MZ", - "cwe": "cwe-Latn-TZ", - "cwe-Latn": "cwe-Latn-TZ", - "cwe-TZ": "cwe-Latn-TZ", - "cwg": "cwg-Latn-MY", - "cwg-Latn": "cwg-Latn-MY", - "cwg-MY": "cwg-Latn-MY", - "cwt": "cwt-Latn-SN", - "cwt-Latn": "cwt-Latn-SN", - "cwt-SN": "cwt-Latn-SN", - "cxh": "cxh-Latn-NG", - "cxh-Latn": "cxh-Latn-NG", - "cxh-NG": "cxh-Latn-NG", - "cy": "cy-Latn-GB", - "cy-GB": "cy-Latn-GB", - "cy-Latn": "cy-Latn-GB", - "cya": "cya-Latn-MX", - "cya-Latn": "cya-Latn-MX", - "cya-MX": "cya-Latn-MX", - "cyb": "cyb-Latn-BO", - "cyb-BO": "cyb-Latn-BO", - "cyb-Latn": "cyb-Latn-BO", - "cyo": "cyo-Latn-PH", - "cyo-Latn": "cyo-Latn-PH", - "cyo-PH": "cyo-Latn-PH", - "czh": "czh-Hans-CN", - "czh-CN": "czh-Hans-CN", - "czh-Hans": "czh-Hans-CN", - "czk": "czk-Hebr-CZ", - "czk-CZ": "czk-Hebr-CZ", - "czk-Hebr": "czk-Hebr-CZ", - "czn": "czn-Latn-MX", - "czn-Latn": "czn-Latn-MX", - "czn-MX": "czn-Latn-MX", - "czt": "czt-Latn-MM", - "czt-Latn": "czt-Latn-MM", - "czt-MM": "czt-Latn-MM", - "da": "da-Latn-DK", - "da-DK": "da-Latn-DK", - "da-Latn": "da-Latn-DK", - "daa": "daa-Latn-TD", - "daa-Latn": "daa-Latn-TD", - "daa-TD": "daa-Latn-TD", - "dac": "dac-Latn-PG", - "dac-Latn": "dac-Latn-PG", - "dac-PG": "dac-Latn-PG", - "dad": "dad-Latn-PG", - "dad-Latn": "dad-Latn-PG", - "dad-PG": "dad-Latn-PG", - "dae": "dae-Latn-CM", - "dae-CM": "dae-Latn-CM", - "dae-Latn": "dae-Latn-CM", - "dag": "dag-Latn-GH", - "dag-GH": "dag-Latn-GH", - "dag-Latn": "dag-Latn-GH", - "dah": "dah-Latn-PG", - "dah-Latn": "dah-Latn-PG", - "dah-PG": "dah-Latn-PG", - "dai": "dai-Latn-TD", - "dai-Latn": "dai-Latn-TD", - "dai-TD": "dai-Latn-TD", - "daj": "daj-Latn-SD", - "daj-Latn": "daj-Latn-SD", - "daj-SD": "daj-Latn-SD", - "dak": "dak-Latn-US", - "dak-Latn": "dak-Latn-US", - "dak-US": "dak-Latn-US", - "dal": "dal-Latn-KE", - "dal-KE": "dal-Latn-KE", - "dal-Latn": "dal-Latn-KE", - "dam": "dam-Latn-NG", - "dam-Latn": "dam-Latn-NG", - "dam-NG": "dam-Latn-NG", - "dao": "dao-Latn-MM", - "dao-Latn": "dao-Latn-MM", - "dao-MM": "dao-Latn-MM", - "daq": "daq-Deva-IN", - "daq-Deva": "daq-Deva-IN", - "daq-IN": "daq-Deva-IN", - "dar": "dar-Cyrl-RU", - "dar-Cyrl": "dar-Cyrl-RU", - "dar-RU": "dar-Cyrl-RU", - "das": "das-Latn-CI", - "das-CI": "das-Latn-CI", - "das-Latn": "das-Latn-CI", - "dau": "dau-Latn-TD", - "dau-Latn": "dau-Latn-TD", - "dau-TD": "dau-Latn-TD", - "dav": "dav-Latn-KE", - "dav-KE": "dav-Latn-KE", - "dav-Latn": "dav-Latn-KE", - "daw": "daw-Latn-PH", - "daw-Latn": "daw-Latn-PH", - "daw-PH": "daw-Latn-PH", - "dax": "dax-Latn-AU", - "dax-AU": "dax-Latn-AU", - "dax-Latn": "dax-Latn-AU", - "daz": "daz-Latn-ID", - "daz-ID": "daz-Latn-ID", - "daz-Latn": "daz-Latn-ID", - "dba": "dba-Latn-ML", - "dba-Latn": "dba-Latn-ML", - "dba-ML": "dba-Latn-ML", - "dbb": "dbb-Latn-NG", - "dbb-Latn": "dbb-Latn-NG", - "dbb-NG": "dbb-Latn-NG", - "dbd": "dbd-Latn-NG", - "dbd-Latn": "dbd-Latn-NG", - "dbd-NG": "dbd-Latn-NG", - "dbe": "dbe-Latn-ID", - "dbe-ID": "dbe-Latn-ID", - "dbe-Latn": "dbe-Latn-ID", - "dbf": "dbf-Latn-ID", - "dbf-ID": "dbf-Latn-ID", - "dbf-Latn": "dbf-Latn-ID", - "dbg": "dbg-Latn-ML", - "dbg-Latn": "dbg-Latn-ML", - "dbg-ML": "dbg-Latn-ML", - "dbi": "dbi-Latn-NG", - "dbi-Latn": "dbi-Latn-NG", - "dbi-NG": "dbi-Latn-NG", - "dbj": "dbj-Latn-MY", - "dbj-Latn": "dbj-Latn-MY", - "dbj-MY": "dbj-Latn-MY", - "dbl": "dbl-Latn-AU", - "dbl-AU": "dbl-Latn-AU", - "dbl-Latn": "dbl-Latn-AU", - "dbm": "dbm-Latn-NG", - "dbm-Latn": "dbm-Latn-NG", - "dbm-NG": "dbm-Latn-NG", - "dbn": "dbn-Latn-ID", - "dbn-ID": "dbn-Latn-ID", - "dbn-Latn": "dbn-Latn-ID", - "dbo": "dbo-Latn-NG", - "dbo-Latn": "dbo-Latn-NG", - "dbo-NG": "dbo-Latn-NG", - "dbp": "dbp-Latn-NG", - "dbp-Latn": "dbp-Latn-NG", - "dbp-NG": "dbp-Latn-NG", - "dbq": "dbq-Latn-CM", - "dbq-CM": "dbq-Latn-CM", - "dbq-Latn": "dbq-Latn-CM", - "dbt": "dbt-Latn-ML", - "dbt-Latn": "dbt-Latn-ML", - "dbt-ML": "dbt-Latn-ML", - "dbu": "dbu-Latn-ML", - "dbu-Latn": "dbu-Latn-ML", - "dbu-ML": "dbu-Latn-ML", - "dbv": "dbv-Latn-NG", - "dbv-Latn": "dbv-Latn-NG", - "dbv-NG": "dbv-Latn-NG", - "dbw": "dbw-Latn-ML", - "dbw-Latn": "dbw-Latn-ML", - "dbw-ML": "dbw-Latn-ML", - "dby": "dby-Latn-PG", - "dby-Latn": "dby-Latn-PG", - "dby-PG": "dby-Latn-PG", - "dcc": "dcc-Arab-IN", - "dcc-Arab": "dcc-Arab-IN", - "dcc-IN": "dcc-Arab-IN", - "dcr": "dcr-Latn-VI", - "dcr-Latn": "dcr-Latn-VI", - "dcr-VI": "dcr-Latn-VI", - "dda": "dda-Latn-AU", - "dda-AU": "dda-Latn-AU", - "dda-Latn": "dda-Latn-AU", - "ddd": "ddd-Latn-SS", - "ddd-Latn": "ddd-Latn-SS", - "ddd-SS": "ddd-Latn-SS", - "dde": "dde-Latn-CG", - "dde-CG": "dde-Latn-CG", - "dde-Latn": "dde-Latn-CG", - "ddg": "ddg-Latn-TL", - "ddg-Latn": "ddg-Latn-TL", - "ddg-TL": "ddg-Latn-TL", - "ddi": "ddi-Latn-PG", - "ddi-Latn": "ddi-Latn-PG", - "ddi-PG": "ddi-Latn-PG", - "ddj": "ddj-Latn-AU", - "ddj-AU": "ddj-Latn-AU", - "ddj-Latn": "ddj-Latn-AU", - "ddn": "ddn-Latn-BJ", - "ddn-BJ": "ddn-Latn-BJ", - "ddn-Latn": "ddn-Latn-BJ", - "ddo": "ddo-Cyrl-RU", - "ddo-Cyrl": "ddo-Cyrl-RU", - "ddo-RU": "ddo-Cyrl-RU", - "ddr": "ddr-Latn-AU", - "ddr-AU": "ddr-Latn-AU", - "ddr-Latn": "ddr-Latn-AU", - "dds": "dds-Latn-ML", - "dds-Latn": "dds-Latn-ML", - "dds-ML": "dds-Latn-ML", - "ddw": "ddw-Latn-ID", - "ddw-ID": "ddw-Latn-ID", - "ddw-Latn": "ddw-Latn-ID", - "de": "de-Latn-DE", - "de-AT": "de-Latn-AT", - "de-CH": "de-Latn-CH", - "de-DE": "de-Latn-DE", - "de-LI": "de-Latn-LI", - "de-LU": "de-Latn-LU", - "de-Latn": "de-Latn-DE", - "dec": "dec-Latn-SD", - "dec-Latn": "dec-Latn-SD", - "dec-SD": "dec-Latn-SD", - "ded": "ded-Latn-PG", - "ded-Latn": "ded-Latn-PG", - "ded-PG": "ded-Latn-PG", - "dee": "dee-Latn-LR", - "dee-LR": "dee-Latn-LR", - "dee-Latn": "dee-Latn-LR", - "def": "def-Arab-IR", - "def-Arab": "def-Arab-IR", - "def-IR": "def-Arab-IR", - "deg": "deg-Latn-NG", - "deg-Latn": "deg-Latn-NG", - "deg-NG": "deg-Latn-NG", - "deh": "deh-Arab-PK", - "deh-Arab": "deh-Arab-PK", - "deh-PK": "deh-Arab-PK", - "dei": "dei-Latn-ID", - "dei-ID": "dei-Latn-ID", - "dei-Latn": "dei-Latn-ID", - "dek": "dek-Latn-CM", - "dek-CM": "dek-Latn-CM", - "dek-Latn": "dek-Latn-CM", - "del": "del-Latn-US", - "del-Latn": "del-Latn-US", - "del-US": "del-Latn-US", - "dem": "dem-Latn-ID", - "dem-ID": "dem-Latn-ID", - "dem-Latn": "dem-Latn-ID", - "den": "den-Latn-CA", - "den-CA": "den-Latn-CA", - "den-Latn": "den-Latn-CA", - "deq": "deq-Latn-CF", - "deq-CF": "deq-Latn-CF", - "deq-Latn": "deq-Latn-CF", - "der": "der-Beng-IN", - "der-Beng": "der-Beng-IN", - "der-IN": "der-Beng-IN", - "des": "des-Latn-BR", - "des-BR": "des-Latn-BR", - "des-Latn": "des-Latn-BR", - "dev": "dev-Latn-PG", - "dev-Latn": "dev-Latn-PG", - "dev-PG": "dev-Latn-PG", - "dez": "dez-Latn-CD", - "dez-CD": "dez-Latn-CD", - "dez-Latn": "dez-Latn-CD", - "dga": "dga-Latn-GH", - "dga-GH": "dga-Latn-GH", - "dga-Latn": "dga-Latn-GH", - "dgb": "dgb-Latn-ML", - "dgb-Latn": "dgb-Latn-ML", - "dgb-ML": "dgb-Latn-ML", - "dgc": "dgc-Latn-PH", - "dgc-Latn": "dgc-Latn-PH", - "dgc-PH": "dgc-Latn-PH", - "dgd": "dgd-Latn-BF", - "dgd-BF": "dgd-Latn-BF", - "dgd-Latn": "dgd-Latn-BF", - "dge": "dge-Latn-PG", - "dge-Latn": "dge-Latn-PG", - "dge-PG": "dge-Latn-PG", - "dgg": "dgg-Latn-PG", - "dgg-Latn": "dgg-Latn-PG", - "dgg-PG": "dgg-Latn-PG", - "dgh": "dgh-Latn-NG", - "dgh-Latn": "dgh-Latn-NG", - "dgh-NG": "dgh-Latn-NG", - "dgi": "dgi-Latn-BF", - "dgi-BF": "dgi-Latn-BF", - "dgi-Latn": "dgi-Latn-BF", - "dgk": "dgk-Latn-CF", - "dgk-CF": "dgk-Latn-CF", - "dgk-Latn": "dgk-Latn-CF", - "dgl": "dgl-Arab-SD", - "dgl-Arab": "dgl-Arab-SD", - "dgl-SD": "dgl-Arab-SD", - "dgn": "dgn-Latn-AU", - "dgn-AU": "dgn-Latn-AU", - "dgn-Latn": "dgn-Latn-AU", - "dgr": "dgr-Latn-CA", - "dgr-CA": "dgr-Latn-CA", - "dgr-Latn": "dgr-Latn-CA", - "dgs": "dgs-Latn-BF", - "dgs-BF": "dgs-Latn-BF", - "dgs-Latn": "dgs-Latn-BF", - "dgt": "dgt-Latn-AU", - "dgt-AU": "dgt-Latn-AU", - "dgt-Latn": "dgt-Latn-AU", - "dgw": "dgw-Latn-AU", - "dgw-AU": "dgw-Latn-AU", - "dgw-Latn": "dgw-Latn-AU", - "dgx": "dgx-Latn-PG", - "dgx-Latn": "dgx-Latn-PG", - "dgx-PG": "dgx-Latn-PG", - "dgz": "dgz-Latn-PG", - "dgz-Latn": "dgz-Latn-PG", - "dgz-PG": "dgz-Latn-PG", - "dhg": "dhg-Latn-AU", - "dhg-AU": "dhg-Latn-AU", - "dhg-Latn": "dhg-Latn-AU", - "dhi": "dhi-Deva-NP", - "dhi-Deva": "dhi-Deva-NP", - "dhi-NP": "dhi-Deva-NP", - "dhl": "dhl-Latn-AU", - "dhl-AU": "dhl-Latn-AU", - "dhl-Latn": "dhl-Latn-AU", - "dhm": "dhm-Latn-AO", - "dhm-AO": "dhm-Latn-AO", - "dhm-Latn": "dhm-Latn-AO", - "dhn": "dhn-Gujr-IN", - "dhn-Gujr": "dhn-Gujr-IN", - "dhn-IN": "dhn-Gujr-IN", - "dho": "dho-Deva-IN", - "dho-Deva": "dho-Deva-IN", - "dho-IN": "dho-Deva-IN", - "dhr": "dhr-Latn-AU", - "dhr-AU": "dhr-Latn-AU", - "dhr-Latn": "dhr-Latn-AU", - "dhs": "dhs-Latn-TZ", - "dhs-Latn": "dhs-Latn-TZ", - "dhs-TZ": "dhs-Latn-TZ", - "dhu": "dhu-Latn-AU", - "dhu-AU": "dhu-Latn-AU", - "dhu-Latn": "dhu-Latn-AU", - "dhv": "dhv-Latn-NC", - "dhv-Latn": "dhv-Latn-NC", - "dhv-NC": "dhv-Latn-NC", - "dhw": "dhw-Deva-NP", - "dhw-Deva": "dhw-Deva-NP", - "dhw-NP": "dhw-Deva-NP", - "dhx": "dhx-Latn-AU", - "dhx-AU": "dhx-Latn-AU", - "dhx-Latn": "dhx-Latn-AU", - "dia": "dia-Latn-PG", - "dia-Latn": "dia-Latn-PG", - "dia-PG": "dia-Latn-PG", - "dib": "dib-Latn-SS", - "dib-Latn": "dib-Latn-SS", - "dib-SS": "dib-Latn-SS", - "dic": "dic-Latn-CI", - "dic-CI": "dic-Latn-CI", - "dic-Latn": "dic-Latn-CI", - "did": "did-Latn-SS", - "did-Latn": "did-Latn-SS", - "did-SS": "did-Latn-SS", - "dif": "dif-Latn-AU", - "dif-AU": "dif-Latn-AU", - "dif-Latn": "dif-Latn-AU", - "dig": "dig-Latn-KE", - "dig-KE": "dig-Latn-KE", - "dig-Latn": "dig-Latn-KE", - "dih": "dih-Latn-MX", - "dih-Latn": "dih-Latn-MX", - "dih-MX": "dih-Latn-MX", - "dii": "dii-Latn-CM", - "dii-CM": "dii-Latn-CM", - "dii-Latn": "dii-Latn-CM", - "dij": "dij-Latn-ID", - "dij-ID": "dij-Latn-ID", - "dij-Latn": "dij-Latn-ID", - "dil": "dil-Latn-SD", - "dil-Latn": "dil-Latn-SD", - "dil-SD": "dil-Latn-SD", - "din": "din-Latn-SS", - "din-Latn": "din-Latn-SS", - "din-SS": "din-Latn-SS", - "dio": "dio-Latn-NG", - "dio-Latn": "dio-Latn-NG", - "dio-NG": "dio-Latn-NG", - "dip": "dip-Latn-SS", - "dip-Latn": "dip-Latn-SS", - "dip-SS": "dip-Latn-SS", - "dir": "dir-Latn-NG", - "dir-Latn": "dir-Latn-NG", - "dir-NG": "dir-Latn-NG", - "dis": "dis-Latn-IN", - "dis-IN": "dis-Latn-IN", - "dis-Latn": "dis-Latn-IN", - "diu": "diu-Latn-NA", - "diu-Latn": "diu-Latn-NA", - "diu-NA": "diu-Latn-NA", - "diw": "diw-Latn-SS", - "diw-Latn": "diw-Latn-SS", - "diw-SS": "diw-Latn-SS", - "dix": "dix-Latn-VU", - "dix-Latn": "dix-Latn-VU", - "dix-VU": "dix-Latn-VU", - "diy": "diy-Latn-ID", - "diy-ID": "diy-Latn-ID", - "diy-Latn": "diy-Latn-ID", - "diz": "diz-Latn-CD", - "diz-CD": "diz-Latn-CD", - "diz-Latn": "diz-Latn-CD", - "dja": "dja-Latn-AU", - "dja-AU": "dja-Latn-AU", - "dja-Latn": "dja-Latn-AU", - "djb": "djb-Latn-AU", - "djb-AU": "djb-Latn-AU", - "djb-Latn": "djb-Latn-AU", - "djc": "djc-Latn-TD", - "djc-Latn": "djc-Latn-TD", - "djc-TD": "djc-Latn-TD", - "djd": "djd-Latn-AU", - "djd-AU": "djd-Latn-AU", - "djd-Latn": "djd-Latn-AU", - "dje": "dje-Latn-NE", - "dje-Latn": "dje-Latn-NE", - "dje-NE": "dje-Latn-NE", - "djf": "djf-Latn-AU", - "djf-AU": "djf-Latn-AU", - "djf-Latn": "djf-Latn-AU", - "dji": "dji-Latn-AU", - "dji-AU": "dji-Latn-AU", - "dji-Latn": "dji-Latn-AU", - "djj": "djj-Latn-AU", - "djj-AU": "djj-Latn-AU", - "djj-Latn": "djj-Latn-AU", - "djk": "djk-Latn-SR", - "djk-Afak": "djk-Afak-SR", - "djk-Latn": "djk-Latn-SR", - "djk-SR": "djk-Latn-SR", - "djm": "djm-Latn-ML", - "djm-Latn": "djm-Latn-ML", - "djm-ML": "djm-Latn-ML", - "djn": "djn-Latn-AU", - "djn-AU": "djn-Latn-AU", - "djn-Latn": "djn-Latn-AU", - "djo": "djo-Latn-ID", - "djo-ID": "djo-Latn-ID", - "djo-Latn": "djo-Latn-ID", - "djr": "djr-Latn-AU", - "djr-AU": "djr-Latn-AU", - "djr-Latn": "djr-Latn-AU", - "dju": "dju-Latn-PG", - "dju-Latn": "dju-Latn-PG", - "dju-PG": "dju-Latn-PG", - "djw": "djw-Latn-AU", - "djw-AU": "djw-Latn-AU", - "djw-Latn": "djw-Latn-AU", - "dka": "dka-Tibt-BT", - "dka-BT": "dka-Tibt-BT", - "dka-Tibt": "dka-Tibt-BT", - "dkg": "dkg-Latn-NG", - "dkg-Latn": "dkg-Latn-NG", - "dkg-NG": "dkg-Latn-NG", - "dkk": "dkk-Latn-ID", - "dkk-ID": "dkk-Latn-ID", - "dkk-Latn": "dkk-Latn-ID", - "dkr": "dkr-Latn-MY", - "dkr-Latn": "dkr-Latn-MY", - "dkr-MY": "dkr-Latn-MY", - "dks": "dks-Latn-SS", - "dks-Latn": "dks-Latn-SS", - "dks-SS": "dks-Latn-SS", - "dkx": "dkx-Latn-CM", - "dkx-CM": "dkx-Latn-CM", - "dkx-Latn": "dkx-Latn-CM", - "dlg": "dlg-Cyrl-RU", - "dlg-Cyrl": "dlg-Cyrl-RU", - "dlg-RU": "dlg-Cyrl-RU", - "dlm": "dlm-Latn-HR", - "dlm-HR": "dlm-Latn-HR", - "dlm-Latn": "dlm-Latn-HR", - "dln": "dln-Latn-IN", - "dln-IN": "dln-Latn-IN", - "dln-Latn": "dln-Latn-IN", - "dma": "dma-Latn-GA", - "dma-GA": "dma-Latn-GA", - "dma-Latn": "dma-Latn-GA", - "dmb": "dmb-Latn-ML", - "dmb-Latn": "dmb-Latn-ML", - "dmb-ML": "dmb-Latn-ML", - "dmc": "dmc-Latn-PG", - "dmc-Latn": "dmc-Latn-PG", - "dmc-PG": "dmc-Latn-PG", - "dmd": "dmd-Latn-AU", - "dmd-AU": "dmd-Latn-AU", - "dmd-Latn": "dmd-Latn-AU", - "dme": "dme-Latn-CM", - "dme-CM": "dme-Latn-CM", - "dme-Latn": "dme-Latn-CM", - "dmf": "dmf-Medf-NG", - "dmf-Medf": "dmf-Medf-NG", - "dmf-NG": "dmf-Medf-NG", - "dmg": "dmg-Latn-MY", - "dmg-Latn": "dmg-Latn-MY", - "dmg-MY": "dmg-Latn-MY", - "dmk": "dmk-Arab-PK", - "dmk-Arab": "dmk-Arab-PK", - "dmk-PK": "dmk-Arab-PK", - "dml": "dml-Arab-PK", - "dml-Arab": "dml-Arab-PK", - "dml-PK": "dml-Arab-PK", - "dmm": "dmm-Latn-CM", - "dmm-CM": "dmm-Latn-CM", - "dmm-Latn": "dmm-Latn-CM", - "dmo": "dmo-Latn-CM", - "dmo-CM": "dmo-Latn-CM", - "dmo-Latn": "dmo-Latn-CM", - "dmr": "dmr-Latn-ID", - "dmr-ID": "dmr-Latn-ID", - "dmr-Latn": "dmr-Latn-ID", - "dms": "dms-Latn-ID", - "dms-ID": "dms-Latn-ID", - "dms-Latn": "dms-Latn-ID", - "dmu": "dmu-Latn-ID", - "dmu-ID": "dmu-Latn-ID", - "dmu-Latn": "dmu-Latn-ID", - "dmv": "dmv-Latn-MY", - "dmv-Latn": "dmv-Latn-MY", - "dmv-MY": "dmv-Latn-MY", - "dmw": "dmw-Latn-AU", - "dmw-AU": "dmw-Latn-AU", - "dmw-Latn": "dmw-Latn-AU", - "dmx": "dmx-Latn-MZ", - "dmx-Latn": "dmx-Latn-MZ", - "dmx-MZ": "dmx-Latn-MZ", - "dmy": "dmy-Latn-ID", - "dmy-ID": "dmy-Latn-ID", - "dmy-Latn": "dmy-Latn-ID", - "dna": "dna-Latn-ID", - "dna-ID": "dna-Latn-ID", - "dna-Latn": "dna-Latn-ID", - "dnd": "dnd-Latn-PG", - "dnd-Latn": "dnd-Latn-PG", - "dnd-PG": "dnd-Latn-PG", - "dne": "dne-Latn-TZ", - "dne-Latn": "dne-Latn-TZ", - "dne-TZ": "dne-Latn-TZ", - "dng": "dng-Cyrl-KG", - "dng-Cyrl": "dng-Cyrl-KG", - "dng-KG": "dng-Cyrl-KG", - "dni": "dni-Latn-ID", - "dni-ID": "dni-Latn-ID", - "dni-Latn": "dni-Latn-ID", - "dnj": "dnj-Latn-CI", - "dnj-CI": "dnj-Latn-CI", - "dnj-Latn": "dnj-Latn-CI", - "dnk": "dnk-Latn-ID", - "dnk-ID": "dnk-Latn-ID", - "dnk-Latn": "dnk-Latn-ID", - "dnn": "dnn-Latn-BF", - "dnn-BF": "dnn-Latn-BF", - "dnn-Latn": "dnn-Latn-BF", - "dno": "dno-Latn-CD", - "dno-CD": "dno-Latn-CD", - "dno-Latn": "dno-Latn-CD", - "dnr": "dnr-Latn-PG", - "dnr-Latn": "dnr-Latn-PG", - "dnr-PG": "dnr-Latn-PG", - "dnt": "dnt-Latn-ID", - "dnt-ID": "dnt-Latn-ID", - "dnt-Latn": "dnt-Latn-ID", - "dnu": "dnu-Mymr-MM", - "dnu-MM": "dnu-Mymr-MM", - "dnu-Mymr": "dnu-Mymr-MM", - "dnv": "dnv-Mymr-MM", - "dnv-MM": "dnv-Mymr-MM", - "dnv-Mymr": "dnv-Mymr-MM", - "dnw": "dnw-Latn-ID", - "dnw-ID": "dnw-Latn-ID", - "dnw-Latn": "dnw-Latn-ID", - "dny": "dny-Latn-BR", - "dny-BR": "dny-Latn-BR", - "dny-Latn": "dny-Latn-BR", - "doa": "doa-Latn-PG", - "doa-Latn": "doa-Latn-PG", - "doa-PG": "doa-Latn-PG", - "dob": "dob-Latn-PG", - "dob-Latn": "dob-Latn-PG", - "dob-PG": "dob-Latn-PG", - "doc": "doc-Latn-CN", - "doc-CN": "doc-Latn-CN", - "doc-Latn": "doc-Latn-CN", - "doe": "doe-Latn-TZ", - "doe-Latn": "doe-Latn-TZ", - "doe-TZ": "doe-Latn-TZ", - "dof": "dof-Latn-PG", - "dof-Latn": "dof-Latn-PG", - "dof-PG": "dof-Latn-PG", - "doh": "doh-Latn-NG", - "doh-Latn": "doh-Latn-NG", - "doh-NG": "doh-Latn-NG", - "doi": "doi-Deva-IN", - "doi-Deva": "doi-Deva-IN", - "doi-Dogr": "doi-Dogr-IN", - "doi-IN": "doi-Deva-IN", - "doi-Takr": "doi-Takr-IN", - "dok": "dok-Latn-ID", - "dok-ID": "dok-Latn-ID", - "dok-Latn": "dok-Latn-ID", - "dol": "dol-Latn-PG", - "dol-Latn": "dol-Latn-PG", - "dol-PG": "dol-Latn-PG", - "don": "don-Latn-PG", - "don-Latn": "don-Latn-PG", - "don-PG": "don-Latn-PG", - "doo": "doo-Latn-CD", - "doo-CD": "doo-Latn-CD", - "doo-Latn": "doo-Latn-CD", - "dop": "dop-Latn-BJ", - "dop-BJ": "dop-Latn-BJ", - "dop-Latn": "dop-Latn-BJ", - "dor": "dor-Latn-SB", - "dor-Latn": "dor-Latn-SB", - "dor-SB": "dor-Latn-SB", - "dos": "dos-Latn-BF", - "dos-BF": "dos-Latn-BF", - "dos-Latn": "dos-Latn-BF", - "dot": "dot-Latn-NG", - "dot-Latn": "dot-Latn-NG", - "dot-NG": "dot-Latn-NG", - "dov": "dov-Latn-ZW", - "dov-Latn": "dov-Latn-ZW", - "dov-ZW": "dov-Latn-ZW", - "dow": "dow-Latn-CM", - "dow-CM": "dow-Latn-CM", - "dow-Latn": "dow-Latn-CM", - "dox": "dox-Ethi-ET", - "dox-ET": "dox-Ethi-ET", - "dox-Ethi": "dox-Ethi-ET", - "doy": "doy-Latn-GH", - "doy-GH": "doy-Latn-GH", - "doy-Latn": "doy-Latn-GH", - "dpp": "dpp-Latn-MY", - "dpp-Latn": "dpp-Latn-MY", - "dpp-MY": "dpp-Latn-MY", - "drc": "drc-Latn-PT", - "drc-Latn": "drc-Latn-PT", - "drc-PT": "drc-Latn-PT", - "dre": "dre-Tibt-NP", - "dre-NP": "dre-Tibt-NP", - "dre-Tibt": "dre-Tibt-NP", - "drg": "drg-Latn-MY", - "drg-Latn": "drg-Latn-MY", - "drg-MY": "drg-Latn-MY", - "dri": "dri-Latn-NG", - "dri-Latn": "dri-Latn-NG", - "dri-NG": "dri-Latn-NG", - "drl": "drl-Latn-AU", - "drl-AU": "drl-Latn-AU", - "drl-Latn": "drl-Latn-AU", - "drn": "drn-Latn-ID", - "drn-ID": "drn-Latn-ID", - "drn-Latn": "drn-Latn-ID", - "dro": "dro-Latn-MY", - "dro-Latn": "dro-Latn-MY", - "dro-MY": "dro-Latn-MY", - "drq": "drq-Deva-NP", - "drq-Deva": "drq-Deva-NP", - "drq-NP": "drq-Deva-NP", - "drs": "drs-Ethi-ET", - "drs-ET": "drs-Ethi-ET", - "drs-Ethi": "drs-Ethi-ET", - "drt": "drt-Latn-NL", - "drt-Latn": "drt-Latn-NL", - "drt-NL": "drt-Latn-NL", - "dru": "dru-Latn-TW", - "dru-Latn": "dru-Latn-TW", - "dru-TW": "dru-Latn-TW", - "dry": "dry-Deva-NP", - "dry-Deva": "dry-Deva-NP", - "dry-NP": "dry-Deva-NP", - "dsb": "dsb-Latn-DE", - "dsb-DE": "dsb-Latn-DE", - "dsb-Latn": "dsb-Latn-DE", - "dsh": "dsh-Latn-KE", - "dsh-KE": "dsh-Latn-KE", - "dsh-Latn": "dsh-Latn-KE", - "dsi": "dsi-Latn-TD", - "dsi-Latn": "dsi-Latn-TD", - "dsi-TD": "dsi-Latn-TD", - "dsk": "dsk-Latn-NG", - "dsk-Latn": "dsk-Latn-NG", - "dsk-NG": "dsk-Latn-NG", - "dsn": "dsn-Latn-ID", - "dsn-ID": "dsn-Latn-ID", - "dsn-Latn": "dsn-Latn-ID", - "dso": "dso-Orya-IN", - "dso-IN": "dso-Orya-IN", - "dso-Orya": "dso-Orya-IN", - "dsq": "dsq-Latn-ML", - "dsq-Latn": "dsq-Latn-ML", - "dsq-ML": "dsq-Latn-ML", - "dta": "dta-Latn-CN", - "dta-CN": "dta-Latn-CN", - "dta-Latn": "dta-Latn-CN", - "dtb": "dtb-Latn-MY", - "dtb-Latn": "dtb-Latn-MY", - "dtb-MY": "dtb-Latn-MY", - "dtd": "dtd-Latn-CA", - "dtd-CA": "dtd-Latn-CA", - "dtd-Latn": "dtd-Latn-CA", - "dth": "dth-Latn-AU", - "dth-AU": "dth-Latn-AU", - "dth-Latn": "dth-Latn-AU", - "dti": "dti-Latn-ML", - "dti-Latn": "dti-Latn-ML", - "dti-ML": "dti-Latn-ML", - "dtk": "dtk-Latn-ML", - "dtk-Latn": "dtk-Latn-ML", - "dtk-ML": "dtk-Latn-ML", - "dtm": "dtm-Latn-ML", - "dtm-Latn": "dtm-Latn-ML", - "dtm-ML": "dtm-Latn-ML", - "dto": "dto-Latn-ML", - "dto-Latn": "dto-Latn-ML", - "dto-ML": "dto-Latn-ML", - "dtp": "dtp-Latn-MY", - "dtp-Latn": "dtp-Latn-MY", - "dtp-MY": "dtp-Latn-MY", - "dtr": "dtr-Latn-MY", - "dtr-Latn": "dtr-Latn-MY", - "dtr-MY": "dtr-Latn-MY", - "dts": "dts-Latn-ML", - "dts-Latn": "dts-Latn-ML", - "dts-ML": "dts-Latn-ML", - "dtt": "dtt-Latn-ML", - "dtt-Latn": "dtt-Latn-ML", - "dtt-ML": "dtt-Latn-ML", - "dtu": "dtu-Latn-ML", - "dtu-Latn": "dtu-Latn-ML", - "dtu-ML": "dtu-Latn-ML", - "dty": "dty-Deva-NP", - "dty-Deva": "dty-Deva-NP", - "dty-NP": "dty-Deva-NP", - "dua": "dua-Latn-CM", - "dua-CM": "dua-Latn-CM", - "dua-Latn": "dua-Latn-CM", - "dub": "dub-Gujr-IN", - "dub-Gujr": "dub-Gujr-IN", - "dub-IN": "dub-Gujr-IN", - "duc": "duc-Latn-PG", - "duc-Latn": "duc-Latn-PG", - "duc-PG": "duc-Latn-PG", - "due": "due-Latn-PH", - "due-Latn": "due-Latn-PH", - "due-PH": "due-Latn-PH", - "duf": "duf-Latn-NC", - "duf-Latn": "duf-Latn-NC", - "duf-NC": "duf-Latn-NC", - "dug": "dug-Latn-KE", - "dug-KE": "dug-Latn-KE", - "dug-Latn": "dug-Latn-KE", - "duh": "duh-Deva-IN", - "duh-Deva": "duh-Deva-IN", - "duh-IN": "duh-Deva-IN", - "dui": "dui-Latn-PG", - "dui-Latn": "dui-Latn-PG", - "dui-PG": "dui-Latn-PG", - "duk": "duk-Latn-PG", - "duk-Latn": "duk-Latn-PG", - "duk-PG": "duk-Latn-PG", - "dul": "dul-Latn-PH", - "dul-Latn": "dul-Latn-PH", - "dul-PH": "dul-Latn-PH", - "dum": "dum-Latn-NL", - "dum-Latn": "dum-Latn-NL", - "dum-NL": "dum-Latn-NL", - "dun": "dun-Latn-ID", - "dun-ID": "dun-Latn-ID", - "dun-Latn": "dun-Latn-ID", - "duo": "duo-Latn-PH", - "duo-Latn": "duo-Latn-PH", - "duo-PH": "duo-Latn-PH", - "dup": "dup-Latn-ID", - "dup-ID": "dup-Latn-ID", - "dup-Latn": "dup-Latn-ID", - "duq": "duq-Latn-ID", - "duq-ID": "duq-Latn-ID", - "duq-Latn": "duq-Latn-ID", - "dur": "dur-Latn-CM", - "dur-CM": "dur-Latn-CM", - "dur-Latn": "dur-Latn-CM", - "dus": "dus-Deva-NP", - "dus-Deva": "dus-Deva-NP", - "dus-NP": "dus-Deva-NP", - "duu": "duu-Latn-CN", - "duu-CN": "duu-Latn-CN", - "duu-Latn": "duu-Latn-CN", - "duv": "duv-Latn-ID", - "duv-ID": "duv-Latn-ID", - "duv-Latn": "duv-Latn-ID", - "duw": "duw-Latn-ID", - "duw-ID": "duw-Latn-ID", - "duw-Latn": "duw-Latn-ID", - "dux": "dux-Latn-ML", - "dux-Latn": "dux-Latn-ML", - "dux-ML": "dux-Latn-ML", - "duy": "duy-Latn-PH", - "duy-Latn": "duy-Latn-PH", - "duy-PH": "duy-Latn-PH", - "duz": "duz-Latn-CM", - "duz-CM": "duz-Latn-CM", - "duz-Latn": "duz-Latn-CM", - "dv": "dv-Thaa-MV", - "dv-Diak": "dv-Diak-MV", - "dv-MV": "dv-Thaa-MV", - "dv-Thaa": "dv-Thaa-MV", - "dva": "dva-Latn-PG", - "dva-Latn": "dva-Latn-PG", - "dva-PG": "dva-Latn-PG", - "dwa": "dwa-Latn-NG", - "dwa-Latn": "dwa-Latn-NG", - "dwa-NG": "dwa-Latn-NG", - "dwk": "dwk-Orya-IN", - "dwk-IN": "dwk-Orya-IN", - "dwk-Orya": "dwk-Orya-IN", - "dwr": "dwr-Latn-ET", - "dwr-ET": "dwr-Latn-ET", - "dwr-Latn": "dwr-Latn-ET", - "dws": "dws-Latn-001", - "dws-001": "dws-Latn-001", - "dws-Latn": "dws-Latn-001", - "dwu": "dwu-Latn-AU", - "dwu-AU": "dwu-Latn-AU", - "dwu-Latn": "dwu-Latn-AU", - "dww": "dww-Latn-PG", - "dww-Latn": "dww-Latn-PG", - "dww-PG": "dww-Latn-PG", - "dwy": "dwy-Latn-AU", - "dwy-AU": "dwy-Latn-AU", - "dwy-Latn": "dwy-Latn-AU", - "dwz": "dwz-Deva-NP", - "dwz-Deva": "dwz-Deva-NP", - "dwz-NP": "dwz-Deva-NP", - "dya": "dya-Latn-BF", - "dya-BF": "dya-Latn-BF", - "dya-Latn": "dya-Latn-BF", - "dyb": "dyb-Latn-AU", - "dyb-AU": "dyb-Latn-AU", - "dyb-Latn": "dyb-Latn-AU", - "dyd": "dyd-Latn-AU", - "dyd-AU": "dyd-Latn-AU", - "dyd-Latn": "dyd-Latn-AU", - "dyg": "dyg-Latn-PH", - "dyg-Latn": "dyg-Latn-PH", - "dyg-PH": "dyg-Latn-PH", - "dyi": "dyi-Latn-CI", - "dyi-CI": "dyi-Latn-CI", - "dyi-Latn": "dyi-Latn-CI", - "dym": "dym-Latn-ML", - "dym-Latn": "dym-Latn-ML", - "dym-ML": "dym-Latn-ML", - "dyn": "dyn-Latn-AU", - "dyn-AU": "dyn-Latn-AU", - "dyn-Latn": "dyn-Latn-AU", - "dyo": "dyo-Latn-SN", - "dyo-Latn": "dyo-Latn-SN", - "dyo-SN": "dyo-Latn-SN", - "dyr": "dyr-Latn-NG", - "dyr-Latn": "dyr-Latn-NG", - "dyr-NG": "dyr-Latn-NG", - "dyu": "dyu-Latn-BF", - "dyu-BF": "dyu-Latn-BF", - "dyu-Latn": "dyu-Latn-BF", - "dyy": "dyy-Latn-AU", - "dyy-AU": "dyy-Latn-AU", - "dyy-Latn": "dyy-Latn-AU", - "dz": "dz-Tibt-BT", - "dz-BT": "dz-Tibt-BT", - "dz-Tibt": "dz-Tibt-BT", - "dz-Tibt-BT": "dz-Tibt-BT", - "dza": "dza-Latn-NG", - "dza-Latn": "dza-Latn-NG", - "dza-NG": "dza-Latn-NG", - "dzd": "dzd-Latn-NG", - "dzd-Latn": "dzd-Latn-NG", - "dzd-NG": "dzd-Latn-NG", - "dze": "dze-Latn-AU", - "dze-AU": "dze-Latn-AU", - "dze-Latn": "dze-Latn-AU", - "dzg": "dzg-Latn-TD", - "dzg-Latn": "dzg-Latn-TD", - "dzg-TD": "dzg-Latn-TD", - "dzl": "dzl-Tibt-BT", - "dzl-BT": "dzl-Tibt-BT", - "dzl-Tibt": "dzl-Tibt-BT", - "dzn": "dzn-Latn-CD", - "dzn-CD": "dzn-Latn-CD", - "dzn-Latn": "dzn-Latn-CD", - "eaa": "eaa-Latn-AU", - "eaa-AU": "eaa-Latn-AU", - "eaa-Latn": "eaa-Latn-AU", - "ebc": "ebc-Latn-ID", - "ebc-ID": "ebc-Latn-ID", - "ebc-Latn": "ebc-Latn-ID", - "ebg": "ebg-Latn-NG", - "ebg-Latn": "ebg-Latn-NG", - "ebg-NG": "ebg-Latn-NG", - "ebk": "ebk-Latn-PH", - "ebk-Latn": "ebk-Latn-PH", - "ebk-PH": "ebk-Latn-PH", - "ebo": "ebo-Latn-CG", - "ebo-CG": "ebo-Latn-CG", - "ebo-Latn": "ebo-Latn-CG", - "ebr": "ebr-Latn-CI", - "ebr-CI": "ebr-Latn-CI", - "ebr-Latn": "ebr-Latn-CI", - "ebu": "ebu-Latn-KE", - "ebu-KE": "ebu-Latn-KE", - "ebu-Latn": "ebu-Latn-KE", - "ecr": "ecr-Grek-GR", - "ecr-GR": "ecr-Grek-GR", - "ecr-Grek": "ecr-Grek-GR", - "ecy": "ecy-Cprt-CY", - "ecy-CY": "ecy-Cprt-CY", - "ecy-Cprt": "ecy-Cprt-CY", - "ee": "ee-Latn-GH", - "ee-GH": "ee-Latn-GH", - "ee-Latn": "ee-Latn-GH", - "efa": "efa-Latn-NG", - "efa-Latn": "efa-Latn-NG", - "efa-NG": "efa-Latn-NG", - "efe": "efe-Latn-CD", - "efe-CD": "efe-Latn-CD", - "efe-Latn": "efe-Latn-CD", - "efi": "efi-Latn-NG", - "efi-Latn": "efi-Latn-NG", - "efi-NG": "efi-Latn-NG", - "ega": "ega-Latn-CI", - "ega-CI": "ega-Latn-CI", - "ega-Latn": "ega-Latn-CI", - "egl": "egl-Latn-IT", - "egl-IT": "egl-Latn-IT", - "egl-Latn": "egl-Latn-IT", - "egm": "egm-Latn-TZ", - "egm-Latn": "egm-Latn-TZ", - "egm-TZ": "egm-Latn-TZ", - "ego": "ego-Latn-NG", - "ego-Latn": "ego-Latn-NG", - "ego-NG": "ego-Latn-NG", - "egy": "egy-Egyp-EG", - "egy-EG": "egy-Egyp-EG", - "egy-Egyp": "egy-Egyp-EG", - "ehu": "ehu-Latn-NG", - "ehu-Latn": "ehu-Latn-NG", - "ehu-NG": "ehu-Latn-NG", - "eip": "eip-Latn-ID", - "eip-ID": "eip-Latn-ID", - "eip-Latn": "eip-Latn-ID", - "eit": "eit-Latn-PG", - "eit-Latn": "eit-Latn-PG", - "eit-PG": "eit-Latn-PG", - "eiv": "eiv-Latn-PG", - "eiv-Latn": "eiv-Latn-PG", - "eiv-PG": "eiv-Latn-PG", - "eja": "eja-Latn-GW", - "eja-GW": "eja-Latn-GW", - "eja-Latn": "eja-Latn-GW", - "eka": "eka-Latn-NG", - "eka-Latn": "eka-Latn-NG", - "eka-NG": "eka-Latn-NG", - "eke": "eke-Latn-NG", - "eke-Latn": "eke-Latn-NG", - "eke-NG": "eke-Latn-NG", - "ekg": "ekg-Latn-ID", - "ekg-ID": "ekg-Latn-ID", - "ekg-Latn": "ekg-Latn-ID", - "eki": "eki-Latn-NG", - "eki-Latn": "eki-Latn-NG", - "eki-NG": "eki-Latn-NG", - "ekl": "ekl-Latn-BD", - "ekl-BD": "ekl-Latn-BD", - "ekl-Latn": "ekl-Latn-BD", - "ekm": "ekm-Latn-CM", - "ekm-CM": "ekm-Latn-CM", - "ekm-Latn": "ekm-Latn-CM", - "eko": "eko-Latn-MZ", - "eko-Latn": "eko-Latn-MZ", - "eko-MZ": "eko-Latn-MZ", - "ekp": "ekp-Latn-NG", - "ekp-Latn": "ekp-Latn-NG", - "ekp-NG": "ekp-Latn-NG", - "ekr": "ekr-Latn-NG", - "ekr-Latn": "ekr-Latn-NG", - "ekr-NG": "ekr-Latn-NG", - "eky": "eky-Kali-MM", - "eky-Kali": "eky-Kali-MM", - "eky-MM": "eky-Kali-MM", - "el": "el-Grek-GR", - "el-CY": "el-Grek-CY", - "el-GR": "el-Grek-GR", - "el-Grek": "el-Grek-GR", - "ele": "ele-Latn-PG", - "ele-Latn": "ele-Latn-PG", - "ele-PG": "ele-Latn-PG", - "elk": "elk-Latn-PG", - "elk-Latn": "elk-Latn-PG", - "elk-PG": "elk-Latn-PG", - "elm": "elm-Latn-NG", - "elm-Latn": "elm-Latn-NG", - "elm-NG": "elm-Latn-NG", - "elo": "elo-Latn-KE", - "elo-KE": "elo-Latn-KE", - "elo-Latn": "elo-Latn-KE", - "elu": "elu-Latn-PG", - "elu-Latn": "elu-Latn-PG", - "elu-PG": "elu-Latn-PG", - "ema": "ema-Latn-NG", - "ema-Latn": "ema-Latn-NG", - "ema-NG": "ema-Latn-NG", - "emb": "emb-Latn-ID", - "emb-ID": "emb-Latn-ID", - "emb-Latn": "emb-Latn-ID", - "eme": "eme-Latn-GF", - "eme-GF": "eme-Latn-GF", - "eme-Latn": "eme-Latn-GF", - "emg": "emg-Deva-NP", - "emg-Deva": "emg-Deva-NP", - "emg-NP": "emg-Deva-NP", - "emi": "emi-Latn-PG", - "emi-Latn": "emi-Latn-PG", - "emi-PG": "emi-Latn-PG", - "emm": "emm-Latn-MX", - "emm-Latn": "emm-Latn-MX", - "emm-MX": "emm-Latn-MX", - "emn": "emn-Latn-CM", - "emn-CM": "emn-Latn-CM", - "emn-Latn": "emn-Latn-CM", - "emp": "emp-Latn-PA", - "emp-Latn": "emp-Latn-PA", - "emp-PA": "emp-Latn-PA", - "ems": "ems-Latn-US", - "ems-Latn": "ems-Latn-US", - "ems-US": "ems-Latn-US", - "emu": "emu-Deva-IN", - "emu-Deva": "emu-Deva-IN", - "emu-IN": "emu-Deva-IN", - "emw": "emw-Latn-ID", - "emw-ID": "emw-Latn-ID", - "emw-Latn": "emw-Latn-ID", - "emx": "emx-Latn-FR", - "emx-FR": "emx-Latn-FR", - "emx-Latn": "emx-Latn-FR", - "emz": "emz-Latn-CM", - "emz-CM": "emz-Latn-CM", - "emz-Latn": "emz-Latn-CM", - "en": "en-Latn-US", - "en-AC": "en-Latn-AC", - "en-AG": "en-Latn-AG", - "en-AI": "en-Latn-AI", - "en-AM": "en-Latn-AM", - "en-AQ": "en-Latn-AQ", - "en-AU": "en-Latn-AU", - "en-AZ": "en-Latn-AZ", - "en-BB": "en-Latn-BB", - "en-BM": "en-Latn-BM", - "en-BS": "en-Latn-BS", - "en-BW": "en-Latn-BW", - "en-BZ": "en-Latn-BZ", - "en-CA": "en-Latn-CA", - "en-CC": "en-Latn-CC", - "en-CK": "en-Latn-CK", - "en-CN": "en-Latn-CN", - "en-CP": "en-Latn-CP", - "en-CQ": "en-Latn-CQ", - "en-CX": "en-Latn-CX", - "en-CY": "en-Latn-CY", - "en-DG": "en-Latn-DG", - "en-DM": "en-Latn-DM", - "en-Dsrt": "en-Dsrt-US", - "en-ET": "en-Latn-ET", - "en-FJ": "en-Latn-FJ", - "en-FK": "en-Latn-FK", - "en-FM": "en-Latn-FM", - "en-GB": "en-Latn-GB", - "en-GD": "en-Latn-GD", - "en-GE": "en-Latn-GE", - "en-GG": "en-Latn-GG", - "en-GH": "en-Latn-GH", - "en-GI": "en-Latn-GI", - "en-GM": "en-Latn-GM", - "en-GS": "en-Latn-GS", - "en-GU": "en-Latn-GU", - "en-GY": "en-Latn-GY", - "en-HK": "en-Latn-HK", - "en-HM": "en-Latn-HM", - "en-IE": "en-Latn-IE", - "en-IM": "en-Latn-IM", - "en-IN": "en-Latn-IN", - "en-IO": "en-Latn-IO", - "en-IS": "en-Latn-IS", - "en-JE": "en-Latn-JE", - "en-JM": "en-Latn-JM", - "en-JP": "en-Latn-JP", - "en-KE": "en-Latn-KE", - "en-KI": "en-Latn-KI", - "en-KN": "en-Latn-KN", - "en-KR": "en-Latn-KR", - "en-KY": "en-Latn-KY", - "en-LC": "en-Latn-LC", - "en-LK": "en-Latn-LK", - "en-LR": "en-Latn-LR", - "en-Latn": "en-Latn-US", - "en-Latn-AE": "en-Latn-AE", - "en-Latn-BD": "en-Latn-BD", - "en-Latn-BG": "en-Latn-BG", - "en-Latn-BT": "en-Latn-BT", - "en-Latn-CC": "en-Latn-CC", - "en-Latn-EG": "en-Latn-EG", - "en-Latn-ER": "en-Latn-ER", - "en-Latn-ET": "en-Latn-ET", - "en-Latn-GR": "en-Latn-GR", - "en-Latn-HK": "en-Latn-HK", - "en-Latn-IL": "en-Latn-IL", - "en-Latn-IN": "en-Latn-IN", - "en-Latn-IQ": "en-Latn-IQ", - "en-Latn-JO": "en-Latn-JO", - "en-Latn-KZ": "en-Latn-KZ", - "en-Latn-LB": "en-Latn-LB", - "en-Latn-LK": "en-Latn-LK", - "en-Latn-MV": "en-Latn-MV", - "en-Latn-NP": "en-Latn-NP", - "en-Latn-PK": "en-Latn-PK", - "en-Latn-SD": "en-Latn-SD", - "en-Latn-SS": "en-Latn-SS", - "en-Latn-TH": "en-Latn-TH", - "en-Latn-YE": "en-Latn-YE", - "en-MH": "en-Latn-MH", - "en-MM": "en-Latn-MM", - "en-MP": "en-Latn-MP", - "en-MS": "en-Latn-MS", - "en-MT": "en-Latn-MT", - "en-MU": "en-Latn-MU", - "en-MW": "en-Latn-MW", - "en-MX": "en-Latn-MX", - "en-MY": "en-Latn-MY", - "en-NA": "en-Latn-NA", - "en-NF": "en-Latn-NF", - "en-NG": "en-Latn-NG", - "en-NU": "en-Latn-NU", - "en-NZ": "en-Latn-NZ", - "en-PG": "en-Latn-PG", - "en-PH": "en-Latn-PH", - "en-PK": "en-Latn-PK", - "en-PN": "en-Latn-PN", - "en-PR": "en-Latn-PR", - "en-PW": "en-Latn-PW", - "en-RW": "en-Latn-RW", - "en-SB": "en-Latn-SB", - "en-SD": "en-Latn-SD", - "en-SG": "en-Latn-SG", - "en-SH": "en-Latn-SH", - "en-SL": "en-Latn-SL", - "en-SS": "en-Latn-SS", - "en-SX": "en-Latn-SX", - "en-Shaw": "en-Shaw-GB", - "en-TA": "en-Latn-TA", - "en-TC": "en-Latn-TC", - "en-TK": "en-Latn-TK", - "en-TT": "en-Latn-TT", - "en-TV": "en-Latn-TV", - "en-TW": "en-Latn-TW", - "en-TZ": "en-Latn-TZ", - "en-UG": "en-Latn-UG", - "en-UM": "en-Latn-UM", - "en-US": "en-Latn-US", - "en-VC": "en-Latn-VC", - "en-VG": "en-Latn-VG", - "en-VI": "en-Latn-VI", - "en-ZA": "en-Latn-ZA", - "en-ZM": "en-Latn-ZM", - "ena": "ena-Latn-PG", - "ena-Latn": "ena-Latn-PG", - "ena-PG": "ena-Latn-PG", - "enb": "enb-Latn-KE", - "enb-KE": "enb-Latn-KE", - "enb-Latn": "enb-Latn-KE", - "enc": "enc-Latn-VN", - "enc-Latn": "enc-Latn-VN", - "enc-VN": "enc-Latn-VN", - "end": "end-Latn-ID", - "end-ID": "end-Latn-ID", - "end-Latn": "end-Latn-ID", - "enf": "enf-Cyrl-RU", - "enf-Cyrl": "enf-Cyrl-RU", - "enf-RU": "enf-Cyrl-RU", - "enh": "enh-Cyrl-RU", - "enh-Cyrl": "enh-Cyrl-RU", - "enh-RU": "enh-Cyrl-RU", - "enl": "enl-Latn-PY", - "enl-Latn": "enl-Latn-PY", - "enl-PY": "enl-Latn-PY", - "enm": "enm-Latn-GB", - "enm-GB": "enm-Latn-GB", - "enm-Latn": "enm-Latn-GB", - "enn": "enn-Latn-NG", - "enn-Latn": "enn-Latn-NG", - "enn-NG": "enn-Latn-NG", - "eno": "eno-Latn-ID", - "eno-ID": "eno-Latn-ID", - "eno-Latn": "eno-Latn-ID", - "enq": "enq-Latn-PG", - "enq-Latn": "enq-Latn-PG", - "enq-PG": "enq-Latn-PG", - "enr": "enr-Latn-ID", - "enr-ID": "enr-Latn-ID", - "enr-Latn": "enr-Latn-ID", - "env": "env-Latn-NG", - "env-Latn": "env-Latn-NG", - "env-NG": "env-Latn-NG", - "enw": "enw-Latn-NG", - "enw-Latn": "enw-Latn-NG", - "enw-NG": "enw-Latn-NG", - "enx": "enx-Latn-PY", - "enx-Latn": "enx-Latn-PY", - "enx-PY": "enx-Latn-PY", - "eo": "eo-Latn-001", - "eo-001": "eo-Latn-001", - "eo-Latn": "eo-Latn-001", - "eot": "eot-Latn-CI", - "eot-CI": "eot-Latn-CI", - "eot-Latn": "eot-Latn-CI", - "epi": "epi-Latn-NG", - "epi-Latn": "epi-Latn-NG", - "epi-NG": "epi-Latn-NG", - "era": "era-Taml-IN", - "era-IN": "era-Taml-IN", - "era-Taml": "era-Taml-IN", - "erg": "erg-Latn-VU", - "erg-Latn": "erg-Latn-VU", - "erg-VU": "erg-Latn-VU", - "erh": "erh-Latn-NG", - "erh-Latn": "erh-Latn-NG", - "erh-NG": "erh-Latn-NG", - "eri": "eri-Latn-PG", - "eri-Latn": "eri-Latn-PG", - "eri-PG": "eri-Latn-PG", - "erk": "erk-Latn-VU", - "erk-Latn": "erk-Latn-VU", - "erk-VU": "erk-Latn-VU", - "err": "err-Latn-AU", - "err-AU": "err-Latn-AU", - "err-Latn": "err-Latn-AU", - "ers": "ers-Latn-CN", - "ers-CN": "ers-Latn-CN", - "ers-Latn": "ers-Latn-CN", - "ert": "ert-Latn-ID", - "ert-ID": "ert-Latn-ID", - "ert-Latn": "ert-Latn-ID", - "erw": "erw-Latn-ID", - "erw-ID": "erw-Latn-ID", - "erw-Latn": "erw-Latn-ID", - "es": "es-Latn-ES", - "es-419": "es-Latn-419", - "es-AR": "es-Latn-AR", - "es-BO": "es-Latn-BO", - "es-CA": "es-Latn-CA", - "es-CL": "es-Latn-CL", - "es-CO": "es-Latn-CO", - "es-CR": "es-Latn-CR", - "es-CU": "es-Latn-CU", - "es-DO": "es-Latn-DO", - "es-EA": "es-Latn-EA", - "es-EC": "es-Latn-EC", - "es-ES": "es-Latn-ES", - "es-GQ": "es-Latn-GQ", - "es-GT": "es-Latn-GT", - "es-HN": "es-Latn-HN", - "es-IC": "es-Latn-IC", - "es-Latn": "es-Latn-ES", - "es-MX": "es-Latn-MX", - "es-NI": "es-Latn-NI", - "es-PA": "es-Latn-PA", - "es-PE": "es-Latn-PE", - "es-PH": "es-Latn-PH", - "es-PR": "es-Latn-PR", - "es-PY": "es-Latn-PY", - "es-SV": "es-Latn-SV", - "es-US": "es-Latn-US", - "es-UY": "es-Latn-UY", - "es-VE": "es-Latn-VE", - "ese": "ese-Latn-BO", - "ese-BO": "ese-Latn-BO", - "ese-Latn": "ese-Latn-BO", - "esg": "esg-Gonm-IN", - "esg-Gonm": "esg-Gonm-IN", - "esg-IN": "esg-Gonm-IN", - "esh": "esh-Arab-IR", - "esh-Arab": "esh-Arab-IR", - "esh-IR": "esh-Arab-IR", - "esi": "esi-Latn-US", - "esi-Latn": "esi-Latn-US", - "esi-US": "esi-Latn-US", - "esm": "esm-Latn-CI", - "esm-CI": "esm-Latn-CI", - "esm-Latn": "esm-Latn-CI", - "ess": "ess-Latn-US", - "ess-Latn": "ess-Latn-US", - "ess-US": "ess-Latn-US", - "esu": "esu-Latn-US", - "esu-Latn": "esu-Latn-US", - "esu-US": "esu-Latn-US", - "esy": "esy-Latn-PH", - "esy-Latn": "esy-Latn-PH", - "esy-PH": "esy-Latn-PH", - "et": "et-Latn-EE", - "et-EE": "et-Latn-EE", - "et-Latn": "et-Latn-EE", - "etb": "etb-Latn-NG", - "etb-Latn": "etb-Latn-NG", - "etb-NG": "etb-Latn-NG", - "etn": "etn-Latn-VU", - "etn-Latn": "etn-Latn-VU", - "etn-VU": "etn-Latn-VU", - "eto": "eto-Latn-CM", - "eto-CM": "eto-Latn-CM", - "eto-Latn": "eto-Latn-CM", - "etr": "etr-Latn-PG", - "etr-Latn": "etr-Latn-PG", - "etr-PG": "etr-Latn-PG", - "ets": "ets-Latn-NG", - "ets-Latn": "ets-Latn-NG", - "ets-NG": "ets-Latn-NG", - "ett": "ett-Ital-IT", - "ett-IT": "ett-Ital-IT", - "ett-Ital": "ett-Ital-IT", - "etu": "etu-Latn-NG", - "etu-Latn": "etu-Latn-NG", - "etu-NG": "etu-Latn-NG", - "etx": "etx-Latn-NG", - "etx-Latn": "etx-Latn-NG", - "etx-NG": "etx-Latn-NG", - "etz": "etz-Latn-ID", - "etz-ID": "etz-Latn-ID", - "etz-Latn": "etz-Latn-ID", - "eu": "eu-Latn-ES", - "eu-ES": "eu-Latn-ES", - "eu-Latn": "eu-Latn-ES", - "eud": "eud-Latn-MX", - "eud-Latn": "eud-Latn-MX", - "eud-MX": "eud-Latn-MX", - "eve": "eve-Cyrl-RU", - "eve-Cyrl": "eve-Cyrl-RU", - "eve-RU": "eve-Cyrl-RU", - "evh": "evh-Latn-NG", - "evh-Latn": "evh-Latn-NG", - "evh-NG": "evh-Latn-NG", - "evn": "evn-Cyrl-RU", - "evn-Cyrl": "evn-Cyrl-RU", - "evn-RU": "evn-Cyrl-RU", - "ewo": "ewo-Latn-CM", - "ewo-CM": "ewo-Latn-CM", - "ewo-Latn": "ewo-Latn-CM", - "ext": "ext-Latn-ES", - "ext-ES": "ext-Latn-ES", - "ext-Latn": "ext-Latn-ES", - "eya": "eya-Latn-US", - "eya-Latn": "eya-Latn-US", - "eya-US": "eya-Latn-US", - "eyo": "eyo-Latn-KE", - "eyo-KE": "eyo-Latn-KE", - "eyo-Latn": "eyo-Latn-KE", - "eza": "eza-Latn-NG", - "eza-Latn": "eza-Latn-NG", - "eza-NG": "eza-Latn-NG", - "eze": "eze-Latn-NG", - "eze-Latn": "eze-Latn-NG", - "eze-NG": "eze-Latn-NG", - "fa": "fa-Arab-IR", - "fa-AF": "fa-Arab-AF", - "fa-Arab": "fa-Arab-IR", - "fa-Arab-AF": "fa-Arab-AF", - "fa-Arab-IR": "fa-Arab-IR", - "fa-Arab-TJ": "fa-Arab-TJ", - "fa-Aran": "fa-Aran-IR", - "fa-IR": "fa-Arab-IR", - "faa": "faa-Latn-PG", - "faa-Latn": "faa-Latn-PG", - "faa-PG": "faa-Latn-PG", - "fab": "fab-Latn-GQ", - "fab-GQ": "fab-Latn-GQ", - "fab-Latn": "fab-Latn-GQ", - "fad": "fad-Latn-PG", - "fad-Latn": "fad-Latn-PG", - "fad-PG": "fad-Latn-PG", - "faf": "faf-Latn-SB", - "faf-Latn": "faf-Latn-SB", - "faf-SB": "faf-Latn-SB", - "fag": "fag-Latn-PG", - "fag-Latn": "fag-Latn-PG", - "fag-PG": "fag-Latn-PG", - "fah": "fah-Latn-NG", - "fah-Latn": "fah-Latn-NG", - "fah-NG": "fah-Latn-NG", - "fai": "fai-Latn-PG", - "fai-Latn": "fai-Latn-PG", - "fai-PG": "fai-Latn-PG", - "faj": "faj-Latn-PG", - "faj-Latn": "faj-Latn-PG", - "faj-PG": "faj-Latn-PG", - "fak": "fak-Latn-CM", - "fak-CM": "fak-Latn-CM", - "fak-Latn": "fak-Latn-CM", - "fal": "fal-Latn-CM", - "fal-CM": "fal-Latn-CM", - "fal-Latn": "fal-Latn-CM", - "fam": "fam-Latn-NG", - "fam-Latn": "fam-Latn-NG", - "fam-NG": "fam-Latn-NG", - "fan": "fan-Latn-GQ", - "fan-GQ": "fan-Latn-GQ", - "fan-Latn": "fan-Latn-GQ", - "fap": "fap-Latn-SN", - "fap-Latn": "fap-Latn-SN", - "fap-SN": "fap-Latn-SN", - "far": "far-Latn-SB", - "far-Latn": "far-Latn-SB", - "far-SB": "far-Latn-SB", - "fau": "fau-Latn-ID", - "fau-ID": "fau-Latn-ID", - "fau-Latn": "fau-Latn-ID", - "fax": "fax-Latn-ES", - "fax-ES": "fax-Latn-ES", - "fax-Latn": "fax-Latn-ES", - "fay": "fay-Arab-IR", - "fay-Arab": "fay-Arab-IR", - "fay-IR": "fay-Arab-IR", - "faz": "faz-Arab-IR", - "faz-Arab": "faz-Arab-IR", - "faz-IR": "faz-Arab-IR", - "fbl": "fbl-Latn-PH", - "fbl-Latn": "fbl-Latn-PH", - "fbl-PH": "fbl-Latn-PH", - "fer": "fer-Latn-SS", - "fer-Latn": "fer-Latn-SS", - "fer-SS": "fer-Latn-SS", - "ff": "ff-Latn-SN", - "ff-Adlm": "ff-Adlm-GN", - "ff-Latn": "ff-Latn-SN", - "ff-SN": "ff-Latn-SN", - "ffi": "ffi-Latn-PG", - "ffi-Latn": "ffi-Latn-PG", - "ffi-PG": "ffi-Latn-PG", - "ffm": "ffm-Latn-ML", - "ffm-Latn": "ffm-Latn-ML", - "ffm-ML": "ffm-Latn-ML", - "fgr": "fgr-Latn-TD", - "fgr-Latn": "fgr-Latn-TD", - "fgr-TD": "fgr-Latn-TD", - "fi": "fi-Latn-FI", - "fi-FI": "fi-Latn-FI", - "fi-Latn": "fi-Latn-FI", - "fia": "fia-Arab-SD", - "fia-Arab": "fia-Arab-SD", - "fia-SD": "fia-Arab-SD", - "fie": "fie-Latn-NG", - "fie-Latn": "fie-Latn-NG", - "fie-NG": "fie-Latn-NG", - "fif": "fif-Latn-SA", - "fif-Latn": "fif-Latn-SA", - "fif-SA": "fif-Latn-SA", - "fil": "fil-Latn-PH", - "fil-Latn": "fil-Latn-PH", - "fil-PH": "fil-Latn-PH", - "fil-Tglg": "fil-Tglg-PH", - "fip": "fip-Latn-TZ", - "fip-Latn": "fip-Latn-TZ", - "fip-TZ": "fip-Latn-TZ", - "fir": "fir-Latn-NG", - "fir-Latn": "fir-Latn-NG", - "fir-NG": "fir-Latn-NG", - "fit": "fit-Latn-SE", - "fit-Latn": "fit-Latn-SE", - "fit-SE": "fit-Latn-SE", - "fiw": "fiw-Latn-PG", - "fiw-Latn": "fiw-Latn-PG", - "fiw-PG": "fiw-Latn-PG", - "fj": "fj-Latn-FJ", - "fj-FJ": "fj-Latn-FJ", - "fj-Latn": "fj-Latn-FJ", - "fkk": "fkk-Latn-NG", - "fkk-Latn": "fkk-Latn-NG", - "fkk-NG": "fkk-Latn-NG", - "fkv": "fkv-Latn-NO", - "fkv-Latn": "fkv-Latn-NO", - "fkv-NO": "fkv-Latn-NO", - "fla": "fla-Latn-US", - "fla-Latn": "fla-Latn-US", - "fla-US": "fla-Latn-US", - "flh": "flh-Latn-ID", - "flh-ID": "flh-Latn-ID", - "flh-Latn": "flh-Latn-ID", - "fli": "fli-Latn-NG", - "fli-Latn": "fli-Latn-NG", - "fli-NG": "fli-Latn-NG", - "fll": "fll-Latn-CM", - "fll-CM": "fll-Latn-CM", - "fll-Latn": "fll-Latn-CM", - "fln": "fln-Latn-AU", - "fln-AU": "fln-Latn-AU", - "fln-Latn": "fln-Latn-AU", - "flr": "flr-Latn-CD", - "flr-CD": "flr-Latn-CD", - "flr-Latn": "flr-Latn-CD", - "fly": "fly-Latn-ZA", - "fly-Latn": "fly-Latn-ZA", - "fly-ZA": "fly-Latn-ZA", - "fmp": "fmp-Latn-CM", - "fmp-CM": "fmp-Latn-CM", - "fmp-Latn": "fmp-Latn-CM", - "fmu": "fmu-Deva-IN", - "fmu-Deva": "fmu-Deva-IN", - "fmu-IN": "fmu-Deva-IN", - "fnb": "fnb-Latn-VU", - "fnb-Latn": "fnb-Latn-VU", - "fnb-VU": "fnb-Latn-VU", - "fng": "fng-Latn-ZA", - "fng-Latn": "fng-Latn-ZA", - "fng-ZA": "fng-Latn-ZA", - "fni": "fni-Latn-TD", - "fni-Latn": "fni-Latn-TD", - "fni-TD": "fni-Latn-TD", - "fo": "fo-Latn-FO", - "fo-FO": "fo-Latn-FO", - "fo-Latn": "fo-Latn-FO", - "fod": "fod-Latn-BJ", - "fod-BJ": "fod-Latn-BJ", - "fod-Latn": "fod-Latn-BJ", - "foi": "foi-Latn-PG", - "foi-Latn": "foi-Latn-PG", - "foi-PG": "foi-Latn-PG", - "fom": "fom-Latn-CD", - "fom-CD": "fom-Latn-CD", - "fom-Latn": "fom-Latn-CD", - "fon": "fon-Latn-BJ", - "fon-BJ": "fon-Latn-BJ", - "fon-Latn": "fon-Latn-BJ", - "for": "for-Latn-PG", - "for-Latn": "for-Latn-PG", - "for-PG": "for-Latn-PG", - "fos": "fos-Latn-TW", - "fos-Latn": "fos-Latn-TW", - "fos-TW": "fos-Latn-TW", - "fpe": "fpe-Latn-GQ", - "fpe-GQ": "fpe-Latn-GQ", - "fpe-Latn": "fpe-Latn-GQ", - "fqs": "fqs-Latn-PG", - "fqs-Latn": "fqs-Latn-PG", - "fqs-PG": "fqs-Latn-PG", - "fr": "fr-Latn-FR", - "fr-BE": "fr-Latn-BE", - "fr-BF": "fr-Latn-BF", - "fr-BI": "fr-Latn-BI", - "fr-BJ": "fr-Latn-BJ", - "fr-BL": "fr-Latn-BL", - "fr-Brai": "fr-Brai-FR", - "fr-CA": "fr-Latn-CA", - "fr-CD": "fr-Latn-CD", - "fr-CF": "fr-Latn-CF", - "fr-CG": "fr-Latn-CG", - "fr-CH": "fr-Latn-CH", - "fr-CI": "fr-Latn-CI", - "fr-CM": "fr-Latn-CM", - "fr-DJ": "fr-Latn-DJ", - "fr-DZ": "fr-Latn-DZ", - "fr-Dupl": "fr-Dupl-FR", - "fr-FR": "fr-Latn-FR", - "fr-GA": "fr-Latn-GA", - "fr-GF": "fr-Latn-GF", - "fr-GN": "fr-Latn-GN", - "fr-GP": "fr-Latn-GP", - "fr-GQ": "fr-Latn-GQ", - "fr-HT": "fr-Latn-HT", - "fr-LB": "fr-Latn-LB", - "fr-LU": "fr-Latn-LU", - "fr-Latn": "fr-Latn-FR", - "fr-Latn-DZ": "fr-Latn-DZ", - "fr-Latn-KM": "fr-Latn-KM", - "fr-Latn-MA": "fr-Latn-MA", - "fr-Latn-MR": "fr-Latn-MR", - "fr-Latn-SY": "fr-Latn-SY", - "fr-Latn-TN": "fr-Latn-TN", - "fr-MC": "fr-Latn-MC", - "fr-MF": "fr-Latn-MF", - "fr-ML": "fr-Latn-ML", - "fr-MQ": "fr-Latn-MQ", - "fr-NC": "fr-Latn-NC", - "fr-NE": "fr-Latn-NE", - "fr-NG": "fr-Latn-NG", - "fr-PF": "fr-Latn-PF", - "fr-PM": "fr-Latn-PM", - "fr-RE": "fr-Latn-RE", - "fr-RW": "fr-Latn-RW", - "fr-SC": "fr-Latn-SC", - "fr-SN": "fr-Latn-SN", - "fr-TD": "fr-Latn-TD", - "fr-TF": "fr-Latn-TF", - "fr-TG": "fr-Latn-TG", - "fr-WF": "fr-Latn-WF", - "fr-YT": "fr-Latn-YT", - "frc": "frc-Latn-US", - "frc-Latn": "frc-Latn-US", - "frc-US": "frc-Latn-US", - "frd": "frd-Latn-ID", - "frd-ID": "frd-Latn-ID", - "frd-Latn": "frd-Latn-ID", - "frk": "frk-Latn-DE", - "frk-DE": "frk-Latn-DE", - "frk-Latn": "frk-Latn-DE", - "frm": "frm-Latn-FR", - "frm-FR": "frm-Latn-FR", - "frm-Latn": "frm-Latn-FR", - "fro": "fro-Latn-FR", - "fro-FR": "fro-Latn-FR", - "fro-Latn": "fro-Latn-FR", - "frp": "frp-Latn-FR", - "frp-FR": "frp-Latn-FR", - "frp-Latn": "frp-Latn-FR", - "frq": "frq-Latn-PG", - "frq-Latn": "frq-Latn-PG", - "frq-PG": "frq-Latn-PG", - "frr": "frr-Latn-DE", - "frr-DE": "frr-Latn-DE", - "frr-Latn": "frr-Latn-DE", - "frs": "frs-Latn-DE", - "frs-DE": "frs-Latn-DE", - "frs-Latn": "frs-Latn-DE", - "frt": "frt-Latn-VU", - "frt-Latn": "frt-Latn-VU", - "frt-VU": "frt-Latn-VU", - "fub": "fub-Arab-CM", - "fub-Arab": "fub-Arab-CM", - "fub-CM": "fub-Arab-CM", - "fud": "fud-Latn-WF", - "fud-Latn": "fud-Latn-WF", - "fud-WF": "fud-Latn-WF", - "fue": "fue-Latn-BJ", - "fue-BJ": "fue-Latn-BJ", - "fue-Latn": "fue-Latn-BJ", - "fuf": "fuf-Latn-GN", - "fuf-GN": "fuf-Latn-GN", - "fuf-Latn": "fuf-Latn-GN", - "fuh": "fuh-Latn-NE", - "fuh-Latn": "fuh-Latn-NE", - "fuh-NE": "fuh-Latn-NE", - "fui": "fui-Latn-TD", - "fui-Latn": "fui-Latn-TD", - "fui-TD": "fui-Latn-TD", - "fum": "fum-Latn-NG", - "fum-Latn": "fum-Latn-NG", - "fum-NG": "fum-Latn-NG", - "fun": "fun-Latn-BR", - "fun-BR": "fun-Latn-BR", - "fun-Latn": "fun-Latn-BR", - "fuq": "fuq-Latn-NE", - "fuq-Latn": "fuq-Latn-NE", - "fuq-NE": "fuq-Latn-NE", - "fur": "fur-Latn-IT", - "fur-IT": "fur-Latn-IT", - "fur-Latn": "fur-Latn-IT", - "fut": "fut-Latn-VU", - "fut-Latn": "fut-Latn-VU", - "fut-VU": "fut-Latn-VU", - "fuu": "fuu-Latn-CD", - "fuu-CD": "fuu-Latn-CD", - "fuu-Latn": "fuu-Latn-CD", - "fuv": "fuv-Latn-NG", - "fuv-Latn": "fuv-Latn-NG", - "fuv-NG": "fuv-Latn-NG", - "fuy": "fuy-Latn-PG", - "fuy-Latn": "fuy-Latn-PG", - "fuy-PG": "fuy-Latn-PG", - "fvr": "fvr-Latn-SD", - "fvr-Latn": "fvr-Latn-SD", - "fvr-SD": "fvr-Latn-SD", - "fwa": "fwa-Latn-NC", - "fwa-Latn": "fwa-Latn-NC", - "fwa-NC": "fwa-Latn-NC", - "fwe": "fwe-Latn-NA", - "fwe-Latn": "fwe-Latn-NA", - "fwe-NA": "fwe-Latn-NA", - "fy": "fy-Latn-NL", - "fy-Latn": "fy-Latn-NL", - "fy-NL": "fy-Latn-NL", - "ga": "ga-Latn-IE", - "ga-IE": "ga-Latn-IE", - "ga-Latn": "ga-Latn-IE", - "gaa": "gaa-Latn-GH", - "gaa-GH": "gaa-Latn-GH", - "gaa-Latn": "gaa-Latn-GH", - "gab": "gab-Latn-TD", - "gab-Latn": "gab-Latn-TD", - "gab-TD": "gab-Latn-TD", - "gac": "gac-Latn-IN", - "gac-IN": "gac-Latn-IN", - "gac-Latn": "gac-Latn-IN", - "gad": "gad-Latn-PH", - "gad-Latn": "gad-Latn-PH", - "gad-PH": "gad-Latn-PH", - "gae": "gae-Latn-VE", - "gae-Latn": "gae-Latn-VE", - "gae-VE": "gae-Latn-VE", - "gaf": "gaf-Latn-PG", - "gaf-Latn": "gaf-Latn-PG", - "gaf-PG": "gaf-Latn-PG", - "gag": "gag-Latn-MD", - "gag-Latn": "gag-Latn-MD", - "gag-MD": "gag-Latn-MD", - "gah": "gah-Latn-PG", - "gah-Latn": "gah-Latn-PG", - "gah-PG": "gah-Latn-PG", - "gai": "gai-Latn-PG", - "gai-Latn": "gai-Latn-PG", - "gai-PG": "gai-Latn-PG", - "gaj": "gaj-Latn-PG", - "gaj-Latn": "gaj-Latn-PG", - "gaj-PG": "gaj-Latn-PG", - "gak": "gak-Latn-ID", - "gak-ID": "gak-Latn-ID", - "gak-Latn": "gak-Latn-ID", - "gal": "gal-Latn-TL", - "gal-Latn": "gal-Latn-TL", - "gal-TL": "gal-Latn-TL", - "gam": "gam-Latn-PG", - "gam-Latn": "gam-Latn-PG", - "gam-PG": "gam-Latn-PG", - "gan": "gan-Hans-CN", - "gan-CN": "gan-Hans-CN", - "gan-Hans": "gan-Hans-CN", - "gao": "gao-Latn-PG", - "gao-Latn": "gao-Latn-PG", - "gao-PG": "gao-Latn-PG", - "gap": "gap-Latn-PG", - "gap-Latn": "gap-Latn-PG", - "gap-PG": "gap-Latn-PG", - "gaq": "gaq-Orya-IN", - "gaq-IN": "gaq-Orya-IN", - "gaq-Orya": "gaq-Orya-IN", - "gar": "gar-Latn-PG", - "gar-Latn": "gar-Latn-PG", - "gar-PG": "gar-Latn-PG", - "gas": "gas-Gujr-IN", - "gas-Gujr": "gas-Gujr-IN", - "gas-IN": "gas-Gujr-IN", - "gat": "gat-Latn-PG", - "gat-Latn": "gat-Latn-PG", - "gat-PG": "gat-Latn-PG", - "gau": "gau-Telu-IN", - "gau-IN": "gau-Telu-IN", - "gau-Telu": "gau-Telu-IN", - "gaw": "gaw-Latn-PG", - "gaw-Latn": "gaw-Latn-PG", - "gaw-PG": "gaw-Latn-PG", - "gax": "gax-Latn-ET", - "gax-ET": "gax-Latn-ET", - "gax-Latn": "gax-Latn-ET", - "gay": "gay-Latn-ID", - "gay-ID": "gay-Latn-ID", - "gay-Latn": "gay-Latn-ID", - "gba": "gba-Latn-CF", - "gba-CF": "gba-Latn-CF", - "gba-Latn": "gba-Latn-CF", - "gbb": "gbb-Latn-AU", - "gbb-AU": "gbb-Latn-AU", - "gbb-Latn": "gbb-Latn-AU", - "gbd": "gbd-Latn-AU", - "gbd-AU": "gbd-Latn-AU", - "gbd-Latn": "gbd-Latn-AU", - "gbe": "gbe-Latn-PG", - "gbe-Latn": "gbe-Latn-PG", - "gbe-PG": "gbe-Latn-PG", - "gbf": "gbf-Latn-PG", - "gbf-Latn": "gbf-Latn-PG", - "gbf-PG": "gbf-Latn-PG", - "gbg": "gbg-Latn-CF", - "gbg-CF": "gbg-Latn-CF", - "gbg-Latn": "gbg-Latn-CF", - "gbh": "gbh-Latn-BJ", - "gbh-BJ": "gbh-Latn-BJ", - "gbh-Latn": "gbh-Latn-BJ", - "gbi": "gbi-Latn-ID", - "gbi-ID": "gbi-Latn-ID", - "gbi-Latn": "gbi-Latn-ID", - "gbj": "gbj-Orya-IN", - "gbj-IN": "gbj-Orya-IN", - "gbj-Orya": "gbj-Orya-IN", - "gbk": "gbk-Deva-IN", - "gbk-Deva": "gbk-Deva-IN", - "gbk-IN": "gbk-Deva-IN", - "gbl": "gbl-Gujr-IN", - "gbl-Gujr": "gbl-Gujr-IN", - "gbl-IN": "gbl-Gujr-IN", - "gbm": "gbm-Deva-IN", - "gbm-Deva": "gbm-Deva-IN", - "gbm-IN": "gbm-Deva-IN", - "gbn": "gbn-Latn-SS", - "gbn-Latn": "gbn-Latn-SS", - "gbn-SS": "gbn-Latn-SS", - "gbp": "gbp-Latn-CF", - "gbp-CF": "gbp-Latn-CF", - "gbp-Latn": "gbp-Latn-CF", - "gbq": "gbq-Latn-CF", - "gbq-CF": "gbq-Latn-CF", - "gbq-Latn": "gbq-Latn-CF", - "gbr": "gbr-Latn-NG", - "gbr-Latn": "gbr-Latn-NG", - "gbr-NG": "gbr-Latn-NG", - "gbs": "gbs-Latn-BJ", - "gbs-BJ": "gbs-Latn-BJ", - "gbs-Latn": "gbs-Latn-BJ", - "gbu": "gbu-Latn-AU", - "gbu-AU": "gbu-Latn-AU", - "gbu-Latn": "gbu-Latn-AU", - "gbv": "gbv-Latn-CF", - "gbv-CF": "gbv-Latn-CF", - "gbv-Latn": "gbv-Latn-CF", - "gbw": "gbw-Latn-AU", - "gbw-AU": "gbw-Latn-AU", - "gbw-Latn": "gbw-Latn-AU", - "gbx": "gbx-Latn-BJ", - "gbx-BJ": "gbx-Latn-BJ", - "gbx-Latn": "gbx-Latn-BJ", - "gby": "gby-Latn-NG", - "gby-Latn": "gby-Latn-NG", - "gby-NG": "gby-Latn-NG", - "gbz": "gbz-Arab-IR", - "gbz-Arab": "gbz-Arab-IR", - "gbz-IR": "gbz-Arab-IR", - "gcc": "gcc-Latn-PG", - "gcc-Latn": "gcc-Latn-PG", - "gcc-PG": "gcc-Latn-PG", - "gcd": "gcd-Latn-AU", - "gcd-AU": "gcd-Latn-AU", - "gcd-Latn": "gcd-Latn-AU", - "gcf": "gcf-Latn-GP", - "gcf-GP": "gcf-Latn-GP", - "gcf-Latn": "gcf-Latn-GP", - "gcl": "gcl-Latn-GD", - "gcl-GD": "gcl-Latn-GD", - "gcl-Latn": "gcl-Latn-GD", - "gcn": "gcn-Latn-PG", - "gcn-Latn": "gcn-Latn-PG", - "gcn-PG": "gcn-Latn-PG", - "gcr": "gcr-Latn-GF", - "gcr-GF": "gcr-Latn-GF", - "gcr-Latn": "gcr-Latn-GF", - "gct": "gct-Latn-VE", - "gct-Latn": "gct-Latn-VE", - "gct-VE": "gct-Latn-VE", - "gd": "gd-Latn-GB", - "gd-GB": "gd-Latn-GB", - "gd-Latn": "gd-Latn-GB", - "gdb": "gdb-Orya-IN", - "gdb-IN": "gdb-Orya-IN", - "gdb-Orya": "gdb-Orya-IN", - "gdc": "gdc-Latn-AU", - "gdc-AU": "gdc-Latn-AU", - "gdc-Latn": "gdc-Latn-AU", - "gdd": "gdd-Latn-PG", - "gdd-Latn": "gdd-Latn-PG", - "gdd-PG": "gdd-Latn-PG", - "gde": "gde-Latn-NG", - "gde-Latn": "gde-Latn-NG", - "gde-NG": "gde-Latn-NG", - "gdf": "gdf-Latn-NG", - "gdf-Latn": "gdf-Latn-NG", - "gdf-NG": "gdf-Latn-NG", - "gdg": "gdg-Latn-PH", - "gdg-Latn": "gdg-Latn-PH", - "gdg-PH": "gdg-Latn-PH", - "gdh": "gdh-Latn-AU", - "gdh-AU": "gdh-Latn-AU", - "gdh-Latn": "gdh-Latn-AU", - "gdi": "gdi-Latn-CF", - "gdi-CF": "gdi-Latn-CF", - "gdi-Latn": "gdi-Latn-CF", - "gdj": "gdj-Latn-AU", - "gdj-AU": "gdj-Latn-AU", - "gdj-Latn": "gdj-Latn-AU", - "gdk": "gdk-Latn-TD", - "gdk-Latn": "gdk-Latn-TD", - "gdk-TD": "gdk-Latn-TD", - "gdl": "gdl-Latn-ET", - "gdl-ET": "gdl-Latn-ET", - "gdl-Latn": "gdl-Latn-ET", - "gdm": "gdm-Latn-TD", - "gdm-Latn": "gdm-Latn-TD", - "gdm-TD": "gdm-Latn-TD", - "gdn": "gdn-Latn-PG", - "gdn-Latn": "gdn-Latn-PG", - "gdn-PG": "gdn-Latn-PG", - "gdo": "gdo-Cyrl-RU", - "gdo-Cyrl": "gdo-Cyrl-RU", - "gdo-RU": "gdo-Cyrl-RU", - "gdq": "gdq-Latn-YE", - "gdq-Latn": "gdq-Latn-YE", - "gdq-YE": "gdq-Latn-YE", - "gdr": "gdr-Latn-PG", - "gdr-Latn": "gdr-Latn-PG", - "gdr-PG": "gdr-Latn-PG", - "gdt": "gdt-Latn-AU", - "gdt-AU": "gdt-Latn-AU", - "gdt-Latn": "gdt-Latn-AU", - "gdu": "gdu-Latn-NG", - "gdu-Latn": "gdu-Latn-NG", - "gdu-NG": "gdu-Latn-NG", - "gdx": "gdx-Deva-IN", - "gdx-Deva": "gdx-Deva-IN", - "gdx-IN": "gdx-Deva-IN", - "gea": "gea-Latn-NG", - "gea-Latn": "gea-Latn-NG", - "gea-NG": "gea-Latn-NG", - "geb": "geb-Latn-PG", - "geb-Latn": "geb-Latn-PG", - "geb-PG": "geb-Latn-PG", - "gec": "gec-Latn-LR", - "gec-LR": "gec-Latn-LR", - "gec-Latn": "gec-Latn-LR", - "ged": "ged-Latn-NG", - "ged-Latn": "ged-Latn-NG", - "ged-NG": "ged-Latn-NG", - "gef": "gef-Latn-ID", - "gef-ID": "gef-Latn-ID", - "gef-Latn": "gef-Latn-ID", - "geg": "geg-Latn-NG", - "geg-Latn": "geg-Latn-NG", - "geg-NG": "geg-Latn-NG", - "geh": "geh-Latn-CA", - "geh-CA": "geh-Latn-CA", - "geh-Latn": "geh-Latn-CA", - "gei": "gei-Latn-ID", - "gei-ID": "gei-Latn-ID", - "gei-Latn": "gei-Latn-ID", - "gej": "gej-Latn-TG", - "gej-Latn": "gej-Latn-TG", - "gej-TG": "gej-Latn-TG", - "gek": "gek-Latn-NG", - "gek-Latn": "gek-Latn-NG", - "gek-NG": "gek-Latn-NG", - "gel": "gel-Latn-NG", - "gel-Latn": "gel-Latn-NG", - "gel-NG": "gel-Latn-NG", - "geq": "geq-Latn-CF", - "geq-CF": "geq-Latn-CF", - "geq-Latn": "geq-Latn-CF", - "ges": "ges-Latn-ID", - "ges-ID": "ges-Latn-ID", - "ges-Latn": "ges-Latn-ID", - "gev": "gev-Latn-GA", - "gev-GA": "gev-Latn-GA", - "gev-Latn": "gev-Latn-GA", - "gew": "gew-Latn-NG", - "gew-Latn": "gew-Latn-NG", - "gew-NG": "gew-Latn-NG", - "gex": "gex-Latn-SO", - "gex-Latn": "gex-Latn-SO", - "gex-SO": "gex-Latn-SO", - "gey": "gey-Latn-CD", - "gey-CD": "gey-Latn-CD", - "gey-Latn": "gey-Latn-CD", - "gez": "gez-Ethi-ET", - "gez-ET": "gez-Ethi-ET", - "gez-Ethi": "gez-Ethi-ET", - "gfk": "gfk-Latn-PG", - "gfk-Latn": "gfk-Latn-PG", - "gfk-PG": "gfk-Latn-PG", - "gga": "gga-Latn-SB", - "gga-Latn": "gga-Latn-SB", - "gga-SB": "gga-Latn-SB", - "ggb": "ggb-Latn-LR", - "ggb-LR": "ggb-Latn-LR", - "ggb-Latn": "ggb-Latn-LR", - "ggd": "ggd-Latn-AU", - "ggd-AU": "ggd-Latn-AU", - "ggd-Latn": "ggd-Latn-AU", - "gge": "gge-Latn-AU", - "gge-AU": "gge-Latn-AU", - "gge-Latn": "gge-Latn-AU", - "ggg": "ggg-Arab-PK", - "ggg-Arab": "ggg-Arab-PK", - "ggg-PK": "ggg-Arab-PK", - "ggk": "ggk-Latn-AU", - "ggk-AU": "ggk-Latn-AU", - "ggk-Latn": "ggk-Latn-AU", - "ggl": "ggl-Latn-PG", - "ggl-Latn": "ggl-Latn-PG", - "ggl-PG": "ggl-Latn-PG", - "ggt": "ggt-Latn-PG", - "ggt-Latn": "ggt-Latn-PG", - "ggt-PG": "ggt-Latn-PG", - "ggu": "ggu-Latn-CI", - "ggu-CI": "ggu-Latn-CI", - "ggu-Latn": "ggu-Latn-CI", - "ggw": "ggw-Latn-PG", - "ggw-Latn": "ggw-Latn-PG", - "ggw-PG": "ggw-Latn-PG", - "gha": "gha-Arab-LY", - "gha-Arab": "gha-Arab-LY", - "gha-LY": "gha-Arab-LY", - "ghc": "ghc-Latn-GB", - "ghc-GB": "ghc-Latn-GB", - "ghc-Latn": "ghc-Latn-GB", - "ghe": "ghe-Deva-NP", - "ghe-Deva": "ghe-Deva-NP", - "ghe-NP": "ghe-Deva-NP", - "ghk": "ghk-Latn-MM", - "ghk-Latn": "ghk-Latn-MM", - "ghk-MM": "ghk-Latn-MM", - "ghn": "ghn-Latn-SB", - "ghn-Latn": "ghn-Latn-SB", - "ghn-SB": "ghn-Latn-SB", - "gho": "gho-Tfng-MA", - "gho-MA": "gho-Tfng-MA", - "gho-Tfng": "gho-Tfng-MA", - "ghr": "ghr-Arab-PK", - "ghr-Arab": "ghr-Arab-PK", - "ghr-PK": "ghr-Arab-PK", - "ghs": "ghs-Latn-PG", - "ghs-Latn": "ghs-Latn-PG", - "ghs-PG": "ghs-Latn-PG", - "ght": "ght-Tibt-NP", - "ght-NP": "ght-Tibt-NP", - "ght-Tibt": "ght-Tibt-NP", - "gia": "gia-Latn-AU", - "gia-AU": "gia-Latn-AU", - "gia-Latn": "gia-Latn-AU", - "gib": "gib-Latn-NG", - "gib-Latn": "gib-Latn-NG", - "gib-NG": "gib-Latn-NG", - "gic": "gic-Latn-ZA", - "gic-Latn": "gic-Latn-ZA", - "gic-ZA": "gic-Latn-ZA", - "gid": "gid-Latn-CM", - "gid-CM": "gid-Latn-CM", - "gid-Latn": "gid-Latn-CM", - "gie": "gie-Latn-CI", - "gie-CI": "gie-Latn-CI", - "gie-Latn": "gie-Latn-CI", - "gig": "gig-Arab-PK", - "gig-Arab": "gig-Arab-PK", - "gig-PK": "gig-Arab-PK", - "gih": "gih-Latn-AU", - "gih-AU": "gih-Latn-AU", - "gih-Latn": "gih-Latn-AU", - "gil": "gil-Latn-KI", - "gil-KI": "gil-Latn-KI", - "gil-Latn": "gil-Latn-KI", - "gim": "gim-Latn-PG", - "gim-Latn": "gim-Latn-PG", - "gim-PG": "gim-Latn-PG", - "gin": "gin-Cyrl-RU", - "gin-Cyrl": "gin-Cyrl-RU", - "gin-RU": "gin-Cyrl-RU", - "gip": "gip-Latn-PG", - "gip-Latn": "gip-Latn-PG", - "gip-PG": "gip-Latn-PG", - "giq": "giq-Latn-VN", - "giq-Latn": "giq-Latn-VN", - "giq-VN": "giq-Latn-VN", - "gir": "gir-Latn-VN", - "gir-Latn": "gir-Latn-VN", - "gir-VN": "gir-Latn-VN", - "gis": "gis-Latn-CM", - "gis-CM": "gis-Latn-CM", - "gis-Latn": "gis-Latn-CM", - "git": "git-Latn-CA", - "git-CA": "git-Latn-CA", - "git-Latn": "git-Latn-CA", - "gix": "gix-Latn-CD", - "gix-CD": "gix-Latn-CD", - "gix-Latn": "gix-Latn-CD", - "giy": "giy-Latn-AU", - "giy-AU": "giy-Latn-AU", - "giy-Latn": "giy-Latn-AU", - "giz": "giz-Latn-CM", - "giz-CM": "giz-Latn-CM", - "giz-Latn": "giz-Latn-CM", - "gjk": "gjk-Arab-PK", - "gjk-Arab": "gjk-Arab-PK", - "gjk-PK": "gjk-Arab-PK", - "gjm": "gjm-Latn-AU", - "gjm-AU": "gjm-Latn-AU", - "gjm-Latn": "gjm-Latn-AU", - "gjn": "gjn-Latn-GH", - "gjn-GH": "gjn-Latn-GH", - "gjn-Latn": "gjn-Latn-GH", - "gjr": "gjr-Latn-AU", - "gjr-AU": "gjr-Latn-AU", - "gjr-Latn": "gjr-Latn-AU", - "gju": "gju-Arab-PK", - "gju-Arab": "gju-Arab-PK", - "gju-PK": "gju-Arab-PK", - "gka": "gka-Latn-PG", - "gka-Latn": "gka-Latn-PG", - "gka-PG": "gka-Latn-PG", - "gkd": "gkd-Latn-PG", - "gkd-Latn": "gkd-Latn-PG", - "gkd-PG": "gkd-Latn-PG", - "gke": "gke-Latn-CM", - "gke-CM": "gke-Latn-CM", - "gke-Latn": "gke-Latn-CM", - "gkn": "gkn-Latn-NG", - "gkn-Latn": "gkn-Latn-NG", - "gkn-NG": "gkn-Latn-NG", - "gko": "gko-Latn-AU", - "gko-AU": "gko-Latn-AU", - "gko-Latn": "gko-Latn-AU", - "gkp": "gkp-Latn-GN", - "gkp-GN": "gkp-Latn-GN", - "gkp-Latn": "gkp-Latn-GN", - "gku": "gku-Latn-ZA", - "gku-Latn": "gku-Latn-ZA", - "gku-ZA": "gku-Latn-ZA", - "gl": "gl-Latn-ES", - "gl-ES": "gl-Latn-ES", - "gl-Latn": "gl-Latn-ES", - "glb": "glb-Latn-NG", - "glb-Latn": "glb-Latn-NG", - "glb-NG": "glb-Latn-NG", - "glc": "glc-Latn-TD", - "glc-Latn": "glc-Latn-TD", - "glc-TD": "glc-Latn-TD", - "gld": "gld-Cyrl-RU", - "gld-Cyrl": "gld-Cyrl-RU", - "gld-RU": "gld-Cyrl-RU", - "glh": "glh-Arab-AF", - "glh-AF": "glh-Arab-AF", - "glh-Arab": "glh-Arab-AF", - "glj": "glj-Latn-TD", - "glj-Latn": "glj-Latn-TD", - "glj-TD": "glj-Latn-TD", - "glk": "glk-Arab-IR", - "glk-Arab": "glk-Arab-IR", - "glk-IR": "glk-Arab-IR", - "gll": "gll-Latn-AU", - "gll-AU": "gll-Latn-AU", - "gll-Latn": "gll-Latn-AU", - "glo": "glo-Latn-NG", - "glo-Latn": "glo-Latn-NG", - "glo-NG": "glo-Latn-NG", - "glr": "glr-Latn-LR", - "glr-LR": "glr-Latn-LR", - "glr-Latn": "glr-Latn-LR", - "glu": "glu-Latn-TD", - "glu-Latn": "glu-Latn-TD", - "glu-TD": "glu-Latn-TD", - "glw": "glw-Latn-NG", - "glw-Latn": "glw-Latn-NG", - "glw-NG": "glw-Latn-NG", - "gma": "gma-Latn-AU", - "gma-AU": "gma-Latn-AU", - "gma-Latn": "gma-Latn-AU", - "gmb": "gmb-Latn-SB", - "gmb-Latn": "gmb-Latn-SB", - "gmb-SB": "gmb-Latn-SB", - "gmd": "gmd-Latn-NG", - "gmd-Latn": "gmd-Latn-NG", - "gmd-NG": "gmd-Latn-NG", - "gmg": "gmg-Latn-PG", - "gmg-Latn": "gmg-Latn-PG", - "gmg-PG": "gmg-Latn-PG", - "gmh": "gmh-Latn-DE", - "gmh-DE": "gmh-Latn-DE", - "gmh-Latn": "gmh-Latn-DE", - "gml": "gml-Latf-DE", - "gml-DE": "gml-Latf-DE", - "gml-Latf": "gml-Latf-DE", - "gmm": "gmm-Latn-CM", - "gmm-CM": "gmm-Latn-CM", - "gmm-Latn": "gmm-Latn-CM", - "gmn": "gmn-Latn-CM", - "gmn-CM": "gmn-Latn-CM", - "gmn-Latn": "gmn-Latn-CM", - "gmr": "gmr-Latn-AU", - "gmr-AU": "gmr-Latn-AU", - "gmr-Latn": "gmr-Latn-AU", - "gmu": "gmu-Latn-PG", - "gmu-Latn": "gmu-Latn-PG", - "gmu-PG": "gmu-Latn-PG", - "gmv": "gmv-Ethi-ET", - "gmv-ET": "gmv-Ethi-ET", - "gmv-Ethi": "gmv-Ethi-ET", - "gmx": "gmx-Latn-TZ", - "gmx-Latn": "gmx-Latn-TZ", - "gmx-TZ": "gmx-Latn-TZ", - "gmy": "gmy-Linb-GR", - "gmy-GR": "gmy-Linb-GR", - "gmy-Linb": "gmy-Linb-GR", - "gmz": "gmz-Latn-NG", - "gmz-Latn": "gmz-Latn-NG", - "gmz-NG": "gmz-Latn-NG", - "gn": "gn-Latn-PY", - "gn-Latn": "gn-Latn-PY", - "gn-PY": "gn-Latn-PY", - "gna": "gna-Latn-BF", - "gna-BF": "gna-Latn-BF", - "gna-Latn": "gna-Latn-BF", - "gnb": "gnb-Latn-IN", - "gnb-IN": "gnb-Latn-IN", - "gnb-Latn": "gnb-Latn-IN", - "gnc": "gnc-Latn-ES", - "gnc-ES": "gnc-Latn-ES", - "gnc-Latn": "gnc-Latn-ES", - "gnd": "gnd-Latn-CM", - "gnd-CM": "gnd-Latn-CM", - "gnd-Latn": "gnd-Latn-CM", - "gne": "gne-Latn-NG", - "gne-Latn": "gne-Latn-NG", - "gne-NG": "gne-Latn-NG", - "gng": "gng-Latn-TG", - "gng-Latn": "gng-Latn-TG", - "gng-TG": "gng-Latn-TG", - "gnh": "gnh-Latn-NG", - "gnh-Latn": "gnh-Latn-NG", - "gnh-NG": "gnh-Latn-NG", - "gni": "gni-Latn-AU", - "gni-AU": "gni-Latn-AU", - "gni-Latn": "gni-Latn-AU", - "gnj": "gnj-Latn-CI", - "gnj-CI": "gnj-Latn-CI", - "gnj-Latn": "gnj-Latn-CI", - "gnk": "gnk-Latn-BW", - "gnk-BW": "gnk-Latn-BW", - "gnk-Latn": "gnk-Latn-BW", - "gnl": "gnl-Latn-AU", - "gnl-AU": "gnl-Latn-AU", - "gnl-Latn": "gnl-Latn-AU", - "gnm": "gnm-Latn-PG", - "gnm-Latn": "gnm-Latn-PG", - "gnm-PG": "gnm-Latn-PG", - "gnn": "gnn-Latn-AU", - "gnn-AU": "gnn-Latn-AU", - "gnn-Latn": "gnn-Latn-AU", - "gnq": "gnq-Latn-MY", - "gnq-Latn": "gnq-Latn-MY", - "gnq-MY": "gnq-Latn-MY", - "gnr": "gnr-Latn-AU", - "gnr-AU": "gnr-Latn-AU", - "gnr-Latn": "gnr-Latn-AU", - "gnt": "gnt-Latn-PG", - "gnt-Latn": "gnt-Latn-PG", - "gnt-PG": "gnt-Latn-PG", - "gnu": "gnu-Latn-PG", - "gnu-Latn": "gnu-Latn-PG", - "gnu-PG": "gnu-Latn-PG", - "gnw": "gnw-Latn-BO", - "gnw-BO": "gnw-Latn-BO", - "gnw-Latn": "gnw-Latn-BO", - "gnz": "gnz-Latn-CF", - "gnz-CF": "gnz-Latn-CF", - "gnz-Latn": "gnz-Latn-CF", - "goa": "goa-Latn-CI", - "goa-CI": "goa-Latn-CI", - "goa-Latn": "goa-Latn-CI", - "gob": "gob-Latn-CO", - "gob-CO": "gob-Latn-CO", - "gob-Latn": "gob-Latn-CO", - "goc": "goc-Latn-PG", - "goc-Latn": "goc-Latn-PG", - "goc-PG": "goc-Latn-PG", - "god": "god-Latn-CI", - "god-CI": "god-Latn-CI", - "god-Latn": "god-Latn-CI", - "goe": "goe-Tibt-BT", - "goe-BT": "goe-Tibt-BT", - "goe-Tibt": "goe-Tibt-BT", - "gof": "gof-Ethi-ET", - "gof-ET": "gof-Ethi-ET", - "gof-Ethi": "gof-Ethi-ET", - "gog": "gog-Latn-TZ", - "gog-Latn": "gog-Latn-TZ", - "gog-TZ": "gog-Latn-TZ", - "goh": "goh-Latn-DE", - "goh-DE": "goh-Latn-DE", - "goh-Latn": "goh-Latn-DE", - "goi": "goi-Latn-PG", - "goi-Latn": "goi-Latn-PG", - "goi-PG": "goi-Latn-PG", - "goj": "goj-Deva-IN", - "goj-Deva": "goj-Deva-IN", - "goj-IN": "goj-Deva-IN", - "gok": "gok-Deva-IN", - "gok-Deva": "gok-Deva-IN", - "gok-IN": "gok-Deva-IN", - "gol": "gol-Latn-LR", - "gol-LR": "gol-Latn-LR", - "gol-Latn": "gol-Latn-LR", - "gon": "gon-Deva-IN", - "gon-Deva": "gon-Deva-IN", - "gon-IN": "gon-Deva-IN", - "goo": "goo-Latn-FJ", - "goo-FJ": "goo-Latn-FJ", - "goo-Latn": "goo-Latn-FJ", - "gop": "gop-Latn-ID", - "gop-ID": "gop-Latn-ID", - "gop-Latn": "gop-Latn-ID", - "goq": "goq-Latn-ID", - "goq-ID": "goq-Latn-ID", - "goq-Latn": "goq-Latn-ID", - "gor": "gor-Latn-ID", - "gor-ID": "gor-Latn-ID", - "gor-Latn": "gor-Latn-ID", - "gos": "gos-Latn-NL", - "gos-Latn": "gos-Latn-NL", - "gos-NL": "gos-Latn-NL", - "got": "got-Goth-UA", - "got-Goth": "got-Goth-UA", - "got-UA": "got-Goth-UA", - "gou": "gou-Latn-CM", - "gou-CM": "gou-Latn-CM", - "gou-Latn": "gou-Latn-CM", - "gov": "gov-Latn-CI", - "gov-CI": "gov-Latn-CI", - "gov-Latn": "gov-Latn-CI", - "gow": "gow-Latn-TZ", - "gow-Latn": "gow-Latn-TZ", - "gow-TZ": "gow-Latn-TZ", - "gox": "gox-Latn-CD", - "gox-CD": "gox-Latn-CD", - "gox-Latn": "gox-Latn-CD", - "goy": "goy-Latn-TD", - "goy-Latn": "goy-Latn-TD", - "goy-TD": "goy-Latn-TD", - "gpa": "gpa-Latn-NG", - "gpa-Latn": "gpa-Latn-NG", - "gpa-NG": "gpa-Latn-NG", - "gpe": "gpe-Latn-GH", - "gpe-GH": "gpe-Latn-GH", - "gpe-Latn": "gpe-Latn-GH", - "gpn": "gpn-Latn-PG", - "gpn-Latn": "gpn-Latn-PG", - "gpn-PG": "gpn-Latn-PG", - "gqa": "gqa-Latn-NG", - "gqa-Latn": "gqa-Latn-NG", - "gqa-NG": "gqa-Latn-NG", - "gqn": "gqn-Latn-BR", - "gqn-BR": "gqn-Latn-BR", - "gqn-Latn": "gqn-Latn-BR", - "gqr": "gqr-Latn-TD", - "gqr-Latn": "gqr-Latn-TD", - "gqr-TD": "gqr-Latn-TD", - "gra": "gra-Deva-IN", - "gra-Deva": "gra-Deva-IN", - "gra-IN": "gra-Deva-IN", - "grb": "grb-Latn-LR", - "grb-LR": "grb-Latn-LR", - "grb-Latn": "grb-Latn-LR", - "grc": "grc-Cprt-CY", - "grc-CY": "grc-Cprt-CY", - "grc-Cprt": "grc-Cprt-CY", - "grc-Linb": "grc-Linb-GR", - "grd": "grd-Latn-NG", - "grd-Latn": "grd-Latn-NG", - "grd-NG": "grd-Latn-NG", - "grg": "grg-Latn-PG", - "grg-Latn": "grg-Latn-PG", - "grg-PG": "grg-Latn-PG", - "grh": "grh-Latn-NG", - "grh-Latn": "grh-Latn-NG", - "grh-NG": "grh-Latn-NG", - "gri": "gri-Latn-SB", - "gri-Latn": "gri-Latn-SB", - "gri-SB": "gri-Latn-SB", - "grj": "grj-Latn-LR", - "grj-LR": "grj-Latn-LR", - "grj-Latn": "grj-Latn-LR", - "grm": "grm-Latn-MY", - "grm-Latn": "grm-Latn-MY", - "grm-MY": "grm-Latn-MY", - "grq": "grq-Latn-PG", - "grq-Latn": "grq-Latn-PG", - "grq-PG": "grq-Latn-PG", - "grs": "grs-Latn-ID", - "grs-ID": "grs-Latn-ID", - "grs-Latn": "grs-Latn-ID", - "grt": "grt-Beng-IN", - "grt-Beng": "grt-Beng-IN", - "grt-IN": "grt-Beng-IN", - "gru": "gru-Ethi-ET", - "gru-ET": "gru-Ethi-ET", - "gru-Ethi": "gru-Ethi-ET", - "grv": "grv-Latn-LR", - "grv-LR": "grv-Latn-LR", - "grv-Latn": "grv-Latn-LR", - "grw": "grw-Latn-PG", - "grw-Latn": "grw-Latn-PG", - "grw-PG": "grw-Latn-PG", - "grx": "grx-Latn-PG", - "grx-Latn": "grx-Latn-PG", - "grx-PG": "grx-Latn-PG", - "gry": "gry-Latn-LR", - "gry-LR": "gry-Latn-LR", - "gry-Latn": "gry-Latn-LR", - "grz": "grz-Latn-PG", - "grz-Latn": "grz-Latn-PG", - "grz-PG": "grz-Latn-PG", - "gsl": "gsl-Latn-SN", - "gsl-Latn": "gsl-Latn-SN", - "gsl-SN": "gsl-Latn-SN", - "gsn": "gsn-Latn-PG", - "gsn-Latn": "gsn-Latn-PG", - "gsn-PG": "gsn-Latn-PG", - "gso": "gso-Latn-CF", - "gso-CF": "gso-Latn-CF", - "gso-Latn": "gso-Latn-CF", - "gsp": "gsp-Latn-PG", - "gsp-Latn": "gsp-Latn-PG", - "gsp-PG": "gsp-Latn-PG", - "gsw": "gsw-Latn-CH", - "gsw-CH": "gsw-Latn-CH", - "gsw-Latn": "gsw-Latn-CH", - "gta": "gta-Latn-BR", - "gta-BR": "gta-Latn-BR", - "gta-Latn": "gta-Latn-BR", - "gtu": "gtu-Latn-AU", - "gtu-AU": "gtu-Latn-AU", - "gtu-Latn": "gtu-Latn-AU", - "gu": "gu-Gujr-IN", - "gu-Gujr": "gu-Gujr-IN", - "gu-IN": "gu-Gujr-IN", - "gu-XX": "gu-Gujr-XX", - "gua": "gua-Latn-NG", - "gua-Latn": "gua-Latn-NG", - "gua-NG": "gua-Latn-NG", - "gub": "gub-Latn-BR", - "gub-BR": "gub-Latn-BR", - "gub-Latn": "gub-Latn-BR", - "guc": "guc-Latn-CO", - "guc-CO": "guc-Latn-CO", - "guc-Latn": "guc-Latn-CO", - "gud": "gud-Latn-CI", - "gud-CI": "gud-Latn-CI", - "gud-Latn": "gud-Latn-CI", - "gue": "gue-Latn-AU", - "gue-AU": "gue-Latn-AU", - "gue-Latn": "gue-Latn-AU", - "guf": "guf-Latn-AU", - "guf-AU": "guf-Latn-AU", - "guf-Latn": "guf-Latn-AU", - "guh": "guh-Latn-CO", - "guh-CO": "guh-Latn-CO", - "guh-Latn": "guh-Latn-CO", - "gui": "gui-Latn-BO", - "gui-BO": "gui-Latn-BO", - "gui-Latn": "gui-Latn-BO", - "guk": "guk-Latn-ET", - "guk-ET": "guk-Latn-ET", - "guk-Latn": "guk-Latn-ET", - "gul": "gul-Latn-US", - "gul-Latn": "gul-Latn-US", - "gul-US": "gul-Latn-US", - "gum": "gum-Latn-CO", - "gum-CO": "gum-Latn-CO", - "gum-Latn": "gum-Latn-CO", - "gun": "gun-Latn-BR", - "gun-BR": "gun-Latn-BR", - "gun-Latn": "gun-Latn-BR", - "guo": "guo-Latn-CO", - "guo-CO": "guo-Latn-CO", - "guo-Latn": "guo-Latn-CO", - "gup": "gup-Latn-AU", - "gup-AU": "gup-Latn-AU", - "gup-Latn": "gup-Latn-AU", - "guq": "guq-Latn-PY", - "guq-Latn": "guq-Latn-PY", - "guq-PY": "guq-Latn-PY", - "gur": "gur-Latn-GH", - "gur-GH": "gur-Latn-GH", - "gur-Latn": "gur-Latn-GH", - "gut": "gut-Latn-CR", - "gut-CR": "gut-Latn-CR", - "gut-Latn": "gut-Latn-CR", - "guu": "guu-Latn-VE", - "guu-Latn": "guu-Latn-VE", - "guu-VE": "guu-Latn-VE", - "guw": "guw-Latn-BJ", - "guw-BJ": "guw-Latn-BJ", - "guw-Latn": "guw-Latn-BJ", - "gux": "gux-Latn-BF", - "gux-BF": "gux-Latn-BF", - "gux-Latn": "gux-Latn-BF", - "guz": "guz-Latn-KE", - "guz-KE": "guz-Latn-KE", - "guz-Latn": "guz-Latn-KE", - "gv": "gv-Latn-IM", - "gv-IM": "gv-Latn-IM", - "gv-Latn": "gv-Latn-IM", - "gva": "gva-Latn-PY", - "gva-Latn": "gva-Latn-PY", - "gva-PY": "gva-Latn-PY", - "gvc": "gvc-Latn-BR", - "gvc-BR": "gvc-Latn-BR", - "gvc-Latn": "gvc-Latn-BR", - "gve": "gve-Latn-PG", - "gve-Latn": "gve-Latn-PG", - "gve-PG": "gve-Latn-PG", - "gvf": "gvf-Latn-PG", - "gvf-Latn": "gvf-Latn-PG", - "gvf-PG": "gvf-Latn-PG", - "gvj": "gvj-Latn-BR", - "gvj-BR": "gvj-Latn-BR", - "gvj-Latn": "gvj-Latn-BR", - "gvl": "gvl-Latn-TD", - "gvl-Latn": "gvl-Latn-TD", - "gvl-TD": "gvl-Latn-TD", - "gvm": "gvm-Latn-NG", - "gvm-Latn": "gvm-Latn-NG", - "gvm-NG": "gvm-Latn-NG", - "gvn": "gvn-Latn-AU", - "gvn-AU": "gvn-Latn-AU", - "gvn-Latn": "gvn-Latn-AU", - "gvo": "gvo-Latn-BR", - "gvo-BR": "gvo-Latn-BR", - "gvo-Latn": "gvo-Latn-BR", - "gvp": "gvp-Latn-BR", - "gvp-BR": "gvp-Latn-BR", - "gvp-Latn": "gvp-Latn-BR", - "gvr": "gvr-Deva-NP", - "gvr-Deva": "gvr-Deva-NP", - "gvr-Gukh": "gvr-Gukh-NP", - "gvr-NP": "gvr-Deva-NP", - "gvs": "gvs-Latn-PG", - "gvs-Latn": "gvs-Latn-PG", - "gvs-PG": "gvs-Latn-PG", - "gvy": "gvy-Latn-AU", - "gvy-AU": "gvy-Latn-AU", - "gvy-Latn": "gvy-Latn-AU", - "gwa": "gwa-Latn-CI", - "gwa-CI": "gwa-Latn-CI", - "gwa-Latn": "gwa-Latn-CI", - "gwb": "gwb-Latn-NG", - "gwb-Latn": "gwb-Latn-NG", - "gwb-NG": "gwb-Latn-NG", - "gwc": "gwc-Arab-PK", - "gwc-Arab": "gwc-Arab-PK", - "gwc-PK": "gwc-Arab-PK", - "gwd": "gwd-Latn-ET", - "gwd-ET": "gwd-Latn-ET", - "gwd-Latn": "gwd-Latn-ET", - "gwe": "gwe-Latn-TZ", - "gwe-Latn": "gwe-Latn-TZ", - "gwe-TZ": "gwe-Latn-TZ", - "gwf": "gwf-Arab-PK", - "gwf-Arab": "gwf-Arab-PK", - "gwf-PK": "gwf-Arab-PK", - "gwg": "gwg-Latn-NG", - "gwg-Latn": "gwg-Latn-NG", - "gwg-NG": "gwg-Latn-NG", - "gwi": "gwi-Latn-CA", - "gwi-CA": "gwi-Latn-CA", - "gwi-Latn": "gwi-Latn-CA", - "gwj": "gwj-Latn-BW", - "gwj-BW": "gwj-Latn-BW", - "gwj-Latn": "gwj-Latn-BW", - "gwm": "gwm-Latn-AU", - "gwm-AU": "gwm-Latn-AU", - "gwm-Latn": "gwm-Latn-AU", - "gwn": "gwn-Latn-NG", - "gwn-Latn": "gwn-Latn-NG", - "gwn-NG": "gwn-Latn-NG", - "gwr": "gwr-Latn-UG", - "gwr-Latn": "gwr-Latn-UG", - "gwr-UG": "gwr-Latn-UG", - "gwt": "gwt-Arab-AF", - "gwt-AF": "gwt-Arab-AF", - "gwt-Arab": "gwt-Arab-AF", - "gwu": "gwu-Latn-AU", - "gwu-AU": "gwu-Latn-AU", - "gwu-Latn": "gwu-Latn-AU", - "gww": "gww-Latn-AU", - "gww-AU": "gww-Latn-AU", - "gww-Latn": "gww-Latn-AU", - "gwx": "gwx-Latn-GH", - "gwx-GH": "gwx-Latn-GH", - "gwx-Latn": "gwx-Latn-GH", - "gxx": "gxx-Latn-CI", - "gxx-CI": "gxx-Latn-CI", - "gxx-Latn": "gxx-Latn-CI", - "gyb": "gyb-Latn-PG", - "gyb-Latn": "gyb-Latn-PG", - "gyb-PG": "gyb-Latn-PG", - "gyd": "gyd-Latn-AU", - "gyd-AU": "gyd-Latn-AU", - "gyd-Latn": "gyd-Latn-AU", - "gye": "gye-Latn-NG", - "gye-Latn": "gye-Latn-NG", - "gye-NG": "gye-Latn-NG", - "gyf": "gyf-Latn-AU", - "gyf-AU": "gyf-Latn-AU", - "gyf-Latn": "gyf-Latn-AU", - "gyg": "gyg-Latn-CF", - "gyg-CF": "gyg-Latn-CF", - "gyg-Latn": "gyg-Latn-CF", - "gyi": "gyi-Latn-CM", - "gyi-CM": "gyi-Latn-CM", - "gyi-Latn": "gyi-Latn-CM", - "gyl": "gyl-Latn-ET", - "gyl-ET": "gyl-Latn-ET", - "gyl-Latn": "gyl-Latn-ET", - "gym": "gym-Latn-PA", - "gym-Latn": "gym-Latn-PA", - "gym-PA": "gym-Latn-PA", - "gyn": "gyn-Latn-GY", - "gyn-GY": "gyn-Latn-GY", - "gyn-Latn": "gyn-Latn-GY", - "gyo": "gyo-Deva-NP", - "gyo-Deva": "gyo-Deva-NP", - "gyo-NP": "gyo-Deva-NP", - "gyr": "gyr-Latn-BO", - "gyr-BO": "gyr-Latn-BO", - "gyr-Latn": "gyr-Latn-BO", - "gyy": "gyy-Latn-AU", - "gyy-AU": "gyy-Latn-AU", - "gyy-Latn": "gyy-Latn-AU", - "gyz": "gyz-Latn-NG", - "gyz-Latn": "gyz-Latn-NG", - "gyz-NG": "gyz-Latn-NG", - "gza": "gza-Latn-SD", - "gza-Latn": "gza-Latn-SD", - "gza-SD": "gza-Latn-SD", - "gzi": "gzi-Arab-IR", - "gzi-Arab": "gzi-Arab-IR", - "gzi-IR": "gzi-Arab-IR", - "gzn": "gzn-Latn-ID", - "gzn-ID": "gzn-Latn-ID", - "gzn-Latn": "gzn-Latn-ID", - "ha": "ha-Latn-NG", - "ha-Arab-NG": "ha-Arab-NG", - "ha-CM": "ha-Arab-CM", - "ha-Latn": "ha-Latn-NG", - "ha-NE": "ha-Latn-NE", - "ha-NG": "ha-Latn-NG", - "ha-SD": "ha-Arab-SD", - "haa": "haa-Latn-US", - "haa-Latn": "haa-Latn-US", - "haa-US": "haa-Latn-US", - "hac": "hac-Arab-IR", - "hac-Arab": "hac-Arab-IR", - "hac-IR": "hac-Arab-IR", - "had": "had-Latn-ID", - "had-ID": "had-Latn-ID", - "had-Latn": "had-Latn-ID", - "hae": "hae-Latn-ET", - "hae-ET": "hae-Latn-ET", - "hae-Latn": "hae-Latn-ET", - "hag": "hag-Latn-GH", - "hag-GH": "hag-Latn-GH", - "hag-Latn": "hag-Latn-GH", - "hah": "hah-Latn-PG", - "hah-Latn": "hah-Latn-PG", - "hah-PG": "hah-Latn-PG", - "hai": "hai-Latn-CA", - "hai-CA": "hai-Latn-CA", - "hai-Latn": "hai-Latn-CA", - "haj": "haj-Latn-IN", - "haj-IN": "haj-Latn-IN", - "haj-Latn": "haj-Latn-IN", - "hak": "hak-Hans-CN", - "hak-CN": "hak-Hans-CN", - "hak-Hans": "hak-Hans-CN", - "hal": "hal-Latn-VN", - "hal-Latn": "hal-Latn-VN", - "hal-VN": "hal-Latn-VN", - "ham": "ham-Latn-PG", - "ham-Latn": "ham-Latn-PG", - "ham-PG": "ham-Latn-PG", - "han": "han-Latn-TZ", - "han-Latn": "han-Latn-TZ", - "han-TZ": "han-Latn-TZ", - "hao": "hao-Latn-PG", - "hao-Latn": "hao-Latn-PG", - "hao-PG": "hao-Latn-PG", - "hap": "hap-Latn-ID", - "hap-ID": "hap-Latn-ID", - "hap-Latn": "hap-Latn-ID", - "haq": "haq-Latn-TZ", - "haq-Latn": "haq-Latn-TZ", - "haq-TZ": "haq-Latn-TZ", - "har": "har-Ethi-ET", - "har-ET": "har-Ethi-ET", - "har-Ethi": "har-Ethi-ET", - "has": "has-Latn-CA", - "has-CA": "has-Latn-CA", - "has-Latn": "has-Latn-CA", - "hav": "hav-Latn-CD", - "hav-CD": "hav-Latn-CD", - "hav-Latn": "hav-Latn-CD", - "haw": "haw-Latn-US", - "haw-Latn": "haw-Latn-US", - "haw-US": "haw-Latn-US", - "hax": "hax-Latn-CA", - "hax-CA": "hax-Latn-CA", - "hax-Latn": "hax-Latn-CA", - "hay": "hay-Latn-TZ", - "hay-Latn": "hay-Latn-TZ", - "hay-TZ": "hay-Latn-TZ", - "haz": "haz-Arab-AF", - "haz-AF": "haz-Arab-AF", - "haz-Arab": "haz-Arab-AF", - "hba": "hba-Latn-CD", - "hba-CD": "hba-Latn-CD", - "hba-Latn": "hba-Latn-CD", - "hbb": "hbb-Latn-NG", - "hbb-Latn": "hbb-Latn-NG", - "hbb-NG": "hbb-Latn-NG", - "hbn": "hbn-Latn-SD", - "hbn-Latn": "hbn-Latn-SD", - "hbn-SD": "hbn-Latn-SD", - "hbo": "hbo-Hebr-IL", - "hbo-Hebr": "hbo-Hebr-IL", - "hbo-IL": "hbo-Hebr-IL", - "hbu": "hbu-Latn-TL", - "hbu-Latn": "hbu-Latn-TL", - "hbu-TL": "hbu-Latn-TL", - "hch": "hch-Latn-MX", - "hch-Latn": "hch-Latn-MX", - "hch-MX": "hch-Latn-MX", - "hdy": "hdy-Ethi-ET", - "hdy-ET": "hdy-Ethi-ET", - "hdy-Ethi": "hdy-Ethi-ET", - "he": "he-Hebr-IL", - "he-Hebr": "he-Hebr-IL", - "he-IL": "he-Hebr-IL", - "hed": "hed-Latn-TD", - "hed-Latn": "hed-Latn-TD", - "hed-TD": "hed-Latn-TD", - "heg": "heg-Latn-ID", - "heg-ID": "heg-Latn-ID", - "heg-Latn": "heg-Latn-ID", - "heh": "heh-Latn-TZ", - "heh-Latn": "heh-Latn-TZ", - "heh-TZ": "heh-Latn-TZ", - "hei": "hei-Latn-CA", - "hei-CA": "hei-Latn-CA", - "hei-Latn": "hei-Latn-CA", - "hem": "hem-Latn-CD", - "hem-CD": "hem-Latn-CD", - "hem-Latn": "hem-Latn-CD", - "hgm": "hgm-Latn-NA", - "hgm-Latn": "hgm-Latn-NA", - "hgm-NA": "hgm-Latn-NA", - "hgw": "hgw-Latn-PG", - "hgw-Latn": "hgw-Latn-PG", - "hgw-PG": "hgw-Latn-PG", - "hhi": "hhi-Latn-PG", - "hhi-Latn": "hhi-Latn-PG", - "hhi-PG": "hhi-Latn-PG", - "hhr": "hhr-Latn-SN", - "hhr-Latn": "hhr-Latn-SN", - "hhr-SN": "hhr-Latn-SN", - "hhy": "hhy-Latn-PG", - "hhy-Latn": "hhy-Latn-PG", - "hhy-PG": "hhy-Latn-PG", - "hi": "hi-Deva-IN", - "hi-Deva": "hi-Deva-IN", - "hi-IN": "hi-Deva-IN", - "hi-Mahj": "hi-Mahj-IN", - "hi-XX": "hi-Deva-XX", - "hia": "hia-Latn-NG", - "hia-Latn": "hia-Latn-NG", - "hia-NG": "hia-Latn-NG", - "hib": "hib-Latn-PE", - "hib-Latn": "hib-Latn-PE", - "hib-PE": "hib-Latn-PE", - "hid": "hid-Latn-US", - "hid-Latn": "hid-Latn-US", - "hid-US": "hid-Latn-US", - "hif": "hif-Deva-FJ", - "hif-Deva": "hif-Deva-FJ", - "hif-Deva-FJ": "hif-Deva-FJ", - "hif-FJ": "hif-Deva-FJ", - "hig": "hig-Latn-NG", - "hig-Latn": "hig-Latn-NG", - "hig-NG": "hig-Latn-NG", - "hih": "hih-Latn-PG", - "hih-Latn": "hih-Latn-PG", - "hih-PG": "hih-Latn-PG", - "hii": "hii-Takr-IN", - "hii-IN": "hii-Takr-IN", - "hii-Takr": "hii-Takr-IN", - "hij": "hij-Latn-CM", - "hij-CM": "hij-Latn-CM", - "hij-Latn": "hij-Latn-CM", - "hik": "hik-Latn-ID", - "hik-ID": "hik-Latn-ID", - "hik-Latn": "hik-Latn-ID", - "hil": "hil-Latn-PH", - "hil-Latn": "hil-Latn-PH", - "hil-PH": "hil-Latn-PH", - "hio": "hio-Latn-BW", - "hio-BW": "hio-Latn-BW", - "hio-Latn": "hio-Latn-BW", - "hir": "hir-Latn-BR", - "hir-BR": "hir-Latn-BR", - "hir-Latn": "hir-Latn-BR", - "hit": "hit-Xsux-TR", - "hit-TR": "hit-Xsux-TR", - "hit-Xsux": "hit-Xsux-TR", - "hiw": "hiw-Latn-VU", - "hiw-Latn": "hiw-Latn-VU", - "hiw-VU": "hiw-Latn-VU", - "hix": "hix-Latn-BR", - "hix-BR": "hix-Latn-BR", - "hix-Latn": "hix-Latn-BR", - "hji": "hji-Latn-ID", - "hji-ID": "hji-Latn-ID", - "hji-Latn": "hji-Latn-ID", - "hka": "hka-Latn-TZ", - "hka-Latn": "hka-Latn-TZ", - "hka-TZ": "hka-Latn-TZ", - "hke": "hke-Latn-CD", - "hke-CD": "hke-Latn-CD", - "hke-Latn": "hke-Latn-CD", - "hkh": "hkh-Arab-IN", - "hkh-Arab": "hkh-Arab-IN", - "hkh-IN": "hkh-Arab-IN", - "hkk": "hkk-Latn-PG", - "hkk-Latn": "hkk-Latn-PG", - "hkk-PG": "hkk-Latn-PG", - "hla": "hla-Latn-PG", - "hla-Latn": "hla-Latn-PG", - "hla-PG": "hla-Latn-PG", - "hlb": "hlb-Deva-IN", - "hlb-Deva": "hlb-Deva-IN", - "hlb-IN": "hlb-Deva-IN", - "hld": "hld-Latn-VN", - "hld-Latn": "hld-Latn-VN", - "hld-VN": "hld-Latn-VN", - "hlt": "hlt-Latn-MM", - "hlt-Latn": "hlt-Latn-MM", - "hlt-MM": "hlt-Latn-MM", - "hlu": "hlu-Hluw-TR", - "hlu-Hluw": "hlu-Hluw-TR", - "hlu-TR": "hlu-Hluw-TR", - "hma": "hma-Latn-CN", - "hma-CN": "hma-Latn-CN", - "hma-Latn": "hma-Latn-CN", - "hmb": "hmb-Latn-ML", - "hmb-Latn": "hmb-Latn-ML", - "hmb-ML": "hmb-Latn-ML", - "hmd": "hmd-Plrd-CN", - "hmd-CN": "hmd-Plrd-CN", - "hmd-Plrd": "hmd-Plrd-CN", - "hmf": "hmf-Latn-VN", - "hmf-Latn": "hmf-Latn-VN", - "hmf-VN": "hmf-Latn-VN", - "hmj": "hmj-Bopo-CN", - "hmj-Bopo": "hmj-Bopo-CN", - "hmj-CN": "hmj-Bopo-CN", - "hmm": "hmm-Latn-CN", - "hmm-CN": "hmm-Latn-CN", - "hmm-Latn": "hmm-Latn-CN", - "hmn": "hmn-Latn-CN", - "hmn-CN": "hmn-Latn-CN", - "hmn-Latn": "hmn-Latn-CN", - "hmp": "hmp-Latn-CN", - "hmp-CN": "hmp-Latn-CN", - "hmp-Latn": "hmp-Latn-CN", - "hmq": "hmq-Bopo-CN", - "hmq-Bopo": "hmq-Bopo-CN", - "hmq-CN": "hmq-Bopo-CN", - "hmr": "hmr-Latn-IN", - "hmr-IN": "hmr-Latn-IN", - "hmr-Latn": "hmr-Latn-IN", - "hms": "hms-Latn-CN", - "hms-CN": "hms-Latn-CN", - "hms-Latn": "hms-Latn-CN", - "hmt": "hmt-Latn-PG", - "hmt-Latn": "hmt-Latn-PG", - "hmt-PG": "hmt-Latn-PG", - "hmu": "hmu-Latn-ID", - "hmu-ID": "hmu-Latn-ID", - "hmu-Latn": "hmu-Latn-ID", - "hmv": "hmv-Latn-VN", - "hmv-Latn": "hmv-Latn-VN", - "hmv-VN": "hmv-Latn-VN", - "hmw": "hmw-Latn-CN", - "hmw-CN": "hmw-Latn-CN", - "hmw-Latn": "hmw-Latn-CN", - "hmy": "hmy-Latn-CN", - "hmy-CN": "hmy-Latn-CN", - "hmy-Latn": "hmy-Latn-CN", - "hmz": "hmz-Latn-CN", - "hmz-CN": "hmz-Latn-CN", - "hmz-Latn": "hmz-Latn-CN", - "hna": "hna-Latn-CM", - "hna-CM": "hna-Latn-CM", - "hna-Latn": "hna-Latn-CM", - "hnd": "hnd-Arab-PK", - "hnd-Arab": "hnd-Arab-PK", - "hnd-PK": "hnd-Arab-PK", - "hne": "hne-Deva-IN", - "hne-Deva": "hne-Deva-IN", - "hne-IN": "hne-Deva-IN", - "hng": "hng-Latn-AO", - "hng-AO": "hng-Latn-AO", - "hng-Latn": "hng-Latn-AO", - "hnh": "hnh-Latn-BW", - "hnh-BW": "hnh-Latn-BW", - "hnh-Latn": "hnh-Latn-BW", - "hni": "hni-Latn-CN", - "hni-CN": "hni-Latn-CN", - "hni-Latn": "hni-Latn-CN", - "hnj": "hnj-Hmnp-US", - "hnj-AU": "hnj-Laoo-AU", - "hnj-CN": "hnj-Laoo-CN", - "hnj-FR": "hnj-Laoo-FR", - "hnj-GF": "hnj-Laoo-GF", - "hnj-Hmng": "hnj-Hmng-LA", - "hnj-Hmnp": "hnj-Hmnp-US", - "hnj-Laoo": "hnj-Laoo-AU", - "hnj-MM": "hnj-Laoo-MM", - "hnj-SR": "hnj-Laoo-SR", - "hnj-TH": "hnj-Laoo-TH", - "hnj-US": "hnj-Hmnp-US", - "hnj-VN": "hnj-Laoo-VN", - "hnn": "hnn-Latn-PH", - "hnn-Hano": "hnn-Hano-PH", - "hnn-Latn": "hnn-Latn-PH", - "hnn-PH": "hnn-Latn-PH", - "hno": "hno-Arab-PK", - "hno-Arab": "hno-Arab-PK", - "hno-PK": "hno-Arab-PK", - "hns": "hns-Latn-SR", - "hns-Latn": "hns-Latn-SR", - "hns-SR": "hns-Latn-SR", - "ho": "ho-Latn-PG", - "ho-Latn": "ho-Latn-PG", - "ho-PG": "ho-Latn-PG", - "hoa": "hoa-Latn-SB", - "hoa-Latn": "hoa-Latn-SB", - "hoa-SB": "hoa-Latn-SB", - "hob": "hob-Latn-PG", - "hob-Latn": "hob-Latn-PG", - "hob-PG": "hob-Latn-PG", - "hoc": "hoc-Deva-IN", - "hoc-Deva": "hoc-Deva-IN", - "hoc-IN": "hoc-Deva-IN", - "hoc-Wara": "hoc-Wara-IN", - "hod": "hod-Latn-NG", - "hod-Latn": "hod-Latn-NG", - "hod-NG": "hod-Latn-NG", - "hoe": "hoe-Latn-NG", - "hoe-Latn": "hoe-Latn-NG", - "hoe-NG": "hoe-Latn-NG", - "hoh": "hoh-Arab-OM", - "hoh-Arab": "hoh-Arab-OM", - "hoh-OM": "hoh-Arab-OM", - "hoi": "hoi-Latn-US", - "hoi-Latn": "hoi-Latn-US", - "hoi-US": "hoi-Latn-US", - "hoj": "hoj-Deva-IN", - "hoj-Deva": "hoj-Deva-IN", - "hoj-IN": "hoj-Deva-IN", - "hol": "hol-Latn-AO", - "hol-AO": "hol-Latn-AO", - "hol-Latn": "hol-Latn-AO", - "hom": "hom-Latn-SS", - "hom-Latn": "hom-Latn-SS", - "hom-SS": "hom-Latn-SS", - "hoo": "hoo-Latn-CD", - "hoo-CD": "hoo-Latn-CD", - "hoo-Latn": "hoo-Latn-CD", - "hop": "hop-Latn-US", - "hop-Latn": "hop-Latn-US", - "hop-US": "hop-Latn-US", - "hor": "hor-Latn-TD", - "hor-Latn": "hor-Latn-TD", - "hor-TD": "hor-Latn-TD", - "hot": "hot-Latn-PG", - "hot-Latn": "hot-Latn-PG", - "hot-PG": "hot-Latn-PG", - "hov": "hov-Latn-ID", - "hov-ID": "hov-Latn-ID", - "hov-Latn": "hov-Latn-ID", - "how": "how-Hani-CN", - "how-CN": "how-Hani-CN", - "how-Hani": "how-Hani-CN", - "hoy": "hoy-Deva-IN", - "hoy-Deva": "hoy-Deva-IN", - "hoy-IN": "hoy-Deva-IN", - "hpo": "hpo-Mymr-MM", - "hpo-MM": "hpo-Mymr-MM", - "hpo-Mymr": "hpo-Mymr-MM", - "hr": "hr-Latn-HR", - "hr-HR": "hr-Latn-HR", - "hr-HU": "hr-Latn-HU", - "hr-Latn": "hr-Latn-HR", - "hr-ME": "hr-Latn-ME", - "hra": "hra-Latn-IN", - "hra-IN": "hra-Latn-IN", - "hra-Latn": "hra-Latn-IN", - "hrc": "hrc-Latn-PG", - "hrc-Latn": "hrc-Latn-PG", - "hrc-PG": "hrc-Latn-PG", - "hre": "hre-Latn-VN", - "hre-Latn": "hre-Latn-VN", - "hre-VN": "hre-Latn-VN", - "hrk": "hrk-Latn-ID", - "hrk-ID": "hrk-Latn-ID", - "hrk-Latn": "hrk-Latn-ID", - "hrm": "hrm-Latn-CN", - "hrm-CN": "hrm-Latn-CN", - "hrm-Latn": "hrm-Latn-CN", - "hro": "hro-Latn-VN", - "hro-Latn": "hro-Latn-VN", - "hro-VN": "hro-Latn-VN", - "hrp": "hrp-Latn-AU", - "hrp-AU": "hrp-Latn-AU", - "hrp-Latn": "hrp-Latn-AU", - "hrt": "hrt-Syrc-TR", - "hrt-Syrc": "hrt-Syrc-TR", - "hrt-TR": "hrt-Syrc-TR", - "hru": "hru-Latn-IN", - "hru-IN": "hru-Latn-IN", - "hru-Latn": "hru-Latn-IN", - "hrw": "hrw-Latn-PG", - "hrw-Latn": "hrw-Latn-PG", - "hrw-PG": "hrw-Latn-PG", - "hrx": "hrx-Latn-BR", - "hrx-BR": "hrx-Latn-BR", - "hrx-Latn": "hrx-Latn-BR", - "hrz": "hrz-Arab-IR", - "hrz-Arab": "hrz-Arab-IR", - "hrz-IR": "hrz-Arab-IR", - "hsb": "hsb-Latn-DE", - "hsb-DE": "hsb-Latn-DE", - "hsb-Latn": "hsb-Latn-DE", - "hsn": "hsn-Hans-CN", - "hsn-CN": "hsn-Hans-CN", - "hsn-Hans": "hsn-Hans-CN", - "hss": "hss-Arab-OM", - "hss-Arab": "hss-Arab-OM", - "hss-OM": "hss-Arab-OM", - "ht": "ht-Latn-HT", - "ht-HT": "ht-Latn-HT", - "ht-Latn": "ht-Latn-HT", - "hti": "hti-Latn-ID", - "hti-ID": "hti-Latn-ID", - "hti-Latn": "hti-Latn-ID", - "hto": "hto-Latn-CO", - "hto-CO": "hto-Latn-CO", - "hto-Latn": "hto-Latn-CO", - "hts": "hts-Latn-TZ", - "hts-Latn": "hts-Latn-TZ", - "hts-TZ": "hts-Latn-TZ", - "htu": "htu-Latn-ID", - "htu-ID": "htu-Latn-ID", - "htu-Latn": "htu-Latn-ID", - "htx": "htx-Xsux-TR", - "htx-TR": "htx-Xsux-TR", - "htx-Xsux": "htx-Xsux-TR", - "hu": "hu-Latn-HU", - "hu-HU": "hu-Latn-HU", - "hu-Hung": "hu-Hung-HU", - "hu-Latn": "hu-Latn-HU", - "hub": "hub-Latn-PE", - "hub-Latn": "hub-Latn-PE", - "hub-PE": "hub-Latn-PE", - "huc": "huc-Latn-BW", - "huc-BW": "huc-Latn-BW", - "huc-Latn": "huc-Latn-BW", - "hud": "hud-Latn-ID", - "hud-ID": "hud-Latn-ID", - "hud-Latn": "hud-Latn-ID", - "hue": "hue-Latn-MX", - "hue-Latn": "hue-Latn-MX", - "hue-MX": "hue-Latn-MX", - "huf": "huf-Latn-PG", - "huf-Latn": "huf-Latn-PG", - "huf-PG": "huf-Latn-PG", - "hug": "hug-Latn-PE", - "hug-Latn": "hug-Latn-PE", - "hug-PE": "hug-Latn-PE", - "huh": "huh-Latn-CL", - "huh-CL": "huh-Latn-CL", - "huh-Latn": "huh-Latn-CL", - "hui": "hui-Latn-PG", - "hui-Latn": "hui-Latn-PG", - "hui-PG": "hui-Latn-PG", - "huk": "huk-Latn-ID", - "huk-ID": "huk-Latn-ID", - "huk-Latn": "huk-Latn-ID", - "hul": "hul-Latn-PG", - "hul-Latn": "hul-Latn-PG", - "hul-PG": "hul-Latn-PG", - "hum": "hum-Latn-CD", - "hum-CD": "hum-Latn-CD", - "hum-Latn": "hum-Latn-CD", - "hup": "hup-Latn-US", - "hup-Latn": "hup-Latn-US", - "hup-US": "hup-Latn-US", - "hur": "hur-Latn-CA", - "hur-CA": "hur-Latn-CA", - "hur-Latn": "hur-Latn-CA", - "hus": "hus-Latn-MX", - "hus-Latn": "hus-Latn-MX", - "hus-MX": "hus-Latn-MX", - "hut": "hut-Deva-NP", - "hut-Deva": "hut-Deva-NP", - "hut-NP": "hut-Deva-NP", - "huu": "huu-Latn-PE", - "huu-Latn": "huu-Latn-PE", - "huu-PE": "huu-Latn-PE", - "huv": "huv-Latn-MX", - "huv-Latn": "huv-Latn-MX", - "huv-MX": "huv-Latn-MX", - "huw": "huw-Latn-ID", - "huw-ID": "huw-Latn-ID", - "huw-Latn": "huw-Latn-ID", - "hux": "hux-Latn-PE", - "hux-Latn": "hux-Latn-PE", - "hux-PE": "hux-Latn-PE", - "huy": "huy-Hebr-IL", - "huy-Hebr": "huy-Hebr-IL", - "huy-IL": "huy-Hebr-IL", - "huz": "huz-Cyrl-RU", - "huz-Cyrl": "huz-Cyrl-RU", - "huz-RU": "huz-Cyrl-RU", - "hvc": "hvc-Latn-HT", - "hvc-HT": "hvc-Latn-HT", - "hvc-Latn": "hvc-Latn-HT", - "hve": "hve-Latn-MX", - "hve-Latn": "hve-Latn-MX", - "hve-MX": "hve-Latn-MX", - "hvk": "hvk-Latn-NC", - "hvk-Latn": "hvk-Latn-NC", - "hvk-NC": "hvk-Latn-NC", - "hvn": "hvn-Latn-ID", - "hvn-ID": "hvn-Latn-ID", - "hvn-Latn": "hvn-Latn-ID", - "hvv": "hvv-Latn-MX", - "hvv-Latn": "hvv-Latn-MX", - "hvv-MX": "hvv-Latn-MX", - "hwa": "hwa-Latn-CI", - "hwa-CI": "hwa-Latn-CI", - "hwa-Latn": "hwa-Latn-CI", - "hwc": "hwc-Latn-US", - "hwc-Latn": "hwc-Latn-US", - "hwc-US": "hwc-Latn-US", - "hwo": "hwo-Latn-NG", - "hwo-Latn": "hwo-Latn-NG", - "hwo-NG": "hwo-Latn-NG", - "hy": "hy-Armn-AM", - "hy-AM": "hy-Armn-AM", - "hy-Armn": "hy-Armn-AM", - "hy-Latn": "hy-Latn-AM", - "hya": "hya-Latn-CM", - "hya-CM": "hya-Latn-CM", - "hya-Latn": "hya-Latn-CM", - "hyw": "hyw-Armn-AM", - "hyw-AM": "hyw-Armn-AM", - "hyw-Armn": "hyw-Armn-AM", - "hz": "hz-Latn-NA", - "hz-Latn": "hz-Latn-NA", - "hz-NA": "hz-Latn-NA", - "ia": "ia-Latn-001", - "ia-001": "ia-Latn-001", - "ia-Latn": "ia-Latn-001", - "iai": "iai-Latn-NC", - "iai-Latn": "iai-Latn-NC", - "iai-NC": "iai-Latn-NC", - "ian": "ian-Latn-PG", - "ian-Latn": "ian-Latn-PG", - "ian-PG": "ian-Latn-PG", - "iar": "iar-Latn-PG", - "iar-Latn": "iar-Latn-PG", - "iar-PG": "iar-Latn-PG", - "iba": "iba-Latn-MY", - "iba-Latn": "iba-Latn-MY", - "iba-MY": "iba-Latn-MY", - "ibb": "ibb-Latn-NG", - "ibb-Latn": "ibb-Latn-NG", - "ibb-NG": "ibb-Latn-NG", - "ibd": "ibd-Latn-AU", - "ibd-AU": "ibd-Latn-AU", - "ibd-Latn": "ibd-Latn-AU", - "ibe": "ibe-Latn-NG", - "ibe-Latn": "ibe-Latn-NG", - "ibe-NG": "ibe-Latn-NG", - "ibg": "ibg-Latn-PH", - "ibg-Latn": "ibg-Latn-PH", - "ibg-PH": "ibg-Latn-PH", - "ibh": "ibh-Latn-VN", - "ibh-Latn": "ibh-Latn-VN", - "ibh-VN": "ibh-Latn-VN", - "ibl": "ibl-Latn-PH", - "ibl-Latn": "ibl-Latn-PH", - "ibl-PH": "ibl-Latn-PH", - "ibm": "ibm-Latn-NG", - "ibm-Latn": "ibm-Latn-NG", - "ibm-NG": "ibm-Latn-NG", - "ibn": "ibn-Latn-NG", - "ibn-Latn": "ibn-Latn-NG", - "ibn-NG": "ibn-Latn-NG", - "ibr": "ibr-Latn-NG", - "ibr-Latn": "ibr-Latn-NG", - "ibr-NG": "ibr-Latn-NG", - "ibu": "ibu-Latn-ID", - "ibu-ID": "ibu-Latn-ID", - "ibu-Latn": "ibu-Latn-ID", - "iby": "iby-Latn-NG", - "iby-Latn": "iby-Latn-NG", - "iby-NG": "iby-Latn-NG", - "ica": "ica-Latn-BJ", - "ica-BJ": "ica-Latn-BJ", - "ica-Latn": "ica-Latn-BJ", - "ich": "ich-Latn-NG", - "ich-Latn": "ich-Latn-NG", - "ich-NG": "ich-Latn-NG", - "icr": "icr-Latn-CO", - "icr-CO": "icr-Latn-CO", - "icr-Latn": "icr-Latn-CO", - "id": "id-Latn-ID", - "id-BN": "id-Latn-BN", - "id-ID": "id-Latn-ID", - "id-Latn": "id-Latn-ID", - "ida": "ida-Latn-KE", - "ida-KE": "ida-Latn-KE", - "ida-Latn": "ida-Latn-KE", - "idb": "idb-Latn-IN", - "idb-IN": "idb-Latn-IN", - "idb-Latn": "idb-Latn-IN", - "idc": "idc-Latn-NG", - "idc-Latn": "idc-Latn-NG", - "idc-NG": "idc-Latn-NG", - "idd": "idd-Latn-BJ", - "idd-BJ": "idd-Latn-BJ", - "idd-Latn": "idd-Latn-BJ", - "ide": "ide-Latn-NG", - "ide-Latn": "ide-Latn-NG", - "ide-NG": "ide-Latn-NG", - "idi": "idi-Latn-PG", - "idi-Latn": "idi-Latn-PG", - "idi-PG": "idi-Latn-PG", - "idr": "idr-Latn-SS", - "idr-Latn": "idr-Latn-SS", - "idr-SS": "idr-Latn-SS", - "ids": "ids-Latn-NG", - "ids-Latn": "ids-Latn-NG", - "ids-NG": "ids-Latn-NG", - "idt": "idt-Latn-TL", - "idt-Latn": "idt-Latn-TL", - "idt-TL": "idt-Latn-TL", - "idu": "idu-Latn-NG", - "idu-Latn": "idu-Latn-NG", - "idu-NG": "idu-Latn-NG", - "ie": "ie-Latn-EE", - "ie-EE": "ie-Latn-EE", - "ie-Latn": "ie-Latn-EE", - "ifa": "ifa-Latn-PH", - "ifa-Latn": "ifa-Latn-PH", - "ifa-PH": "ifa-Latn-PH", - "ifb": "ifb-Latn-PH", - "ifb-Latn": "ifb-Latn-PH", - "ifb-PH": "ifb-Latn-PH", - "ife": "ife-Latn-TG", - "ife-Latn": "ife-Latn-TG", - "ife-TG": "ife-Latn-TG", - "iff": "iff-Latn-VU", - "iff-Latn": "iff-Latn-VU", - "iff-VU": "iff-Latn-VU", - "ifk": "ifk-Latn-PH", - "ifk-Latn": "ifk-Latn-PH", - "ifk-PH": "ifk-Latn-PH", - "ifm": "ifm-Latn-CG", - "ifm-CG": "ifm-Latn-CG", - "ifm-Latn": "ifm-Latn-CG", - "ifu": "ifu-Latn-PH", - "ifu-Latn": "ifu-Latn-PH", - "ifu-PH": "ifu-Latn-PH", - "ify": "ify-Latn-PH", - "ify-Latn": "ify-Latn-PH", - "ify-PH": "ify-Latn-PH", - "ig": "ig-Latn-NG", - "ig-Latn": "ig-Latn-NG", - "ig-NG": "ig-Latn-NG", - "igb": "igb-Latn-NG", - "igb-Latn": "igb-Latn-NG", - "igb-NG": "igb-Latn-NG", - "ige": "ige-Latn-NG", - "ige-Latn": "ige-Latn-NG", - "ige-NG": "ige-Latn-NG", - "igg": "igg-Latn-PG", - "igg-Latn": "igg-Latn-PG", - "igg-PG": "igg-Latn-PG", - "igl": "igl-Latn-NG", - "igl-Latn": "igl-Latn-NG", - "igl-NG": "igl-Latn-NG", - "igm": "igm-Latn-PG", - "igm-Latn": "igm-Latn-PG", - "igm-PG": "igm-Latn-PG", - "ign": "ign-Latn-BO", - "ign-BO": "ign-Latn-BO", - "ign-Latn": "ign-Latn-BO", - "igo": "igo-Latn-PG", - "igo-Latn": "igo-Latn-PG", - "igo-PG": "igo-Latn-PG", - "igs": "igs-Latn-001", - "igs-001": "igs-Latn-001", - "igs-Latn": "igs-Latn-001", - "igw": "igw-Latn-NG", - "igw-Latn": "igw-Latn-NG", - "igw-NG": "igw-Latn-NG", - "ihb": "ihb-Latn-ID", - "ihb-ID": "ihb-Latn-ID", - "ihb-Latn": "ihb-Latn-ID", - "ihi": "ihi-Latn-NG", - "ihi-Latn": "ihi-Latn-NG", - "ihi-NG": "ihi-Latn-NG", - "ihp": "ihp-Latn-ID", - "ihp-ID": "ihp-Latn-ID", - "ihp-Latn": "ihp-Latn-ID", - "ihw": "ihw-Latn-AU", - "ihw-AU": "ihw-Latn-AU", - "ihw-Latn": "ihw-Latn-AU", - "ii": "ii-Yiii-CN", - "ii-CN": "ii-Yiii-CN", - "ii-Yiii": "ii-Yiii-CN", - "iin": "iin-Latn-AU", - "iin-AU": "iin-Latn-AU", - "iin-Latn": "iin-Latn-AU", - "ijc": "ijc-Latn-NG", - "ijc-Latn": "ijc-Latn-NG", - "ijc-NG": "ijc-Latn-NG", - "ije": "ije-Latn-NG", - "ije-Latn": "ije-Latn-NG", - "ije-NG": "ije-Latn-NG", - "ijj": "ijj-Latn-BJ", - "ijj-BJ": "ijj-Latn-BJ", - "ijj-Latn": "ijj-Latn-BJ", - "ijn": "ijn-Latn-NG", - "ijn-Latn": "ijn-Latn-NG", - "ijn-NG": "ijn-Latn-NG", - "ijs": "ijs-Latn-NG", - "ijs-Latn": "ijs-Latn-NG", - "ijs-NG": "ijs-Latn-NG", - "ik": "ik-Latn-US", - "ik-Latn": "ik-Latn-US", - "ik-US": "ik-Latn-US", - "ikh": "ikh-Latn-NG", - "ikh-Latn": "ikh-Latn-NG", - "ikh-NG": "ikh-Latn-NG", - "iki": "iki-Latn-NG", - "iki-Latn": "iki-Latn-NG", - "iki-NG": "iki-Latn-NG", - "ikk": "ikk-Latn-NG", - "ikk-Latn": "ikk-Latn-NG", - "ikk-NG": "ikk-Latn-NG", - "ikl": "ikl-Latn-NG", - "ikl-Latn": "ikl-Latn-NG", - "ikl-NG": "ikl-Latn-NG", - "iko": "iko-Latn-NG", - "iko-Latn": "iko-Latn-NG", - "iko-NG": "iko-Latn-NG", - "ikp": "ikp-Latn-NG", - "ikp-Latn": "ikp-Latn-NG", - "ikp-NG": "ikp-Latn-NG", - "ikr": "ikr-Latn-AU", - "ikr-AU": "ikr-Latn-AU", - "ikr-Latn": "ikr-Latn-AU", - "ikt": "ikt-Latn-CA", - "ikt-CA": "ikt-Latn-CA", - "ikt-Latn": "ikt-Latn-CA", - "ikv": "ikv-Latn-NG", - "ikv-Latn": "ikv-Latn-NG", - "ikv-NG": "ikv-Latn-NG", - "ikw": "ikw-Latn-NG", - "ikw-Latn": "ikw-Latn-NG", - "ikw-NG": "ikw-Latn-NG", - "ikx": "ikx-Latn-UG", - "ikx-Latn": "ikx-Latn-UG", - "ikx-UG": "ikx-Latn-UG", - "ikz": "ikz-Latn-TZ", - "ikz-Latn": "ikz-Latn-TZ", - "ikz-TZ": "ikz-Latn-TZ", - "ila": "ila-Latn-ID", - "ila-ID": "ila-Latn-ID", - "ila-Latn": "ila-Latn-ID", - "ilb": "ilb-Latn-ZM", - "ilb-Latn": "ilb-Latn-ZM", - "ilb-ZM": "ilb-Latn-ZM", - "ilg": "ilg-Latn-AU", - "ilg-AU": "ilg-Latn-AU", - "ilg-Latn": "ilg-Latn-AU", - "ili": "ili-Latn-CN", - "ili-CN": "ili-Latn-CN", - "ili-Latn": "ili-Latn-CN", - "ilk": "ilk-Latn-PH", - "ilk-Latn": "ilk-Latn-PH", - "ilk-PH": "ilk-Latn-PH", - "ilm": "ilm-Latn-MY", - "ilm-Latn": "ilm-Latn-MY", - "ilm-MY": "ilm-Latn-MY", - "ilo": "ilo-Latn-PH", - "ilo-Latn": "ilo-Latn-PH", - "ilo-PH": "ilo-Latn-PH", - "ilp": "ilp-Latn-PH", - "ilp-Latn": "ilp-Latn-PH", - "ilp-PH": "ilp-Latn-PH", - "ilu": "ilu-Latn-ID", - "ilu-ID": "ilu-Latn-ID", - "ilu-Latn": "ilu-Latn-ID", - "ilv": "ilv-Latn-NG", - "ilv-Latn": "ilv-Latn-NG", - "ilv-NG": "ilv-Latn-NG", - "imi": "imi-Latn-PG", - "imi-Latn": "imi-Latn-PG", - "imi-PG": "imi-Latn-PG", - "iml": "iml-Latn-US", - "iml-Latn": "iml-Latn-US", - "iml-US": "iml-Latn-US", - "imn": "imn-Latn-PG", - "imn-Latn": "imn-Latn-PG", - "imn-PG": "imn-Latn-PG", - "imo": "imo-Latn-PG", - "imo-Latn": "imo-Latn-PG", - "imo-PG": "imo-Latn-PG", - "imr": "imr-Latn-ID", - "imr-ID": "imr-Latn-ID", - "imr-Latn": "imr-Latn-ID", - "ims": "ims-Latn-IT", - "ims-IT": "ims-Latn-IT", - "ims-Latn": "ims-Latn-IT", - "imt": "imt-Latn-SS", - "imt-Latn": "imt-Latn-SS", - "imt-SS": "imt-Latn-SS", - "imy": "imy-Lyci-TR", - "imy-Lyci": "imy-Lyci-TR", - "imy-TR": "imy-Lyci-TR", - "in": "in-Latn-ID", - "in-ID": "in-Latn-ID", - "in-Latn": "in-Latn-ID", - "inb": "inb-Latn-CO", - "inb-CO": "inb-Latn-CO", - "inb-Latn": "inb-Latn-CO", - "ing": "ing-Latn-US", - "ing-Latn": "ing-Latn-US", - "ing-US": "ing-Latn-US", - "inh": "inh-Cyrl-RU", - "inh-Cyrl": "inh-Cyrl-RU", - "inh-RU": "inh-Cyrl-RU", - "inj": "inj-Latn-CO", - "inj-CO": "inj-Latn-CO", - "inj-Latn": "inj-Latn-CO", - "inn": "inn-Latn-PH", - "inn-Latn": "inn-Latn-PH", - "inn-PH": "inn-Latn-PH", - "ino": "ino-Latn-PG", - "ino-Latn": "ino-Latn-PG", - "ino-PG": "ino-Latn-PG", - "inp": "inp-Latn-PE", - "inp-Latn": "inp-Latn-PE", - "inp-PE": "inp-Latn-PE", - "int": "int-Mymr-MM", - "int-MM": "int-Mymr-MM", - "int-Mymr": "int-Mymr-MM", - "io": "io-Latn-001", - "io-001": "io-Latn-001", - "io-Latn": "io-Latn-001", - "ior": "ior-Ethi-ET", - "ior-ET": "ior-Ethi-ET", - "ior-Ethi": "ior-Ethi-ET", - "iou": "iou-Latn-PG", - "iou-Latn": "iou-Latn-PG", - "iou-PG": "iou-Latn-PG", - "iow": "iow-Latn-US", - "iow-Latn": "iow-Latn-US", - "iow-US": "iow-Latn-US", - "ipi": "ipi-Latn-PG", - "ipi-Latn": "ipi-Latn-PG", - "ipi-PG": "ipi-Latn-PG", - "ipo": "ipo-Latn-PG", - "ipo-Latn": "ipo-Latn-PG", - "ipo-PG": "ipo-Latn-PG", - "iqu": "iqu-Latn-PE", - "iqu-Latn": "iqu-Latn-PE", - "iqu-PE": "iqu-Latn-PE", - "iqw": "iqw-Latn-NG", - "iqw-Latn": "iqw-Latn-NG", - "iqw-NG": "iqw-Latn-NG", - "ire": "ire-Latn-ID", - "ire-ID": "ire-Latn-ID", - "ire-Latn": "ire-Latn-ID", - "irh": "irh-Latn-ID", - "irh-ID": "irh-Latn-ID", - "irh-Latn": "irh-Latn-ID", - "iri": "iri-Latn-NG", - "iri-Latn": "iri-Latn-NG", - "iri-NG": "iri-Latn-NG", - "irk": "irk-Latn-TZ", - "irk-Latn": "irk-Latn-TZ", - "irk-TZ": "irk-Latn-TZ", - "irn": "irn-Latn-BR", - "irn-BR": "irn-Latn-BR", - "irn-Latn": "irn-Latn-BR", - "iru": "iru-Taml-IN", - "iru-IN": "iru-Taml-IN", - "iru-Taml": "iru-Taml-IN", - "irx": "irx-Latn-ID", - "irx-ID": "irx-Latn-ID", - "irx-Latn": "irx-Latn-ID", - "iry": "iry-Latn-PH", - "iry-Latn": "iry-Latn-PH", - "iry-PH": "iry-Latn-PH", - "is": "is-Latn-IS", - "is-IS": "is-Latn-IS", - "is-Latn": "is-Latn-IS", - "isa": "isa-Latn-PG", - "isa-Latn": "isa-Latn-PG", - "isa-PG": "isa-Latn-PG", - "isc": "isc-Latn-PE", - "isc-Latn": "isc-Latn-PE", - "isc-PE": "isc-Latn-PE", - "isd": "isd-Latn-PH", - "isd-Latn": "isd-Latn-PH", - "isd-PH": "isd-Latn-PH", - "ish": "ish-Latn-NG", - "ish-Latn": "ish-Latn-NG", - "ish-NG": "ish-Latn-NG", - "isi": "isi-Latn-NG", - "isi-Latn": "isi-Latn-NG", - "isi-NG": "isi-Latn-NG", - "isk": "isk-Arab-AF", - "isk-AF": "isk-Arab-AF", - "isk-Arab": "isk-Arab-AF", - "ism": "ism-Latn-ID", - "ism-ID": "ism-Latn-ID", - "ism-Latn": "ism-Latn-ID", - "isn": "isn-Latn-TZ", - "isn-Latn": "isn-Latn-TZ", - "isn-TZ": "isn-Latn-TZ", - "iso": "iso-Latn-NG", - "iso-Latn": "iso-Latn-NG", - "iso-NG": "iso-Latn-NG", - "ist": "ist-Latn-HR", - "ist-HR": "ist-Latn-HR", - "ist-Latn": "ist-Latn-HR", - "isu": "isu-Latn-CM", - "isu-CM": "isu-Latn-CM", - "isu-Latn": "isu-Latn-CM", - "it": "it-Latn-IT", - "it-CH": "it-Latn-CH", - "it-IT": "it-Latn-IT", - "it-Latn": "it-Latn-IT", - "it-SM": "it-Latn-SM", - "it-VA": "it-Latn-VA", - "itb": "itb-Latn-PH", - "itb-Latn": "itb-Latn-PH", - "itb-PH": "itb-Latn-PH", - "itd": "itd-Latn-ID", - "itd-ID": "itd-Latn-ID", - "itd-Latn": "itd-Latn-ID", - "ite": "ite-Latn-BO", - "ite-BO": "ite-Latn-BO", - "ite-Latn": "ite-Latn-BO", - "iti": "iti-Latn-PH", - "iti-Latn": "iti-Latn-PH", - "iti-PH": "iti-Latn-PH", - "itk": "itk-Hebr-IT", - "itk-Hebr": "itk-Hebr-IT", - "itk-IT": "itk-Hebr-IT", - "itl": "itl-Cyrl-RU", - "itl-Cyrl": "itl-Cyrl-RU", - "itl-RU": "itl-Cyrl-RU", - "itm": "itm-Latn-NG", - "itm-Latn": "itm-Latn-NG", - "itm-NG": "itm-Latn-NG", - "ito": "ito-Latn-BO", - "ito-BO": "ito-Latn-BO", - "ito-Latn": "ito-Latn-BO", - "itr": "itr-Latn-PG", - "itr-Latn": "itr-Latn-PG", - "itr-PG": "itr-Latn-PG", - "its": "its-Latn-NG", - "its-Latn": "its-Latn-NG", - "its-NG": "its-Latn-NG", - "itt": "itt-Latn-PH", - "itt-Latn": "itt-Latn-PH", - "itt-PH": "itt-Latn-PH", - "itv": "itv-Latn-PH", - "itv-Latn": "itv-Latn-PH", - "itv-PH": "itv-Latn-PH", - "itw": "itw-Latn-NG", - "itw-Latn": "itw-Latn-NG", - "itw-NG": "itw-Latn-NG", - "itx": "itx-Latn-ID", - "itx-ID": "itx-Latn-ID", - "itx-Latn": "itx-Latn-ID", - "ity": "ity-Latn-PH", - "ity-Latn": "ity-Latn-PH", - "ity-PH": "ity-Latn-PH", - "itz": "itz-Latn-GT", - "itz-GT": "itz-Latn-GT", - "itz-Latn": "itz-Latn-GT", - "iu": "iu-Cans-CA", - "iu-CA": "iu-Cans-CA", - "iu-Cans": "iu-Cans-CA", - "ium": "ium-Latn-CN", - "ium-CN": "ium-Latn-CN", - "ium-Latn": "ium-Latn-CN", - "ivb": "ivb-Latn-PH", - "ivb-Latn": "ivb-Latn-PH", - "ivb-PH": "ivb-Latn-PH", - "ivv": "ivv-Latn-PH", - "ivv-Latn": "ivv-Latn-PH", - "ivv-PH": "ivv-Latn-PH", - "iw": "iw-Hebr-IL", - "iw-Hebr": "iw-Hebr-IL", - "iw-IL": "iw-Hebr-IL", - "iwk": "iwk-Latn-PH", - "iwk-Latn": "iwk-Latn-PH", - "iwk-PH": "iwk-Latn-PH", - "iwm": "iwm-Latn-PG", - "iwm-Latn": "iwm-Latn-PG", - "iwm-PG": "iwm-Latn-PG", - "iwo": "iwo-Latn-ID", - "iwo-ID": "iwo-Latn-ID", - "iwo-Latn": "iwo-Latn-ID", - "iws": "iws-Latn-PG", - "iws-Latn": "iws-Latn-PG", - "iws-PG": "iws-Latn-PG", - "ixc": "ixc-Latn-MX", - "ixc-Latn": "ixc-Latn-MX", - "ixc-MX": "ixc-Latn-MX", - "ixl": "ixl-Latn-GT", - "ixl-GT": "ixl-Latn-GT", - "ixl-Latn": "ixl-Latn-GT", - "iya": "iya-Latn-NG", - "iya-Latn": "iya-Latn-NG", - "iya-NG": "iya-Latn-NG", - "iyo": "iyo-Latn-CM", - "iyo-CM": "iyo-Latn-CM", - "iyo-Latn": "iyo-Latn-CM", - "iyx": "iyx-Latn-CG", - "iyx-CG": "iyx-Latn-CG", - "iyx-Latn": "iyx-Latn-CG", - "izh": "izh-Latn-RU", - "izh-Latn": "izh-Latn-RU", - "izh-RU": "izh-Latn-RU", - "izm": "izm-Latn-NG", - "izm-Latn": "izm-Latn-NG", - "izm-NG": "izm-Latn-NG", - "izr": "izr-Latn-NG", - "izr-Latn": "izr-Latn-NG", - "izr-NG": "izr-Latn-NG", - "izz": "izz-Latn-NG", - "izz-Latn": "izz-Latn-NG", - "izz-NG": "izz-Latn-NG", - "ja": "ja-Jpan-JP", - "ja-Hira": "ja-Hira-JP", - "ja-Hrkt": "ja-Hrkt-JP", - "ja-JP": "ja-Jpan-JP", - "ja-Jpan": "ja-Jpan-JP", - "ja-Kana": "ja-Kana-JP", - "jaa": "jaa-Latn-BR", - "jaa-BR": "jaa-Latn-BR", - "jaa-Latn": "jaa-Latn-BR", - "jab": "jab-Latn-NG", - "jab-Latn": "jab-Latn-NG", - "jab-NG": "jab-Latn-NG", - "jac": "jac-Latn-GT", - "jac-GT": "jac-Latn-GT", - "jac-Latn": "jac-Latn-GT", - "jad": "jad-Arab-GN", - "jad-Arab": "jad-Arab-GN", - "jad-GN": "jad-Arab-GN", - "jae": "jae-Latn-PG", - "jae-Latn": "jae-Latn-PG", - "jae-PG": "jae-Latn-PG", - "jaf": "jaf-Latn-NG", - "jaf-Latn": "jaf-Latn-NG", - "jaf-NG": "jaf-Latn-NG", - "jah": "jah-Latn-MY", - "jah-Latn": "jah-Latn-MY", - "jah-MY": "jah-Latn-MY", - "jaj": "jaj-Latn-SB", - "jaj-Latn": "jaj-Latn-SB", - "jaj-SB": "jaj-Latn-SB", - "jak": "jak-Latn-MY", - "jak-Latn": "jak-Latn-MY", - "jak-MY": "jak-Latn-MY", - "jal": "jal-Latn-ID", - "jal-ID": "jal-Latn-ID", - "jal-Latn": "jal-Latn-ID", - "jam": "jam-Latn-JM", - "jam-JM": "jam-Latn-JM", - "jam-Latn": "jam-Latn-JM", - "jan": "jan-Latn-AU", - "jan-AU": "jan-Latn-AU", - "jan-Latn": "jan-Latn-AU", - "jao": "jao-Latn-AU", - "jao-AU": "jao-Latn-AU", - "jao-Latn": "jao-Latn-AU", - "jaq": "jaq-Latn-ID", - "jaq-ID": "jaq-Latn-ID", - "jaq-Latn": "jaq-Latn-ID", - "jas": "jas-Latn-NC", - "jas-Latn": "jas-Latn-NC", - "jas-NC": "jas-Latn-NC", - "jat": "jat-Arab-AF", - "jat-AF": "jat-Arab-AF", - "jat-Arab": "jat-Arab-AF", - "jau": "jau-Latn-ID", - "jau-ID": "jau-Latn-ID", - "jau-Latn": "jau-Latn-ID", - "jax": "jax-Latn-ID", - "jax-ID": "jax-Latn-ID", - "jax-Latn": "jax-Latn-ID", - "jay": "jay-Latn-AU", - "jay-AU": "jay-Latn-AU", - "jay-Latn": "jay-Latn-AU", - "jaz": "jaz-Latn-NC", - "jaz-Latn": "jaz-Latn-NC", - "jaz-NC": "jaz-Latn-NC", - "jbe": "jbe-Hebr-IL", - "jbe-Hebr": "jbe-Hebr-IL", - "jbe-IL": "jbe-Hebr-IL", - "jbi": "jbi-Latn-AU", - "jbi-AU": "jbi-Latn-AU", - "jbi-Latn": "jbi-Latn-AU", - "jbj": "jbj-Latn-ID", - "jbj-ID": "jbj-Latn-ID", - "jbj-Latn": "jbj-Latn-ID", - "jbk": "jbk-Latn-PG", - "jbk-Latn": "jbk-Latn-PG", - "jbk-PG": "jbk-Latn-PG", - "jbm": "jbm-Latn-NG", - "jbm-Latn": "jbm-Latn-NG", - "jbm-NG": "jbm-Latn-NG", - "jbn": "jbn-Arab-LY", - "jbn-Arab": "jbn-Arab-LY", - "jbn-LY": "jbn-Arab-LY", - "jbo": "jbo-Latn-001", - "jbo-001": "jbo-Latn-001", - "jbo-Latn": "jbo-Latn-001", - "jbr": "jbr-Latn-ID", - "jbr-ID": "jbr-Latn-ID", - "jbr-Latn": "jbr-Latn-ID", - "jbt": "jbt-Latn-BR", - "jbt-BR": "jbt-Latn-BR", - "jbt-Latn": "jbt-Latn-BR", - "jbu": "jbu-Latn-CM", - "jbu-CM": "jbu-Latn-CM", - "jbu-Latn": "jbu-Latn-CM", - "jbw": "jbw-Latn-AU", - "jbw-AU": "jbw-Latn-AU", - "jbw-Latn": "jbw-Latn-AU", - "jct": "jct-Cyrl-UA", - "jct-Cyrl": "jct-Cyrl-UA", - "jct-UA": "jct-Cyrl-UA", - "jda": "jda-Tibt-IN", - "jda-IN": "jda-Tibt-IN", - "jda-Tibt": "jda-Tibt-IN", - "jdg": "jdg-Arab-PK", - "jdg-Arab": "jdg-Arab-PK", - "jdg-PK": "jdg-Arab-PK", - "jdt": "jdt-Cyrl-RU", - "jdt-Cyrl": "jdt-Cyrl-RU", - "jdt-RU": "jdt-Cyrl-RU", - "jeb": "jeb-Latn-PE", - "jeb-Latn": "jeb-Latn-PE", - "jeb-PE": "jeb-Latn-PE", - "jee": "jee-Deva-NP", - "jee-Deva": "jee-Deva-NP", - "jee-NP": "jee-Deva-NP", - "jeh": "jeh-Latn-VN", - "jeh-Latn": "jeh-Latn-VN", - "jeh-VN": "jeh-Latn-VN", - "jei": "jei-Latn-ID", - "jei-ID": "jei-Latn-ID", - "jei-Latn": "jei-Latn-ID", - "jek": "jek-Latn-CI", - "jek-CI": "jek-Latn-CI", - "jek-Latn": "jek-Latn-CI", - "jel": "jel-Latn-ID", - "jel-ID": "jel-Latn-ID", - "jel-Latn": "jel-Latn-ID", - "jen": "jen-Latn-NG", - "jen-Latn": "jen-Latn-NG", - "jen-NG": "jen-Latn-NG", - "jer": "jer-Latn-NG", - "jer-Latn": "jer-Latn-NG", - "jer-NG": "jer-Latn-NG", - "jet": "jet-Latn-PG", - "jet-Latn": "jet-Latn-PG", - "jet-PG": "jet-Latn-PG", - "jeu": "jeu-Latn-TD", - "jeu-Latn": "jeu-Latn-TD", - "jeu-TD": "jeu-Latn-TD", - "jgb": "jgb-Latn-CD", - "jgb-CD": "jgb-Latn-CD", - "jgb-Latn": "jgb-Latn-CD", - "jge": "jge-Geor-GE", - "jge-GE": "jge-Geor-GE", - "jge-Geor": "jge-Geor-GE", - "jgk": "jgk-Latn-NG", - "jgk-Latn": "jgk-Latn-NG", - "jgk-NG": "jgk-Latn-NG", - "jgo": "jgo-Latn-CM", - "jgo-CM": "jgo-Latn-CM", - "jgo-Latn": "jgo-Latn-CM", - "jhi": "jhi-Latn-MY", - "jhi-Latn": "jhi-Latn-MY", - "jhi-MY": "jhi-Latn-MY", - "ji": "ji-Hebr-UA", - "ji-Hebr": "ji-Hebr-UA", - "ji-UA": "ji-Hebr-UA", - "jia": "jia-Latn-CM", - "jia-CM": "jia-Latn-CM", - "jia-Latn": "jia-Latn-CM", - "jib": "jib-Latn-NG", - "jib-Latn": "jib-Latn-NG", - "jib-NG": "jib-Latn-NG", - "jic": "jic-Latn-HN", - "jic-HN": "jic-Latn-HN", - "jic-Latn": "jic-Latn-HN", - "jid": "jid-Latn-NG", - "jid-Latn": "jid-Latn-NG", - "jid-NG": "jid-Latn-NG", - "jie": "jie-Latn-NG", - "jie-Latn": "jie-Latn-NG", - "jie-NG": "jie-Latn-NG", - "jig": "jig-Latn-AU", - "jig-AU": "jig-Latn-AU", - "jig-Latn": "jig-Latn-AU", - "jil": "jil-Latn-PG", - "jil-Latn": "jil-Latn-PG", - "jil-PG": "jil-Latn-PG", - "jim": "jim-Latn-CM", - "jim-CM": "jim-Latn-CM", - "jim-Latn": "jim-Latn-CM", - "jit": "jit-Latn-TZ", - "jit-Latn": "jit-Latn-TZ", - "jit-TZ": "jit-Latn-TZ", - "jiu": "jiu-Latn-CN", - "jiu-CN": "jiu-Latn-CN", - "jiu-Latn": "jiu-Latn-CN", - "jiv": "jiv-Latn-EC", - "jiv-EC": "jiv-Latn-EC", - "jiv-Latn": "jiv-Latn-EC", - "jiy": "jiy-Latn-CN", - "jiy-CN": "jiy-Latn-CN", - "jiy-Latn": "jiy-Latn-CN", - "jje": "jje-Hang-KR", - "jje-Hang": "jje-Hang-KR", - "jje-KR": "jje-Hang-KR", - "jjr": "jjr-Latn-NG", - "jjr-Latn": "jjr-Latn-NG", - "jjr-NG": "jjr-Latn-NG", - "jka": "jka-Latn-ID", - "jka-ID": "jka-Latn-ID", - "jka-Latn": "jka-Latn-ID", - "jkm": "jkm-Mymr-MM", - "jkm-MM": "jkm-Mymr-MM", - "jkm-Mymr": "jkm-Mymr-MM", - "jko": "jko-Latn-PG", - "jko-Latn": "jko-Latn-PG", - "jko-PG": "jko-Latn-PG", - "jku": "jku-Latn-NG", - "jku-Latn": "jku-Latn-NG", - "jku-NG": "jku-Latn-NG", - "jle": "jle-Latn-SD", - "jle-Latn": "jle-Latn-SD", - "jle-SD": "jle-Latn-SD", - "jma": "jma-Latn-PG", - "jma-Latn": "jma-Latn-PG", - "jma-PG": "jma-Latn-PG", - "jmb": "jmb-Latn-NG", - "jmb-Latn": "jmb-Latn-NG", - "jmb-NG": "jmb-Latn-NG", - "jmc": "jmc-Latn-TZ", - "jmc-Latn": "jmc-Latn-TZ", - "jmc-TZ": "jmc-Latn-TZ", - "jmd": "jmd-Latn-ID", - "jmd-ID": "jmd-Latn-ID", - "jmd-Latn": "jmd-Latn-ID", - "jmi": "jmi-Latn-NG", - "jmi-Latn": "jmi-Latn-NG", - "jmi-NG": "jmi-Latn-NG", - "jml": "jml-Deva-NP", - "jml-Deva": "jml-Deva-NP", - "jml-NP": "jml-Deva-NP", - "jmn": "jmn-Latn-MM", - "jmn-Latn": "jmn-Latn-MM", - "jmn-MM": "jmn-Latn-MM", - "jmr": "jmr-Latn-GH", - "jmr-GH": "jmr-Latn-GH", - "jmr-Latn": "jmr-Latn-GH", - "jms": "jms-Latn-NG", - "jms-Latn": "jms-Latn-NG", - "jms-NG": "jms-Latn-NG", - "jmw": "jmw-Latn-PG", - "jmw-Latn": "jmw-Latn-PG", - "jmw-PG": "jmw-Latn-PG", - "jmx": "jmx-Latn-MX", - "jmx-Latn": "jmx-Latn-MX", - "jmx-MX": "jmx-Latn-MX", - "jna": "jna-Takr-IN", - "jna-IN": "jna-Takr-IN", - "jna-Takr": "jna-Takr-IN", - "jnd": "jnd-Arab-PK", - "jnd-Arab": "jnd-Arab-PK", - "jnd-PK": "jnd-Arab-PK", - "jng": "jng-Latn-AU", - "jng-AU": "jng-Latn-AU", - "jng-Latn": "jng-Latn-AU", - "jni": "jni-Latn-NG", - "jni-Latn": "jni-Latn-NG", - "jni-NG": "jni-Latn-NG", - "jnj": "jnj-Latn-ET", - "jnj-ET": "jnj-Latn-ET", - "jnj-Latn": "jnj-Latn-ET", - "jnl": "jnl-Deva-IN", - "jnl-Deva": "jnl-Deva-IN", - "jnl-IN": "jnl-Deva-IN", - "jns": "jns-Deva-IN", - "jns-Deva": "jns-Deva-IN", - "jns-IN": "jns-Deva-IN", - "job": "job-Latn-CD", - "job-CD": "job-Latn-CD", - "job-Latn": "job-Latn-CD", - "jod": "jod-Latn-CI", - "jod-CI": "jod-Latn-CI", - "jod-Latn": "jod-Latn-CI", - "jog": "jog-Arab-PK", - "jog-Arab": "jog-Arab-PK", - "jog-PK": "jog-Arab-PK", - "jor": "jor-Latn-BO", - "jor-BO": "jor-Latn-BO", - "jor-Latn": "jor-Latn-BO", - "jow": "jow-Latn-ML", - "jow-Latn": "jow-Latn-ML", - "jow-ML": "jow-Latn-ML", - "jpa": "jpa-Hebr-PS", - "jpa-Hebr": "jpa-Hebr-PS", - "jpa-PS": "jpa-Hebr-PS", - "jpr": "jpr-Hebr-IL", - "jpr-Hebr": "jpr-Hebr-IL", - "jpr-IL": "jpr-Hebr-IL", - "jqr": "jqr-Latn-PE", - "jqr-Latn": "jqr-Latn-PE", - "jqr-PE": "jqr-Latn-PE", - "jra": "jra-Latn-VN", - "jra-Latn": "jra-Latn-VN", - "jra-VN": "jra-Latn-VN", - "jrb": "jrb-Hebr-IL", - "jrb-Hebr": "jrb-Hebr-IL", - "jrb-IL": "jrb-Hebr-IL", - "jrr": "jrr-Latn-NG", - "jrr-Latn": "jrr-Latn-NG", - "jrr-NG": "jrr-Latn-NG", - "jrt": "jrt-Latn-NG", - "jrt-Latn": "jrt-Latn-NG", - "jrt-NG": "jrt-Latn-NG", - "jru": "jru-Latn-VE", - "jru-Latn": "jru-Latn-VE", - "jru-VE": "jru-Latn-VE", - "jua": "jua-Latn-BR", - "jua-BR": "jua-Latn-BR", - "jua-Latn": "jua-Latn-BR", - "jub": "jub-Latn-NG", - "jub-Latn": "jub-Latn-NG", - "jub-NG": "jub-Latn-NG", - "jud": "jud-Latn-CI", - "jud-CI": "jud-Latn-CI", - "jud-Latn": "jud-Latn-CI", - "juh": "juh-Latn-NG", - "juh-Latn": "juh-Latn-NG", - "juh-NG": "juh-Latn-NG", - "jui": "jui-Latn-AU", - "jui-AU": "jui-Latn-AU", - "jui-Latn": "jui-Latn-AU", - "juk": "juk-Latn-NG", - "juk-Latn": "juk-Latn-NG", - "juk-NG": "juk-Latn-NG", - "jul": "jul-Deva-NP", - "jul-Deva": "jul-Deva-NP", - "jul-NP": "jul-Deva-NP", - "jum": "jum-Latn-SD", - "jum-Latn": "jum-Latn-SD", - "jum-SD": "jum-Latn-SD", - "jun": "jun-Orya-IN", - "jun-IN": "jun-Orya-IN", - "jun-Orya": "jun-Orya-IN", - "juo": "juo-Latn-NG", - "juo-Latn": "juo-Latn-NG", - "juo-NG": "juo-Latn-NG", - "jup": "jup-Latn-BR", - "jup-BR": "jup-Latn-BR", - "jup-Latn": "jup-Latn-BR", - "jur": "jur-Latn-BR", - "jur-BR": "jur-Latn-BR", - "jur-Latn": "jur-Latn-BR", - "jut": "jut-Latn-DK", - "jut-DK": "jut-Latn-DK", - "jut-Latn": "jut-Latn-DK", - "juu": "juu-Latn-NG", - "juu-Latn": "juu-Latn-NG", - "juu-NG": "juu-Latn-NG", - "juw": "juw-Latn-NG", - "juw-Latn": "juw-Latn-NG", - "juw-NG": "juw-Latn-NG", - "juy": "juy-Orya-IN", - "juy-IN": "juy-Orya-IN", - "juy-Orya": "juy-Orya-IN", - "jv": "jv-Latn-ID", - "jv-ID": "jv-Latn-ID", - "jv-Java": "jv-Java-ID", - "jv-Latn": "jv-Latn-ID", - "jvd": "jvd-Latn-ID", - "jvd-ID": "jvd-Latn-ID", - "jvd-Latn": "jvd-Latn-ID", - "jvn": "jvn-Latn-SR", - "jvn-Latn": "jvn-Latn-SR", - "jvn-SR": "jvn-Latn-SR", - "jw": "jw-Latn-ID", - "jw-ID": "jw-Latn-ID", - "jw-Latn": "jw-Latn-ID", - "jwi": "jwi-Latn-GH", - "jwi-GH": "jwi-Latn-GH", - "jwi-Latn": "jwi-Latn-GH", - "jya": "jya-Tibt-CN", - "jya-CN": "jya-Tibt-CN", - "jya-Tibt": "jya-Tibt-CN", - "jye": "jye-Hebr-IL", - "jye-Hebr": "jye-Hebr-IL", - "jye-IL": "jye-Hebr-IL", - "jyy": "jyy-Latn-TD", - "jyy-Latn": "jyy-Latn-TD", - "jyy-TD": "jyy-Latn-TD", - "ka": "ka-Geor-GE", - "ka-GE": "ka-Geor-GE", - "ka-Geok": "ka-Geok-GE", - "ka-Geor": "ka-Geor-GE", - "ka-Gong": "ka-Gong-GE", - "ka-IR": "ka-Geor-IR", - "ka-XX": "ka-Geor-XX", - "kaa": "kaa-Cyrl-UZ", - "kaa-Cyrl": "kaa-Cyrl-UZ", - "kaa-Cyrl-AF": "kaa-Cyrl-AF", - "kaa-Cyrl-IR": "kaa-Cyrl-IR", - "kaa-UZ": "kaa-Cyrl-UZ", - "kab": "kab-Latn-DZ", - "kab-DZ": "kab-Latn-DZ", - "kab-Latn": "kab-Latn-DZ", - "kac": "kac-Latn-MM", - "kac-Latn": "kac-Latn-MM", - "kac-Latn-MM": "kac-Latn-MM", - "kac-MM": "kac-Latn-MM", - "kad": "kad-Latn-NG", - "kad-Latn": "kad-Latn-NG", - "kad-NG": "kad-Latn-NG", - "kag": "kag-Latn-MY", - "kag-Latn": "kag-Latn-MY", - "kag-MY": "kag-Latn-MY", - "kah": "kah-Latn-CF", - "kah-CF": "kah-Latn-CF", - "kah-Latn": "kah-Latn-CF", - "kai": "kai-Latn-NG", - "kai-Latn": "kai-Latn-NG", - "kai-NG": "kai-Latn-NG", - "kaj": "kaj-Latn-NG", - "kaj-Latn": "kaj-Latn-NG", - "kaj-NG": "kaj-Latn-NG", - "kak": "kak-Latn-PH", - "kak-Latn": "kak-Latn-PH", - "kak-PH": "kak-Latn-PH", - "kam": "kam-Latn-KE", - "kam-KE": "kam-Latn-KE", - "kam-Latn": "kam-Latn-KE", - "kao": "kao-Latn-ML", - "kao-Latn": "kao-Latn-ML", - "kao-ML": "kao-Latn-ML", - "kap": "kap-Cyrl-RU", - "kap-Cyrl": "kap-Cyrl-RU", - "kap-RU": "kap-Cyrl-RU", - "kaq": "kaq-Latn-PE", - "kaq-Latn": "kaq-Latn-PE", - "kaq-PE": "kaq-Latn-PE", - "kav": "kav-Latn-BR", - "kav-BR": "kav-Latn-BR", - "kav-Latn": "kav-Latn-BR", - "kaw": "kaw-Kawi-ID", - "kaw-ID": "kaw-Kawi-ID", - "kaw-Kawi": "kaw-Kawi-ID", - "kax": "kax-Latn-ID", - "kax-ID": "kax-Latn-ID", - "kax-Latn": "kax-Latn-ID", - "kay": "kay-Latn-BR", - "kay-BR": "kay-Latn-BR", - "kay-Latn": "kay-Latn-BR", - "kba": "kba-Latn-AU", - "kba-AU": "kba-Latn-AU", - "kba-Latn": "kba-Latn-AU", - "kbb": "kbb-Latn-BR", - "kbb-BR": "kbb-Latn-BR", - "kbb-Latn": "kbb-Latn-BR", - "kbc": "kbc-Latn-BR", - "kbc-BR": "kbc-Latn-BR", - "kbc-Latn": "kbc-Latn-BR", - "kbd": "kbd-Cyrl-RU", - "kbd-Cyrl": "kbd-Cyrl-RU", - "kbd-Cyrl-TR": "kbd-Cyrl-TR", - "kbd-RU": "kbd-Cyrl-RU", - "kbe": "kbe-Latn-AU", - "kbe-AU": "kbe-Latn-AU", - "kbe-Latn": "kbe-Latn-AU", - "kbg": "kbg-Tibt-IN", - "kbg-IN": "kbg-Tibt-IN", - "kbg-Tibt": "kbg-Tibt-IN", - "kbh": "kbh-Latn-CO", - "kbh-CO": "kbh-Latn-CO", - "kbh-Latn": "kbh-Latn-CO", - "kbi": "kbi-Latn-ID", - "kbi-ID": "kbi-Latn-ID", - "kbi-Latn": "kbi-Latn-ID", - "kbj": "kbj-Latn-CD", - "kbj-CD": "kbj-Latn-CD", - "kbj-Latn": "kbj-Latn-CD", - "kbk": "kbk-Latn-PG", - "kbk-Latn": "kbk-Latn-PG", - "kbk-PG": "kbk-Latn-PG", - "kbl": "kbl-Latn-TD", - "kbl-Latn": "kbl-Latn-TD", - "kbl-TD": "kbl-Latn-TD", - "kbm": "kbm-Latn-PG", - "kbm-Latn": "kbm-Latn-PG", - "kbm-PG": "kbm-Latn-PG", - "kbn": "kbn-Latn-CF", - "kbn-CF": "kbn-Latn-CF", - "kbn-Latn": "kbn-Latn-CF", - "kbo": "kbo-Latn-SS", - "kbo-Latn": "kbo-Latn-SS", - "kbo-SS": "kbo-Latn-SS", - "kbp": "kbp-Latn-TG", - "kbp-Latn": "kbp-Latn-TG", - "kbp-TG": "kbp-Latn-TG", - "kbq": "kbq-Latn-PG", - "kbq-Latn": "kbq-Latn-PG", - "kbq-PG": "kbq-Latn-PG", - "kbr": "kbr-Latn-ET", - "kbr-ET": "kbr-Latn-ET", - "kbr-Latn": "kbr-Latn-ET", - "kbs": "kbs-Latn-GA", - "kbs-GA": "kbs-Latn-GA", - "kbs-Latn": "kbs-Latn-GA", - "kbt": "kbt-Latn-PG", - "kbt-Latn": "kbt-Latn-PG", - "kbt-PG": "kbt-Latn-PG", - "kbu": "kbu-Arab-PK", - "kbu-Arab": "kbu-Arab-PK", - "kbu-PK": "kbu-Arab-PK", - "kbv": "kbv-Latn-ID", - "kbv-ID": "kbv-Latn-ID", - "kbv-Latn": "kbv-Latn-ID", - "kbw": "kbw-Latn-PG", - "kbw-Latn": "kbw-Latn-PG", - "kbw-PG": "kbw-Latn-PG", - "kbx": "kbx-Latn-PG", - "kbx-Latn": "kbx-Latn-PG", - "kbx-PG": "kbx-Latn-PG", - "kby": "kby-Arab-NE", - "kby-Arab": "kby-Arab-NE", - "kby-NE": "kby-Arab-NE", - "kbz": "kbz-Latn-NG", - "kbz-Latn": "kbz-Latn-NG", - "kbz-NG": "kbz-Latn-NG", - "kca": "kca-Cyrl-RU", - "kca-Cyrl": "kca-Cyrl-RU", - "kca-RU": "kca-Cyrl-RU", - "kcb": "kcb-Latn-PG", - "kcb-Latn": "kcb-Latn-PG", - "kcb-PG": "kcb-Latn-PG", - "kcc": "kcc-Latn-NG", - "kcc-Latn": "kcc-Latn-NG", - "kcc-NG": "kcc-Latn-NG", - "kcd": "kcd-Latn-ID", - "kcd-ID": "kcd-Latn-ID", - "kcd-Latn": "kcd-Latn-ID", - "kce": "kce-Latn-NG", - "kce-Latn": "kce-Latn-NG", - "kce-NG": "kce-Latn-NG", - "kcf": "kcf-Latn-NG", - "kcf-Latn": "kcf-Latn-NG", - "kcf-NG": "kcf-Latn-NG", - "kcg": "kcg-Latn-NG", - "kcg-Latn": "kcg-Latn-NG", - "kcg-NG": "kcg-Latn-NG", - "kch": "kch-Latn-NG", - "kch-Latn": "kch-Latn-NG", - "kch-NG": "kch-Latn-NG", - "kci": "kci-Latn-NG", - "kci-Latn": "kci-Latn-NG", - "kci-NG": "kci-Latn-NG", - "kcj": "kcj-Latn-GW", - "kcj-GW": "kcj-Latn-GW", - "kcj-Latn": "kcj-Latn-GW", - "kck": "kck-Latn-ZW", - "kck-Latn": "kck-Latn-ZW", - "kck-ZW": "kck-Latn-ZW", - "kcl": "kcl-Latn-PG", - "kcl-Latn": "kcl-Latn-PG", - "kcl-PG": "kcl-Latn-PG", - "kcm": "kcm-Latn-CF", - "kcm-CF": "kcm-Latn-CF", - "kcm-Latn": "kcm-Latn-CF", - "kcn": "kcn-Latn-UG", - "kcn-Latn": "kcn-Latn-UG", - "kcn-UG": "kcn-Latn-UG", - "kco": "kco-Latn-PG", - "kco-Latn": "kco-Latn-PG", - "kco-PG": "kco-Latn-PG", - "kcp": "kcp-Latn-SD", - "kcp-Latn": "kcp-Latn-SD", - "kcp-SD": "kcp-Latn-SD", - "kcq": "kcq-Latn-NG", - "kcq-Latn": "kcq-Latn-NG", - "kcq-NG": "kcq-Latn-NG", - "kcs": "kcs-Latn-NG", - "kcs-Latn": "kcs-Latn-NG", - "kcs-NG": "kcs-Latn-NG", - "kct": "kct-Latn-PG", - "kct-Latn": "kct-Latn-PG", - "kct-PG": "kct-Latn-PG", - "kcu": "kcu-Latn-TZ", - "kcu-Latn": "kcu-Latn-TZ", - "kcu-TZ": "kcu-Latn-TZ", - "kcv": "kcv-Latn-CD", - "kcv-CD": "kcv-Latn-CD", - "kcv-Latn": "kcv-Latn-CD", - "kcw": "kcw-Latn-CD", - "kcw-CD": "kcw-Latn-CD", - "kcw-Latn": "kcw-Latn-CD", - "kcy": "kcy-Arab-DZ", - "kcy-Arab": "kcy-Arab-DZ", - "kcy-DZ": "kcy-Arab-DZ", - "kcz": "kcz-Latn-TZ", - "kcz-Latn": "kcz-Latn-TZ", - "kcz-TZ": "kcz-Latn-TZ", - "kda": "kda-Latn-AU", - "kda-AU": "kda-Latn-AU", - "kda-Latn": "kda-Latn-AU", - "kdc": "kdc-Latn-TZ", - "kdc-Latn": "kdc-Latn-TZ", - "kdc-TZ": "kdc-Latn-TZ", - "kdd": "kdd-Latn-AU", - "kdd-AU": "kdd-Latn-AU", - "kdd-Latn": "kdd-Latn-AU", - "kde": "kde-Latn-TZ", - "kde-Latn": "kde-Latn-TZ", - "kde-TZ": "kde-Latn-TZ", - "kdf": "kdf-Latn-PG", - "kdf-Latn": "kdf-Latn-PG", - "kdf-PG": "kdf-Latn-PG", - "kdg": "kdg-Latn-CD", - "kdg-CD": "kdg-Latn-CD", - "kdg-Latn": "kdg-Latn-CD", - "kdh": "kdh-Latn-TG", - "kdh-Latn": "kdh-Latn-TG", - "kdh-TG": "kdh-Latn-TG", - "kdi": "kdi-Latn-UG", - "kdi-Latn": "kdi-Latn-UG", - "kdi-UG": "kdi-Latn-UG", - "kdj": "kdj-Latn-UG", - "kdj-Latn": "kdj-Latn-UG", - "kdj-UG": "kdj-Latn-UG", - "kdk": "kdk-Latn-NC", - "kdk-Latn": "kdk-Latn-NC", - "kdk-NC": "kdk-Latn-NC", - "kdl": "kdl-Latn-NG", - "kdl-Latn": "kdl-Latn-NG", - "kdl-NG": "kdl-Latn-NG", - "kdm": "kdm-Latn-NG", - "kdm-Latn": "kdm-Latn-NG", - "kdm-NG": "kdm-Latn-NG", - "kdn": "kdn-Latn-ZW", - "kdn-Latn": "kdn-Latn-ZW", - "kdn-ZW": "kdn-Latn-ZW", - "kdp": "kdp-Latn-NG", - "kdp-Latn": "kdp-Latn-NG", - "kdp-NG": "kdp-Latn-NG", - "kdq": "kdq-Beng-IN", - "kdq-Beng": "kdq-Beng-IN", - "kdq-IN": "kdq-Beng-IN", - "kdr": "kdr-Latn-LT", - "kdr-LT": "kdr-Latn-LT", - "kdr-Latn": "kdr-Latn-LT", - "kdt": "kdt-Thai-TH", - "kdt-TH": "kdt-Thai-TH", - "kdt-Thai": "kdt-Thai-TH", - "kdt-Thai-KH": "kdt-Thai-KH", - "kdt-Thai-LA": "kdt-Thai-LA", - "kdw": "kdw-Latn-ID", - "kdw-ID": "kdw-Latn-ID", - "kdw-Latn": "kdw-Latn-ID", - "kdx": "kdx-Latn-NG", - "kdx-Latn": "kdx-Latn-NG", - "kdx-NG": "kdx-Latn-NG", - "kdy": "kdy-Latn-ID", - "kdy-ID": "kdy-Latn-ID", - "kdy-Latn": "kdy-Latn-ID", - "kdz": "kdz-Latn-CM", - "kdz-CM": "kdz-Latn-CM", - "kdz-Latn": "kdz-Latn-CM", - "kea": "kea-Latn-CV", - "kea-CV": "kea-Latn-CV", - "kea-Latn": "kea-Latn-CV", - "keb": "keb-Latn-GA", - "keb-GA": "keb-Latn-GA", - "keb-Latn": "keb-Latn-GA", - "kec": "kec-Latn-SD", - "kec-Latn": "kec-Latn-SD", - "kec-SD": "kec-Latn-SD", - "ked": "ked-Latn-TZ", - "ked-Latn": "ked-Latn-TZ", - "ked-TZ": "ked-Latn-TZ", - "kee": "kee-Latn-US", - "kee-Latn": "kee-Latn-US", - "kee-US": "kee-Latn-US", - "kef": "kef-Latn-TG", - "kef-Latn": "kef-Latn-TG", - "kef-TG": "kef-Latn-TG", - "keg": "keg-Latn-SD", - "keg-Latn": "keg-Latn-SD", - "keg-SD": "keg-Latn-SD", - "keh": "keh-Latn-PG", - "keh-Latn": "keh-Latn-PG", - "keh-PG": "keh-Latn-PG", - "kei": "kei-Latn-ID", - "kei-ID": "kei-Latn-ID", - "kei-Latn": "kei-Latn-ID", - "kek": "kek-Latn-GT", - "kek-GT": "kek-Latn-GT", - "kek-Latn": "kek-Latn-GT", - "kel": "kel-Latn-CD", - "kel-CD": "kel-Latn-CD", - "kel-Latn": "kel-Latn-CD", - "kem": "kem-Latn-TL", - "kem-Latn": "kem-Latn-TL", - "kem-TL": "kem-Latn-TL", - "ken": "ken-Latn-CM", - "ken-CM": "ken-Latn-CM", - "ken-Latn": "ken-Latn-CM", - "keo": "keo-Latn-UG", - "keo-Latn": "keo-Latn-UG", - "keo-UG": "keo-Latn-UG", - "ker": "ker-Latn-TD", - "ker-Latn": "ker-Latn-TD", - "ker-TD": "ker-Latn-TD", - "kes": "kes-Latn-NG", - "kes-Latn": "kes-Latn-NG", - "kes-NG": "kes-Latn-NG", - "ket": "ket-Cyrl-RU", - "ket-Cyrl": "ket-Cyrl-RU", - "ket-RU": "ket-Cyrl-RU", - "keu": "keu-Latn-TG", - "keu-Latn": "keu-Latn-TG", - "keu-TG": "keu-Latn-TG", - "kev": "kev-Mlym-IN", - "kev-IN": "kev-Mlym-IN", - "kev-Mlym": "kev-Mlym-IN", - "kew": "kew-Latn-PG", - "kew-Latn": "kew-Latn-PG", - "kew-PG": "kew-Latn-PG", - "kex": "kex-Deva-IN", - "kex-Deva": "kex-Deva-IN", - "kex-IN": "kex-Deva-IN", - "key": "key-Telu-IN", - "key-IN": "key-Telu-IN", - "key-Telu": "key-Telu-IN", - "kez": "kez-Latn-NG", - "kez-Latn": "kez-Latn-NG", - "kez-NG": "kez-Latn-NG", - "kfa": "kfa-Knda-IN", - "kfa-IN": "kfa-Knda-IN", - "kfa-Knda": "kfa-Knda-IN", - "kfb": "kfb-Deva-IN", - "kfb-Deva": "kfb-Deva-IN", - "kfb-IN": "kfb-Deva-IN", - "kfc": "kfc-Telu-IN", - "kfc-IN": "kfc-Telu-IN", - "kfc-Telu": "kfc-Telu-IN", - "kfd": "kfd-Knda-IN", - "kfd-IN": "kfd-Knda-IN", - "kfd-Knda": "kfd-Knda-IN", - "kfe": "kfe-Taml-IN", - "kfe-IN": "kfe-Taml-IN", - "kfe-Taml": "kfe-Taml-IN", - "kff": "kff-Latn-IN", - "kff-IN": "kff-Latn-IN", - "kff-Latn": "kff-Latn-IN", - "kfg": "kfg-Knda-IN", - "kfg-IN": "kfg-Knda-IN", - "kfg-Knda": "kfg-Knda-IN", - "kfh": "kfh-Mlym-IN", - "kfh-IN": "kfh-Mlym-IN", - "kfh-Mlym": "kfh-Mlym-IN", - "kfi": "kfi-Taml-IN", - "kfi-IN": "kfi-Taml-IN", - "kfi-Taml": "kfi-Taml-IN", - "kfk": "kfk-Deva-IN", - "kfk-Deva": "kfk-Deva-IN", - "kfk-IN": "kfk-Deva-IN", - "kfl": "kfl-Latn-CM", - "kfl-CM": "kfl-Latn-CM", - "kfl-Latn": "kfl-Latn-CM", - "kfm": "kfm-Arab-IR", - "kfm-Arab": "kfm-Arab-IR", - "kfm-IR": "kfm-Arab-IR", - "kfn": "kfn-Latn-CM", - "kfn-CM": "kfn-Latn-CM", - "kfn-Latn": "kfn-Latn-CM", - "kfo": "kfo-Latn-CI", - "kfo-CI": "kfo-Latn-CI", - "kfo-Latn": "kfo-Latn-CI", - "kfp": "kfp-Deva-IN", - "kfp-Deva": "kfp-Deva-IN", - "kfp-IN": "kfp-Deva-IN", - "kfq": "kfq-Deva-IN", - "kfq-Deva": "kfq-Deva-IN", - "kfq-IN": "kfq-Deva-IN", - "kfr": "kfr-Deva-IN", - "kfr-Deva": "kfr-Deva-IN", - "kfr-IN": "kfr-Deva-IN", - "kfs": "kfs-Deva-IN", - "kfs-Deva": "kfs-Deva-IN", - "kfs-IN": "kfs-Deva-IN", - "kfu": "kfu-Deva-IN", - "kfu-Deva": "kfu-Deva-IN", - "kfu-IN": "kfu-Deva-IN", - "kfv": "kfv-Latn-IN", - "kfv-IN": "kfv-Latn-IN", - "kfv-Latn": "kfv-Latn-IN", - "kfw": "kfw-Latn-IN", - "kfw-IN": "kfw-Latn-IN", - "kfw-Latn": "kfw-Latn-IN", - "kfx": "kfx-Deva-IN", - "kfx-Deva": "kfx-Deva-IN", - "kfx-IN": "kfx-Deva-IN", - "kfy": "kfy-Deva-IN", - "kfy-Deva": "kfy-Deva-IN", - "kfy-IN": "kfy-Deva-IN", - "kfz": "kfz-Latn-BF", - "kfz-BF": "kfz-Latn-BF", - "kfz-Latn": "kfz-Latn-BF", - "kg": "kg-Latn-CD", - "kg-CD": "kg-Latn-CD", - "kg-Latn": "kg-Latn-CD", - "kga": "kga-Latn-CI", - "kga-CI": "kga-Latn-CI", - "kga-Latn": "kga-Latn-CI", - "kgb": "kgb-Latn-ID", - "kgb-ID": "kgb-Latn-ID", - "kgb-Latn": "kgb-Latn-ID", - "kge": "kge-Latn-ID", - "kge-ID": "kge-Latn-ID", - "kge-Latn": "kge-Latn-ID", - "kgf": "kgf-Latn-PG", - "kgf-Latn": "kgf-Latn-PG", - "kgf-PG": "kgf-Latn-PG", - "kgj": "kgj-Deva-NP", - "kgj-Deva": "kgj-Deva-NP", - "kgj-NP": "kgj-Deva-NP", - "kgk": "kgk-Latn-BR", - "kgk-BR": "kgk-Latn-BR", - "kgk-Latn": "kgk-Latn-BR", - "kgl": "kgl-Latn-AU", - "kgl-AU": "kgl-Latn-AU", - "kgl-Latn": "kgl-Latn-AU", - "kgo": "kgo-Latn-SD", - "kgo-Latn": "kgo-Latn-SD", - "kgo-SD": "kgo-Latn-SD", - "kgp": "kgp-Latn-BR", - "kgp-BR": "kgp-Latn-BR", - "kgp-Latn": "kgp-Latn-BR", - "kgq": "kgq-Latn-ID", - "kgq-ID": "kgq-Latn-ID", - "kgq-Latn": "kgq-Latn-ID", - "kgr": "kgr-Latn-ID", - "kgr-ID": "kgr-Latn-ID", - "kgr-Latn": "kgr-Latn-ID", - "kgs": "kgs-Latn-AU", - "kgs-AU": "kgs-Latn-AU", - "kgs-Latn": "kgs-Latn-AU", - "kgt": "kgt-Latn-NG", - "kgt-Latn": "kgt-Latn-NG", - "kgt-NG": "kgt-Latn-NG", - "kgu": "kgu-Latn-PG", - "kgu-Latn": "kgu-Latn-PG", - "kgu-PG": "kgu-Latn-PG", - "kgv": "kgv-Latn-ID", - "kgv-ID": "kgv-Latn-ID", - "kgv-Latn": "kgv-Latn-ID", - "kgw": "kgw-Latn-ID", - "kgw-ID": "kgw-Latn-ID", - "kgw-Latn": "kgw-Latn-ID", - "kgx": "kgx-Latn-ID", - "kgx-ID": "kgx-Latn-ID", - "kgx-Latn": "kgx-Latn-ID", - "kgy": "kgy-Deva-NP", - "kgy-Deva": "kgy-Deva-NP", - "kgy-NP": "kgy-Deva-NP", - "kha": "kha-Latn-IN", - "kha-IN": "kha-Latn-IN", - "kha-Latn": "kha-Latn-IN", - "khb": "khb-Talu-CN", - "khb-CN": "khb-Talu-CN", - "khb-Talu": "khb-Talu-CN", - "khc": "khc-Latn-ID", - "khc-ID": "khc-Latn-ID", - "khc-Latn": "khc-Latn-ID", - "khd": "khd-Latn-ID", - "khd-ID": "khd-Latn-ID", - "khd-Latn": "khd-Latn-ID", - "khe": "khe-Latn-ID", - "khe-ID": "khe-Latn-ID", - "khe-Latn": "khe-Latn-ID", - "khf": "khf-Thai-LA", - "khf-LA": "khf-Thai-LA", - "khf-Thai": "khf-Thai-LA", - "khg": "khg-Tibt-CN", - "khg-CN": "khg-Tibt-CN", - "khg-Tibt": "khg-Tibt-CN", - "khh": "khh-Latn-ID", - "khh-ID": "khh-Latn-ID", - "khh-Latn": "khh-Latn-ID", - "khj": "khj-Latn-NG", - "khj-Latn": "khj-Latn-NG", - "khj-NG": "khj-Latn-NG", - "khl": "khl-Latn-PG", - "khl-Latn": "khl-Latn-PG", - "khl-PG": "khl-Latn-PG", - "khn": "khn-Deva-IN", - "khn-Deva": "khn-Deva-IN", - "khn-IN": "khn-Deva-IN", - "kho": "kho-Brah-IR", - "kho-Brah": "kho-Brah-IR", - "kho-IR": "kho-Brah-IR", - "khp": "khp-Latn-ID", - "khp-ID": "khp-Latn-ID", - "khp-Latn": "khp-Latn-ID", - "khq": "khq-Latn-ML", - "khq-Latn": "khq-Latn-ML", - "khq-ML": "khq-Latn-ML", - "khr": "khr-Latn-IN", - "khr-IN": "khr-Latn-IN", - "khr-Latn": "khr-Latn-IN", - "khs": "khs-Latn-PG", - "khs-Latn": "khs-Latn-PG", - "khs-PG": "khs-Latn-PG", - "kht": "kht-Mymr-IN", - "kht-IN": "kht-Mymr-IN", - "kht-Mymr": "kht-Mymr-IN", - "kht-Mymr-IN": "kht-Mymr-IN", - "khu": "khu-Latn-AO", - "khu-AO": "khu-Latn-AO", - "khu-Latn": "khu-Latn-AO", - "khv": "khv-Cyrl-RU", - "khv-Cyrl": "khv-Cyrl-RU", - "khv-RU": "khv-Cyrl-RU", - "khw": "khw-Arab-PK", - "khw-Arab": "khw-Arab-PK", - "khw-PK": "khw-Arab-PK", - "khx": "khx-Latn-CD", - "khx-CD": "khx-Latn-CD", - "khx-Latn": "khx-Latn-CD", - "khy": "khy-Latn-CD", - "khy-CD": "khy-Latn-CD", - "khy-Latn": "khy-Latn-CD", - "khz": "khz-Latn-PG", - "khz-Latn": "khz-Latn-PG", - "khz-PG": "khz-Latn-PG", - "ki": "ki-Latn-KE", - "ki-KE": "ki-Latn-KE", - "ki-Latn": "ki-Latn-KE", - "kia": "kia-Latn-TD", - "kia-Latn": "kia-Latn-TD", - "kia-TD": "kia-Latn-TD", - "kib": "kib-Latn-SD", - "kib-Latn": "kib-Latn-SD", - "kib-SD": "kib-Latn-SD", - "kic": "kic-Latn-US", - "kic-Latn": "kic-Latn-US", - "kic-US": "kic-Latn-US", - "kid": "kid-Latn-CM", - "kid-CM": "kid-Latn-CM", - "kid-Latn": "kid-Latn-CM", - "kie": "kie-Latn-TD", - "kie-Latn": "kie-Latn-TD", - "kie-TD": "kie-Latn-TD", - "kif": "kif-Deva-NP", - "kif-Deva": "kif-Deva-NP", - "kif-NP": "kif-Deva-NP", - "kig": "kig-Latn-ID", - "kig-ID": "kig-Latn-ID", - "kig-Latn": "kig-Latn-ID", - "kih": "kih-Latn-PG", - "kih-Latn": "kih-Latn-PG", - "kih-PG": "kih-Latn-PG", - "kij": "kij-Latn-PG", - "kij-Latn": "kij-Latn-PG", - "kij-PG": "kij-Latn-PG", - "kil": "kil-Latn-NG", - "kil-Latn": "kil-Latn-NG", - "kil-NG": "kil-Latn-NG", - "kim": "kim-Cyrl-RU", - "kim-Cyrl": "kim-Cyrl-RU", - "kim-RU": "kim-Cyrl-RU", - "kio": "kio-Latn-US", - "kio-Latn": "kio-Latn-US", - "kio-US": "kio-Latn-US", - "kip": "kip-Deva-NP", - "kip-Deva": "kip-Deva-NP", - "kip-NP": "kip-Deva-NP", - "kiq": "kiq-Latn-ID", - "kiq-ID": "kiq-Latn-ID", - "kiq-Latn": "kiq-Latn-ID", - "kis": "kis-Latn-PG", - "kis-Latn": "kis-Latn-PG", - "kis-PG": "kis-Latn-PG", - "kit": "kit-Latn-PG", - "kit-Latn": "kit-Latn-PG", - "kit-PG": "kit-Latn-PG", - "kiu": "kiu-Latn-TR", - "kiu-Latn": "kiu-Latn-TR", - "kiu-TR": "kiu-Latn-TR", - "kiv": "kiv-Latn-TZ", - "kiv-Latn": "kiv-Latn-TZ", - "kiv-TZ": "kiv-Latn-TZ", - "kiw": "kiw-Latn-PG", - "kiw-Latn": "kiw-Latn-PG", - "kiw-PG": "kiw-Latn-PG", - "kix": "kix-Latn-IN", - "kix-IN": "kix-Latn-IN", - "kix-Latn": "kix-Latn-IN", - "kiy": "kiy-Latn-ID", - "kiy-ID": "kiy-Latn-ID", - "kiy-Latn": "kiy-Latn-ID", - "kiz": "kiz-Latn-TZ", - "kiz-Latn": "kiz-Latn-TZ", - "kiz-TZ": "kiz-Latn-TZ", - "kj": "kj-Latn-NA", - "kj-Latn": "kj-Latn-NA", - "kj-NA": "kj-Latn-NA", - "kja": "kja-Latn-ID", - "kja-ID": "kja-Latn-ID", - "kja-Latn": "kja-Latn-ID", - "kjb": "kjb-Latn-GT", - "kjb-GT": "kjb-Latn-GT", - "kjb-Latn": "kjb-Latn-GT", - "kjc": "kjc-Latn-ID", - "kjc-ID": "kjc-Latn-ID", - "kjc-Latn": "kjc-Latn-ID", - "kjd": "kjd-Latn-PG", - "kjd-Latn": "kjd-Latn-PG", - "kjd-PG": "kjd-Latn-PG", - "kje": "kje-Latn-ID", - "kje-ID": "kje-Latn-ID", - "kje-Latn": "kje-Latn-ID", - "kjg": "kjg-Laoo-LA", - "kjg-LA": "kjg-Laoo-LA", - "kjg-Laoo": "kjg-Laoo-LA", - "kjh": "kjh-Cyrl-RU", - "kjh-Cyrl": "kjh-Cyrl-RU", - "kjh-RU": "kjh-Cyrl-RU", - "kji": "kji-Latn-SB", - "kji-Latn": "kji-Latn-SB", - "kji-SB": "kji-Latn-SB", - "kjj": "kjj-Latn-AZ", - "kjj-AZ": "kjj-Latn-AZ", - "kjj-Latn": "kjj-Latn-AZ", - "kjk": "kjk-Latn-ID", - "kjk-ID": "kjk-Latn-ID", - "kjk-Latn": "kjk-Latn-ID", - "kjl": "kjl-Deva-NP", - "kjl-Deva": "kjl-Deva-NP", - "kjl-NP": "kjl-Deva-NP", - "kjm": "kjm-Latn-VN", - "kjm-Latn": "kjm-Latn-VN", - "kjm-VN": "kjm-Latn-VN", - "kjn": "kjn-Latn-AU", - "kjn-AU": "kjn-Latn-AU", - "kjn-Latn": "kjn-Latn-AU", - "kjo": "kjo-Deva-IN", - "kjo-Deva": "kjo-Deva-IN", - "kjo-IN": "kjo-Deva-IN", - "kjp": "kjp-Mymr-MM", - "kjp-MM": "kjp-Mymr-MM", - "kjp-Mymr": "kjp-Mymr-MM", - "kjq": "kjq-Latn-US", - "kjq-Latn": "kjq-Latn-US", - "kjq-US": "kjq-Latn-US", - "kjr": "kjr-Latn-ID", - "kjr-ID": "kjr-Latn-ID", - "kjr-Latn": "kjr-Latn-ID", - "kjs": "kjs-Latn-PG", - "kjs-Latn": "kjs-Latn-PG", - "kjs-PG": "kjs-Latn-PG", - "kjt": "kjt-Thai-TH", - "kjt-TH": "kjt-Thai-TH", - "kjt-Thai": "kjt-Thai-TH", - "kju": "kju-Latn-US", - "kju-Latn": "kju-Latn-US", - "kju-US": "kju-Latn-US", - "kjx": "kjx-Latn-PG", - "kjx-Latn": "kjx-Latn-PG", - "kjx-PG": "kjx-Latn-PG", - "kjy": "kjy-Latn-PG", - "kjy-Latn": "kjy-Latn-PG", - "kjy-PG": "kjy-Latn-PG", - "kjz": "kjz-Tibt-BT", - "kjz-BT": "kjz-Tibt-BT", - "kjz-Tibt": "kjz-Tibt-BT", - "kk": "kk-Cyrl-KZ", - "kk-AF": "kk-Arab-AF", - "kk-Arab": "kk-Arab-CN", - "kk-Arab-MN": "kk-Arab-MN", - "kk-CN": "kk-Arab-CN", - "kk-Cyrl": "kk-Cyrl-KZ", - "kk-IR": "kk-Arab-IR", - "kk-KZ": "kk-Cyrl-KZ", - "kk-MN": "kk-Arab-MN", - "kka": "kka-Latn-NG", - "kka-Latn": "kka-Latn-NG", - "kka-NG": "kka-Latn-NG", - "kkb": "kkb-Latn-ID", - "kkb-ID": "kkb-Latn-ID", - "kkb-Latn": "kkb-Latn-ID", - "kkc": "kkc-Latn-PG", - "kkc-Latn": "kkc-Latn-PG", - "kkc-PG": "kkc-Latn-PG", - "kkd": "kkd-Latn-NG", - "kkd-Latn": "kkd-Latn-NG", - "kkd-NG": "kkd-Latn-NG", - "kke": "kke-Latn-GN", - "kke-GN": "kke-Latn-GN", - "kke-Latn": "kke-Latn-GN", - "kkf": "kkf-Tibt-IN", - "kkf-IN": "kkf-Tibt-IN", - "kkf-Tibt": "kkf-Tibt-IN", - "kkg": "kkg-Latn-PH", - "kkg-Latn": "kkg-Latn-PH", - "kkg-PH": "kkg-Latn-PH", - "kkh": "kkh-Lana-MM", - "kkh-Lana": "kkh-Lana-MM", - "kkh-MM": "kkh-Lana-MM", - "kki": "kki-Latn-TZ", - "kki-Latn": "kki-Latn-TZ", - "kki-TZ": "kki-Latn-TZ", - "kkj": "kkj-Latn-CM", - "kkj-CM": "kkj-Latn-CM", - "kkj-Latn": "kkj-Latn-CM", - "kkk": "kkk-Latn-SB", - "kkk-Latn": "kkk-Latn-SB", - "kkk-SB": "kkk-Latn-SB", - "kkl": "kkl-Latn-ID", - "kkl-ID": "kkl-Latn-ID", - "kkl-Latn": "kkl-Latn-ID", - "kkm": "kkm-Latn-NG", - "kkm-Latn": "kkm-Latn-NG", - "kkm-NG": "kkm-Latn-NG", - "kko": "kko-Latn-SD", - "kko-Latn": "kko-Latn-SD", - "kko-SD": "kko-Latn-SD", - "kkp": "kkp-Latn-AU", - "kkp-AU": "kkp-Latn-AU", - "kkp-Latn": "kkp-Latn-AU", - "kkq": "kkq-Latn-CD", - "kkq-CD": "kkq-Latn-CD", - "kkq-Latn": "kkq-Latn-CD", - "kkr": "kkr-Latn-NG", - "kkr-Latn": "kkr-Latn-NG", - "kkr-NG": "kkr-Latn-NG", - "kks": "kks-Latn-NG", - "kks-Latn": "kks-Latn-NG", - "kks-NG": "kks-Latn-NG", - "kkt": "kkt-Deva-NP", - "kkt-Deva": "kkt-Deva-NP", - "kkt-NP": "kkt-Deva-NP", - "kku": "kku-Latn-NG", - "kku-Latn": "kku-Latn-NG", - "kku-NG": "kku-Latn-NG", - "kkv": "kkv-Latn-ID", - "kkv-ID": "kkv-Latn-ID", - "kkv-Latn": "kkv-Latn-ID", - "kkw": "kkw-Latn-CG", - "kkw-CG": "kkw-Latn-CG", - "kkw-Latn": "kkw-Latn-CG", - "kkx": "kkx-Latn-ID", - "kkx-ID": "kkx-Latn-ID", - "kkx-Latn": "kkx-Latn-ID", - "kky": "kky-Latn-AU", - "kky-AU": "kky-Latn-AU", - "kky-Latn": "kky-Latn-AU", - "kkz": "kkz-Latn-CA", - "kkz-CA": "kkz-Latn-CA", - "kkz-Latn": "kkz-Latn-CA", - "kl": "kl-Latn-GL", - "kl-GL": "kl-Latn-GL", - "kl-Latn": "kl-Latn-GL", - "kla": "kla-Latn-US", - "kla-Latn": "kla-Latn-US", - "kla-US": "kla-Latn-US", - "klb": "klb-Latn-MX", - "klb-Latn": "klb-Latn-MX", - "klb-MX": "klb-Latn-MX", - "klc": "klc-Latn-CM", - "klc-CM": "klc-Latn-CM", - "klc-Latn": "klc-Latn-CM", - "kld": "kld-Latn-AU", - "kld-AU": "kld-Latn-AU", - "kld-Latn": "kld-Latn-AU", - "kle": "kle-Deva-NP", - "kle-Deva": "kle-Deva-NP", - "kle-NP": "kle-Deva-NP", - "klf": "klf-Latn-TD", - "klf-Latn": "klf-Latn-TD", - "klf-TD": "klf-Latn-TD", - "klg": "klg-Latn-PH", - "klg-Latn": "klg-Latn-PH", - "klg-PH": "klg-Latn-PH", - "klh": "klh-Latn-PG", - "klh-Latn": "klh-Latn-PG", - "klh-PG": "klh-Latn-PG", - "kli": "kli-Latn-ID", - "kli-ID": "kli-Latn-ID", - "kli-Latn": "kli-Latn-ID", - "klj": "klj-Arab-IR", - "klj-Arab": "klj-Arab-IR", - "klj-IR": "klj-Arab-IR", - "klk": "klk-Latn-NG", - "klk-Latn": "klk-Latn-NG", - "klk-NG": "klk-Latn-NG", - "kll": "kll-Latn-PH", - "kll-Latn": "kll-Latn-PH", - "kll-PH": "kll-Latn-PH", - "klm": "klm-Latn-PG", - "klm-Latn": "klm-Latn-PG", - "klm-PG": "klm-Latn-PG", - "kln": "kln-Latn-KE", - "kln-KE": "kln-Latn-KE", - "kln-Latn": "kln-Latn-KE", - "klo": "klo-Latn-NG", - "klo-Latn": "klo-Latn-NG", - "klo-NG": "klo-Latn-NG", - "klp": "klp-Latn-PG", - "klp-Latn": "klp-Latn-PG", - "klp-PG": "klp-Latn-PG", - "klq": "klq-Latn-PG", - "klq-Latn": "klq-Latn-PG", - "klq-PG": "klq-Latn-PG", - "klr": "klr-Deva-NP", - "klr-Deva": "klr-Deva-NP", - "klr-NP": "klr-Deva-NP", - "kls": "kls-Latn-PK", - "kls-Latn": "kls-Latn-PK", - "kls-PK": "kls-Latn-PK", - "klt": "klt-Latn-PG", - "klt-Latn": "klt-Latn-PG", - "klt-PG": "klt-Latn-PG", - "klu": "klu-Latn-LR", - "klu-LR": "klu-Latn-LR", - "klu-Latn": "klu-Latn-LR", - "klv": "klv-Latn-VU", - "klv-Latn": "klv-Latn-VU", - "klv-VU": "klv-Latn-VU", - "klw": "klw-Latn-ID", - "klw-ID": "klw-Latn-ID", - "klw-Latn": "klw-Latn-ID", - "klx": "klx-Latn-PG", - "klx-Latn": "klx-Latn-PG", - "klx-PG": "klx-Latn-PG", - "kly": "kly-Latn-ID", - "kly-ID": "kly-Latn-ID", - "kly-Latn": "kly-Latn-ID", - "klz": "klz-Latn-ID", - "klz-ID": "klz-Latn-ID", - "klz-Latn": "klz-Latn-ID", - "km": "km-Khmr-KH", - "km-KH": "km-Khmr-KH", - "km-Khmr": "km-Khmr-KH", - "km-XX": "km-Khmr-XX", - "kma": "kma-Latn-GH", - "kma-GH": "kma-Latn-GH", - "kma-Latn": "kma-Latn-GH", - "kmb": "kmb-Latn-AO", - "kmb-AO": "kmb-Latn-AO", - "kmb-Latn": "kmb-Latn-AO", - "kmc": "kmc-Latn-CN", - "kmc-CN": "kmc-Latn-CN", - "kmc-Latn": "kmc-Latn-CN", - "kmd": "kmd-Latn-PH", - "kmd-Latn": "kmd-Latn-PH", - "kmd-PH": "kmd-Latn-PH", - "kme": "kme-Latn-CM", - "kme-CM": "kme-Latn-CM", - "kme-Latn": "kme-Latn-CM", - "kmf": "kmf-Latn-PG", - "kmf-Latn": "kmf-Latn-PG", - "kmf-PG": "kmf-Latn-PG", - "kmg": "kmg-Latn-PG", - "kmg-Latn": "kmg-Latn-PG", - "kmg-PG": "kmg-Latn-PG", - "kmh": "kmh-Latn-PG", - "kmh-Latn": "kmh-Latn-PG", - "kmh-PG": "kmh-Latn-PG", - "kmi": "kmi-Latn-NG", - "kmi-Latn": "kmi-Latn-NG", - "kmi-NG": "kmi-Latn-NG", - "kmj": "kmj-Deva-IN", - "kmj-Deva": "kmj-Deva-IN", - "kmj-IN": "kmj-Deva-IN", - "kmk": "kmk-Latn-PH", - "kmk-Latn": "kmk-Latn-PH", - "kmk-PH": "kmk-Latn-PH", - "kml": "kml-Latn-PH", - "kml-Latn": "kml-Latn-PH", - "kml-PH": "kml-Latn-PH", - "kmm": "kmm-Latn-IN", - "kmm-IN": "kmm-Latn-IN", - "kmm-Latn": "kmm-Latn-IN", - "kmn": "kmn-Latn-PG", - "kmn-Latn": "kmn-Latn-PG", - "kmn-PG": "kmn-Latn-PG", - "kmo": "kmo-Latn-PG", - "kmo-Latn": "kmo-Latn-PG", - "kmo-PG": "kmo-Latn-PG", - "kmp": "kmp-Latn-CM", - "kmp-CM": "kmp-Latn-CM", - "kmp-Latn": "kmp-Latn-CM", - "kmq": "kmq-Latn-ET", - "kmq-ET": "kmq-Latn-ET", - "kmq-Latn": "kmq-Latn-ET", - "kms": "kms-Latn-PG", - "kms-Latn": "kms-Latn-PG", - "kms-PG": "kms-Latn-PG", - "kmt": "kmt-Latn-ID", - "kmt-ID": "kmt-Latn-ID", - "kmt-Latn": "kmt-Latn-ID", - "kmu": "kmu-Latn-PG", - "kmu-Latn": "kmu-Latn-PG", - "kmu-PG": "kmu-Latn-PG", - "kmv": "kmv-Latn-BR", - "kmv-BR": "kmv-Latn-BR", - "kmv-Latn": "kmv-Latn-BR", - "kmw": "kmw-Latn-CD", - "kmw-CD": "kmw-Latn-CD", - "kmw-Latn": "kmw-Latn-CD", - "kmx": "kmx-Latn-PG", - "kmx-Latn": "kmx-Latn-PG", - "kmx-PG": "kmx-Latn-PG", - "kmy": "kmy-Latn-NG", - "kmy-Latn": "kmy-Latn-NG", - "kmy-NG": "kmy-Latn-NG", - "kmz": "kmz-Arab-IR", - "kmz-Arab": "kmz-Arab-IR", - "kmz-IR": "kmz-Arab-IR", - "kn": "kn-Knda-IN", - "kn-IN": "kn-Knda-IN", - "kn-Knda": "kn-Knda-IN", - "kn-XX": "kn-Knda-XX", - "kna": "kna-Latn-NG", - "kna-Latn": "kna-Latn-NG", - "kna-NG": "kna-Latn-NG", - "knb": "knb-Latn-PH", - "knb-Latn": "knb-Latn-PH", - "knb-PH": "knb-Latn-PH", - "knd": "knd-Latn-ID", - "knd-ID": "knd-Latn-ID", - "knd-Latn": "knd-Latn-ID", - "kne": "kne-Latn-PH", - "kne-Latn": "kne-Latn-PH", - "kne-PH": "kne-Latn-PH", - "knf": "knf-Latn-GW", - "knf-GW": "knf-Latn-GW", - "knf-Latn": "knf-Latn-GW", - "kni": "kni-Latn-NG", - "kni-Latn": "kni-Latn-NG", - "kni-NG": "kni-Latn-NG", - "knj": "knj-Latn-GT", - "knj-GT": "knj-Latn-GT", - "knj-Latn": "knj-Latn-GT", - "knk": "knk-Latn-SL", - "knk-Latn": "knk-Latn-SL", - "knk-SL": "knk-Latn-SL", - "knl": "knl-Latn-ID", - "knl-ID": "knl-Latn-ID", - "knl-Latn": "knl-Latn-ID", - "knm": "knm-Latn-BR", - "knm-BR": "knm-Latn-BR", - "knm-Latn": "knm-Latn-BR", - "knn": "knn-Deva-IN", - "knn-Deva": "knn-Deva-IN", - "knn-IN": "knn-Deva-IN", - "kno": "kno-Latn-SL", - "kno-Latn": "kno-Latn-SL", - "kno-SL": "kno-Latn-SL", - "knp": "knp-Latn-CM", - "knp-CM": "knp-Latn-CM", - "knp-Latn": "knp-Latn-CM", - "knq": "knq-Latn-MY", - "knq-Latn": "knq-Latn-MY", - "knq-MY": "knq-Latn-MY", - "knr": "knr-Latn-PG", - "knr-Latn": "knr-Latn-PG", - "knr-PG": "knr-Latn-PG", - "kns": "kns-Latn-MY", - "kns-Latn": "kns-Latn-MY", - "kns-MY": "kns-Latn-MY", - "knt": "knt-Latn-BR", - "knt-BR": "knt-Latn-BR", - "knt-Latn": "knt-Latn-BR", - "knu": "knu-Latn-GN", - "knu-GN": "knu-Latn-GN", - "knu-Latn": "knu-Latn-GN", - "knv": "knv-Latn-PG", - "knv-Latn": "knv-Latn-PG", - "knv-PG": "knv-Latn-PG", - "knw": "knw-Latn-NA", - "knw-Latn": "knw-Latn-NA", - "knw-NA": "knw-Latn-NA", - "knx": "knx-Latn-ID", - "knx-ID": "knx-Latn-ID", - "knx-Latn": "knx-Latn-ID", - "kny": "kny-Latn-CD", - "kny-CD": "kny-Latn-CD", - "kny-Latn": "kny-Latn-CD", - "knz": "knz-Latn-BF", - "knz-BF": "knz-Latn-BF", - "knz-Latn": "knz-Latn-BF", - "ko": "ko-Kore-KR", - "ko-Hang": "ko-Hang-KR", - "ko-Jamo": "ko-Jamo-KR", - "ko-KP": "ko-Kore-KP", - "ko-KR": "ko-Kore-KR", - "ko-Kore": "ko-Kore-KR", - "ko-US": "ko-Kore-US", - "koa": "koa-Latn-PG", - "koa-Latn": "koa-Latn-PG", - "koa-PG": "koa-Latn-PG", - "koc": "koc-Latn-NG", - "koc-Latn": "koc-Latn-NG", - "koc-NG": "koc-Latn-NG", - "kod": "kod-Latn-ID", - "kod-ID": "kod-Latn-ID", - "kod-Latn": "kod-Latn-ID", - "koe": "koe-Latn-SS", - "koe-Latn": "koe-Latn-SS", - "koe-SS": "koe-Latn-SS", - "kof": "kof-Latn-NG", - "kof-Latn": "kof-Latn-NG", - "kof-NG": "kof-Latn-NG", - "kog": "kog-Latn-CO", - "kog-CO": "kog-Latn-CO", - "kog-Latn": "kog-Latn-CO", - "koh": "koh-Latn-CG", - "koh-CG": "koh-Latn-CG", - "koh-Latn": "koh-Latn-CG", - "koi": "koi-Cyrl-RU", - "koi-Cyrl": "koi-Cyrl-RU", - "koi-RU": "koi-Cyrl-RU", - "kok": "kok-Deva-IN", - "kok-Deva": "kok-Deva-IN", - "kok-IN": "kok-Deva-IN", - "kol": "kol-Latn-PG", - "kol-Latn": "kol-Latn-PG", - "kol-PG": "kol-Latn-PG", - "koo": "koo-Latn-UG", - "koo-Latn": "koo-Latn-UG", - "koo-UG": "koo-Latn-UG", - "kop": "kop-Latn-PG", - "kop-Latn": "kop-Latn-PG", - "kop-PG": "kop-Latn-PG", - "koq": "koq-Latn-GA", - "koq-GA": "koq-Latn-GA", - "koq-Latn": "koq-Latn-GA", - "kos": "kos-Latn-FM", - "kos-FM": "kos-Latn-FM", - "kos-Latn": "kos-Latn-FM", - "kot": "kot-Latn-CM", - "kot-CM": "kot-Latn-CM", - "kot-Latn": "kot-Latn-CM", - "kou": "kou-Latn-TD", - "kou-Latn": "kou-Latn-TD", - "kou-TD": "kou-Latn-TD", - "kov": "kov-Latn-NG", - "kov-Latn": "kov-Latn-NG", - "kov-NG": "kov-Latn-NG", - "kow": "kow-Latn-NG", - "kow-Latn": "kow-Latn-NG", - "kow-NG": "kow-Latn-NG", - "koy": "koy-Latn-US", - "koy-Latn": "koy-Latn-US", - "koy-US": "koy-Latn-US", - "koz": "koz-Latn-PG", - "koz-Latn": "koz-Latn-PG", - "koz-PG": "koz-Latn-PG", - "kpa": "kpa-Latn-NG", - "kpa-Latn": "kpa-Latn-NG", - "kpa-NG": "kpa-Latn-NG", - "kpc": "kpc-Latn-CO", - "kpc-CO": "kpc-Latn-CO", - "kpc-Latn": "kpc-Latn-CO", - "kpd": "kpd-Latn-ID", - "kpd-ID": "kpd-Latn-ID", - "kpd-Latn": "kpd-Latn-ID", - "kpe": "kpe-Latn-LR", - "kpe-LR": "kpe-Latn-LR", - "kpe-Latn": "kpe-Latn-LR", - "kpf": "kpf-Latn-PG", - "kpf-Latn": "kpf-Latn-PG", - "kpf-PG": "kpf-Latn-PG", - "kpg": "kpg-Latn-FM", - "kpg-FM": "kpg-Latn-FM", - "kpg-Latn": "kpg-Latn-FM", - "kph": "kph-Latn-GH", - "kph-GH": "kph-Latn-GH", - "kph-Latn": "kph-Latn-GH", - "kpi": "kpi-Latn-ID", - "kpi-ID": "kpi-Latn-ID", - "kpi-Latn": "kpi-Latn-ID", - "kpj": "kpj-Latn-BR", - "kpj-BR": "kpj-Latn-BR", - "kpj-Latn": "kpj-Latn-BR", - "kpk": "kpk-Latn-NG", - "kpk-Latn": "kpk-Latn-NG", - "kpk-NG": "kpk-Latn-NG", - "kpl": "kpl-Latn-CD", - "kpl-CD": "kpl-Latn-CD", - "kpl-Latn": "kpl-Latn-CD", - "kpm": "kpm-Latn-VN", - "kpm-Latn": "kpm-Latn-VN", - "kpm-VN": "kpm-Latn-VN", - "kpn": "kpn-Latn-BR", - "kpn-BR": "kpn-Latn-BR", - "kpn-Latn": "kpn-Latn-BR", - "kpo": "kpo-Latn-TG", - "kpo-Latn": "kpo-Latn-TG", - "kpo-TG": "kpo-Latn-TG", - "kpq": "kpq-Latn-ID", - "kpq-ID": "kpq-Latn-ID", - "kpq-Latn": "kpq-Latn-ID", - "kpr": "kpr-Latn-PG", - "kpr-Latn": "kpr-Latn-PG", - "kpr-PG": "kpr-Latn-PG", - "kps": "kps-Latn-ID", - "kps-ID": "kps-Latn-ID", - "kps-Latn": "kps-Latn-ID", - "kpt": "kpt-Cyrl-RU", - "kpt-Cyrl": "kpt-Cyrl-RU", - "kpt-RU": "kpt-Cyrl-RU", - "kpu": "kpu-Latn-ID", - "kpu-ID": "kpu-Latn-ID", - "kpu-Latn": "kpu-Latn-ID", - "kpw": "kpw-Latn-PG", - "kpw-Latn": "kpw-Latn-PG", - "kpw-PG": "kpw-Latn-PG", - "kpx": "kpx-Latn-PG", - "kpx-Latn": "kpx-Latn-PG", - "kpx-PG": "kpx-Latn-PG", - "kpy": "kpy-Cyrl-RU", - "kpy-Cyrl": "kpy-Cyrl-RU", - "kpy-RU": "kpy-Cyrl-RU", - "kpz": "kpz-Latn-UG", - "kpz-Latn": "kpz-Latn-UG", - "kpz-UG": "kpz-Latn-UG", - "kqa": "kqa-Latn-PG", - "kqa-Latn": "kqa-Latn-PG", - "kqa-PG": "kqa-Latn-PG", - "kqb": "kqb-Latn-PG", - "kqb-Latn": "kqb-Latn-PG", - "kqb-PG": "kqb-Latn-PG", - "kqc": "kqc-Latn-PG", - "kqc-Latn": "kqc-Latn-PG", - "kqc-PG": "kqc-Latn-PG", - "kqd": "kqd-Syrc-IQ", - "kqd-IQ": "kqd-Syrc-IQ", - "kqd-Syrc": "kqd-Syrc-IQ", - "kqe": "kqe-Latn-PH", - "kqe-Latn": "kqe-Latn-PH", - "kqe-PH": "kqe-Latn-PH", - "kqf": "kqf-Latn-PG", - "kqf-Latn": "kqf-Latn-PG", - "kqf-PG": "kqf-Latn-PG", - "kqg": "kqg-Latn-BF", - "kqg-BF": "kqg-Latn-BF", - "kqg-Latn": "kqg-Latn-BF", - "kqh": "kqh-Latn-TZ", - "kqh-Latn": "kqh-Latn-TZ", - "kqh-TZ": "kqh-Latn-TZ", - "kqi": "kqi-Latn-PG", - "kqi-Latn": "kqi-Latn-PG", - "kqi-PG": "kqi-Latn-PG", - "kqj": "kqj-Latn-PG", - "kqj-Latn": "kqj-Latn-PG", - "kqj-PG": "kqj-Latn-PG", - "kqk": "kqk-Latn-BJ", - "kqk-BJ": "kqk-Latn-BJ", - "kqk-Latn": "kqk-Latn-BJ", - "kql": "kql-Latn-PG", - "kql-Latn": "kql-Latn-PG", - "kql-PG": "kql-Latn-PG", - "kqm": "kqm-Latn-CI", - "kqm-CI": "kqm-Latn-CI", - "kqm-Latn": "kqm-Latn-CI", - "kqn": "kqn-Latn-ZM", - "kqn-Latn": "kqn-Latn-ZM", - "kqn-ZM": "kqn-Latn-ZM", - "kqo": "kqo-Latn-LR", - "kqo-LR": "kqo-Latn-LR", - "kqo-Latn": "kqo-Latn-LR", - "kqp": "kqp-Latn-TD", - "kqp-Latn": "kqp-Latn-TD", - "kqp-TD": "kqp-Latn-TD", - "kqq": "kqq-Latn-BR", - "kqq-BR": "kqq-Latn-BR", - "kqq-Latn": "kqq-Latn-BR", - "kqr": "kqr-Latn-MY", - "kqr-Latn": "kqr-Latn-MY", - "kqr-MY": "kqr-Latn-MY", - "kqs": "kqs-Latn-GN", - "kqs-GN": "kqs-Latn-GN", - "kqs-Latn": "kqs-Latn-GN", - "kqt": "kqt-Latn-MY", - "kqt-Latn": "kqt-Latn-MY", - "kqt-MY": "kqt-Latn-MY", - "kqu": "kqu-Latn-ZA", - "kqu-Latn": "kqu-Latn-ZA", - "kqu-ZA": "kqu-Latn-ZA", - "kqv": "kqv-Latn-ID", - "kqv-ID": "kqv-Latn-ID", - "kqv-Latn": "kqv-Latn-ID", - "kqw": "kqw-Latn-PG", - "kqw-Latn": "kqw-Latn-PG", - "kqw-PG": "kqw-Latn-PG", - "kqx": "kqx-Latn-CM", - "kqx-CM": "kqx-Latn-CM", - "kqx-Latn": "kqx-Latn-CM", - "kqy": "kqy-Ethi-ET", - "kqy-ET": "kqy-Ethi-ET", - "kqy-Ethi": "kqy-Ethi-ET", - "kqz": "kqz-Latn-ZA", - "kqz-Latn": "kqz-Latn-ZA", - "kqz-ZA": "kqz-Latn-ZA", - "kr": "kr-Latn-NG", - "kr-Latn": "kr-Latn-NG", - "kr-NG": "kr-Latn-NG", - "kra": "kra-Deva-NP", - "kra-Deva": "kra-Deva-NP", - "kra-NP": "kra-Deva-NP", - "krb": "krb-Latn-US", - "krb-Latn": "krb-Latn-US", - "krb-US": "krb-Latn-US", - "krc": "krc-Cyrl-RU", - "krc-Cyrl": "krc-Cyrl-RU", - "krc-RU": "krc-Cyrl-RU", - "krd": "krd-Latn-TL", - "krd-Latn": "krd-Latn-TL", - "krd-TL": "krd-Latn-TL", - "kre": "kre-Latn-BR", - "kre-BR": "kre-Latn-BR", - "kre-Latn": "kre-Latn-BR", - "krf": "krf-Latn-VU", - "krf-Latn": "krf-Latn-VU", - "krf-VU": "krf-Latn-VU", - "krh": "krh-Latn-NG", - "krh-Latn": "krh-Latn-NG", - "krh-NG": "krh-Latn-NG", - "kri": "kri-Latn-SL", - "kri-Latn": "kri-Latn-SL", - "kri-SL": "kri-Latn-SL", - "krj": "krj-Latn-PH", - "krj-Latn": "krj-Latn-PH", - "krj-PH": "krj-Latn-PH", - "krk": "krk-Cyrl-RU", - "krk-Cyrl": "krk-Cyrl-RU", - "krk-RU": "krk-Cyrl-RU", - "krl": "krl-Latn-RU", - "krl-Latn": "krl-Latn-RU", - "krl-Latn-RU": "krl-Latn-RU", - "krl-RU": "krl-Latn-RU", - "krn": "krn-Latn-LR", - "krn-LR": "krn-Latn-LR", - "krn-Latn": "krn-Latn-LR", - "krp": "krp-Latn-NG", - "krp-Latn": "krp-Latn-NG", - "krp-NG": "krp-Latn-NG", - "krr": "krr-Khmr-KH", - "krr-KH": "krr-Khmr-KH", - "krr-Khmr": "krr-Khmr-KH", - "krs": "krs-Latn-SS", - "krs-Latn": "krs-Latn-SS", - "krs-SS": "krs-Latn-SS", - "krt": "krt-Latn-NE", - "krt-Latn": "krt-Latn-NE", - "krt-NE": "krt-Latn-NE", - "kru": "kru-Deva-IN", - "kru-Deva": "kru-Deva-IN", - "kru-IN": "kru-Deva-IN", - "krv": "krv-Khmr-KH", - "krv-KH": "krv-Khmr-KH", - "krv-Khmr": "krv-Khmr-KH", - "krw": "krw-Latn-LR", - "krw-LR": "krw-Latn-LR", - "krw-Latn": "krw-Latn-LR", - "krx": "krx-Latn-SN", - "krx-Latn": "krx-Latn-SN", - "krx-SN": "krx-Latn-SN", - "kry": "kry-Latn-AZ", - "kry-AZ": "kry-Latn-AZ", - "kry-Latn": "kry-Latn-AZ", - "krz": "krz-Latn-ID", - "krz-ID": "krz-Latn-ID", - "krz-Latn": "krz-Latn-ID", - "ks": "ks-Arab-IN", - "ks-Arab": "ks-Arab-IN", - "ks-IN": "ks-Arab-IN", - "ksb": "ksb-Latn-TZ", - "ksb-Latn": "ksb-Latn-TZ", - "ksb-TZ": "ksb-Latn-TZ", - "ksc": "ksc-Latn-PH", - "ksc-Latn": "ksc-Latn-PH", - "ksc-PH": "ksc-Latn-PH", - "ksd": "ksd-Latn-PG", - "ksd-Latn": "ksd-Latn-PG", - "ksd-PG": "ksd-Latn-PG", - "kse": "kse-Latn-PG", - "kse-Latn": "kse-Latn-PG", - "kse-PG": "kse-Latn-PG", - "ksf": "ksf-Latn-CM", - "ksf-CM": "ksf-Latn-CM", - "ksf-Latn": "ksf-Latn-CM", - "ksg": "ksg-Latn-SB", - "ksg-Latn": "ksg-Latn-SB", - "ksg-SB": "ksg-Latn-SB", - "ksh": "ksh-Latn-DE", - "ksh-DE": "ksh-Latn-DE", - "ksh-Latn": "ksh-Latn-DE", - "ksi": "ksi-Latn-PG", - "ksi-Latn": "ksi-Latn-PG", - "ksi-PG": "ksi-Latn-PG", - "ksj": "ksj-Latn-PG", - "ksj-Latn": "ksj-Latn-PG", - "ksj-PG": "ksj-Latn-PG", - "ksk": "ksk-Latn-US", - "ksk-Latn": "ksk-Latn-US", - "ksk-US": "ksk-Latn-US", - "ksl": "ksl-Latn-PG", - "ksl-Latn": "ksl-Latn-PG", - "ksl-PG": "ksl-Latn-PG", - "ksm": "ksm-Latn-NG", - "ksm-Latn": "ksm-Latn-NG", - "ksm-NG": "ksm-Latn-NG", - "ksn": "ksn-Latn-PH", - "ksn-Latn": "ksn-Latn-PH", - "ksn-PH": "ksn-Latn-PH", - "kso": "kso-Latn-NG", - "kso-Latn": "kso-Latn-NG", - "kso-NG": "kso-Latn-NG", - "ksp": "ksp-Latn-CF", - "ksp-CF": "ksp-Latn-CF", - "ksp-Latn": "ksp-Latn-CF", - "ksq": "ksq-Latn-NG", - "ksq-Latn": "ksq-Latn-NG", - "ksq-NG": "ksq-Latn-NG", - "ksr": "ksr-Latn-PG", - "ksr-Latn": "ksr-Latn-PG", - "ksr-PG": "ksr-Latn-PG", - "kss": "kss-Latn-LR", - "kss-LR": "kss-Latn-LR", - "kss-Latn": "kss-Latn-LR", - "kst": "kst-Latn-BF", - "kst-BF": "kst-Latn-BF", - "kst-Latn": "kst-Latn-BF", - "ksu": "ksu-Mymr-IN", - "ksu-IN": "ksu-Mymr-IN", - "ksu-Mymr": "ksu-Mymr-IN", - "ksv": "ksv-Latn-CD", - "ksv-CD": "ksv-Latn-CD", - "ksv-Latn": "ksv-Latn-CD", - "ksw": "ksw-Mymr-MM", - "ksw-MM": "ksw-Mymr-MM", - "ksw-Mymr": "ksw-Mymr-MM", - "ksx": "ksx-Latn-ID", - "ksx-ID": "ksx-Latn-ID", - "ksx-Latn": "ksx-Latn-ID", - "ksz": "ksz-Deva-IN", - "ksz-Deva": "ksz-Deva-IN", - "ksz-IN": "ksz-Deva-IN", - "kta": "kta-Latn-VN", - "kta-Latn": "kta-Latn-VN", - "kta-VN": "kta-Latn-VN", - "ktb": "ktb-Ethi-ET", - "ktb-ET": "ktb-Ethi-ET", - "ktb-Ethi": "ktb-Ethi-ET", - "ktc": "ktc-Latn-NG", - "ktc-Latn": "ktc-Latn-NG", - "ktc-NG": "ktc-Latn-NG", - "ktd": "ktd-Latn-AU", - "ktd-AU": "ktd-Latn-AU", - "ktd-Latn": "ktd-Latn-AU", - "kte": "kte-Deva-NP", - "kte-Deva": "kte-Deva-NP", - "kte-NP": "kte-Deva-NP", - "ktf": "ktf-Latn-CD", - "ktf-CD": "ktf-Latn-CD", - "ktf-Latn": "ktf-Latn-CD", - "ktg": "ktg-Latn-AU", - "ktg-AU": "ktg-Latn-AU", - "ktg-Latn": "ktg-Latn-AU", - "kth": "kth-Latn-TD", - "kth-Latn": "kth-Latn-TD", - "kth-TD": "kth-Latn-TD", - "kti": "kti-Latn-ID", - "kti-ID": "kti-Latn-ID", - "kti-Latn": "kti-Latn-ID", - "ktj": "ktj-Latn-CI", - "ktj-CI": "ktj-Latn-CI", - "ktj-Latn": "ktj-Latn-CI", - "ktk": "ktk-Latn-PG", - "ktk-Latn": "ktk-Latn-PG", - "ktk-PG": "ktk-Latn-PG", - "ktl": "ktl-Arab-IR", - "ktl-Arab": "ktl-Arab-IR", - "ktl-IR": "ktl-Arab-IR", - "ktm": "ktm-Latn-PG", - "ktm-Latn": "ktm-Latn-PG", - "ktm-PG": "ktm-Latn-PG", - "ktn": "ktn-Latn-BR", - "ktn-BR": "ktn-Latn-BR", - "ktn-Latn": "ktn-Latn-BR", - "kto": "kto-Latn-PG", - "kto-Latn": "kto-Latn-PG", - "kto-PG": "kto-Latn-PG", - "ktp": "ktp-Plrd-CN", - "ktp-CN": "ktp-Plrd-CN", - "ktp-Plrd": "ktp-Plrd-CN", - "ktq": "ktq-Latn-PH", - "ktq-Latn": "ktq-Latn-PH", - "ktq-PH": "ktq-Latn-PH", - "kts": "kts-Latn-ID", - "kts-ID": "kts-Latn-ID", - "kts-Latn": "kts-Latn-ID", - "ktt": "ktt-Latn-ID", - "ktt-ID": "ktt-Latn-ID", - "ktt-Latn": "ktt-Latn-ID", - "ktu": "ktu-Latn-CD", - "ktu-CD": "ktu-Latn-CD", - "ktu-Latn": "ktu-Latn-CD", - "ktv": "ktv-Latn-VN", - "ktv-Latn": "ktv-Latn-VN", - "ktv-VN": "ktv-Latn-VN", - "ktw": "ktw-Latn-US", - "ktw-Latn": "ktw-Latn-US", - "ktw-US": "ktw-Latn-US", - "ktx": "ktx-Latn-BR", - "ktx-BR": "ktx-Latn-BR", - "ktx-Latn": "ktx-Latn-BR", - "kty": "kty-Latn-CD", - "kty-CD": "kty-Latn-CD", - "kty-Latn": "kty-Latn-CD", - "ktz": "ktz-Latn-NA", - "ktz-Latn": "ktz-Latn-NA", - "ktz-NA": "ktz-Latn-NA", - "ku": "ku-Latn-TR", - "ku-Arab": "ku-Arab-IQ", - "ku-IQ": "ku-Arab-IQ", - "ku-LB": "ku-Arab-LB", - "ku-Latn": "ku-Latn-TR", - "ku-Latn-AM": "ku-Latn-AM", - "ku-Latn-GE": "ku-Latn-GE", - "ku-TR": "ku-Latn-TR", - "ku-Yezi": "ku-Yezi-GE", - "kub": "kub-Latn-NG", - "kub-Latn": "kub-Latn-NG", - "kub-NG": "kub-Latn-NG", - "kuc": "kuc-Latn-ID", - "kuc-ID": "kuc-Latn-ID", - "kuc-Latn": "kuc-Latn-ID", - "kud": "kud-Latn-PG", - "kud-Latn": "kud-Latn-PG", - "kud-PG": "kud-Latn-PG", - "kue": "kue-Latn-PG", - "kue-Latn": "kue-Latn-PG", - "kue-PG": "kue-Latn-PG", - "kuf": "kuf-Laoo-LA", - "kuf-LA": "kuf-Laoo-LA", - "kuf-Laoo": "kuf-Laoo-LA", - "kug": "kug-Latn-NG", - "kug-Latn": "kug-Latn-NG", - "kug-NG": "kug-Latn-NG", - "kuh": "kuh-Latn-NG", - "kuh-Latn": "kuh-Latn-NG", - "kuh-NG": "kuh-Latn-NG", - "kui": "kui-Latn-BR", - "kui-BR": "kui-Latn-BR", - "kui-Latn": "kui-Latn-BR", - "kuj": "kuj-Latn-TZ", - "kuj-Latn": "kuj-Latn-TZ", - "kuj-TZ": "kuj-Latn-TZ", - "kuk": "kuk-Latn-ID", - "kuk-ID": "kuk-Latn-ID", - "kuk-Latn": "kuk-Latn-ID", - "kul": "kul-Latn-NG", - "kul-Latn": "kul-Latn-NG", - "kul-NG": "kul-Latn-NG", - "kum": "kum-Cyrl-RU", - "kum-Cyrl": "kum-Cyrl-RU", - "kum-RU": "kum-Cyrl-RU", - "kun": "kun-Latn-ER", - "kun-ER": "kun-Latn-ER", - "kun-Latn": "kun-Latn-ER", - "kuo": "kuo-Latn-PG", - "kuo-Latn": "kuo-Latn-PG", - "kuo-PG": "kuo-Latn-PG", - "kup": "kup-Latn-PG", - "kup-Latn": "kup-Latn-PG", - "kup-PG": "kup-Latn-PG", - "kuq": "kuq-Latn-BR", - "kuq-BR": "kuq-Latn-BR", - "kuq-Latn": "kuq-Latn-BR", - "kus": "kus-Latn-GH", - "kus-GH": "kus-Latn-GH", - "kus-Latn": "kus-Latn-GH", - "kut": "kut-Latn-CA", - "kut-CA": "kut-Latn-CA", - "kut-Latn": "kut-Latn-CA", - "kuu": "kuu-Latn-US", - "kuu-Latn": "kuu-Latn-US", - "kuu-US": "kuu-Latn-US", - "kuv": "kuv-Latn-ID", - "kuv-ID": "kuv-Latn-ID", - "kuv-Latn": "kuv-Latn-ID", - "kuw": "kuw-Latn-CF", - "kuw-CF": "kuw-Latn-CF", - "kuw-Latn": "kuw-Latn-CF", - "kux": "kux-Latn-AU", - "kux-AU": "kux-Latn-AU", - "kux-Latn": "kux-Latn-AU", - "kuy": "kuy-Latn-AU", - "kuy-AU": "kuy-Latn-AU", - "kuy-Latn": "kuy-Latn-AU", - "kuz": "kuz-Latn-CL", - "kuz-CL": "kuz-Latn-CL", - "kuz-Latn": "kuz-Latn-CL", - "kv": "kv-Cyrl-RU", - "kv-Cyrl": "kv-Cyrl-RU", - "kv-Perm": "kv-Perm-RU", - "kv-RU": "kv-Cyrl-RU", - "kva": "kva-Cyrl-RU", - "kva-Cyrl": "kva-Cyrl-RU", - "kva-RU": "kva-Cyrl-RU", - "kvb": "kvb-Latn-ID", - "kvb-ID": "kvb-Latn-ID", - "kvb-Latn": "kvb-Latn-ID", - "kvc": "kvc-Latn-PG", - "kvc-Latn": "kvc-Latn-PG", - "kvc-PG": "kvc-Latn-PG", - "kvd": "kvd-Latn-ID", - "kvd-ID": "kvd-Latn-ID", - "kvd-Latn": "kvd-Latn-ID", - "kve": "kve-Latn-MY", - "kve-Latn": "kve-Latn-MY", - "kve-MY": "kve-Latn-MY", - "kvf": "kvf-Latn-TD", - "kvf-Latn": "kvf-Latn-TD", - "kvf-TD": "kvf-Latn-TD", - "kvg": "kvg-Latn-PG", - "kvg-Latn": "kvg-Latn-PG", - "kvg-PG": "kvg-Latn-PG", - "kvh": "kvh-Latn-ID", - "kvh-ID": "kvh-Latn-ID", - "kvh-Latn": "kvh-Latn-ID", - "kvi": "kvi-Latn-TD", - "kvi-Latn": "kvi-Latn-TD", - "kvi-TD": "kvi-Latn-TD", - "kvj": "kvj-Latn-CM", - "kvj-CM": "kvj-Latn-CM", - "kvj-Latn": "kvj-Latn-CM", - "kvl": "kvl-Latn-MM", - "kvl-Latn": "kvl-Latn-MM", - "kvl-MM": "kvl-Latn-MM", - "kvm": "kvm-Latn-CM", - "kvm-CM": "kvm-Latn-CM", - "kvm-Latn": "kvm-Latn-CM", - "kvn": "kvn-Latn-CO", - "kvn-CO": "kvn-Latn-CO", - "kvn-Latn": "kvn-Latn-CO", - "kvo": "kvo-Latn-ID", - "kvo-ID": "kvo-Latn-ID", - "kvo-Latn": "kvo-Latn-ID", - "kvp": "kvp-Latn-ID", - "kvp-ID": "kvp-Latn-ID", - "kvp-Latn": "kvp-Latn-ID", - "kvq": "kvq-Mymr-MM", - "kvq-MM": "kvq-Mymr-MM", - "kvq-Mymr": "kvq-Mymr-MM", - "kvr": "kvr-Latn-ID", - "kvr-ID": "kvr-Latn-ID", - "kvr-Latn": "kvr-Latn-ID", - "kvt": "kvt-Mymr-MM", - "kvt-MM": "kvt-Mymr-MM", - "kvt-Mymr": "kvt-Mymr-MM", - "kvv": "kvv-Latn-ID", - "kvv-ID": "kvv-Latn-ID", - "kvv-Latn": "kvv-Latn-ID", - "kvw": "kvw-Latn-ID", - "kvw-ID": "kvw-Latn-ID", - "kvw-Latn": "kvw-Latn-ID", - "kvx": "kvx-Arab-PK", - "kvx-Arab": "kvx-Arab-PK", - "kvx-PK": "kvx-Arab-PK", - "kvy": "kvy-Kali-MM", - "kvy-Kali": "kvy-Kali-MM", - "kvy-MM": "kvy-Kali-MM", - "kvz": "kvz-Latn-ID", - "kvz-ID": "kvz-Latn-ID", - "kvz-Latn": "kvz-Latn-ID", - "kw": "kw-Latn-GB", - "kw-GB": "kw-Latn-GB", - "kw-Latn": "kw-Latn-GB", - "kwa": "kwa-Latn-BR", - "kwa-BR": "kwa-Latn-BR", - "kwa-Latn": "kwa-Latn-BR", - "kwb": "kwb-Latn-NG", - "kwb-Latn": "kwb-Latn-NG", - "kwb-NG": "kwb-Latn-NG", - "kwc": "kwc-Latn-CG", - "kwc-CG": "kwc-Latn-CG", - "kwc-Latn": "kwc-Latn-CG", - "kwd": "kwd-Latn-SB", - "kwd-Latn": "kwd-Latn-SB", - "kwd-SB": "kwd-Latn-SB", - "kwe": "kwe-Latn-ID", - "kwe-ID": "kwe-Latn-ID", - "kwe-Latn": "kwe-Latn-ID", - "kwf": "kwf-Latn-SB", - "kwf-Latn": "kwf-Latn-SB", - "kwf-SB": "kwf-Latn-SB", - "kwg": "kwg-Latn-TD", - "kwg-Latn": "kwg-Latn-TD", - "kwg-TD": "kwg-Latn-TD", - "kwh": "kwh-Latn-ID", - "kwh-ID": "kwh-Latn-ID", - "kwh-Latn": "kwh-Latn-ID", - "kwi": "kwi-Latn-CO", - "kwi-CO": "kwi-Latn-CO", - "kwi-Latn": "kwi-Latn-CO", - "kwj": "kwj-Latn-PG", - "kwj-Latn": "kwj-Latn-PG", - "kwj-PG": "kwj-Latn-PG", - "kwk": "kwk-Latn-CA", - "kwk-CA": "kwk-Latn-CA", - "kwk-Latn": "kwk-Latn-CA", - "kwl": "kwl-Latn-NG", - "kwl-Latn": "kwl-Latn-NG", - "kwl-NG": "kwl-Latn-NG", - "kwm": "kwm-Latn-NA", - "kwm-Latn": "kwm-Latn-NA", - "kwm-NA": "kwm-Latn-NA", - "kwn": "kwn-Latn-NA", - "kwn-Latn": "kwn-Latn-NA", - "kwn-NA": "kwn-Latn-NA", - "kwo": "kwo-Latn-PG", - "kwo-Latn": "kwo-Latn-PG", - "kwo-PG": "kwo-Latn-PG", - "kwp": "kwp-Latn-CI", - "kwp-CI": "kwp-Latn-CI", - "kwp-Latn": "kwp-Latn-CI", - "kwr": "kwr-Latn-ID", - "kwr-ID": "kwr-Latn-ID", - "kwr-Latn": "kwr-Latn-ID", - "kws": "kws-Latn-CD", - "kws-CD": "kws-Latn-CD", - "kws-Latn": "kws-Latn-CD", - "kwt": "kwt-Latn-ID", - "kwt-ID": "kwt-Latn-ID", - "kwt-Latn": "kwt-Latn-ID", - "kwu": "kwu-Latn-CM", - "kwu-CM": "kwu-Latn-CM", - "kwu-Latn": "kwu-Latn-CM", - "kwv": "kwv-Latn-TD", - "kwv-Latn": "kwv-Latn-TD", - "kwv-TD": "kwv-Latn-TD", - "kww": "kww-Latn-SR", - "kww-Latn": "kww-Latn-SR", - "kww-SR": "kww-Latn-SR", - "kwy": "kwy-Latn-AO", - "kwy-AO": "kwy-Latn-AO", - "kwy-Latn": "kwy-Latn-AO", - "kwz": "kwz-Latn-AO", - "kwz-AO": "kwz-Latn-AO", - "kwz-Latn": "kwz-Latn-AO", - "kxa": "kxa-Latn-PG", - "kxa-Latn": "kxa-Latn-PG", - "kxa-PG": "kxa-Latn-PG", - "kxb": "kxb-Latn-CI", - "kxb-CI": "kxb-Latn-CI", - "kxb-Latn": "kxb-Latn-CI", - "kxc": "kxc-Latn-ET", - "kxc-ET": "kxc-Latn-ET", - "kxc-Latn": "kxc-Latn-ET", - "kxd": "kxd-Latn-BN", - "kxd-BN": "kxd-Latn-BN", - "kxd-Latn": "kxd-Latn-BN", - "kxf": "kxf-Mymr-MM", - "kxf-MM": "kxf-Mymr-MM", - "kxf-Mymr": "kxf-Mymr-MM", - "kxi": "kxi-Latn-MY", - "kxi-Latn": "kxi-Latn-MY", - "kxi-MY": "kxi-Latn-MY", - "kxj": "kxj-Latn-TD", - "kxj-Latn": "kxj-Latn-TD", - "kxj-TD": "kxj-Latn-TD", - "kxk": "kxk-Mymr-MM", - "kxk-MM": "kxk-Mymr-MM", - "kxk-Mymr": "kxk-Mymr-MM", - "kxm": "kxm-Thai-TH", - "kxm-TH": "kxm-Thai-TH", - "kxm-Thai": "kxm-Thai-TH", - "kxn": "kxn-Latn-MY", - "kxn-Latn": "kxn-Latn-MY", - "kxn-MY": "kxn-Latn-MY", - "kxo": "kxo-Latn-BR", - "kxo-BR": "kxo-Latn-BR", - "kxo-Latn": "kxo-Latn-BR", - "kxp": "kxp-Arab-PK", - "kxp-Arab": "kxp-Arab-PK", - "kxp-PK": "kxp-Arab-PK", - "kxq": "kxq-Latn-ID", - "kxq-ID": "kxq-Latn-ID", - "kxq-Latn": "kxq-Latn-ID", - "kxr": "kxr-Latn-PG", - "kxr-Latn": "kxr-Latn-PG", - "kxr-PG": "kxr-Latn-PG", - "kxt": "kxt-Latn-PG", - "kxt-Latn": "kxt-Latn-PG", - "kxt-PG": "kxt-Latn-PG", - "kxv": "kxv-Latn-IN", - "kxv-IN": "kxv-Latn-IN", - "kxv-Latn": "kxv-Latn-IN", - "kxw": "kxw-Latn-PG", - "kxw-Latn": "kxw-Latn-PG", - "kxw-PG": "kxw-Latn-PG", - "kxx": "kxx-Latn-CG", - "kxx-CG": "kxx-Latn-CG", - "kxx-Latn": "kxx-Latn-CG", - "kxy": "kxy-Latn-VN", - "kxy-Latn": "kxy-Latn-VN", - "kxy-VN": "kxy-Latn-VN", - "kxz": "kxz-Latn-PG", - "kxz-Latn": "kxz-Latn-PG", - "kxz-PG": "kxz-Latn-PG", - "ky": "ky-Cyrl-KG", - "ky-Arab": "ky-Arab-CN", - "ky-CN": "ky-Arab-CN", - "ky-Cyrl": "ky-Cyrl-KG", - "ky-Cyrl-KG": "ky-Cyrl-KG", - "ky-KG": "ky-Cyrl-KG", - "ky-Latn": "ky-Latn-TR", - "ky-TR": "ky-Latn-TR", - "kya": "kya-Latn-TZ", - "kya-Latn": "kya-Latn-TZ", - "kya-TZ": "kya-Latn-TZ", - "kyb": "kyb-Latn-PH", - "kyb-Latn": "kyb-Latn-PH", - "kyb-PH": "kyb-Latn-PH", - "kyc": "kyc-Latn-PG", - "kyc-Latn": "kyc-Latn-PG", - "kyc-PG": "kyc-Latn-PG", - "kyd": "kyd-Latn-ID", - "kyd-ID": "kyd-Latn-ID", - "kyd-Latn": "kyd-Latn-ID", - "kye": "kye-Latn-GH", - "kye-GH": "kye-Latn-GH", - "kye-Latn": "kye-Latn-GH", - "kyf": "kyf-Latn-CI", - "kyf-CI": "kyf-Latn-CI", - "kyf-Latn": "kyf-Latn-CI", - "kyg": "kyg-Latn-PG", - "kyg-Latn": "kyg-Latn-PG", - "kyg-PG": "kyg-Latn-PG", - "kyh": "kyh-Latn-US", - "kyh-Latn": "kyh-Latn-US", - "kyh-US": "kyh-Latn-US", - "kyi": "kyi-Latn-MY", - "kyi-Latn": "kyi-Latn-MY", - "kyi-MY": "kyi-Latn-MY", - "kyj": "kyj-Latn-PH", - "kyj-Latn": "kyj-Latn-PH", - "kyj-PH": "kyj-Latn-PH", - "kyk": "kyk-Latn-PH", - "kyk-Latn": "kyk-Latn-PH", - "kyk-PH": "kyk-Latn-PH", - "kyl": "kyl-Latn-US", - "kyl-Latn": "kyl-Latn-US", - "kyl-US": "kyl-Latn-US", - "kym": "kym-Latn-CF", - "kym-CF": "kym-Latn-CF", - "kym-Latn": "kym-Latn-CF", - "kyn": "kyn-Latn-PH", - "kyn-Latn": "kyn-Latn-PH", - "kyn-PH": "kyn-Latn-PH", - "kyo": "kyo-Latn-ID", - "kyo-ID": "kyo-Latn-ID", - "kyo-Latn": "kyo-Latn-ID", - "kyq": "kyq-Latn-TD", - "kyq-Latn": "kyq-Latn-TD", - "kyq-TD": "kyq-Latn-TD", - "kyr": "kyr-Latn-BR", - "kyr-BR": "kyr-Latn-BR", - "kyr-Latn": "kyr-Latn-BR", - "kys": "kys-Latn-MY", - "kys-Latn": "kys-Latn-MY", - "kys-MY": "kys-Latn-MY", - "kyt": "kyt-Latn-ID", - "kyt-ID": "kyt-Latn-ID", - "kyt-Latn": "kyt-Latn-ID", - "kyu": "kyu-Kali-MM", - "kyu-Kali": "kyu-Kali-MM", - "kyu-MM": "kyu-Kali-MM", - "kyv": "kyv-Deva-NP", - "kyv-Deva": "kyv-Deva-NP", - "kyv-NP": "kyv-Deva-NP", - "kyw": "kyw-Deva-IN", - "kyw-Deva": "kyw-Deva-IN", - "kyw-IN": "kyw-Deva-IN", - "kyx": "kyx-Latn-PG", - "kyx-Latn": "kyx-Latn-PG", - "kyx-PG": "kyx-Latn-PG", - "kyy": "kyy-Latn-PG", - "kyy-Latn": "kyy-Latn-PG", - "kyy-PG": "kyy-Latn-PG", - "kyz": "kyz-Latn-BR", - "kyz-BR": "kyz-Latn-BR", - "kyz-Latn": "kyz-Latn-BR", - "kza": "kza-Latn-BF", - "kza-BF": "kza-Latn-BF", - "kza-Latn": "kza-Latn-BF", - "kzb": "kzb-Latn-ID", - "kzb-ID": "kzb-Latn-ID", - "kzb-Latn": "kzb-Latn-ID", - "kzc": "kzc-Latn-CI", - "kzc-CI": "kzc-Latn-CI", - "kzc-Latn": "kzc-Latn-CI", - "kzd": "kzd-Latn-ID", - "kzd-ID": "kzd-Latn-ID", - "kzd-Latn": "kzd-Latn-ID", - "kze": "kze-Latn-PG", - "kze-Latn": "kze-Latn-PG", - "kze-PG": "kze-Latn-PG", - "kzf": "kzf-Latn-ID", - "kzf-ID": "kzf-Latn-ID", - "kzf-Latn": "kzf-Latn-ID", - "kzi": "kzi-Latn-MY", - "kzi-Latn": "kzi-Latn-MY", - "kzi-MY": "kzi-Latn-MY", - "kzk": "kzk-Latn-SB", - "kzk-Latn": "kzk-Latn-SB", - "kzk-SB": "kzk-Latn-SB", - "kzl": "kzl-Latn-ID", - "kzl-ID": "kzl-Latn-ID", - "kzl-Latn": "kzl-Latn-ID", - "kzm": "kzm-Latn-ID", - "kzm-ID": "kzm-Latn-ID", - "kzm-Latn": "kzm-Latn-ID", - "kzn": "kzn-Latn-MW", - "kzn-Latn": "kzn-Latn-MW", - "kzn-MW": "kzn-Latn-MW", - "kzo": "kzo-Latn-GA", - "kzo-GA": "kzo-Latn-GA", - "kzo-Latn": "kzo-Latn-GA", - "kzp": "kzp-Latn-ID", - "kzp-ID": "kzp-Latn-ID", - "kzp-Latn": "kzp-Latn-ID", - "kzr": "kzr-Latn-CM", - "kzr-CM": "kzr-Latn-CM", - "kzr-Latn": "kzr-Latn-CM", - "kzs": "kzs-Latn-MY", - "kzs-Latn": "kzs-Latn-MY", - "kzs-MY": "kzs-Latn-MY", - "kzu": "kzu-Latn-ID", - "kzu-ID": "kzu-Latn-ID", - "kzu-Latn": "kzu-Latn-ID", - "kzv": "kzv-Latn-ID", - "kzv-ID": "kzv-Latn-ID", - "kzv-Latn": "kzv-Latn-ID", - "kzw": "kzw-Latn-BR", - "kzw-BR": "kzw-Latn-BR", - "kzw-Latn": "kzw-Latn-BR", - "kzx": "kzx-Latn-ID", - "kzx-ID": "kzx-Latn-ID", - "kzx-Latn": "kzx-Latn-ID", - "kzy": "kzy-Latn-CD", - "kzy-CD": "kzy-Latn-CD", - "kzy-Latn": "kzy-Latn-CD", - "kzz": "kzz-Latn-ID", - "kzz-ID": "kzz-Latn-ID", - "kzz-Latn": "kzz-Latn-ID", - "la": "la-Latn-VA", - "la-Latn": "la-Latn-VA", - "la-VA": "la-Latn-VA", - "laa": "laa-Latn-PH", - "laa-Latn": "laa-Latn-PH", - "laa-PH": "laa-Latn-PH", - "lab": "lab-Lina-GR", - "lab-GR": "lab-Lina-GR", - "lab-Lina": "lab-Lina-GR", - "lac": "lac-Latn-MX", - "lac-Latn": "lac-Latn-MX", - "lac-MX": "lac-Latn-MX", - "lad": "lad-Hebr-IL", - "lad-Hebr": "lad-Hebr-IL", - "lad-IL": "lad-Hebr-IL", - "lae": "lae-Deva-IN", - "lae-Deva": "lae-Deva-IN", - "lae-IN": "lae-Deva-IN", - "lag": "lag-Latn-TZ", - "lag-Latn": "lag-Latn-TZ", - "lag-TZ": "lag-Latn-TZ", - "lah": "lah-Arab-PK", - "lah-Arab": "lah-Arab-PK", - "lah-PK": "lah-Arab-PK", - "lai": "lai-Latn-MW", - "lai-Latn": "lai-Latn-MW", - "lai-MW": "lai-Latn-MW", - "laj": "laj-Latn-UG", - "laj-Latn": "laj-Latn-UG", - "laj-UG": "laj-Latn-UG", - "lal": "lal-Latn-CD", - "lal-CD": "lal-Latn-CD", - "lal-Latn": "lal-Latn-CD", - "lam": "lam-Latn-ZM", - "lam-Latn": "lam-Latn-ZM", - "lam-ZM": "lam-Latn-ZM", - "lan": "lan-Latn-NG", - "lan-Latn": "lan-Latn-NG", - "lan-NG": "lan-Latn-NG", - "lap": "lap-Latn-TD", - "lap-Latn": "lap-Latn-TD", - "lap-TD": "lap-Latn-TD", - "laq": "laq-Latn-VN", - "laq-Latn": "laq-Latn-VN", - "laq-VN": "laq-Latn-VN", - "lar": "lar-Latn-GH", - "lar-GH": "lar-Latn-GH", - "lar-Latn": "lar-Latn-GH", - "las": "las-Latn-TG", - "las-Latn": "las-Latn-TG", - "las-TG": "las-Latn-TG", - "lau": "lau-Latn-ID", - "lau-ID": "lau-Latn-ID", - "lau-Latn": "lau-Latn-ID", - "law": "law-Latn-ID", - "law-ID": "law-Latn-ID", - "law-Latn": "law-Latn-ID", - "lax": "lax-Latn-IN", - "lax-IN": "lax-Latn-IN", - "lax-Latn": "lax-Latn-IN", - "laz": "laz-Latn-PG", - "laz-Latn": "laz-Latn-PG", - "laz-PG": "laz-Latn-PG", - "lb": "lb-Latn-LU", - "lb-LU": "lb-Latn-LU", - "lb-Latn": "lb-Latn-LU", - "lbb": "lbb-Latn-PG", - "lbb-Latn": "lbb-Latn-PG", - "lbb-PG": "lbb-Latn-PG", - "lbe": "lbe-Cyrl-RU", - "lbe-Cyrl": "lbe-Cyrl-RU", - "lbe-RU": "lbe-Cyrl-RU", - "lbf": "lbf-Deva-IN", - "lbf-Deva": "lbf-Deva-IN", - "lbf-IN": "lbf-Deva-IN", - "lbi": "lbi-Latn-CM", - "lbi-CM": "lbi-Latn-CM", - "lbi-Latn": "lbi-Latn-CM", - "lbj": "lbj-Tibt-IN", - "lbj-IN": "lbj-Tibt-IN", - "lbj-Tibt": "lbj-Tibt-IN", - "lbl": "lbl-Latn-PH", - "lbl-Latn": "lbl-Latn-PH", - "lbl-PH": "lbl-Latn-PH", - "lbm": "lbm-Deva-IN", - "lbm-Deva": "lbm-Deva-IN", - "lbm-IN": "lbm-Deva-IN", - "lbn": "lbn-Latn-LA", - "lbn-LA": "lbn-Latn-LA", - "lbn-Latn": "lbn-Latn-LA", - "lbo": "lbo-Laoo-LA", - "lbo-LA": "lbo-Laoo-LA", - "lbo-Laoo": "lbo-Laoo-LA", - "lbq": "lbq-Latn-PG", - "lbq-Latn": "lbq-Latn-PG", - "lbq-PG": "lbq-Latn-PG", - "lbr": "lbr-Deva-NP", - "lbr-Deva": "lbr-Deva-NP", - "lbr-NP": "lbr-Deva-NP", - "lbt": "lbt-Latn-VN", - "lbt-Latn": "lbt-Latn-VN", - "lbt-VN": "lbt-Latn-VN", - "lbu": "lbu-Latn-PG", - "lbu-Latn": "lbu-Latn-PG", - "lbu-PG": "lbu-Latn-PG", - "lbv": "lbv-Latn-PG", - "lbv-Latn": "lbv-Latn-PG", - "lbv-PG": "lbv-Latn-PG", - "lbw": "lbw-Latn-ID", - "lbw-ID": "lbw-Latn-ID", - "lbw-Latn": "lbw-Latn-ID", - "lbx": "lbx-Latn-ID", - "lbx-ID": "lbx-Latn-ID", - "lbx-Latn": "lbx-Latn-ID", - "lby": "lby-Latn-AU", - "lby-AU": "lby-Latn-AU", - "lby-Latn": "lby-Latn-AU", - "lbz": "lbz-Latn-AU", - "lbz-AU": "lbz-Latn-AU", - "lbz-Latn": "lbz-Latn-AU", - "lcc": "lcc-Latn-ID", - "lcc-ID": "lcc-Latn-ID", - "lcc-Latn": "lcc-Latn-ID", - "lcd": "lcd-Latn-ID", - "lcd-ID": "lcd-Latn-ID", - "lcd-Latn": "lcd-Latn-ID", - "lce": "lce-Latn-ID", - "lce-ID": "lce-Latn-ID", - "lce-Latn": "lce-Latn-ID", - "lcf": "lcf-Latn-ID", - "lcf-ID": "lcf-Latn-ID", - "lcf-Latn": "lcf-Latn-ID", - "lch": "lch-Latn-AO", - "lch-AO": "lch-Latn-AO", - "lch-Latn": "lch-Latn-AO", - "lcl": "lcl-Latn-ID", - "lcl-ID": "lcl-Latn-ID", - "lcl-Latn": "lcl-Latn-ID", - "lcm": "lcm-Latn-PG", - "lcm-Latn": "lcm-Latn-PG", - "lcm-PG": "lcm-Latn-PG", - "lcp": "lcp-Thai-CN", - "lcp-CN": "lcp-Thai-CN", - "lcp-Thai": "lcp-Thai-CN", - "lcp-Thai-CN": "lcp-Thai-CN", - "lcq": "lcq-Latn-ID", - "lcq-ID": "lcq-Latn-ID", - "lcq-Latn": "lcq-Latn-ID", - "lcs": "lcs-Latn-ID", - "lcs-ID": "lcs-Latn-ID", - "lcs-Latn": "lcs-Latn-ID", - "lda": "lda-Latn-CI", - "lda-CI": "lda-Latn-CI", - "lda-Latn": "lda-Latn-CI", - "ldb": "ldb-Latn-NG", - "ldb-Latn": "ldb-Latn-NG", - "ldb-NG": "ldb-Latn-NG", - "ldd": "ldd-Latn-NG", - "ldd-Latn": "ldd-Latn-NG", - "ldd-NG": "ldd-Latn-NG", - "ldg": "ldg-Latn-NG", - "ldg-Latn": "ldg-Latn-NG", - "ldg-NG": "ldg-Latn-NG", - "ldh": "ldh-Latn-NG", - "ldh-Latn": "ldh-Latn-NG", - "ldh-NG": "ldh-Latn-NG", - "ldi": "ldi-Latn-CG", - "ldi-CG": "ldi-Latn-CG", - "ldi-Latn": "ldi-Latn-CG", - "ldj": "ldj-Latn-NG", - "ldj-Latn": "ldj-Latn-NG", - "ldj-NG": "ldj-Latn-NG", - "ldk": "ldk-Latn-NG", - "ldk-Latn": "ldk-Latn-NG", - "ldk-NG": "ldk-Latn-NG", - "ldl": "ldl-Latn-NG", - "ldl-Latn": "ldl-Latn-NG", - "ldl-NG": "ldl-Latn-NG", - "ldm": "ldm-Latn-GN", - "ldm-GN": "ldm-Latn-GN", - "ldm-Latn": "ldm-Latn-GN", - "ldn": "ldn-Latn-001", - "ldn-001": "ldn-Latn-001", - "ldn-Latn": "ldn-Latn-001", - "ldo": "ldo-Latn-NG", - "ldo-Latn": "ldo-Latn-NG", - "ldo-NG": "ldo-Latn-NG", - "ldp": "ldp-Latn-NG", - "ldp-Latn": "ldp-Latn-NG", - "ldp-NG": "ldp-Latn-NG", - "ldq": "ldq-Latn-NG", - "ldq-Latn": "ldq-Latn-NG", - "ldq-NG": "ldq-Latn-NG", - "lea": "lea-Latn-CD", - "lea-CD": "lea-Latn-CD", - "lea-Latn": "lea-Latn-CD", - "leb": "leb-Latn-ZM", - "leb-Latn": "leb-Latn-ZM", - "leb-ZM": "leb-Latn-ZM", - "lec": "lec-Latn-BO", - "lec-BO": "lec-Latn-BO", - "lec-Latn": "lec-Latn-BO", - "led": "led-Latn-CD", - "led-CD": "led-Latn-CD", - "led-Latn": "led-Latn-CD", - "lee": "lee-Latn-BF", - "lee-BF": "lee-Latn-BF", - "lee-Latn": "lee-Latn-BF", - "lef": "lef-Latn-GH", - "lef-GH": "lef-Latn-GH", - "lef-Latn": "lef-Latn-GH", - "leh": "leh-Latn-ZM", - "leh-Latn": "leh-Latn-ZM", - "leh-ZM": "leh-Latn-ZM", - "lei": "lei-Latn-PG", - "lei-Latn": "lei-Latn-PG", - "lei-PG": "lei-Latn-PG", - "lej": "lej-Latn-CD", - "lej-CD": "lej-Latn-CD", - "lej-Latn": "lej-Latn-CD", - "lek": "lek-Latn-PG", - "lek-Latn": "lek-Latn-PG", - "lek-PG": "lek-Latn-PG", - "lel": "lel-Latn-CD", - "lel-CD": "lel-Latn-CD", - "lel-Latn": "lel-Latn-CD", - "lem": "lem-Latn-CM", - "lem-CM": "lem-Latn-CM", - "lem-Latn": "lem-Latn-CM", - "len": "len-Latn-HN", - "len-HN": "len-Latn-HN", - "len-Latn": "len-Latn-HN", - "leo": "leo-Latn-CM", - "leo-CM": "leo-Latn-CM", - "leo-Latn": "leo-Latn-CM", - "lep": "lep-Lepc-IN", - "lep-IN": "lep-Lepc-IN", - "lep-Lepc": "lep-Lepc-IN", - "leq": "leq-Latn-PG", - "leq-Latn": "leq-Latn-PG", - "leq-PG": "leq-Latn-PG", - "ler": "ler-Latn-PG", - "ler-Latn": "ler-Latn-PG", - "ler-PG": "ler-Latn-PG", - "les": "les-Latn-CD", - "les-CD": "les-Latn-CD", - "les-Latn": "les-Latn-CD", - "let": "let-Latn-PG", - "let-Latn": "let-Latn-PG", - "let-PG": "let-Latn-PG", - "leu": "leu-Latn-PG", - "leu-Latn": "leu-Latn-PG", - "leu-PG": "leu-Latn-PG", - "lev": "lev-Latn-ID", - "lev-ID": "lev-Latn-ID", - "lev-Latn": "lev-Latn-ID", - "lew": "lew-Latn-ID", - "lew-ID": "lew-Latn-ID", - "lew-Latn": "lew-Latn-ID", - "lex": "lex-Latn-ID", - "lex-ID": "lex-Latn-ID", - "lex-Latn": "lex-Latn-ID", - "ley": "ley-Latn-ID", - "ley-ID": "ley-Latn-ID", - "ley-Latn": "ley-Latn-ID", - "lez": "lez-Cyrl-RU", - "lez-Cyrl": "lez-Cyrl-RU", - "lez-RU": "lez-Cyrl-RU", - "lfa": "lfa-Latn-CM", - "lfa-CM": "lfa-Latn-CM", - "lfa-Latn": "lfa-Latn-CM", - "lfn": "lfn-Latn-001", - "lfn-001": "lfn-Latn-001", - "lfn-Latn": "lfn-Latn-001", - "lg": "lg-Latn-UG", - "lg-Latn": "lg-Latn-UG", - "lg-UG": "lg-Latn-UG", - "lga": "lga-Latn-SB", - "lga-Latn": "lga-Latn-SB", - "lga-SB": "lga-Latn-SB", - "lgb": "lgb-Latn-SB", - "lgb-Latn": "lgb-Latn-SB", - "lgb-SB": "lgb-Latn-SB", - "lgg": "lgg-Latn-UG", - "lgg-Latn": "lgg-Latn-UG", - "lgg-UG": "lgg-Latn-UG", - "lgh": "lgh-Latn-VN", - "lgh-Latn": "lgh-Latn-VN", - "lgh-VN": "lgh-Latn-VN", - "lgi": "lgi-Latn-ID", - "lgi-ID": "lgi-Latn-ID", - "lgi-Latn": "lgi-Latn-ID", - "lgk": "lgk-Latn-VU", - "lgk-Latn": "lgk-Latn-VU", - "lgk-VU": "lgk-Latn-VU", - "lgl": "lgl-Latn-SB", - "lgl-Latn": "lgl-Latn-SB", - "lgl-SB": "lgl-Latn-SB", - "lgm": "lgm-Latn-CD", - "lgm-CD": "lgm-Latn-CD", - "lgm-Latn": "lgm-Latn-CD", - "lgn": "lgn-Latn-ET", - "lgn-ET": "lgn-Latn-ET", - "lgn-Latn": "lgn-Latn-ET", - "lgo": "lgo-Latn-SS", - "lgo-Latn": "lgo-Latn-SS", - "lgo-SS": "lgo-Latn-SS", - "lgq": "lgq-Latn-GH", - "lgq-GH": "lgq-Latn-GH", - "lgq-Latn": "lgq-Latn-GH", - "lgr": "lgr-Latn-SB", - "lgr-Latn": "lgr-Latn-SB", - "lgr-SB": "lgr-Latn-SB", - "lgt": "lgt-Latn-PG", - "lgt-Latn": "lgt-Latn-PG", - "lgt-PG": "lgt-Latn-PG", - "lgu": "lgu-Latn-SB", - "lgu-Latn": "lgu-Latn-SB", - "lgu-SB": "lgu-Latn-SB", - "lgz": "lgz-Latn-CD", - "lgz-CD": "lgz-Latn-CD", - "lgz-Latn": "lgz-Latn-CD", - "lha": "lha-Latn-VN", - "lha-Latn": "lha-Latn-VN", - "lha-VN": "lha-Latn-VN", - "lhh": "lhh-Latn-ID", - "lhh-ID": "lhh-Latn-ID", - "lhh-Latn": "lhh-Latn-ID", - "lhi": "lhi-Latn-CN", - "lhi-CN": "lhi-Latn-CN", - "lhi-Latn": "lhi-Latn-CN", - "lhm": "lhm-Deva-NP", - "lhm-Deva": "lhm-Deva-NP", - "lhm-NP": "lhm-Deva-NP", - "lhn": "lhn-Latn-MY", - "lhn-Latn": "lhn-Latn-MY", - "lhn-MY": "lhn-Latn-MY", - "lhs": "lhs-Syrc-SY", - "lhs-SY": "lhs-Syrc-SY", - "lhs-Syrc": "lhs-Syrc-SY", - "lht": "lht-Latn-VU", - "lht-Latn": "lht-Latn-VU", - "lht-VU": "lht-Latn-VU", - "lhu": "lhu-Latn-CN", - "lhu-CN": "lhu-Latn-CN", - "lhu-Latn": "lhu-Latn-CN", - "li": "li-Latn-NL", - "li-Latn": "li-Latn-NL", - "li-NL": "li-Latn-NL", - "lia": "lia-Latn-SL", - "lia-Latn": "lia-Latn-SL", - "lia-SL": "lia-Latn-SL", - "lib": "lib-Latn-PG", - "lib-Latn": "lib-Latn-PG", - "lib-PG": "lib-Latn-PG", - "lic": "lic-Latn-CN", - "lic-CN": "lic-Latn-CN", - "lic-Latn": "lic-Latn-CN", - "lid": "lid-Latn-PG", - "lid-Latn": "lid-Latn-PG", - "lid-PG": "lid-Latn-PG", - "lie": "lie-Latn-CD", - "lie-CD": "lie-Latn-CD", - "lie-Latn": "lie-Latn-CD", - "lif": "lif-Deva-NP", - "lif-Deva": "lif-Deva-NP", - "lif-Limb": "lif-Limb-IN", - "lif-NP": "lif-Deva-NP", - "lig": "lig-Latn-GH", - "lig-GH": "lig-Latn-GH", - "lig-Latn": "lig-Latn-GH", - "lih": "lih-Latn-PG", - "lih-Latn": "lih-Latn-PG", - "lih-PG": "lih-Latn-PG", - "lij": "lij-Latn-IT", - "lij-IT": "lij-Latn-IT", - "lij-Latn": "lij-Latn-IT", - "lik": "lik-Latn-CD", - "lik-CD": "lik-Latn-CD", - "lik-Latn": "lik-Latn-CD", - "lil": "lil-Latn-CA", - "lil-CA": "lil-Latn-CA", - "lil-Latn": "lil-Latn-CA", - "lio": "lio-Latn-ID", - "lio-ID": "lio-Latn-ID", - "lio-Latn": "lio-Latn-ID", - "lip": "lip-Latn-GH", - "lip-GH": "lip-Latn-GH", - "lip-Latn": "lip-Latn-GH", - "liq": "liq-Latn-ET", - "liq-ET": "liq-Latn-ET", - "liq-Latn": "liq-Latn-ET", - "lir": "lir-Latn-LR", - "lir-LR": "lir-Latn-LR", - "lir-Latn": "lir-Latn-LR", - "lis": "lis-Lisu-CN", - "lis-CN": "lis-Lisu-CN", - "lis-Lisu": "lis-Lisu-CN", - "liu": "liu-Latn-SD", - "liu-Latn": "liu-Latn-SD", - "liu-SD": "liu-Latn-SD", - "liv": "liv-Latn-LV", - "liv-LV": "liv-Latn-LV", - "liv-Latn": "liv-Latn-LV", - "liw": "liw-Latn-ID", - "liw-ID": "liw-Latn-ID", - "liw-Latn": "liw-Latn-ID", - "lix": "lix-Latn-ID", - "lix-ID": "lix-Latn-ID", - "lix-Latn": "lix-Latn-ID", - "liy": "liy-Latn-CF", - "liy-CF": "liy-Latn-CF", - "liy-Latn": "liy-Latn-CF", - "liz": "liz-Latn-CD", - "liz-CD": "liz-Latn-CD", - "liz-Latn": "liz-Latn-CD", - "lja": "lja-Latn-AU", - "lja-AU": "lja-Latn-AU", - "lja-Latn": "lja-Latn-AU", - "lje": "lje-Latn-ID", - "lje-ID": "lje-Latn-ID", - "lje-Latn": "lje-Latn-ID", - "lji": "lji-Latn-ID", - "lji-ID": "lji-Latn-ID", - "lji-Latn": "lji-Latn-ID", - "ljl": "ljl-Latn-ID", - "ljl-ID": "ljl-Latn-ID", - "ljl-Latn": "ljl-Latn-ID", - "ljp": "ljp-Latn-ID", - "ljp-ID": "ljp-Latn-ID", - "ljp-Latn": "ljp-Latn-ID", - "ljw": "ljw-Latn-AU", - "ljw-AU": "ljw-Latn-AU", - "ljw-Latn": "ljw-Latn-AU", - "ljx": "ljx-Latn-AU", - "ljx-AU": "ljx-Latn-AU", - "ljx-Latn": "ljx-Latn-AU", - "lka": "lka-Latn-TL", - "lka-Latn": "lka-Latn-TL", - "lka-TL": "lka-Latn-TL", - "lkb": "lkb-Latn-KE", - "lkb-KE": "lkb-Latn-KE", - "lkb-Latn": "lkb-Latn-KE", - "lkc": "lkc-Latn-VN", - "lkc-Latn": "lkc-Latn-VN", - "lkc-VN": "lkc-Latn-VN", - "lkd": "lkd-Latn-BR", - "lkd-BR": "lkd-Latn-BR", - "lkd-Latn": "lkd-Latn-BR", - "lke": "lke-Latn-UG", - "lke-Latn": "lke-Latn-UG", - "lke-UG": "lke-Latn-UG", - "lkh": "lkh-Tibt-BT", - "lkh-BT": "lkh-Tibt-BT", - "lkh-Tibt": "lkh-Tibt-BT", - "lki": "lki-Arab-IR", - "lki-Arab": "lki-Arab-IR", - "lki-IR": "lki-Arab-IR", - "lkj": "lkj-Latn-MY", - "lkj-Latn": "lkj-Latn-MY", - "lkj-MY": "lkj-Latn-MY", - "lkl": "lkl-Latn-PG", - "lkl-Latn": "lkl-Latn-PG", - "lkl-PG": "lkl-Latn-PG", - "lkm": "lkm-Latn-AU", - "lkm-AU": "lkm-Latn-AU", - "lkm-Latn": "lkm-Latn-AU", - "lkn": "lkn-Latn-VU", - "lkn-Latn": "lkn-Latn-VU", - "lkn-VU": "lkn-Latn-VU", - "lko": "lko-Latn-KE", - "lko-KE": "lko-Latn-KE", - "lko-Latn": "lko-Latn-KE", - "lkr": "lkr-Latn-SS", - "lkr-Latn": "lkr-Latn-SS", - "lkr-SS": "lkr-Latn-SS", - "lks": "lks-Latn-KE", - "lks-KE": "lks-Latn-KE", - "lks-Latn": "lks-Latn-KE", - "lkt": "lkt-Latn-US", - "lkt-Latn": "lkt-Latn-US", - "lkt-US": "lkt-Latn-US", - "lku": "lku-Latn-AU", - "lku-AU": "lku-Latn-AU", - "lku-Latn": "lku-Latn-AU", - "lky": "lky-Latn-SS", - "lky-Latn": "lky-Latn-SS", - "lky-SS": "lky-Latn-SS", - "lla": "lla-Latn-NG", - "lla-Latn": "lla-Latn-NG", - "lla-NG": "lla-Latn-NG", - "llb": "llb-Latn-MZ", - "llb-Latn": "llb-Latn-MZ", - "llb-MZ": "llb-Latn-MZ", - "llc": "llc-Latn-GN", - "llc-GN": "llc-Latn-GN", - "llc-Latn": "llc-Latn-GN", - "lld": "lld-Latn-IT", - "lld-IT": "lld-Latn-IT", - "lld-Latn": "lld-Latn-IT", - "lle": "lle-Latn-PG", - "lle-Latn": "lle-Latn-PG", - "lle-PG": "lle-Latn-PG", - "llf": "llf-Latn-PG", - "llf-Latn": "llf-Latn-PG", - "llf-PG": "llf-Latn-PG", - "llg": "llg-Latn-ID", - "llg-ID": "llg-Latn-ID", - "llg-Latn": "llg-Latn-ID", - "lli": "lli-Latn-CG", - "lli-CG": "lli-Latn-CG", - "lli-Latn": "lli-Latn-CG", - "llj": "llj-Latn-AU", - "llj-AU": "llj-Latn-AU", - "llj-Latn": "llj-Latn-AU", - "llk": "llk-Latn-MY", - "llk-Latn": "llk-Latn-MY", - "llk-MY": "llk-Latn-MY", - "lll": "lll-Latn-PG", - "lll-Latn": "lll-Latn-PG", - "lll-PG": "lll-Latn-PG", - "llm": "llm-Latn-ID", - "llm-ID": "llm-Latn-ID", - "llm-Latn": "llm-Latn-ID", - "lln": "lln-Latn-TD", - "lln-Latn": "lln-Latn-TD", - "lln-TD": "lln-Latn-TD", - "llp": "llp-Latn-VU", - "llp-Latn": "llp-Latn-VU", - "llp-VU": "llp-Latn-VU", - "llq": "llq-Latn-ID", - "llq-ID": "llq-Latn-ID", - "llq-Latn": "llq-Latn-ID", - "llu": "llu-Latn-SB", - "llu-Latn": "llu-Latn-SB", - "llu-SB": "llu-Latn-SB", - "llx": "llx-Latn-FJ", - "llx-FJ": "llx-Latn-FJ", - "llx-Latn": "llx-Latn-FJ", - "lma": "lma-Latn-GN", - "lma-GN": "lma-Latn-GN", - "lma-Latn": "lma-Latn-GN", - "lmb": "lmb-Latn-VU", - "lmb-Latn": "lmb-Latn-VU", - "lmb-VU": "lmb-Latn-VU", - "lmc": "lmc-Latn-AU", - "lmc-AU": "lmc-Latn-AU", - "lmc-Latn": "lmc-Latn-AU", - "lmd": "lmd-Latn-SD", - "lmd-Latn": "lmd-Latn-SD", - "lmd-SD": "lmd-Latn-SD", - "lme": "lme-Latn-TD", - "lme-Latn": "lme-Latn-TD", - "lme-TD": "lme-Latn-TD", - "lmf": "lmf-Latn-ID", - "lmf-ID": "lmf-Latn-ID", - "lmf-Latn": "lmf-Latn-ID", - "lmg": "lmg-Latn-PG", - "lmg-Latn": "lmg-Latn-PG", - "lmg-PG": "lmg-Latn-PG", - "lmh": "lmh-Deva-NP", - "lmh-Deva": "lmh-Deva-NP", - "lmh-NP": "lmh-Deva-NP", - "lmi": "lmi-Latn-CD", - "lmi-CD": "lmi-Latn-CD", - "lmi-Latn": "lmi-Latn-CD", - "lmj": "lmj-Latn-ID", - "lmj-ID": "lmj-Latn-ID", - "lmj-Latn": "lmj-Latn-ID", - "lmk": "lmk-Latn-IN", - "lmk-IN": "lmk-Latn-IN", - "lmk-Latn": "lmk-Latn-IN", - "lml": "lml-Latn-VU", - "lml-Latn": "lml-Latn-VU", - "lml-VU": "lml-Latn-VU", - "lmn": "lmn-Telu-IN", - "lmn-IN": "lmn-Telu-IN", - "lmn-Telu": "lmn-Telu-IN", - "lmo": "lmo-Latn-IT", - "lmo-IT": "lmo-Latn-IT", - "lmo-Latn": "lmo-Latn-IT", - "lmp": "lmp-Latn-CM", - "lmp-CM": "lmp-Latn-CM", - "lmp-Latn": "lmp-Latn-CM", - "lmq": "lmq-Latn-ID", - "lmq-ID": "lmq-Latn-ID", - "lmq-Latn": "lmq-Latn-ID", - "lmr": "lmr-Latn-ID", - "lmr-ID": "lmr-Latn-ID", - "lmr-Latn": "lmr-Latn-ID", - "lmu": "lmu-Latn-VU", - "lmu-Latn": "lmu-Latn-VU", - "lmu-VU": "lmu-Latn-VU", - "lmv": "lmv-Latn-FJ", - "lmv-FJ": "lmv-Latn-FJ", - "lmv-Latn": "lmv-Latn-FJ", - "lmw": "lmw-Latn-US", - "lmw-Latn": "lmw-Latn-US", - "lmw-US": "lmw-Latn-US", - "lmx": "lmx-Latn-CM", - "lmx-CM": "lmx-Latn-CM", - "lmx-Latn": "lmx-Latn-CM", - "lmy": "lmy-Latn-ID", - "lmy-ID": "lmy-Latn-ID", - "lmy-Latn": "lmy-Latn-ID", - "ln": "ln-Latn-CD", - "ln-CD": "ln-Latn-CD", - "ln-Latn": "ln-Latn-CD", - "lna": "lna-Latn-CF", - "lna-CF": "lna-Latn-CF", - "lna-Latn": "lna-Latn-CF", - "lnb": "lnb-Latn-NA", - "lnb-Latn": "lnb-Latn-NA", - "lnb-NA": "lnb-Latn-NA", - "lnd": "lnd-Latn-ID", - "lnd-ID": "lnd-Latn-ID", - "lnd-Latn": "lnd-Latn-ID", - "lng": "lng-Latn-HU", - "lng-HU": "lng-Latn-HU", - "lng-Latn": "lng-Latn-HU", - "lnh": "lnh-Latn-MY", - "lnh-Latn": "lnh-Latn-MY", - "lnh-MY": "lnh-Latn-MY", - "lni": "lni-Latn-PG", - "lni-Latn": "lni-Latn-PG", - "lni-PG": "lni-Latn-PG", - "lnj": "lnj-Latn-AU", - "lnj-AU": "lnj-Latn-AU", - "lnj-Latn": "lnj-Latn-AU", - "lnl": "lnl-Latn-CF", - "lnl-CF": "lnl-Latn-CF", - "lnl-Latn": "lnl-Latn-CF", - "lnm": "lnm-Latn-PG", - "lnm-Latn": "lnm-Latn-PG", - "lnm-PG": "lnm-Latn-PG", - "lnn": "lnn-Latn-VU", - "lnn-Latn": "lnn-Latn-VU", - "lnn-VU": "lnn-Latn-VU", - "lns": "lns-Latn-CM", - "lns-CM": "lns-Latn-CM", - "lns-Latn": "lns-Latn-CM", - "lnu": "lnu-Latn-NG", - "lnu-Latn": "lnu-Latn-NG", - "lnu-NG": "lnu-Latn-NG", - "lnw": "lnw-Latn-AU", - "lnw-AU": "lnw-Latn-AU", - "lnw-Latn": "lnw-Latn-AU", - "lnz": "lnz-Latn-CD", - "lnz-CD": "lnz-Latn-CD", - "lnz-Latn": "lnz-Latn-CD", - "lo": "lo-Laoo-LA", - "lo-LA": "lo-Laoo-LA", - "lo-Laoo": "lo-Laoo-LA", - "loa": "loa-Latn-ID", - "loa-ID": "loa-Latn-ID", - "loa-Latn": "loa-Latn-ID", - "lob": "lob-Latn-BF", - "lob-BF": "lob-Latn-BF", - "lob-Latn": "lob-Latn-BF", - "loc": "loc-Latn-PH", - "loc-Latn": "loc-Latn-PH", - "loc-PH": "loc-Latn-PH", - "loe": "loe-Latn-ID", - "loe-ID": "loe-Latn-ID", - "loe-Latn": "loe-Latn-ID", - "log": "log-Latn-CD", - "log-CD": "log-Latn-CD", - "log-Latn": "log-Latn-CD", - "loh": "loh-Latn-SS", - "loh-Latn": "loh-Latn-SS", - "loh-SS": "loh-Latn-SS", - "loi": "loi-Latn-CI", - "loi-CI": "loi-Latn-CI", - "loi-Latn": "loi-Latn-CI", - "loj": "loj-Latn-PG", - "loj-Latn": "loj-Latn-PG", - "loj-PG": "loj-Latn-PG", - "lok": "lok-Latn-SL", - "lok-Latn": "lok-Latn-SL", - "lok-SL": "lok-Latn-SL", - "lol": "lol-Latn-CD", - "lol-CD": "lol-Latn-CD", - "lol-Latn": "lol-Latn-CD", - "lom": "lom-Latn-LR", - "lom-LR": "lom-Latn-LR", - "lom-Latn": "lom-Latn-LR", - "lon": "lon-Latn-MW", - "lon-Latn": "lon-Latn-MW", - "lon-MW": "lon-Latn-MW", - "loo": "loo-Latn-CD", - "loo-CD": "loo-Latn-CD", - "loo-Latn": "loo-Latn-CD", - "lop": "lop-Latn-NG", - "lop-Latn": "lop-Latn-NG", - "lop-NG": "lop-Latn-NG", - "loq": "loq-Latn-CD", - "loq-CD": "loq-Latn-CD", - "loq-Latn": "loq-Latn-CD", - "lor": "lor-Latn-CI", - "lor-CI": "lor-Latn-CI", - "lor-Latn": "lor-Latn-CI", - "los": "los-Latn-PG", - "los-Latn": "los-Latn-PG", - "los-PG": "los-Latn-PG", - "lot": "lot-Latn-SS", - "lot-Latn": "lot-Latn-SS", - "lot-SS": "lot-Latn-SS", - "lou": "lou-Latn-US", - "lou-Latn": "lou-Latn-US", - "lou-US": "lou-Latn-US", - "low": "low-Latn-MY", - "low-Latn": "low-Latn-MY", - "low-MY": "low-Latn-MY", - "lox": "lox-Latn-ID", - "lox-ID": "lox-Latn-ID", - "lox-Latn": "lox-Latn-ID", - "loy": "loy-Deva-NP", - "loy-Deva": "loy-Deva-NP", - "loy-NP": "loy-Deva-NP", - "loz": "loz-Latn-ZM", - "loz-Latn": "loz-Latn-ZM", - "loz-ZM": "loz-Latn-ZM", - "lpa": "lpa-Latn-VU", - "lpa-Latn": "lpa-Latn-VU", - "lpa-VU": "lpa-Latn-VU", - "lpe": "lpe-Latn-ID", - "lpe-ID": "lpe-Latn-ID", - "lpe-Latn": "lpe-Latn-ID", - "lpn": "lpn-Latn-MM", - "lpn-Latn": "lpn-Latn-MM", - "lpn-MM": "lpn-Latn-MM", - "lpo": "lpo-Plrd-CN", - "lpo-CN": "lpo-Plrd-CN", - "lpo-Plrd": "lpo-Plrd-CN", - "lpx": "lpx-Latn-SS", - "lpx-Latn": "lpx-Latn-SS", - "lpx-SS": "lpx-Latn-SS", - "lqr": "lqr-Latn-SS", - "lqr-Latn": "lqr-Latn-SS", - "lqr-SS": "lqr-Latn-SS", - "lra": "lra-Latn-MY", - "lra-Latn": "lra-Latn-MY", - "lra-MY": "lra-Latn-MY", - "lrc": "lrc-Arab-IR", - "lrc-Arab": "lrc-Arab-IR", - "lrc-IR": "lrc-Arab-IR", - "lrg": "lrg-Latn-AU", - "lrg-AU": "lrg-Latn-AU", - "lrg-Latn": "lrg-Latn-AU", - "lri": "lri-Latn-KE", - "lri-KE": "lri-Latn-KE", - "lri-Latn": "lri-Latn-KE", - "lrk": "lrk-Arab-PK", - "lrk-Arab": "lrk-Arab-PK", - "lrk-PK": "lrk-Arab-PK", - "lrl": "lrl-Arab-IR", - "lrl-Arab": "lrl-Arab-IR", - "lrl-IR": "lrl-Arab-IR", - "lrm": "lrm-Latn-KE", - "lrm-KE": "lrm-Latn-KE", - "lrm-Latn": "lrm-Latn-KE", - "lrn": "lrn-Latn-ID", - "lrn-ID": "lrn-Latn-ID", - "lrn-Latn": "lrn-Latn-ID", - "lro": "lro-Latn-SD", - "lro-Latn": "lro-Latn-SD", - "lro-SD": "lro-Latn-SD", - "lrt": "lrt-Latn-ID", - "lrt-ID": "lrt-Latn-ID", - "lrt-Latn": "lrt-Latn-ID", - "lrv": "lrv-Latn-VU", - "lrv-Latn": "lrv-Latn-VU", - "lrv-VU": "lrv-Latn-VU", - "lrz": "lrz-Latn-VU", - "lrz-Latn": "lrz-Latn-VU", - "lrz-VU": "lrz-Latn-VU", - "lsa": "lsa-Arab-IR", - "lsa-Arab": "lsa-Arab-IR", - "lsa-IR": "lsa-Arab-IR", - "lsd": "lsd-Hebr-IL", - "lsd-Hebr": "lsd-Hebr-IL", - "lsd-IL": "lsd-Hebr-IL", - "lse": "lse-Latn-CD", - "lse-CD": "lse-Latn-CD", - "lse-Latn": "lse-Latn-CD", - "lsi": "lsi-Latn-MM", - "lsi-Latn": "lsi-Latn-MM", - "lsi-MM": "lsi-Latn-MM", - "lsm": "lsm-Latn-UG", - "lsm-Latn": "lsm-Latn-UG", - "lsm-UG": "lsm-Latn-UG", - "lsr": "lsr-Latn-PG", - "lsr-Latn": "lsr-Latn-PG", - "lsr-PG": "lsr-Latn-PG", - "lss": "lss-Arab-PK", - "lss-Arab": "lss-Arab-PK", - "lss-PK": "lss-Arab-PK", - "lt": "lt-Latn-LT", - "lt-LT": "lt-Latn-LT", - "lt-Latn": "lt-Latn-LT", - "ltc": "ltc-Hant-CN", - "ltc-CN": "ltc-Hant-CN", - "ltc-Hant": "ltc-Hant-CN", - "ltg": "ltg-Latn-LV", - "ltg-LV": "ltg-Latn-LV", - "ltg-Latn": "ltg-Latn-LV", - "lth": "lth-Latn-UG", - "lth-Latn": "lth-Latn-UG", - "lth-UG": "lth-Latn-UG", - "lti": "lti-Latn-ID", - "lti-ID": "lti-Latn-ID", - "lti-Latn": "lti-Latn-ID", - "ltn": "ltn-Latn-BR", - "ltn-BR": "ltn-Latn-BR", - "ltn-Latn": "ltn-Latn-BR", - "lto": "lto-Latn-KE", - "lto-KE": "lto-Latn-KE", - "lto-Latn": "lto-Latn-KE", - "lts": "lts-Latn-KE", - "lts-KE": "lts-Latn-KE", - "lts-Latn": "lts-Latn-KE", - "ltu": "ltu-Latn-ID", - "ltu-ID": "ltu-Latn-ID", - "ltu-Latn": "ltu-Latn-ID", - "lu": "lu-Latn-CD", - "lu-CD": "lu-Latn-CD", - "lu-Latn": "lu-Latn-CD", - "lua": "lua-Latn-CD", - "lua-CD": "lua-Latn-CD", - "lua-Latn": "lua-Latn-CD", - "luc": "luc-Latn-UG", - "luc-Latn": "luc-Latn-UG", - "luc-UG": "luc-Latn-UG", - "lud": "lud-Latn-RU", - "lud-Latn": "lud-Latn-RU", - "lud-RU": "lud-Latn-RU", - "lue": "lue-Latn-ZM", - "lue-Latn": "lue-Latn-ZM", - "lue-ZM": "lue-Latn-ZM", - "luf": "luf-Latn-PG", - "luf-Latn": "luf-Latn-PG", - "luf-PG": "luf-Latn-PG", - "lui": "lui-Latn-US", - "lui-Latn": "lui-Latn-US", - "lui-US": "lui-Latn-US", - "luj": "luj-Latn-CD", - "luj-CD": "luj-Latn-CD", - "luj-Latn": "luj-Latn-CD", - "luk": "luk-Tibt-BT", - "luk-BT": "luk-Tibt-BT", - "luk-Tibt": "luk-Tibt-BT", - "lul": "lul-Latn-SS", - "lul-Latn": "lul-Latn-SS", - "lul-SS": "lul-Latn-SS", - "lum": "lum-Latn-AO", - "lum-AO": "lum-Latn-AO", - "lum-Latn": "lum-Latn-AO", - "lun": "lun-Latn-ZM", - "lun-Latn": "lun-Latn-ZM", - "lun-ZM": "lun-Latn-ZM", - "luo": "luo-Latn-KE", - "luo-KE": "luo-Latn-KE", - "luo-Latn": "luo-Latn-KE", - "lup": "lup-Latn-GA", - "lup-GA": "lup-Latn-GA", - "lup-Latn": "lup-Latn-GA", - "luq": "luq-Latn-CU", - "luq-CU": "luq-Latn-CU", - "luq-Latn": "luq-Latn-CU", - "lur": "lur-Latn-ID", - "lur-ID": "lur-Latn-ID", - "lur-Latn": "lur-Latn-ID", - "lus": "lus-Latn-IN", - "lus-IN": "lus-Latn-IN", - "lus-Latn": "lus-Latn-IN", - "lut": "lut-Latn-US", - "lut-Latn": "lut-Latn-US", - "lut-US": "lut-Latn-US", - "luu": "luu-Deva-NP", - "luu-Deva": "luu-Deva-NP", - "luu-NP": "luu-Deva-NP", - "luv": "luv-Arab-OM", - "luv-Arab": "luv-Arab-OM", - "luv-OM": "luv-Arab-OM", - "luw": "luw-Latn-CM", - "luw-CM": "luw-Latn-CM", - "luw-Latn": "luw-Latn-CM", - "luy": "luy-Latn-KE", - "luy-KE": "luy-Latn-KE", - "luy-Latn": "luy-Latn-KE", - "luz": "luz-Arab-IR", - "luz-Arab": "luz-Arab-IR", - "luz-IR": "luz-Arab-IR", - "lv": "lv-Latn-LV", - "lv-LV": "lv-Latn-LV", - "lv-Latn": "lv-Latn-LV", - "lva": "lva-Latn-TL", - "lva-Latn": "lva-Latn-TL", - "lva-TL": "lva-Latn-TL", - "lvi": "lvi-Latn-LA", - "lvi-LA": "lvi-Latn-LA", - "lvi-Latn": "lvi-Latn-LA", - "lvk": "lvk-Latn-SB", - "lvk-Latn": "lvk-Latn-SB", - "lvk-SB": "lvk-Latn-SB", - "lvl": "lvl-Latn-CD", - "lvl-CD": "lvl-Latn-CD", - "lvl-Latn": "lvl-Latn-CD", - "lvu": "lvu-Latn-ID", - "lvu-ID": "lvu-Latn-ID", - "lvu-Latn": "lvu-Latn-ID", - "lwa": "lwa-Latn-CD", - "lwa-CD": "lwa-Latn-CD", - "lwa-Latn": "lwa-Latn-CD", - "lwe": "lwe-Latn-ID", - "lwe-ID": "lwe-Latn-ID", - "lwe-Latn": "lwe-Latn-ID", - "lwg": "lwg-Latn-KE", - "lwg-KE": "lwg-Latn-KE", - "lwg-Latn": "lwg-Latn-KE", - "lwh": "lwh-Latn-VN", - "lwh-Latn": "lwh-Latn-VN", - "lwh-VN": "lwh-Latn-VN", - "lwl": "lwl-Thai-TH", - "lwl-TH": "lwl-Thai-TH", - "lwl-Thai": "lwl-Thai-TH", - "lwm": "lwm-Thai-CN", - "lwm-CN": "lwm-Thai-CN", - "lwm-Thai": "lwm-Thai-CN", - "lwo": "lwo-Latn-SS", - "lwo-Latn": "lwo-Latn-SS", - "lwo-SS": "lwo-Latn-SS", - "lwt": "lwt-Latn-ID", - "lwt-ID": "lwt-Latn-ID", - "lwt-Latn": "lwt-Latn-ID", - "lww": "lww-Latn-VU", - "lww-Latn": "lww-Latn-VU", - "lww-VU": "lww-Latn-VU", - "lxm": "lxm-Latn-PG", - "lxm-Latn": "lxm-Latn-PG", - "lxm-PG": "lxm-Latn-PG", - "lya": "lya-Tibt-BT", - "lya-BT": "lya-Tibt-BT", - "lya-Tibt": "lya-Tibt-BT", - "lyn": "lyn-Latn-ZM", - "lyn-Latn": "lyn-Latn-ZM", - "lyn-ZM": "lyn-Latn-ZM", - "lzh": "lzh-Hans-CN", - "lzh-CN": "lzh-Hans-CN", - "lzh-Hans": "lzh-Hans-CN", - "lzh-Phag": "lzh-Phag-CN", - "lzl": "lzl-Latn-VU", - "lzl-Latn": "lzl-Latn-VU", - "lzl-VU": "lzl-Latn-VU", - "lzn": "lzn-Latn-MM", - "lzn-Latn": "lzn-Latn-MM", - "lzn-MM": "lzn-Latn-MM", - "lzz": "lzz-Latn-TR", - "lzz-Latn": "lzz-Latn-TR", - "lzz-TR": "lzz-Latn-TR", - "maa": "maa-Latn-MX", - "maa-Latn": "maa-Latn-MX", - "maa-MX": "maa-Latn-MX", - "mab": "mab-Latn-MX", - "mab-Latn": "mab-Latn-MX", - "mab-MX": "mab-Latn-MX", - "mad": "mad-Latn-ID", - "mad-ID": "mad-Latn-ID", - "mad-Latn": "mad-Latn-ID", - "mae": "mae-Latn-NG", - "mae-Latn": "mae-Latn-NG", - "mae-NG": "mae-Latn-NG", - "maf": "maf-Latn-CM", - "maf-CM": "maf-Latn-CM", - "maf-Latn": "maf-Latn-CM", - "mag": "mag-Deva-IN", - "mag-Deva": "mag-Deva-IN", - "mag-IN": "mag-Deva-IN", - "mai": "mai-Deva-IN", - "mai-Deva": "mai-Deva-IN", - "mai-IN": "mai-Deva-IN", - "mai-Tirh": "mai-Tirh-IN", - "maj": "maj-Latn-MX", - "maj-Latn": "maj-Latn-MX", - "maj-MX": "maj-Latn-MX", - "mak": "mak-Latn-ID", - "mak-ID": "mak-Latn-ID", - "mak-Latn": "mak-Latn-ID", - "mak-Maka": "mak-Maka-ID", - "mam": "mam-Latn-GT", - "mam-GT": "mam-Latn-GT", - "mam-Latn": "mam-Latn-GT", - "man": "man-Latn-GM", - "man-GM": "man-Latn-GM", - "man-GN": "man-Nkoo-GN", - "man-Latn": "man-Latn-GM", - "man-Nkoo": "man-Nkoo-GN", - "maq": "maq-Latn-MX", - "maq-Latn": "maq-Latn-MX", - "maq-MX": "maq-Latn-MX", - "mas": "mas-Latn-KE", - "mas-KE": "mas-Latn-KE", - "mas-Latn": "mas-Latn-KE", - "mat": "mat-Latn-MX", - "mat-Latn": "mat-Latn-MX", - "mat-MX": "mat-Latn-MX", - "mau": "mau-Latn-MX", - "mau-Latn": "mau-Latn-MX", - "mau-MX": "mau-Latn-MX", - "mav": "mav-Latn-BR", - "mav-BR": "mav-Latn-BR", - "mav-Latn": "mav-Latn-BR", - "maw": "maw-Latn-GH", - "maw-GH": "maw-Latn-GH", - "maw-Latn": "maw-Latn-GH", - "max": "max-Latn-ID", - "max-ID": "max-Latn-ID", - "max-Latn": "max-Latn-ID", - "maz": "maz-Latn-MX", - "maz-Latn": "maz-Latn-MX", - "maz-MX": "maz-Latn-MX", - "mba": "mba-Latn-PH", - "mba-Latn": "mba-Latn-PH", - "mba-PH": "mba-Latn-PH", - "mbb": "mbb-Latn-PH", - "mbb-Latn": "mbb-Latn-PH", - "mbb-PH": "mbb-Latn-PH", - "mbc": "mbc-Latn-BR", - "mbc-BR": "mbc-Latn-BR", - "mbc-Latn": "mbc-Latn-BR", - "mbd": "mbd-Latn-PH", - "mbd-Latn": "mbd-Latn-PH", - "mbd-PH": "mbd-Latn-PH", - "mbf": "mbf-Latn-SG", - "mbf-Latn": "mbf-Latn-SG", - "mbf-SG": "mbf-Latn-SG", - "mbh": "mbh-Latn-PG", - "mbh-Latn": "mbh-Latn-PG", - "mbh-PG": "mbh-Latn-PG", - "mbi": "mbi-Latn-PH", - "mbi-Latn": "mbi-Latn-PH", - "mbi-PH": "mbi-Latn-PH", - "mbj": "mbj-Latn-BR", - "mbj-BR": "mbj-Latn-BR", - "mbj-Latn": "mbj-Latn-BR", - "mbk": "mbk-Latn-PG", - "mbk-Latn": "mbk-Latn-PG", - "mbk-PG": "mbk-Latn-PG", - "mbl": "mbl-Latn-BR", - "mbl-BR": "mbl-Latn-BR", - "mbl-Latn": "mbl-Latn-BR", - "mbm": "mbm-Latn-CG", - "mbm-CG": "mbm-Latn-CG", - "mbm-Latn": "mbm-Latn-CG", - "mbn": "mbn-Latn-CO", - "mbn-CO": "mbn-Latn-CO", - "mbn-Latn": "mbn-Latn-CO", - "mbo": "mbo-Latn-CM", - "mbo-CM": "mbo-Latn-CM", - "mbo-Latn": "mbo-Latn-CM", - "mbp": "mbp-Latn-CO", - "mbp-CO": "mbp-Latn-CO", - "mbp-Latn": "mbp-Latn-CO", - "mbq": "mbq-Latn-PG", - "mbq-Latn": "mbq-Latn-PG", - "mbq-PG": "mbq-Latn-PG", - "mbr": "mbr-Latn-CO", - "mbr-CO": "mbr-Latn-CO", - "mbr-Latn": "mbr-Latn-CO", - "mbs": "mbs-Latn-PH", - "mbs-Latn": "mbs-Latn-PH", - "mbs-PH": "mbs-Latn-PH", - "mbt": "mbt-Latn-PH", - "mbt-Latn": "mbt-Latn-PH", - "mbt-PH": "mbt-Latn-PH", - "mbu": "mbu-Latn-NG", - "mbu-Latn": "mbu-Latn-NG", - "mbu-NG": "mbu-Latn-NG", - "mbv": "mbv-Latn-GN", - "mbv-GN": "mbv-Latn-GN", - "mbv-Latn": "mbv-Latn-GN", - "mbw": "mbw-Latn-PG", - "mbw-Latn": "mbw-Latn-PG", - "mbw-PG": "mbw-Latn-PG", - "mbx": "mbx-Latn-PG", - "mbx-Latn": "mbx-Latn-PG", - "mbx-PG": "mbx-Latn-PG", - "mby": "mby-Arab-PK", - "mby-Arab": "mby-Arab-PK", - "mby-PK": "mby-Arab-PK", - "mbz": "mbz-Latn-MX", - "mbz-Latn": "mbz-Latn-MX", - "mbz-MX": "mbz-Latn-MX", - "mca": "mca-Latn-PY", - "mca-Latn": "mca-Latn-PY", - "mca-PY": "mca-Latn-PY", - "mcb": "mcb-Latn-PE", - "mcb-Latn": "mcb-Latn-PE", - "mcb-PE": "mcb-Latn-PE", - "mcc": "mcc-Latn-PG", - "mcc-Latn": "mcc-Latn-PG", - "mcc-PG": "mcc-Latn-PG", - "mcd": "mcd-Latn-PE", - "mcd-Latn": "mcd-Latn-PE", - "mcd-PE": "mcd-Latn-PE", - "mce": "mce-Latn-MX", - "mce-Latn": "mce-Latn-MX", - "mce-MX": "mce-Latn-MX", - "mcf": "mcf-Latn-PE", - "mcf-Latn": "mcf-Latn-PE", - "mcf-PE": "mcf-Latn-PE", - "mcg": "mcg-Latn-VE", - "mcg-Latn": "mcg-Latn-VE", - "mcg-VE": "mcg-Latn-VE", - "mch": "mch-Latn-VE", - "mch-Latn": "mch-Latn-VE", - "mch-VE": "mch-Latn-VE", - "mci": "mci-Latn-PG", - "mci-Latn": "mci-Latn-PG", - "mci-PG": "mci-Latn-PG", - "mcj": "mcj-Latn-NG", - "mcj-Latn": "mcj-Latn-NG", - "mcj-NG": "mcj-Latn-NG", - "mck": "mck-Latn-AO", - "mck-AO": "mck-Latn-AO", - "mck-Latn": "mck-Latn-AO", - "mcl": "mcl-Latn-CO", - "mcl-CO": "mcl-Latn-CO", - "mcl-Latn": "mcl-Latn-CO", - "mcm": "mcm-Latn-MY", - "mcm-Latn": "mcm-Latn-MY", - "mcm-MY": "mcm-Latn-MY", - "mcn": "mcn-Latn-TD", - "mcn-Latn": "mcn-Latn-TD", - "mcn-TD": "mcn-Latn-TD", - "mco": "mco-Latn-MX", - "mco-Latn": "mco-Latn-MX", - "mco-MX": "mco-Latn-MX", - "mcp": "mcp-Latn-CM", - "mcp-CM": "mcp-Latn-CM", - "mcp-Latn": "mcp-Latn-CM", - "mcq": "mcq-Latn-PG", - "mcq-Latn": "mcq-Latn-PG", - "mcq-PG": "mcq-Latn-PG", - "mcr": "mcr-Latn-PG", - "mcr-Latn": "mcr-Latn-PG", - "mcr-PG": "mcr-Latn-PG", - "mcs": "mcs-Latn-CM", - "mcs-CM": "mcs-Latn-CM", - "mcs-Latn": "mcs-Latn-CM", - "mct": "mct-Latn-CM", - "mct-CM": "mct-Latn-CM", - "mct-Latn": "mct-Latn-CM", - "mcu": "mcu-Latn-CM", - "mcu-CM": "mcu-Latn-CM", - "mcu-Latn": "mcu-Latn-CM", - "mcv": "mcv-Latn-PG", - "mcv-Latn": "mcv-Latn-PG", - "mcv-PG": "mcv-Latn-PG", - "mcw": "mcw-Latn-TD", - "mcw-Latn": "mcw-Latn-TD", - "mcw-TD": "mcw-Latn-TD", - "mcx": "mcx-Latn-CF", - "mcx-CF": "mcx-Latn-CF", - "mcx-Latn": "mcx-Latn-CF", - "mcy": "mcy-Latn-PG", - "mcy-Latn": "mcy-Latn-PG", - "mcy-PG": "mcy-Latn-PG", - "mcz": "mcz-Latn-PG", - "mcz-Latn": "mcz-Latn-PG", - "mcz-PG": "mcz-Latn-PG", - "mda": "mda-Latn-NG", - "mda-Latn": "mda-Latn-NG", - "mda-NG": "mda-Latn-NG", - "mdb": "mdb-Latn-PG", - "mdb-Latn": "mdb-Latn-PG", - "mdb-PG": "mdb-Latn-PG", - "mdc": "mdc-Latn-PG", - "mdc-Latn": "mdc-Latn-PG", - "mdc-PG": "mdc-Latn-PG", - "mdd": "mdd-Latn-CM", - "mdd-CM": "mdd-Latn-CM", - "mdd-Latn": "mdd-Latn-CM", - "mde": "mde-Arab-TD", - "mde-Arab": "mde-Arab-TD", - "mde-TD": "mde-Arab-TD", - "mdf": "mdf-Cyrl-RU", - "mdf-Cyrl": "mdf-Cyrl-RU", - "mdf-RU": "mdf-Cyrl-RU", - "mdg": "mdg-Latn-TD", - "mdg-Latn": "mdg-Latn-TD", - "mdg-TD": "mdg-Latn-TD", - "mdh": "mdh-Latn-PH", - "mdh-Latn": "mdh-Latn-PH", - "mdh-PH": "mdh-Latn-PH", - "mdi": "mdi-Latn-CD", - "mdi-CD": "mdi-Latn-CD", - "mdi-Latn": "mdi-Latn-CD", - "mdj": "mdj-Latn-CD", - "mdj-CD": "mdj-Latn-CD", - "mdj-Latn": "mdj-Latn-CD", - "mdk": "mdk-Latn-CD", - "mdk-CD": "mdk-Latn-CD", - "mdk-Latn": "mdk-Latn-CD", - "mdm": "mdm-Latn-CD", - "mdm-CD": "mdm-Latn-CD", - "mdm-Latn": "mdm-Latn-CD", - "mdn": "mdn-Latn-CF", - "mdn-CF": "mdn-Latn-CF", - "mdn-Latn": "mdn-Latn-CF", - "mdp": "mdp-Latn-CD", - "mdp-CD": "mdp-Latn-CD", - "mdp-Latn": "mdp-Latn-CD", - "mdq": "mdq-Latn-CD", - "mdq-CD": "mdq-Latn-CD", - "mdq-Latn": "mdq-Latn-CD", - "mdr": "mdr-Latn-ID", - "mdr-ID": "mdr-Latn-ID", - "mdr-Latn": "mdr-Latn-ID", - "mds": "mds-Latn-PG", - "mds-Latn": "mds-Latn-PG", - "mds-PG": "mds-Latn-PG", - "mdt": "mdt-Latn-CG", - "mdt-CG": "mdt-Latn-CG", - "mdt-Latn": "mdt-Latn-CG", - "mdu": "mdu-Latn-CG", - "mdu-CG": "mdu-Latn-CG", - "mdu-Latn": "mdu-Latn-CG", - "mdv": "mdv-Latn-MX", - "mdv-Latn": "mdv-Latn-MX", - "mdv-MX": "mdv-Latn-MX", - "mdw": "mdw-Latn-CG", - "mdw-CG": "mdw-Latn-CG", - "mdw-Latn": "mdw-Latn-CG", - "mdx": "mdx-Ethi-ET", - "mdx-ET": "mdx-Ethi-ET", - "mdx-Ethi": "mdx-Ethi-ET", - "mdy": "mdy-Ethi-ET", - "mdy-ET": "mdy-Ethi-ET", - "mdy-Ethi": "mdy-Ethi-ET", - "mdz": "mdz-Latn-BR", - "mdz-BR": "mdz-Latn-BR", - "mdz-Latn": "mdz-Latn-BR", - "mea": "mea-Latn-CM", - "mea-CM": "mea-Latn-CM", - "mea-Latn": "mea-Latn-CM", - "meb": "meb-Latn-PG", - "meb-Latn": "meb-Latn-PG", - "meb-PG": "meb-Latn-PG", - "mec": "mec-Latn-AU", - "mec-AU": "mec-Latn-AU", - "mec-Latn": "mec-Latn-AU", - "med": "med-Latn-PG", - "med-Latn": "med-Latn-PG", - "med-PG": "med-Latn-PG", - "mee": "mee-Latn-PG", - "mee-Latn": "mee-Latn-PG", - "mee-PG": "mee-Latn-PG", - "meh": "meh-Latn-MX", - "meh-Latn": "meh-Latn-MX", - "meh-MX": "meh-Latn-MX", - "mej": "mej-Latn-ID", - "mej-ID": "mej-Latn-ID", - "mej-Latn": "mej-Latn-ID", - "mek": "mek-Latn-PG", - "mek-Latn": "mek-Latn-PG", - "mek-PG": "mek-Latn-PG", - "mel": "mel-Latn-MY", - "mel-Latn": "mel-Latn-MY", - "mel-MY": "mel-Latn-MY", - "mem": "mem-Latn-AU", - "mem-AU": "mem-Latn-AU", - "mem-Latn": "mem-Latn-AU", - "men": "men-Latn-SL", - "men-Latn": "men-Latn-SL", - "men-Mend": "men-Mend-SL", - "men-SL": "men-Latn-SL", - "meo": "meo-Latn-MY", - "meo-Latn": "meo-Latn-MY", - "meo-MY": "meo-Latn-MY", - "mep": "mep-Latn-AU", - "mep-AU": "mep-Latn-AU", - "mep-Latn": "mep-Latn-AU", - "meq": "meq-Latn-CM", - "meq-CM": "meq-Latn-CM", - "meq-Latn": "meq-Latn-CM", - "mer": "mer-Latn-KE", - "mer-KE": "mer-Latn-KE", - "mer-Latn": "mer-Latn-KE", - "mes": "mes-Latn-TD", - "mes-Latn": "mes-Latn-TD", - "mes-TD": "mes-Latn-TD", - "met": "met-Latn-PG", - "met-Latn": "met-Latn-PG", - "met-PG": "met-Latn-PG", - "meu": "meu-Latn-PG", - "meu-Latn": "meu-Latn-PG", - "meu-PG": "meu-Latn-PG", - "mev": "mev-Latn-LR", - "mev-LR": "mev-Latn-LR", - "mev-Latn": "mev-Latn-LR", - "mew": "mew-Latn-NG", - "mew-Latn": "mew-Latn-NG", - "mew-NG": "mew-Latn-NG", - "mey": "mey-Latn-SN", - "mey-Latn": "mey-Latn-SN", - "mey-SN": "mey-Latn-SN", - "mez": "mez-Latn-US", - "mez-Latn": "mez-Latn-US", - "mez-US": "mez-Latn-US", - "mfa": "mfa-Arab-TH", - "mfa-Arab": "mfa-Arab-TH", - "mfa-Arab-TH": "mfa-Arab-TH", - "mfa-TH": "mfa-Arab-TH", - "mfb": "mfb-Latn-ID", - "mfb-ID": "mfb-Latn-ID", - "mfb-Latn": "mfb-Latn-ID", - "mfc": "mfc-Latn-CD", - "mfc-CD": "mfc-Latn-CD", - "mfc-Latn": "mfc-Latn-CD", - "mfd": "mfd-Latn-CM", - "mfd-CM": "mfd-Latn-CM", - "mfd-Latn": "mfd-Latn-CM", - "mfe": "mfe-Latn-MU", - "mfe-Latn": "mfe-Latn-MU", - "mfe-MU": "mfe-Latn-MU", - "mff": "mff-Latn-CM", - "mff-CM": "mff-Latn-CM", - "mff-Latn": "mff-Latn-CM", - "mfg": "mfg-Latn-GN", - "mfg-GN": "mfg-Latn-GN", - "mfg-Latn": "mfg-Latn-GN", - "mfh": "mfh-Latn-CM", - "mfh-CM": "mfh-Latn-CM", - "mfh-Latn": "mfh-Latn-CM", - "mfi": "mfi-Arab-CM", - "mfi-Arab": "mfi-Arab-CM", - "mfi-CM": "mfi-Arab-CM", - "mfj": "mfj-Latn-CM", - "mfj-CM": "mfj-Latn-CM", - "mfj-Latn": "mfj-Latn-CM", - "mfk": "mfk-Latn-CM", - "mfk-CM": "mfk-Latn-CM", - "mfk-Latn": "mfk-Latn-CM", - "mfl": "mfl-Latn-NG", - "mfl-Latn": "mfl-Latn-NG", - "mfl-NG": "mfl-Latn-NG", - "mfm": "mfm-Latn-NG", - "mfm-Latn": "mfm-Latn-NG", - "mfm-NG": "mfm-Latn-NG", - "mfn": "mfn-Latn-NG", - "mfn-Latn": "mfn-Latn-NG", - "mfn-NG": "mfn-Latn-NG", - "mfo": "mfo-Latn-NG", - "mfo-Latn": "mfo-Latn-NG", - "mfo-NG": "mfo-Latn-NG", - "mfp": "mfp-Latn-ID", - "mfp-ID": "mfp-Latn-ID", - "mfp-Latn": "mfp-Latn-ID", - "mfq": "mfq-Latn-TG", - "mfq-Latn": "mfq-Latn-TG", - "mfq-TG": "mfq-Latn-TG", - "mfr": "mfr-Latn-AU", - "mfr-AU": "mfr-Latn-AU", - "mfr-Latn": "mfr-Latn-AU", - "mft": "mft-Latn-PG", - "mft-Latn": "mft-Latn-PG", - "mft-PG": "mft-Latn-PG", - "mfu": "mfu-Latn-AO", - "mfu-AO": "mfu-Latn-AO", - "mfu-Latn": "mfu-Latn-AO", - "mfv": "mfv-Latn-SN", - "mfv-Latn": "mfv-Latn-SN", - "mfv-SN": "mfv-Latn-SN", - "mfw": "mfw-Latn-PG", - "mfw-Latn": "mfw-Latn-PG", - "mfw-PG": "mfw-Latn-PG", - "mfx": "mfx-Latn-ET", - "mfx-ET": "mfx-Latn-ET", - "mfx-Latn": "mfx-Latn-ET", - "mfy": "mfy-Latn-MX", - "mfy-Latn": "mfy-Latn-MX", - "mfy-MX": "mfy-Latn-MX", - "mfz": "mfz-Latn-SS", - "mfz-Latn": "mfz-Latn-SS", - "mfz-SS": "mfz-Latn-SS", - "mg": "mg-Latn-MG", - "mg-Latn": "mg-Latn-MG", - "mg-MG": "mg-Latn-MG", - "mga": "mga-Latg-IE", - "mga-IE": "mga-Latg-IE", - "mga-Latg": "mga-Latg-IE", - "mgb": "mgb-Latn-TD", - "mgb-Latn": "mgb-Latn-TD", - "mgb-TD": "mgb-Latn-TD", - "mgc": "mgc-Latn-SS", - "mgc-Latn": "mgc-Latn-SS", - "mgc-SS": "mgc-Latn-SS", - "mgd": "mgd-Latn-SS", - "mgd-Latn": "mgd-Latn-SS", - "mgd-SS": "mgd-Latn-SS", - "mge": "mge-Latn-TD", - "mge-Latn": "mge-Latn-TD", - "mge-TD": "mge-Latn-TD", - "mgf": "mgf-Latn-ID", - "mgf-ID": "mgf-Latn-ID", - "mgf-Latn": "mgf-Latn-ID", - "mgg": "mgg-Latn-CM", - "mgg-CM": "mgg-Latn-CM", - "mgg-Latn": "mgg-Latn-CM", - "mgh": "mgh-Latn-MZ", - "mgh-Latn": "mgh-Latn-MZ", - "mgh-MZ": "mgh-Latn-MZ", - "mgi": "mgi-Latn-NG", - "mgi-Latn": "mgi-Latn-NG", - "mgi-NG": "mgi-Latn-NG", - "mgj": "mgj-Latn-NG", - "mgj-Latn": "mgj-Latn-NG", - "mgj-NG": "mgj-Latn-NG", - "mgk": "mgk-Latn-ID", - "mgk-ID": "mgk-Latn-ID", - "mgk-Latn": "mgk-Latn-ID", - "mgl": "mgl-Latn-PG", - "mgl-Latn": "mgl-Latn-PG", - "mgl-PG": "mgl-Latn-PG", - "mgm": "mgm-Latn-TL", - "mgm-Latn": "mgm-Latn-TL", - "mgm-TL": "mgm-Latn-TL", - "mgn": "mgn-Latn-CF", - "mgn-CF": "mgn-Latn-CF", - "mgn-Latn": "mgn-Latn-CF", - "mgo": "mgo-Latn-CM", - "mgo-CM": "mgo-Latn-CM", - "mgo-Latn": "mgo-Latn-CM", - "mgp": "mgp-Deva-NP", - "mgp-Deva": "mgp-Deva-NP", - "mgp-NP": "mgp-Deva-NP", - "mgq": "mgq-Latn-TZ", - "mgq-Latn": "mgq-Latn-TZ", - "mgq-TZ": "mgq-Latn-TZ", - "mgr": "mgr-Latn-ZM", - "mgr-Latn": "mgr-Latn-ZM", - "mgr-ZM": "mgr-Latn-ZM", - "mgs": "mgs-Latn-TZ", - "mgs-Latn": "mgs-Latn-TZ", - "mgs-TZ": "mgs-Latn-TZ", - "mgt": "mgt-Latn-PG", - "mgt-Latn": "mgt-Latn-PG", - "mgt-PG": "mgt-Latn-PG", - "mgu": "mgu-Latn-PG", - "mgu-Latn": "mgu-Latn-PG", - "mgu-PG": "mgu-Latn-PG", - "mgv": "mgv-Latn-TZ", - "mgv-Latn": "mgv-Latn-TZ", - "mgv-TZ": "mgv-Latn-TZ", - "mgw": "mgw-Latn-TZ", - "mgw-Latn": "mgw-Latn-TZ", - "mgw-TZ": "mgw-Latn-TZ", - "mgy": "mgy-Latn-TZ", - "mgy-Latn": "mgy-Latn-TZ", - "mgy-TZ": "mgy-Latn-TZ", - "mgz": "mgz-Latn-TZ", - "mgz-Latn": "mgz-Latn-TZ", - "mgz-TZ": "mgz-Latn-TZ", - "mh": "mh-Latn-MH", - "mh-Latn": "mh-Latn-MH", - "mh-MH": "mh-Latn-MH", - "mhb": "mhb-Latn-GA", - "mhb-GA": "mhb-Latn-GA", - "mhb-Latn": "mhb-Latn-GA", - "mhc": "mhc-Latn-MX", - "mhc-Latn": "mhc-Latn-MX", - "mhc-MX": "mhc-Latn-MX", - "mhd": "mhd-Latn-TZ", - "mhd-Latn": "mhd-Latn-TZ", - "mhd-TZ": "mhd-Latn-TZ", - "mhe": "mhe-Latn-MY", - "mhe-Latn": "mhe-Latn-MY", - "mhe-MY": "mhe-Latn-MY", - "mhf": "mhf-Latn-PG", - "mhf-Latn": "mhf-Latn-PG", - "mhf-PG": "mhf-Latn-PG", - "mhg": "mhg-Latn-AU", - "mhg-AU": "mhg-Latn-AU", - "mhg-Latn": "mhg-Latn-AU", - "mhi": "mhi-Latn-UG", - "mhi-Latn": "mhi-Latn-UG", - "mhi-UG": "mhi-Latn-UG", - "mhj": "mhj-Arab-AF", - "mhj-AF": "mhj-Arab-AF", - "mhj-Arab": "mhj-Arab-AF", - "mhk": "mhk-Latn-CM", - "mhk-CM": "mhk-Latn-CM", - "mhk-Latn": "mhk-Latn-CM", - "mhl": "mhl-Latn-PG", - "mhl-Latn": "mhl-Latn-PG", - "mhl-PG": "mhl-Latn-PG", - "mhm": "mhm-Latn-MZ", - "mhm-Latn": "mhm-Latn-MZ", - "mhm-MZ": "mhm-Latn-MZ", - "mhn": "mhn-Latn-IT", - "mhn-IT": "mhn-Latn-IT", - "mhn-Latn": "mhn-Latn-IT", - "mho": "mho-Latn-ZM", - "mho-Latn": "mho-Latn-ZM", - "mho-ZM": "mho-Latn-ZM", - "mhp": "mhp-Latn-ID", - "mhp-ID": "mhp-Latn-ID", - "mhp-Latn": "mhp-Latn-ID", - "mhq": "mhq-Latn-US", - "mhq-Latn": "mhq-Latn-US", - "mhq-US": "mhq-Latn-US", - "mhs": "mhs-Latn-ID", - "mhs-ID": "mhs-Latn-ID", - "mhs-Latn": "mhs-Latn-ID", - "mht": "mht-Latn-VE", - "mht-Latn": "mht-Latn-VE", - "mht-VE": "mht-Latn-VE", - "mhu": "mhu-Latn-IN", - "mhu-IN": "mhu-Latn-IN", - "mhu-Latn": "mhu-Latn-IN", - "mhw": "mhw-Latn-BW", - "mhw-BW": "mhw-Latn-BW", - "mhw-Latn": "mhw-Latn-BW", - "mhx": "mhx-Latn-MM", - "mhx-Latn": "mhx-Latn-MM", - "mhx-MM": "mhx-Latn-MM", - "mhy": "mhy-Latn-ID", - "mhy-ID": "mhy-Latn-ID", - "mhy-Latn": "mhy-Latn-ID", - "mhz": "mhz-Latn-ID", - "mhz-ID": "mhz-Latn-ID", - "mhz-Latn": "mhz-Latn-ID", - "mi": "mi-Latn-NZ", - "mi-Latn": "mi-Latn-NZ", - "mi-NZ": "mi-Latn-NZ", - "mia": "mia-Latn-US", - "mia-Latn": "mia-Latn-US", - "mia-US": "mia-Latn-US", - "mib": "mib-Latn-MX", - "mib-Latn": "mib-Latn-MX", - "mib-MX": "mib-Latn-MX", - "mic": "mic-Latn-CA", - "mic-CA": "mic-Latn-CA", - "mic-Latn": "mic-Latn-CA", - "mid": "mid-Mand-IQ", - "mid-IQ": "mid-Mand-IQ", - "mid-Mand": "mid-Mand-IQ", - "mie": "mie-Latn-MX", - "mie-Latn": "mie-Latn-MX", - "mie-MX": "mie-Latn-MX", - "mif": "mif-Latn-CM", - "mif-CM": "mif-Latn-CM", - "mif-Latn": "mif-Latn-CM", - "mig": "mig-Latn-MX", - "mig-Latn": "mig-Latn-MX", - "mig-MX": "mig-Latn-MX", - "mih": "mih-Latn-MX", - "mih-Latn": "mih-Latn-MX", - "mih-MX": "mih-Latn-MX", - "mii": "mii-Latn-MX", - "mii-Latn": "mii-Latn-MX", - "mii-MX": "mii-Latn-MX", - "mij": "mij-Latn-CM", - "mij-CM": "mij-Latn-CM", - "mij-Latn": "mij-Latn-CM", - "mik": "mik-Latn-US", - "mik-Latn": "mik-Latn-US", - "mik-US": "mik-Latn-US", - "mil": "mil-Latn-MX", - "mil-Latn": "mil-Latn-MX", - "mil-MX": "mil-Latn-MX", - "mim": "mim-Latn-MX", - "mim-Latn": "mim-Latn-MX", - "mim-MX": "mim-Latn-MX", - "min": "min-Latn-ID", - "min-ID": "min-Latn-ID", - "min-Latn": "min-Latn-ID", - "mio": "mio-Latn-MX", - "mio-Latn": "mio-Latn-MX", - "mio-MX": "mio-Latn-MX", - "mip": "mip-Latn-MX", - "mip-Latn": "mip-Latn-MX", - "mip-MX": "mip-Latn-MX", - "miq": "miq-Latn-NI", - "miq-Latn": "miq-Latn-NI", - "miq-NI": "miq-Latn-NI", - "mir": "mir-Latn-MX", - "mir-Latn": "mir-Latn-MX", - "mir-MX": "mir-Latn-MX", - "mit": "mit-Latn-MX", - "mit-Latn": "mit-Latn-MX", - "mit-MX": "mit-Latn-MX", - "miu": "miu-Latn-MX", - "miu-Latn": "miu-Latn-MX", - "miu-MX": "miu-Latn-MX", - "miw": "miw-Latn-PG", - "miw-Latn": "miw-Latn-PG", - "miw-PG": "miw-Latn-PG", - "mix": "mix-Latn-MX", - "mix-Latn": "mix-Latn-MX", - "mix-MX": "mix-Latn-MX", - "miy": "miy-Latn-MX", - "miy-Latn": "miy-Latn-MX", - "miy-MX": "miy-Latn-MX", - "miz": "miz-Latn-MX", - "miz-Latn": "miz-Latn-MX", - "miz-MX": "miz-Latn-MX", - "mjb": "mjb-Latn-TL", - "mjb-Latn": "mjb-Latn-TL", - "mjb-TL": "mjb-Latn-TL", - "mjc": "mjc-Latn-MX", - "mjc-Latn": "mjc-Latn-MX", - "mjc-MX": "mjc-Latn-MX", - "mjd": "mjd-Latn-US", - "mjd-Latn": "mjd-Latn-US", - "mjd-US": "mjd-Latn-US", - "mje": "mje-Latn-TD", - "mje-Latn": "mje-Latn-TD", - "mje-TD": "mje-Latn-TD", - "mjg": "mjg-Latn-CN", - "mjg-CN": "mjg-Latn-CN", - "mjg-Latn": "mjg-Latn-CN", - "mjh": "mjh-Latn-TZ", - "mjh-Latn": "mjh-Latn-TZ", - "mjh-TZ": "mjh-Latn-TZ", - "mji": "mji-Latn-CN", - "mji-CN": "mji-Latn-CN", - "mji-Latn": "mji-Latn-CN", - "mjj": "mjj-Latn-PG", - "mjj-Latn": "mjj-Latn-PG", - "mjj-PG": "mjj-Latn-PG", - "mjk": "mjk-Latn-PG", - "mjk-Latn": "mjk-Latn-PG", - "mjk-PG": "mjk-Latn-PG", - "mjl": "mjl-Deva-IN", - "mjl-Deva": "mjl-Deva-IN", - "mjl-IN": "mjl-Deva-IN", - "mjm": "mjm-Latn-PG", - "mjm-Latn": "mjm-Latn-PG", - "mjm-PG": "mjm-Latn-PG", - "mjn": "mjn-Latn-PG", - "mjn-Latn": "mjn-Latn-PG", - "mjn-PG": "mjn-Latn-PG", - "mjq": "mjq-Mlym-IN", - "mjq-IN": "mjq-Mlym-IN", - "mjq-Mlym": "mjq-Mlym-IN", - "mjr": "mjr-Mlym-IN", - "mjr-IN": "mjr-Mlym-IN", - "mjr-Mlym": "mjr-Mlym-IN", - "mjs": "mjs-Latn-NG", - "mjs-Latn": "mjs-Latn-NG", - "mjs-NG": "mjs-Latn-NG", - "mjt": "mjt-Deva-IN", - "mjt-Deva": "mjt-Deva-IN", - "mjt-IN": "mjt-Deva-IN", - "mju": "mju-Telu-IN", - "mju-IN": "mju-Telu-IN", - "mju-Telu": "mju-Telu-IN", - "mjv": "mjv-Mlym-IN", - "mjv-IN": "mjv-Mlym-IN", - "mjv-Mlym": "mjv-Mlym-IN", - "mjw": "mjw-Latn-IN", - "mjw-IN": "mjw-Latn-IN", - "mjw-Latn": "mjw-Latn-IN", - "mjx": "mjx-Latn-BD", - "mjx-BD": "mjx-Latn-BD", - "mjx-Latn": "mjx-Latn-BD", - "mjy": "mjy-Latn-US", - "mjy-Latn": "mjy-Latn-US", - "mjy-US": "mjy-Latn-US", - "mjz": "mjz-Deva-NP", - "mjz-Deva": "mjz-Deva-NP", - "mjz-NP": "mjz-Deva-NP", - "mk": "mk-Cyrl-MK", - "mk-Cyrl": "mk-Cyrl-MK", - "mk-Cyrl-AL": "mk-Cyrl-AL", - "mk-Cyrl-GR": "mk-Cyrl-GR", - "mk-Cyrl-MK": "mk-Cyrl-MK", - "mk-MK": "mk-Cyrl-MK", - "mka": "mka-Latn-CI", - "mka-CI": "mka-Latn-CI", - "mka-Latn": "mka-Latn-CI", - "mkb": "mkb-Deva-IN", - "mkb-Deva": "mkb-Deva-IN", - "mkb-IN": "mkb-Deva-IN", - "mkc": "mkc-Latn-PG", - "mkc-Latn": "mkc-Latn-PG", - "mkc-PG": "mkc-Latn-PG", - "mke": "mke-Deva-IN", - "mke-Deva": "mke-Deva-IN", - "mke-IN": "mke-Deva-IN", - "mkf": "mkf-Latn-NG", - "mkf-Latn": "mkf-Latn-NG", - "mkf-NG": "mkf-Latn-NG", - "mki": "mki-Arab-PK", - "mki-Arab": "mki-Arab-PK", - "mki-PK": "mki-Arab-PK", - "mkj": "mkj-Latn-FM", - "mkj-FM": "mkj-Latn-FM", - "mkj-Latn": "mkj-Latn-FM", - "mkk": "mkk-Latn-CM", - "mkk-CM": "mkk-Latn-CM", - "mkk-Latn": "mkk-Latn-CM", - "mkl": "mkl-Latn-BJ", - "mkl-BJ": "mkl-Latn-BJ", - "mkl-Latn": "mkl-Latn-BJ", - "mkm": "mkm-Thai-TH", - "mkm-TH": "mkm-Thai-TH", - "mkm-Thai": "mkm-Thai-TH", - "mkn": "mkn-Latn-ID", - "mkn-ID": "mkn-Latn-ID", - "mkn-Latn": "mkn-Latn-ID", - "mko": "mko-Latn-NG", - "mko-Latn": "mko-Latn-NG", - "mko-NG": "mko-Latn-NG", - "mkp": "mkp-Latn-PG", - "mkp-Latn": "mkp-Latn-PG", - "mkp-PG": "mkp-Latn-PG", - "mkr": "mkr-Latn-PG", - "mkr-Latn": "mkr-Latn-PG", - "mkr-PG": "mkr-Latn-PG", - "mks": "mks-Latn-MX", - "mks-Latn": "mks-Latn-MX", - "mks-MX": "mks-Latn-MX", - "mkt": "mkt-Latn-NC", - "mkt-Latn": "mkt-Latn-NC", - "mkt-NC": "mkt-Latn-NC", - "mku": "mku-Latn-GN", - "mku-GN": "mku-Latn-GN", - "mku-Latn": "mku-Latn-GN", - "mkv": "mkv-Latn-VU", - "mkv-Latn": "mkv-Latn-VU", - "mkv-VU": "mkv-Latn-VU", - "mkw": "mkw-Latn-CG", - "mkw-CG": "mkw-Latn-CG", - "mkw-Latn": "mkw-Latn-CG", - "mkx": "mkx-Latn-PH", - "mkx-Latn": "mkx-Latn-PH", - "mkx-PH": "mkx-Latn-PH", - "mky": "mky-Latn-ID", - "mky-ID": "mky-Latn-ID", - "mky-Latn": "mky-Latn-ID", - "mkz": "mkz-Latn-TL", - "mkz-Latn": "mkz-Latn-TL", - "mkz-TL": "mkz-Latn-TL", - "ml": "ml-Mlym-IN", - "ml-IN": "ml-Mlym-IN", - "ml-Mlym": "ml-Mlym-IN", - "ml-XX": "ml-Mlym-XX", - "mla": "mla-Latn-VU", - "mla-Latn": "mla-Latn-VU", - "mla-VU": "mla-Latn-VU", - "mlb": "mlb-Latn-CM", - "mlb-CM": "mlb-Latn-CM", - "mlb-Latn": "mlb-Latn-CM", - "mlc": "mlc-Latn-VN", - "mlc-Latn": "mlc-Latn-VN", - "mlc-VN": "mlc-Latn-VN", - "mle": "mle-Latn-PG", - "mle-Latn": "mle-Latn-PG", - "mle-PG": "mle-Latn-PG", - "mlf": "mlf-Thai-LA", - "mlf-LA": "mlf-Thai-LA", - "mlf-Thai": "mlf-Thai-LA", - "mlh": "mlh-Latn-PG", - "mlh-Latn": "mlh-Latn-PG", - "mlh-PG": "mlh-Latn-PG", - "mli": "mli-Latn-ID", - "mli-ID": "mli-Latn-ID", - "mli-Latn": "mli-Latn-ID", - "mlj": "mlj-Latn-TD", - "mlj-Latn": "mlj-Latn-TD", - "mlj-TD": "mlj-Latn-TD", - "mlk": "mlk-Latn-KE", - "mlk-KE": "mlk-Latn-KE", - "mlk-Latn": "mlk-Latn-KE", - "mll": "mll-Latn-VU", - "mll-Latn": "mll-Latn-VU", - "mll-VU": "mll-Latn-VU", - "mln": "mln-Latn-SB", - "mln-Latn": "mln-Latn-SB", - "mln-SB": "mln-Latn-SB", - "mlo": "mlo-Latn-SN", - "mlo-Latn": "mlo-Latn-SN", - "mlo-SN": "mlo-Latn-SN", - "mlp": "mlp-Latn-PG", - "mlp-Latn": "mlp-Latn-PG", - "mlp-PG": "mlp-Latn-PG", - "mlq": "mlq-Latn-SN", - "mlq-Latn": "mlq-Latn-SN", - "mlq-SN": "mlq-Latn-SN", - "mlr": "mlr-Latn-CM", - "mlr-CM": "mlr-Latn-CM", - "mlr-Latn": "mlr-Latn-CM", - "mls": "mls-Latn-SD", - "mls-Latn": "mls-Latn-SD", - "mls-SD": "mls-Latn-SD", - "mlu": "mlu-Latn-SB", - "mlu-Latn": "mlu-Latn-SB", - "mlu-SB": "mlu-Latn-SB", - "mlv": "mlv-Latn-VU", - "mlv-Latn": "mlv-Latn-VU", - "mlv-VU": "mlv-Latn-VU", - "mlw": "mlw-Latn-CM", - "mlw-CM": "mlw-Latn-CM", - "mlw-Latn": "mlw-Latn-CM", - "mlx": "mlx-Latn-VU", - "mlx-Latn": "mlx-Latn-VU", - "mlx-VU": "mlx-Latn-VU", - "mlz": "mlz-Latn-PH", - "mlz-Latn": "mlz-Latn-PH", - "mlz-PH": "mlz-Latn-PH", - "mma": "mma-Latn-NG", - "mma-Latn": "mma-Latn-NG", - "mma-NG": "mma-Latn-NG", - "mmb": "mmb-Latn-ID", - "mmb-ID": "mmb-Latn-ID", - "mmb-Latn": "mmb-Latn-ID", - "mmc": "mmc-Latn-MX", - "mmc-Latn": "mmc-Latn-MX", - "mmc-MX": "mmc-Latn-MX", - "mmd": "mmd-Latn-CN", - "mmd-CN": "mmd-Latn-CN", - "mmd-Latn": "mmd-Latn-CN", - "mme": "mme-Latn-VU", - "mme-Latn": "mme-Latn-VU", - "mme-VU": "mme-Latn-VU", - "mmf": "mmf-Latn-NG", - "mmf-Latn": "mmf-Latn-NG", - "mmf-NG": "mmf-Latn-NG", - "mmg": "mmg-Latn-VU", - "mmg-Latn": "mmg-Latn-VU", - "mmg-VU": "mmg-Latn-VU", - "mmh": "mmh-Latn-BR", - "mmh-BR": "mmh-Latn-BR", - "mmh-Latn": "mmh-Latn-BR", - "mmi": "mmi-Latn-PG", - "mmi-Latn": "mmi-Latn-PG", - "mmi-PG": "mmi-Latn-PG", - "mmm": "mmm-Latn-VU", - "mmm-Latn": "mmm-Latn-VU", - "mmm-VU": "mmm-Latn-VU", - "mmn": "mmn-Latn-PH", - "mmn-Latn": "mmn-Latn-PH", - "mmn-PH": "mmn-Latn-PH", - "mmo": "mmo-Latn-PG", - "mmo-Latn": "mmo-Latn-PG", - "mmo-PG": "mmo-Latn-PG", - "mmp": "mmp-Latn-PG", - "mmp-Latn": "mmp-Latn-PG", - "mmp-PG": "mmp-Latn-PG", - "mmq": "mmq-Latn-PG", - "mmq-Latn": "mmq-Latn-PG", - "mmq-PG": "mmq-Latn-PG", - "mmr": "mmr-Latn-CN", - "mmr-CN": "mmr-Latn-CN", - "mmr-Latn": "mmr-Latn-CN", - "mmt": "mmt-Latn-PG", - "mmt-Latn": "mmt-Latn-PG", - "mmt-PG": "mmt-Latn-PG", - "mmu": "mmu-Latn-CM", - "mmu-CM": "mmu-Latn-CM", - "mmu-Latn": "mmu-Latn-CM", - "mmv": "mmv-Latn-BR", - "mmv-BR": "mmv-Latn-BR", - "mmv-Latn": "mmv-Latn-BR", - "mmw": "mmw-Latn-VU", - "mmw-Latn": "mmw-Latn-VU", - "mmw-VU": "mmw-Latn-VU", - "mmx": "mmx-Latn-PG", - "mmx-Latn": "mmx-Latn-PG", - "mmx-PG": "mmx-Latn-PG", - "mmy": "mmy-Latn-TD", - "mmy-Latn": "mmy-Latn-TD", - "mmy-TD": "mmy-Latn-TD", - "mmz": "mmz-Latn-CD", - "mmz-CD": "mmz-Latn-CD", - "mmz-Latn": "mmz-Latn-CD", - "mn": "mn-Cyrl-MN", - "mn-CN": "mn-Mong-CN", - "mn-Cyrl": "mn-Cyrl-MN", - "mn-Cyrl-MN": "mn-Cyrl-MN", - "mn-MN": "mn-Cyrl-MN", - "mn-Mong": "mn-Mong-CN", - "mna": "mna-Latn-PG", - "mna-Latn": "mna-Latn-PG", - "mna-PG": "mna-Latn-PG", - "mnb": "mnb-Latn-ID", - "mnb-ID": "mnb-Latn-ID", - "mnb-Latn": "mnb-Latn-ID", - "mnc": "mnc-Mong-CN", - "mnc-CN": "mnc-Mong-CN", - "mnc-Mong": "mnc-Mong-CN", - "mnd": "mnd-Latn-BR", - "mnd-BR": "mnd-Latn-BR", - "mnd-Latn": "mnd-Latn-BR", - "mne": "mne-Latn-TD", - "mne-Latn": "mne-Latn-TD", - "mne-TD": "mne-Latn-TD", - "mnf": "mnf-Latn-CM", - "mnf-CM": "mnf-Latn-CM", - "mnf-Latn": "mnf-Latn-CM", - "mng": "mng-Latn-VN", - "mng-Latn": "mng-Latn-VN", - "mng-VN": "mng-Latn-VN", - "mnh": "mnh-Latn-CD", - "mnh-CD": "mnh-Latn-CD", - "mnh-Latn": "mnh-Latn-CD", - "mni": "mni-Beng-IN", - "mni-Beng": "mni-Beng-IN", - "mni-IN": "mni-Beng-IN", - "mni-Mtei": "mni-Mtei-IN", - "mnj": "mnj-Arab-AF", - "mnj-AF": "mnj-Arab-AF", - "mnj-Arab": "mnj-Arab-AF", - "mnl": "mnl-Latn-VU", - "mnl-Latn": "mnl-Latn-VU", - "mnl-VU": "mnl-Latn-VU", - "mnm": "mnm-Latn-PG", - "mnm-Latn": "mnm-Latn-PG", - "mnm-PG": "mnm-Latn-PG", - "mnn": "mnn-Latn-VN", - "mnn-Latn": "mnn-Latn-VN", - "mnn-VN": "mnn-Latn-VN", - "mnp": "mnp-Latn-CN", - "mnp-CN": "mnp-Latn-CN", - "mnp-Latn": "mnp-Latn-CN", - "mnq": "mnq-Latn-MY", - "mnq-Latn": "mnq-Latn-MY", - "mnq-MY": "mnq-Latn-MY", - "mnr": "mnr-Latn-US", - "mnr-Latn": "mnr-Latn-US", - "mnr-US": "mnr-Latn-US", - "mns": "mns-Cyrl-RU", - "mns-Cyrl": "mns-Cyrl-RU", - "mns-RU": "mns-Cyrl-RU", - "mnu": "mnu-Latn-ID", - "mnu-ID": "mnu-Latn-ID", - "mnu-Latn": "mnu-Latn-ID", - "mnv": "mnv-Latn-SB", - "mnv-Latn": "mnv-Latn-SB", - "mnv-SB": "mnv-Latn-SB", - "mnw": "mnw-Mymr-MM", - "mnw-MM": "mnw-Mymr-MM", - "mnw-Mymr": "mnw-Mymr-MM", - "mnw-Mymr-TH": "mnw-Mymr-TH", - "mnx": "mnx-Latn-ID", - "mnx-ID": "mnx-Latn-ID", - "mnx-Latn": "mnx-Latn-ID", - "mny": "mny-Latn-MZ", - "mny-Latn": "mny-Latn-MZ", - "mny-MZ": "mny-Latn-MZ", - "mnz": "mnz-Latn-ID", - "mnz-ID": "mnz-Latn-ID", - "mnz-Latn": "mnz-Latn-ID", - "mo": "mo-Latn-RO", - "mo-Latn": "mo-Latn-RO", - "mo-RO": "mo-Latn-RO", - "moa": "moa-Latn-CI", - "moa-CI": "moa-Latn-CI", - "moa-Latn": "moa-Latn-CI", - "moc": "moc-Latn-AR", - "moc-AR": "moc-Latn-AR", - "moc-Latn": "moc-Latn-AR", - "mod": "mod-Latn-US", - "mod-Latn": "mod-Latn-US", - "mod-US": "mod-Latn-US", - "moe": "moe-Latn-CA", - "moe-CA": "moe-Latn-CA", - "moe-Latn": "moe-Latn-CA", - "mog": "mog-Latn-ID", - "mog-ID": "mog-Latn-ID", - "mog-Latn": "mog-Latn-ID", - "moh": "moh-Latn-CA", - "moh-CA": "moh-Latn-CA", - "moh-Latn": "moh-Latn-CA", - "moi": "moi-Latn-NG", - "moi-Latn": "moi-Latn-NG", - "moi-NG": "moi-Latn-NG", - "moj": "moj-Latn-CG", - "moj-CG": "moj-Latn-CG", - "moj-Latn": "moj-Latn-CG", - "mok": "mok-Latn-ID", - "mok-ID": "mok-Latn-ID", - "mok-Latn": "mok-Latn-ID", - "mom": "mom-Latn-NI", - "mom-Latn": "mom-Latn-NI", - "mom-NI": "mom-Latn-NI", - "moo": "moo-Latn-VN", - "moo-Latn": "moo-Latn-VN", - "moo-VN": "moo-Latn-VN", - "mop": "mop-Latn-BZ", - "mop-BZ": "mop-Latn-BZ", - "mop-Latn": "mop-Latn-BZ", - "moq": "moq-Latn-ID", - "moq-ID": "moq-Latn-ID", - "moq-Latn": "moq-Latn-ID", - "mor": "mor-Latn-SD", - "mor-Latn": "mor-Latn-SD", - "mor-SD": "mor-Latn-SD", - "mos": "mos-Latn-BF", - "mos-BF": "mos-Latn-BF", - "mos-Latn": "mos-Latn-BF", - "mot": "mot-Latn-CO", - "mot-CO": "mot-Latn-CO", - "mot-Latn": "mot-Latn-CO", - "mou": "mou-Latn-TD", - "mou-Latn": "mou-Latn-TD", - "mou-TD": "mou-Latn-TD", - "mov": "mov-Latn-US", - "mov-Latn": "mov-Latn-US", - "mov-US": "mov-Latn-US", - "mow": "mow-Latn-CG", - "mow-CG": "mow-Latn-CG", - "mow-Latn": "mow-Latn-CG", - "mox": "mox-Latn-PG", - "mox-Latn": "mox-Latn-PG", - "mox-PG": "mox-Latn-PG", - "moy": "moy-Latn-ET", - "moy-ET": "moy-Latn-ET", - "moy-Latn": "moy-Latn-ET", - "moz": "moz-Latn-TD", - "moz-Latn": "moz-Latn-TD", - "moz-TD": "moz-Latn-TD", - "mpa": "mpa-Latn-TZ", - "mpa-Latn": "mpa-Latn-TZ", - "mpa-TZ": "mpa-Latn-TZ", - "mpb": "mpb-Latn-AU", - "mpb-AU": "mpb-Latn-AU", - "mpb-Latn": "mpb-Latn-AU", - "mpc": "mpc-Latn-AU", - "mpc-AU": "mpc-Latn-AU", - "mpc-Latn": "mpc-Latn-AU", - "mpd": "mpd-Latn-BR", - "mpd-BR": "mpd-Latn-BR", - "mpd-Latn": "mpd-Latn-BR", - "mpe": "mpe-Latn-ET", - "mpe-ET": "mpe-Latn-ET", - "mpe-Latn": "mpe-Latn-ET", - "mpg": "mpg-Latn-TD", - "mpg-Latn": "mpg-Latn-TD", - "mpg-TD": "mpg-Latn-TD", - "mph": "mph-Latn-AU", - "mph-AU": "mph-Latn-AU", - "mph-Latn": "mph-Latn-AU", - "mpi": "mpi-Latn-CM", - "mpi-CM": "mpi-Latn-CM", - "mpi-Latn": "mpi-Latn-CM", - "mpj": "mpj-Latn-AU", - "mpj-AU": "mpj-Latn-AU", - "mpj-Latn": "mpj-Latn-AU", - "mpk": "mpk-Latn-TD", - "mpk-Latn": "mpk-Latn-TD", - "mpk-TD": "mpk-Latn-TD", - "mpl": "mpl-Latn-PG", - "mpl-Latn": "mpl-Latn-PG", - "mpl-PG": "mpl-Latn-PG", - "mpm": "mpm-Latn-MX", - "mpm-Latn": "mpm-Latn-MX", - "mpm-MX": "mpm-Latn-MX", - "mpn": "mpn-Latn-PG", - "mpn-Latn": "mpn-Latn-PG", - "mpn-PG": "mpn-Latn-PG", - "mpo": "mpo-Latn-PG", - "mpo-Latn": "mpo-Latn-PG", - "mpo-PG": "mpo-Latn-PG", - "mpp": "mpp-Latn-PG", - "mpp-Latn": "mpp-Latn-PG", - "mpp-PG": "mpp-Latn-PG", - "mpq": "mpq-Latn-BR", - "mpq-BR": "mpq-Latn-BR", - "mpq-Latn": "mpq-Latn-BR", - "mpr": "mpr-Latn-SB", - "mpr-Latn": "mpr-Latn-SB", - "mpr-SB": "mpr-Latn-SB", - "mps": "mps-Latn-PG", - "mps-Latn": "mps-Latn-PG", - "mps-PG": "mps-Latn-PG", - "mpt": "mpt-Latn-PG", - "mpt-Latn": "mpt-Latn-PG", - "mpt-PG": "mpt-Latn-PG", - "mpu": "mpu-Latn-BR", - "mpu-BR": "mpu-Latn-BR", - "mpu-Latn": "mpu-Latn-BR", - "mpv": "mpv-Latn-PG", - "mpv-Latn": "mpv-Latn-PG", - "mpv-PG": "mpv-Latn-PG", - "mpw": "mpw-Latn-BR", - "mpw-BR": "mpw-Latn-BR", - "mpw-Latn": "mpw-Latn-BR", - "mpx": "mpx-Latn-PG", - "mpx-Latn": "mpx-Latn-PG", - "mpx-PG": "mpx-Latn-PG", - "mpy": "mpy-Latn-ID", - "mpy-ID": "mpy-Latn-ID", - "mpy-Latn": "mpy-Latn-ID", - "mpz": "mpz-Thai-TH", - "mpz-TH": "mpz-Thai-TH", - "mpz-Thai": "mpz-Thai-TH", - "mqa": "mqa-Latn-ID", - "mqa-ID": "mqa-Latn-ID", - "mqa-Latn": "mqa-Latn-ID", - "mqb": "mqb-Latn-CM", - "mqb-CM": "mqb-Latn-CM", - "mqb-Latn": "mqb-Latn-CM", - "mqc": "mqc-Latn-ID", - "mqc-ID": "mqc-Latn-ID", - "mqc-Latn": "mqc-Latn-ID", - "mqe": "mqe-Latn-PG", - "mqe-Latn": "mqe-Latn-PG", - "mqe-PG": "mqe-Latn-PG", - "mqf": "mqf-Latn-ID", - "mqf-ID": "mqf-Latn-ID", - "mqf-Latn": "mqf-Latn-ID", - "mqg": "mqg-Latn-ID", - "mqg-ID": "mqg-Latn-ID", - "mqg-Latn": "mqg-Latn-ID", - "mqh": "mqh-Latn-MX", - "mqh-Latn": "mqh-Latn-MX", - "mqh-MX": "mqh-Latn-MX", - "mqi": "mqi-Latn-ID", - "mqi-ID": "mqi-Latn-ID", - "mqi-Latn": "mqi-Latn-ID", - "mqj": "mqj-Latn-ID", - "mqj-ID": "mqj-Latn-ID", - "mqj-Latn": "mqj-Latn-ID", - "mqk": "mqk-Latn-PH", - "mqk-Latn": "mqk-Latn-PH", - "mqk-PH": "mqk-Latn-PH", - "mql": "mql-Latn-BJ", - "mql-BJ": "mql-Latn-BJ", - "mql-Latn": "mql-Latn-BJ", - "mqm": "mqm-Latn-PF", - "mqm-Latn": "mqm-Latn-PF", - "mqm-PF": "mqm-Latn-PF", - "mqn": "mqn-Latn-ID", - "mqn-ID": "mqn-Latn-ID", - "mqn-Latn": "mqn-Latn-ID", - "mqo": "mqo-Latn-ID", - "mqo-ID": "mqo-Latn-ID", - "mqo-Latn": "mqo-Latn-ID", - "mqp": "mqp-Latn-ID", - "mqp-ID": "mqp-Latn-ID", - "mqp-Latn": "mqp-Latn-ID", - "mqq": "mqq-Latn-MY", - "mqq-Latn": "mqq-Latn-MY", - "mqq-MY": "mqq-Latn-MY", - "mqr": "mqr-Latn-ID", - "mqr-ID": "mqr-Latn-ID", - "mqr-Latn": "mqr-Latn-ID", - "mqs": "mqs-Latn-ID", - "mqs-ID": "mqs-Latn-ID", - "mqs-Latn": "mqs-Latn-ID", - "mqu": "mqu-Latn-SS", - "mqu-Latn": "mqu-Latn-SS", - "mqu-SS": "mqu-Latn-SS", - "mqv": "mqv-Latn-PG", - "mqv-Latn": "mqv-Latn-PG", - "mqv-PG": "mqv-Latn-PG", - "mqw": "mqw-Latn-PG", - "mqw-Latn": "mqw-Latn-PG", - "mqw-PG": "mqw-Latn-PG", - "mqx": "mqx-Latn-ID", - "mqx-ID": "mqx-Latn-ID", - "mqx-Latn": "mqx-Latn-ID", - "mqy": "mqy-Latn-ID", - "mqy-ID": "mqy-Latn-ID", - "mqy-Latn": "mqy-Latn-ID", - "mqz": "mqz-Latn-PG", - "mqz-Latn": "mqz-Latn-PG", - "mqz-PG": "mqz-Latn-PG", - "mr": "mr-Deva-IN", - "mr-Deva": "mr-Deva-IN", - "mr-IN": "mr-Deva-IN", - "mr-Modi": "mr-Modi-IN", - "mr-XX": "mr-Deva-XX", - "mra": "mra-Thai-TH", - "mra-TH": "mra-Thai-TH", - "mra-Thai": "mra-Thai-TH", - "mrb": "mrb-Latn-VU", - "mrb-Latn": "mrb-Latn-VU", - "mrb-VU": "mrb-Latn-VU", - "mrc": "mrc-Latn-US", - "mrc-Latn": "mrc-Latn-US", - "mrc-US": "mrc-Latn-US", - "mrd": "mrd-Deva-NP", - "mrd-Deva": "mrd-Deva-NP", - "mrd-NP": "mrd-Deva-NP", - "mrf": "mrf-Latn-ID", - "mrf-ID": "mrf-Latn-ID", - "mrf-Latn": "mrf-Latn-ID", - "mrg": "mrg-Latn-IN", - "mrg-IN": "mrg-Latn-IN", - "mrg-Latn": "mrg-Latn-IN", - "mrh": "mrh-Latn-IN", - "mrh-IN": "mrh-Latn-IN", - "mrh-Latn": "mrh-Latn-IN", - "mrj": "mrj-Cyrl-RU", - "mrj-Cyrl": "mrj-Cyrl-RU", - "mrj-RU": "mrj-Cyrl-RU", - "mrk": "mrk-Latn-NC", - "mrk-Latn": "mrk-Latn-NC", - "mrk-NC": "mrk-Latn-NC", - "mrl": "mrl-Latn-FM", - "mrl-FM": "mrl-Latn-FM", - "mrl-Latn": "mrl-Latn-FM", - "mrm": "mrm-Latn-VU", - "mrm-Latn": "mrm-Latn-VU", - "mrm-VU": "mrm-Latn-VU", - "mrn": "mrn-Latn-SB", - "mrn-Latn": "mrn-Latn-SB", - "mrn-SB": "mrn-Latn-SB", - "mro": "mro-Mroo-BD", - "mro-BD": "mro-Mroo-BD", - "mro-Mroo": "mro-Mroo-BD", - "mrp": "mrp-Latn-VU", - "mrp-Latn": "mrp-Latn-VU", - "mrp-VU": "mrp-Latn-VU", - "mrq": "mrq-Latn-PF", - "mrq-Latn": "mrq-Latn-PF", - "mrq-PF": "mrq-Latn-PF", - "mrr": "mrr-Deva-IN", - "mrr-Deva": "mrr-Deva-IN", - "mrr-IN": "mrr-Deva-IN", - "mrs": "mrs-Latn-VU", - "mrs-Latn": "mrs-Latn-VU", - "mrs-VU": "mrs-Latn-VU", - "mrt": "mrt-Latn-NG", - "mrt-Latn": "mrt-Latn-NG", - "mrt-NG": "mrt-Latn-NG", - "mru": "mru-Latn-CM", - "mru-CM": "mru-Latn-CM", - "mru-Latn": "mru-Latn-CM", - "mrv": "mrv-Latn-PF", - "mrv-Latn": "mrv-Latn-PF", - "mrv-PF": "mrv-Latn-PF", - "mrw": "mrw-Latn-PH", - "mrw-Latn": "mrw-Latn-PH", - "mrw-PH": "mrw-Latn-PH", - "mrx": "mrx-Latn-ID", - "mrx-ID": "mrx-Latn-ID", - "mrx-Latn": "mrx-Latn-ID", - "mry": "mry-Latn-PH", - "mry-Latn": "mry-Latn-PH", - "mry-PH": "mry-Latn-PH", - "mrz": "mrz-Latn-ID", - "mrz-ID": "mrz-Latn-ID", - "mrz-Latn": "mrz-Latn-ID", - "ms": "ms-Latn-MY", - "ms-Arab": "ms-Arab-CC", - "ms-Arab-BN": "ms-Arab-BN", - "ms-Arab-CC": "ms-Arab-CC", - "ms-Arab-ID": "ms-Arab-ID", - "ms-BN": "ms-Latn-BN", - "ms-CC": "ms-Arab-CC", - "ms-Latn": "ms-Latn-MY", - "ms-MY": "ms-Latn-MY", - "ms-SG": "ms-Latn-SG", - "msb": "msb-Latn-PH", - "msb-Latn": "msb-Latn-PH", - "msb-PH": "msb-Latn-PH", - "msc": "msc-Latn-GN", - "msc-GN": "msc-Latn-GN", - "msc-Latn": "msc-Latn-GN", - "mse": "mse-Latn-TD", - "mse-Latn": "mse-Latn-TD", - "mse-TD": "mse-Latn-TD", - "msf": "msf-Latn-ID", - "msf-ID": "msf-Latn-ID", - "msf-Latn": "msf-Latn-ID", - "msg": "msg-Latn-ID", - "msg-ID": "msg-Latn-ID", - "msg-Latn": "msg-Latn-ID", - "msh": "msh-Latn-MG", - "msh-Latn": "msh-Latn-MG", - "msh-MG": "msh-Latn-MG", - "msi": "msi-Latn-MY", - "msi-Latn": "msi-Latn-MY", - "msi-MY": "msi-Latn-MY", - "msj": "msj-Latn-CD", - "msj-CD": "msj-Latn-CD", - "msj-Latn": "msj-Latn-CD", - "msk": "msk-Latn-PH", - "msk-Latn": "msk-Latn-PH", - "msk-PH": "msk-Latn-PH", - "msl": "msl-Latn-ID", - "msl-ID": "msl-Latn-ID", - "msl-Latn": "msl-Latn-ID", - "msm": "msm-Latn-PH", - "msm-Latn": "msm-Latn-PH", - "msm-PH": "msm-Latn-PH", - "msn": "msn-Latn-VU", - "msn-Latn": "msn-Latn-VU", - "msn-VU": "msn-Latn-VU", - "mso": "mso-Latn-ID", - "mso-ID": "mso-Latn-ID", - "mso-Latn": "mso-Latn-ID", - "msp": "msp-Latn-BR", - "msp-BR": "msp-Latn-BR", - "msp-Latn": "msp-Latn-BR", - "msq": "msq-Latn-NC", - "msq-Latn": "msq-Latn-NC", - "msq-NC": "msq-Latn-NC", - "mss": "mss-Latn-ID", - "mss-ID": "mss-Latn-ID", - "mss-Latn": "mss-Latn-ID", - "msu": "msu-Latn-PG", - "msu-Latn": "msu-Latn-PG", - "msu-PG": "msu-Latn-PG", - "msv": "msv-Latn-CM", - "msv-CM": "msv-Latn-CM", - "msv-Latn": "msv-Latn-CM", - "msw": "msw-Latn-GW", - "msw-GW": "msw-Latn-GW", - "msw-Latn": "msw-Latn-GW", - "msx": "msx-Latn-PG", - "msx-Latn": "msx-Latn-PG", - "msx-PG": "msx-Latn-PG", - "msy": "msy-Latn-PG", - "msy-Latn": "msy-Latn-PG", - "msy-PG": "msy-Latn-PG", - "msz": "msz-Latn-PG", - "msz-Latn": "msz-Latn-PG", - "msz-PG": "msz-Latn-PG", - "mt": "mt-Latn-MT", - "mt-Latn": "mt-Latn-MT", - "mt-MT": "mt-Latn-MT", - "mta": "mta-Latn-PH", - "mta-Latn": "mta-Latn-PH", - "mta-PH": "mta-Latn-PH", - "mtb": "mtb-Latn-CI", - "mtb-CI": "mtb-Latn-CI", - "mtb-Latn": "mtb-Latn-CI", - "mtc": "mtc-Latn-PG", - "mtc-Latn": "mtc-Latn-PG", - "mtc-PG": "mtc-Latn-PG", - "mtd": "mtd-Latn-ID", - "mtd-ID": "mtd-Latn-ID", - "mtd-Latn": "mtd-Latn-ID", - "mte": "mte-Latn-SB", - "mte-Latn": "mte-Latn-SB", - "mte-SB": "mte-Latn-SB", - "mtf": "mtf-Latn-PG", - "mtf-Latn": "mtf-Latn-PG", - "mtf-PG": "mtf-Latn-PG", - "mtg": "mtg-Latn-ID", - "mtg-ID": "mtg-Latn-ID", - "mtg-Latn": "mtg-Latn-ID", - "mth": "mth-Latn-ID", - "mth-ID": "mth-Latn-ID", - "mth-Latn": "mth-Latn-ID", - "mti": "mti-Latn-PG", - "mti-Latn": "mti-Latn-PG", - "mti-PG": "mti-Latn-PG", - "mtj": "mtj-Latn-ID", - "mtj-ID": "mtj-Latn-ID", - "mtj-Latn": "mtj-Latn-ID", - "mtk": "mtk-Latn-CM", - "mtk-CM": "mtk-Latn-CM", - "mtk-Latn": "mtk-Latn-CM", - "mtl": "mtl-Latn-NG", - "mtl-Latn": "mtl-Latn-NG", - "mtl-NG": "mtl-Latn-NG", - "mtm": "mtm-Cyrl-RU", - "mtm-Cyrl": "mtm-Cyrl-RU", - "mtm-RU": "mtm-Cyrl-RU", - "mtn": "mtn-Latn-NI", - "mtn-Latn": "mtn-Latn-NI", - "mtn-NI": "mtn-Latn-NI", - "mto": "mto-Latn-MX", - "mto-Latn": "mto-Latn-MX", - "mto-MX": "mto-Latn-MX", - "mtp": "mtp-Latn-BO", - "mtp-BO": "mtp-Latn-BO", - "mtp-Latn": "mtp-Latn-BO", - "mtq": "mtq-Latn-VN", - "mtq-Latn": "mtq-Latn-VN", - "mtq-VN": "mtq-Latn-VN", - "mtr": "mtr-Deva-IN", - "mtr-Deva": "mtr-Deva-IN", - "mtr-IN": "mtr-Deva-IN", - "mts": "mts-Latn-PE", - "mts-Latn": "mts-Latn-PE", - "mts-PE": "mts-Latn-PE", - "mtt": "mtt-Latn-VU", - "mtt-Latn": "mtt-Latn-VU", - "mtt-VU": "mtt-Latn-VU", - "mtu": "mtu-Latn-MX", - "mtu-Latn": "mtu-Latn-MX", - "mtu-MX": "mtu-Latn-MX", - "mtv": "mtv-Latn-PG", - "mtv-Latn": "mtv-Latn-PG", - "mtv-PG": "mtv-Latn-PG", - "mtw": "mtw-Latn-PH", - "mtw-Latn": "mtw-Latn-PH", - "mtw-PH": "mtw-Latn-PH", - "mtx": "mtx-Latn-MX", - "mtx-Latn": "mtx-Latn-MX", - "mtx-MX": "mtx-Latn-MX", - "mty": "mty-Latn-PG", - "mty-Latn": "mty-Latn-PG", - "mty-PG": "mty-Latn-PG", - "mua": "mua-Latn-CM", - "mua-CM": "mua-Latn-CM", - "mua-Latn": "mua-Latn-CM", - "mub": "mub-Latn-TD", - "mub-Latn": "mub-Latn-TD", - "mub-TD": "mub-Latn-TD", - "muc": "muc-Latn-CM", - "muc-CM": "muc-Latn-CM", - "muc-Latn": "muc-Latn-CM", - "mud": "mud-Cyrl-RU", - "mud-Cyrl": "mud-Cyrl-RU", - "mud-RU": "mud-Cyrl-RU", - "mue": "mue-Latn-EC", - "mue-EC": "mue-Latn-EC", - "mue-Latn": "mue-Latn-EC", - "mug": "mug-Latn-CM", - "mug-CM": "mug-Latn-CM", - "mug-Latn": "mug-Latn-CM", - "muh": "muh-Latn-SS", - "muh-Latn": "muh-Latn-SS", - "muh-SS": "muh-Latn-SS", - "mui": "mui-Latn-ID", - "mui-ID": "mui-Latn-ID", - "mui-Latn": "mui-Latn-ID", - "muj": "muj-Latn-TD", - "muj-Latn": "muj-Latn-TD", - "muj-TD": "muj-Latn-TD", - "muk": "muk-Tibt-NP", - "muk-NP": "muk-Tibt-NP", - "muk-Tibt": "muk-Tibt-NP", - "mum": "mum-Latn-PG", - "mum-Latn": "mum-Latn-PG", - "mum-PG": "mum-Latn-PG", - "muo": "muo-Latn-CM", - "muo-CM": "muo-Latn-CM", - "muo-Latn": "muo-Latn-CM", - "muq": "muq-Latn-CN", - "muq-CN": "muq-Latn-CN", - "muq-Latn": "muq-Latn-CN", - "mur": "mur-Latn-SS", - "mur-Latn": "mur-Latn-SS", - "mur-SS": "mur-Latn-SS", - "mus": "mus-Latn-US", - "mus-Latn": "mus-Latn-US", - "mus-US": "mus-Latn-US", - "mut": "mut-Deva-IN", - "mut-Deva": "mut-Deva-IN", - "mut-IN": "mut-Deva-IN", - "muu": "muu-Latn-KE", - "muu-KE": "muu-Latn-KE", - "muu-Latn": "muu-Latn-KE", - "muv": "muv-Taml-IN", - "muv-IN": "muv-Taml-IN", - "muv-Taml": "muv-Taml-IN", - "mux": "mux-Latn-PG", - "mux-Latn": "mux-Latn-PG", - "mux-PG": "mux-Latn-PG", - "muy": "muy-Latn-CM", - "muy-CM": "muy-Latn-CM", - "muy-Latn": "muy-Latn-CM", - "muz": "muz-Ethi-ET", - "muz-ET": "muz-Ethi-ET", - "muz-Ethi": "muz-Ethi-ET", - "mva": "mva-Latn-PG", - "mva-Latn": "mva-Latn-PG", - "mva-PG": "mva-Latn-PG", - "mvd": "mvd-Latn-ID", - "mvd-ID": "mvd-Latn-ID", - "mvd-Latn": "mvd-Latn-ID", - "mve": "mve-Arab-PK", - "mve-Arab": "mve-Arab-PK", - "mve-PK": "mve-Arab-PK", - "mvf": "mvf-Mong-CN", - "mvf-CN": "mvf-Mong-CN", - "mvf-Mong": "mvf-Mong-CN", - "mvg": "mvg-Latn-MX", - "mvg-Latn": "mvg-Latn-MX", - "mvg-MX": "mvg-Latn-MX", - "mvh": "mvh-Latn-TD", - "mvh-Latn": "mvh-Latn-TD", - "mvh-TD": "mvh-Latn-TD", - "mvk": "mvk-Latn-PG", - "mvk-Latn": "mvk-Latn-PG", - "mvk-PG": "mvk-Latn-PG", - "mvl": "mvl-Latn-AU", - "mvl-AU": "mvl-Latn-AU", - "mvl-Latn": "mvl-Latn-AU", - "mvn": "mvn-Latn-PG", - "mvn-Latn": "mvn-Latn-PG", - "mvn-PG": "mvn-Latn-PG", - "mvo": "mvo-Latn-SB", - "mvo-Latn": "mvo-Latn-SB", - "mvo-SB": "mvo-Latn-SB", - "mvp": "mvp-Latn-ID", - "mvp-ID": "mvp-Latn-ID", - "mvp-Latn": "mvp-Latn-ID", - "mvq": "mvq-Latn-PG", - "mvq-Latn": "mvq-Latn-PG", - "mvq-PG": "mvq-Latn-PG", - "mvr": "mvr-Latn-ID", - "mvr-ID": "mvr-Latn-ID", - "mvr-Latn": "mvr-Latn-ID", - "mvs": "mvs-Latn-ID", - "mvs-ID": "mvs-Latn-ID", - "mvs-Latn": "mvs-Latn-ID", - "mvt": "mvt-Latn-VU", - "mvt-Latn": "mvt-Latn-VU", - "mvt-VU": "mvt-Latn-VU", - "mvu": "mvu-Latn-TD", - "mvu-Latn": "mvu-Latn-TD", - "mvu-TD": "mvu-Latn-TD", - "mvv": "mvv-Latn-MY", - "mvv-Latn": "mvv-Latn-MY", - "mvv-MY": "mvv-Latn-MY", - "mvw": "mvw-Latn-TZ", - "mvw-Latn": "mvw-Latn-TZ", - "mvw-TZ": "mvw-Latn-TZ", - "mvx": "mvx-Latn-ID", - "mvx-ID": "mvx-Latn-ID", - "mvx-Latn": "mvx-Latn-ID", - "mvy": "mvy-Arab-PK", - "mvy-Arab": "mvy-Arab-PK", - "mvy-PK": "mvy-Arab-PK", - "mvz": "mvz-Ethi-ET", - "mvz-ET": "mvz-Ethi-ET", - "mvz-Ethi": "mvz-Ethi-ET", - "mwa": "mwa-Latn-PG", - "mwa-Latn": "mwa-Latn-PG", - "mwa-PG": "mwa-Latn-PG", - "mwb": "mwb-Latn-PG", - "mwb-Latn": "mwb-Latn-PG", - "mwb-PG": "mwb-Latn-PG", - "mwc": "mwc-Latn-PG", - "mwc-Latn": "mwc-Latn-PG", - "mwc-PG": "mwc-Latn-PG", - "mwe": "mwe-Latn-TZ", - "mwe-Latn": "mwe-Latn-TZ", - "mwe-TZ": "mwe-Latn-TZ", - "mwf": "mwf-Latn-AU", - "mwf-AU": "mwf-Latn-AU", - "mwf-Latn": "mwf-Latn-AU", - "mwg": "mwg-Latn-PG", - "mwg-Latn": "mwg-Latn-PG", - "mwg-PG": "mwg-Latn-PG", - "mwh": "mwh-Latn-PG", - "mwh-Latn": "mwh-Latn-PG", - "mwh-PG": "mwh-Latn-PG", - "mwi": "mwi-Latn-VU", - "mwi-Latn": "mwi-Latn-VU", - "mwi-VU": "mwi-Latn-VU", - "mwk": "mwk-Latn-ML", - "mwk-Latn": "mwk-Latn-ML", - "mwk-ML": "mwk-Latn-ML", - "mwl": "mwl-Latn-PT", - "mwl-Latn": "mwl-Latn-PT", - "mwl-PT": "mwl-Latn-PT", - "mwm": "mwm-Latn-TD", - "mwm-Latn": "mwm-Latn-TD", - "mwm-TD": "mwm-Latn-TD", - "mwn": "mwn-Latn-ZM", - "mwn-Latn": "mwn-Latn-ZM", - "mwn-ZM": "mwn-Latn-ZM", - "mwo": "mwo-Latn-VU", - "mwo-Latn": "mwo-Latn-VU", - "mwo-VU": "mwo-Latn-VU", - "mwp": "mwp-Latn-AU", - "mwp-AU": "mwp-Latn-AU", - "mwp-Latn": "mwp-Latn-AU", - "mwq": "mwq-Latn-MM", - "mwq-Latn": "mwq-Latn-MM", - "mwq-MM": "mwq-Latn-MM", - "mwr": "mwr-Deva-IN", - "mwr-Deva": "mwr-Deva-IN", - "mwr-IN": "mwr-Deva-IN", - "mws": "mws-Latn-KE", - "mws-KE": "mws-Latn-KE", - "mws-Latn": "mws-Latn-KE", - "mwt": "mwt-Mymr-MM", - "mwt-MM": "mwt-Mymr-MM", - "mwt-Mymr": "mwt-Mymr-MM", - "mwu": "mwu-Latn-SS", - "mwu-Latn": "mwu-Latn-SS", - "mwu-SS": "mwu-Latn-SS", - "mwv": "mwv-Latn-ID", - "mwv-ID": "mwv-Latn-ID", - "mwv-Latn": "mwv-Latn-ID", - "mww": "mww-Hmnp-US", - "mww-Hmnp": "mww-Hmnp-US", - "mww-US": "mww-Hmnp-US", - "mwz": "mwz-Latn-CD", - "mwz-CD": "mwz-Latn-CD", - "mwz-Latn": "mwz-Latn-CD", - "mxa": "mxa-Latn-MX", - "mxa-Latn": "mxa-Latn-MX", - "mxa-MX": "mxa-Latn-MX", - "mxb": "mxb-Latn-MX", - "mxb-Latn": "mxb-Latn-MX", - "mxb-MX": "mxb-Latn-MX", - "mxc": "mxc-Latn-ZW", - "mxc-Latn": "mxc-Latn-ZW", - "mxc-ZW": "mxc-Latn-ZW", - "mxd": "mxd-Latn-ID", - "mxd-ID": "mxd-Latn-ID", - "mxd-Latn": "mxd-Latn-ID", - "mxe": "mxe-Latn-VU", - "mxe-Latn": "mxe-Latn-VU", - "mxe-VU": "mxe-Latn-VU", - "mxf": "mxf-Latn-CM", - "mxf-CM": "mxf-Latn-CM", - "mxf-Latn": "mxf-Latn-CM", - "mxg": "mxg-Latn-AO", - "mxg-AO": "mxg-Latn-AO", - "mxg-Latn": "mxg-Latn-AO", - "mxh": "mxh-Latn-CD", - "mxh-CD": "mxh-Latn-CD", - "mxh-Latn": "mxh-Latn-CD", - "mxi": "mxi-Latn-ES", - "mxi-ES": "mxi-Latn-ES", - "mxi-Latn": "mxi-Latn-ES", - "mxj": "mxj-Latn-IN", - "mxj-IN": "mxj-Latn-IN", - "mxj-Latn": "mxj-Latn-IN", - "mxk": "mxk-Latn-PG", - "mxk-Latn": "mxk-Latn-PG", - "mxk-PG": "mxk-Latn-PG", - "mxl": "mxl-Latn-BJ", - "mxl-BJ": "mxl-Latn-BJ", - "mxl-Latn": "mxl-Latn-BJ", - "mxm": "mxm-Latn-PG", - "mxm-Latn": "mxm-Latn-PG", - "mxm-PG": "mxm-Latn-PG", - "mxn": "mxn-Latn-ID", - "mxn-ID": "mxn-Latn-ID", - "mxn-Latn": "mxn-Latn-ID", - "mxo": "mxo-Latn-ZM", - "mxo-Latn": "mxo-Latn-ZM", - "mxo-ZM": "mxo-Latn-ZM", - "mxp": "mxp-Latn-MX", - "mxp-Latn": "mxp-Latn-MX", - "mxp-MX": "mxp-Latn-MX", - "mxq": "mxq-Latn-MX", - "mxq-Latn": "mxq-Latn-MX", - "mxq-MX": "mxq-Latn-MX", - "mxr": "mxr-Latn-MY", - "mxr-Latn": "mxr-Latn-MY", - "mxr-MY": "mxr-Latn-MY", - "mxs": "mxs-Latn-MX", - "mxs-Latn": "mxs-Latn-MX", - "mxs-MX": "mxs-Latn-MX", - "mxt": "mxt-Latn-MX", - "mxt-Latn": "mxt-Latn-MX", - "mxt-MX": "mxt-Latn-MX", - "mxu": "mxu-Latn-CM", - "mxu-CM": "mxu-Latn-CM", - "mxu-Latn": "mxu-Latn-CM", - "mxv": "mxv-Latn-MX", - "mxv-Latn": "mxv-Latn-MX", - "mxv-MX": "mxv-Latn-MX", - "mxw": "mxw-Latn-PG", - "mxw-Latn": "mxw-Latn-PG", - "mxw-PG": "mxw-Latn-PG", - "mxx": "mxx-Latn-CI", - "mxx-CI": "mxx-Latn-CI", - "mxx-Latn": "mxx-Latn-CI", - "mxy": "mxy-Latn-MX", - "mxy-Latn": "mxy-Latn-MX", - "mxy-MX": "mxy-Latn-MX", - "mxz": "mxz-Latn-ID", - "mxz-ID": "mxz-Latn-ID", - "mxz-Latn": "mxz-Latn-ID", - "my": "my-Mymr-MM", - "my-Khmr": "my-Khmr-MM", - "my-MM": "my-Mymr-MM", - "my-Mymr": "my-Mymr-MM", - "myb": "myb-Latn-TD", - "myb-Latn": "myb-Latn-TD", - "myb-TD": "myb-Latn-TD", - "myc": "myc-Latn-CD", - "myc-CD": "myc-Latn-CD", - "myc-Latn": "myc-Latn-CD", - "mye": "mye-Latn-GA", - "mye-GA": "mye-Latn-GA", - "mye-Latn": "mye-Latn-GA", - "myf": "myf-Latn-ET", - "myf-ET": "myf-Latn-ET", - "myf-Latn": "myf-Latn-ET", - "myg": "myg-Latn-CM", - "myg-CM": "myg-Latn-CM", - "myg-Latn": "myg-Latn-CM", - "myh": "myh-Latn-US", - "myh-Latn": "myh-Latn-US", - "myh-US": "myh-Latn-US", - "myj": "myj-Latn-SS", - "myj-Latn": "myj-Latn-SS", - "myj-SS": "myj-Latn-SS", - "myk": "myk-Latn-ML", - "myk-Latn": "myk-Latn-ML", - "myk-ML": "myk-Latn-ML", - "myl": "myl-Latn-ID", - "myl-ID": "myl-Latn-ID", - "myl-Latn": "myl-Latn-ID", - "mym": "mym-Ethi-ET", - "mym-ET": "mym-Ethi-ET", - "mym-Ethi": "mym-Ethi-ET", - "myp": "myp-Latn-BR", - "myp-BR": "myp-Latn-BR", - "myp-Latn": "myp-Latn-BR", - "myr": "myr-Latn-PE", - "myr-Latn": "myr-Latn-PE", - "myr-PE": "myr-Latn-PE", - "myu": "myu-Latn-BR", - "myu-BR": "myu-Latn-BR", - "myu-Latn": "myu-Latn-BR", - "myv": "myv-Cyrl-RU", - "myv-Cyrl": "myv-Cyrl-RU", - "myv-RU": "myv-Cyrl-RU", - "myw": "myw-Latn-PG", - "myw-Latn": "myw-Latn-PG", - "myw-PG": "myw-Latn-PG", - "myx": "myx-Latn-UG", - "myx-Latn": "myx-Latn-UG", - "myx-UG": "myx-Latn-UG", - "myy": "myy-Latn-CO", - "myy-CO": "myy-Latn-CO", - "myy-Latn": "myy-Latn-CO", - "myz": "myz-Mand-IR", - "myz-IR": "myz-Mand-IR", - "myz-Mand": "myz-Mand-IR", - "mza": "mza-Latn-MX", - "mza-Latn": "mza-Latn-MX", - "mza-MX": "mza-Latn-MX", - "mzd": "mzd-Latn-CM", - "mzd-CM": "mzd-Latn-CM", - "mzd-Latn": "mzd-Latn-CM", - "mze": "mze-Latn-PG", - "mze-Latn": "mze-Latn-PG", - "mze-PG": "mze-Latn-PG", - "mzh": "mzh-Latn-AR", - "mzh-AR": "mzh-Latn-AR", - "mzh-Latn": "mzh-Latn-AR", - "mzi": "mzi-Latn-MX", - "mzi-Latn": "mzi-Latn-MX", - "mzi-MX": "mzi-Latn-MX", - "mzj": "mzj-Latn-LR", - "mzj-LR": "mzj-Latn-LR", - "mzj-Latn": "mzj-Latn-LR", - "mzk": "mzk-Latn-NG", - "mzk-Latn": "mzk-Latn-NG", - "mzk-NG": "mzk-Latn-NG", - "mzl": "mzl-Latn-MX", - "mzl-Latn": "mzl-Latn-MX", - "mzl-MX": "mzl-Latn-MX", - "mzm": "mzm-Latn-NG", - "mzm-Latn": "mzm-Latn-NG", - "mzm-NG": "mzm-Latn-NG", - "mzn": "mzn-Arab-IR", - "mzn-Arab": "mzn-Arab-IR", - "mzn-IR": "mzn-Arab-IR", - "mzo": "mzo-Latn-BR", - "mzo-BR": "mzo-Latn-BR", - "mzo-Latn": "mzo-Latn-BR", - "mzp": "mzp-Latn-BO", - "mzp-BO": "mzp-Latn-BO", - "mzp-Latn": "mzp-Latn-BO", - "mzq": "mzq-Latn-ID", - "mzq-ID": "mzq-Latn-ID", - "mzq-Latn": "mzq-Latn-ID", - "mzr": "mzr-Latn-BR", - "mzr-BR": "mzr-Latn-BR", - "mzr-Latn": "mzr-Latn-BR", - "mzt": "mzt-Latn-MY", - "mzt-Latn": "mzt-Latn-MY", - "mzt-MY": "mzt-Latn-MY", - "mzu": "mzu-Latn-PG", - "mzu-Latn": "mzu-Latn-PG", - "mzu-PG": "mzu-Latn-PG", - "mzv": "mzv-Latn-CF", - "mzv-CF": "mzv-Latn-CF", - "mzv-Latn": "mzv-Latn-CF", - "mzw": "mzw-Latn-GH", - "mzw-GH": "mzw-Latn-GH", - "mzw-Latn": "mzw-Latn-GH", - "mzx": "mzx-Latn-GY", - "mzx-GY": "mzx-Latn-GY", - "mzx-Latn": "mzx-Latn-GY", - "mzz": "mzz-Latn-PG", - "mzz-Latn": "mzz-Latn-PG", - "mzz-PG": "mzz-Latn-PG", - "na": "na-Latn-NR", - "na-Latn": "na-Latn-NR", - "na-NR": "na-Latn-NR", - "naa": "naa-Latn-ID", - "naa-ID": "naa-Latn-ID", - "naa-Latn": "naa-Latn-ID", - "nab": "nab-Latn-BR", - "nab-BR": "nab-Latn-BR", - "nab-Latn": "nab-Latn-BR", - "nac": "nac-Latn-PG", - "nac-Latn": "nac-Latn-PG", - "nac-PG": "nac-Latn-PG", - "nae": "nae-Latn-ID", - "nae-ID": "nae-Latn-ID", - "nae-Latn": "nae-Latn-ID", - "naf": "naf-Latn-PG", - "naf-Latn": "naf-Latn-PG", - "naf-PG": "naf-Latn-PG", - "nag": "nag-Latn-IN", - "nag-IN": "nag-Latn-IN", - "nag-Latn": "nag-Latn-IN", - "naj": "naj-Latn-GN", - "naj-GN": "naj-Latn-GN", - "naj-Latn": "naj-Latn-GN", - "nak": "nak-Latn-PG", - "nak-Latn": "nak-Latn-PG", - "nak-PG": "nak-Latn-PG", - "nal": "nal-Latn-PG", - "nal-Latn": "nal-Latn-PG", - "nal-PG": "nal-Latn-PG", - "nam": "nam-Latn-AU", - "nam-AU": "nam-Latn-AU", - "nam-Latn": "nam-Latn-AU", - "nan": "nan-Hans-CN", - "nan-CN": "nan-Hans-CN", - "nan-Hans": "nan-Hans-CN", - "nao": "nao-Deva-NP", - "nao-Deva": "nao-Deva-NP", - "nao-NP": "nao-Deva-NP", - "nap": "nap-Latn-IT", - "nap-IT": "nap-Latn-IT", - "nap-Latn": "nap-Latn-IT", - "naq": "naq-Latn-NA", - "naq-Latn": "naq-Latn-NA", - "naq-NA": "naq-Latn-NA", - "nar": "nar-Latn-NG", - "nar-Latn": "nar-Latn-NG", - "nar-NG": "nar-Latn-NG", - "nas": "nas-Latn-PG", - "nas-Latn": "nas-Latn-PG", - "nas-PG": "nas-Latn-PG", - "nat": "nat-Latn-NG", - "nat-Latn": "nat-Latn-NG", - "nat-NG": "nat-Latn-NG", - "naw": "naw-Latn-GH", - "naw-GH": "naw-Latn-GH", - "naw-Latn": "naw-Latn-GH", - "nax": "nax-Latn-PG", - "nax-Latn": "nax-Latn-PG", - "nax-PG": "nax-Latn-PG", - "nay": "nay-Latn-AU", - "nay-AU": "nay-Latn-AU", - "nay-Latn": "nay-Latn-AU", - "naz": "naz-Latn-MX", - "naz-Latn": "naz-Latn-MX", - "naz-MX": "naz-Latn-MX", - "nb": "nb-Latn-NO", - "nb-Latn": "nb-Latn-NO", - "nb-NO": "nb-Latn-NO", - "nb-SJ": "nb-Latn-SJ", - "nba": "nba-Latn-AO", - "nba-AO": "nba-Latn-AO", - "nba-Latn": "nba-Latn-AO", - "nbb": "nbb-Latn-NG", - "nbb-Latn": "nbb-Latn-NG", - "nbb-NG": "nbb-Latn-NG", - "nbc": "nbc-Latn-IN", - "nbc-IN": "nbc-Latn-IN", - "nbc-Latn": "nbc-Latn-IN", - "nbd": "nbd-Latn-CD", - "nbd-CD": "nbd-Latn-CD", - "nbd-Latn": "nbd-Latn-CD", - "nbe": "nbe-Latn-IN", - "nbe-IN": "nbe-Latn-IN", - "nbe-Latn": "nbe-Latn-IN", - "nbh": "nbh-Latn-NG", - "nbh-Latn": "nbh-Latn-NG", - "nbh-NG": "nbh-Latn-NG", - "nbi": "nbi-Latn-IN", - "nbi-IN": "nbi-Latn-IN", - "nbi-Latn": "nbi-Latn-IN", - "nbj": "nbj-Latn-AU", - "nbj-AU": "nbj-Latn-AU", - "nbj-Latn": "nbj-Latn-AU", - "nbk": "nbk-Latn-PG", - "nbk-Latn": "nbk-Latn-PG", - "nbk-PG": "nbk-Latn-PG", - "nbm": "nbm-Latn-CF", - "nbm-CF": "nbm-Latn-CF", - "nbm-Latn": "nbm-Latn-CF", - "nbn": "nbn-Latn-ID", - "nbn-ID": "nbn-Latn-ID", - "nbn-Latn": "nbn-Latn-ID", - "nbo": "nbo-Latn-NG", - "nbo-Latn": "nbo-Latn-NG", - "nbo-NG": "nbo-Latn-NG", - "nbp": "nbp-Latn-NG", - "nbp-Latn": "nbp-Latn-NG", - "nbp-NG": "nbp-Latn-NG", - "nbq": "nbq-Latn-ID", - "nbq-ID": "nbq-Latn-ID", - "nbq-Latn": "nbq-Latn-ID", - "nbr": "nbr-Latn-NG", - "nbr-Latn": "nbr-Latn-NG", - "nbr-NG": "nbr-Latn-NG", - "nbt": "nbt-Latn-IN", - "nbt-IN": "nbt-Latn-IN", - "nbt-Latn": "nbt-Latn-IN", - "nbu": "nbu-Latn-IN", - "nbu-IN": "nbu-Latn-IN", - "nbu-Latn": "nbu-Latn-IN", - "nbv": "nbv-Latn-CM", - "nbv-CM": "nbv-Latn-CM", - "nbv-Latn": "nbv-Latn-CM", - "nbw": "nbw-Latn-CD", - "nbw-CD": "nbw-Latn-CD", - "nbw-Latn": "nbw-Latn-CD", - "nby": "nby-Latn-PG", - "nby-Latn": "nby-Latn-PG", - "nby-PG": "nby-Latn-PG", - "nca": "nca-Latn-PG", - "nca-Latn": "nca-Latn-PG", - "nca-PG": "nca-Latn-PG", - "ncb": "ncb-Latn-IN", - "ncb-IN": "ncb-Latn-IN", - "ncb-Latn": "ncb-Latn-IN", - "ncc": "ncc-Latn-PG", - "ncc-Latn": "ncc-Latn-PG", - "ncc-PG": "ncc-Latn-PG", - "ncd": "ncd-Deva-NP", - "ncd-Deva": "ncd-Deva-NP", - "ncd-NP": "ncd-Deva-NP", - "nce": "nce-Latn-PG", - "nce-Latn": "nce-Latn-PG", - "nce-PG": "nce-Latn-PG", - "ncf": "ncf-Latn-PG", - "ncf-Latn": "ncf-Latn-PG", - "ncf-PG": "ncf-Latn-PG", - "ncg": "ncg-Latn-CA", - "ncg-CA": "ncg-Latn-CA", - "ncg-Latn": "ncg-Latn-CA", - "nch": "nch-Latn-MX", - "nch-Latn": "nch-Latn-MX", - "nch-MX": "nch-Latn-MX", - "nci": "nci-Latn-MX", - "nci-Latn": "nci-Latn-MX", - "nci-MX": "nci-Latn-MX", - "ncj": "ncj-Latn-MX", - "ncj-Latn": "ncj-Latn-MX", - "ncj-MX": "ncj-Latn-MX", - "nck": "nck-Latn-AU", - "nck-AU": "nck-Latn-AU", - "nck-Latn": "nck-Latn-AU", - "ncl": "ncl-Latn-MX", - "ncl-Latn": "ncl-Latn-MX", - "ncl-MX": "ncl-Latn-MX", - "ncm": "ncm-Latn-PG", - "ncm-Latn": "ncm-Latn-PG", - "ncm-PG": "ncm-Latn-PG", - "ncn": "ncn-Latn-PG", - "ncn-Latn": "ncn-Latn-PG", - "ncn-PG": "ncn-Latn-PG", - "nco": "nco-Latn-PG", - "nco-Latn": "nco-Latn-PG", - "nco-PG": "nco-Latn-PG", - "ncq": "ncq-Laoo-LA", - "ncq-LA": "ncq-Laoo-LA", - "ncq-Laoo": "ncq-Laoo-LA", - "ncr": "ncr-Latn-CM", - "ncr-CM": "ncr-Latn-CM", - "ncr-Latn": "ncr-Latn-CM", - "nct": "nct-Latn-IN", - "nct-IN": "nct-Latn-IN", - "nct-Latn": "nct-Latn-IN", - "ncu": "ncu-Latn-GH", - "ncu-GH": "ncu-Latn-GH", - "ncu-Latn": "ncu-Latn-GH", - "ncx": "ncx-Latn-MX", - "ncx-Latn": "ncx-Latn-MX", - "ncx-MX": "ncx-Latn-MX", - "ncz": "ncz-Latn-US", - "ncz-Latn": "ncz-Latn-US", - "ncz-US": "ncz-Latn-US", - "nd": "nd-Latn-ZW", - "nd-Latn": "nd-Latn-ZW", - "nd-ZW": "nd-Latn-ZW", - "nda": "nda-Latn-CG", - "nda-CG": "nda-Latn-CG", - "nda-Latn": "nda-Latn-CG", - "ndb": "ndb-Latn-CM", - "ndb-CM": "ndb-Latn-CM", - "ndb-Latn": "ndb-Latn-CM", - "ndc": "ndc-Latn-MZ", - "ndc-Latn": "ndc-Latn-MZ", - "ndc-MZ": "ndc-Latn-MZ", - "ndd": "ndd-Latn-NG", - "ndd-Latn": "ndd-Latn-NG", - "ndd-NG": "ndd-Latn-NG", - "ndf": "ndf-Cyrl-RU", - "ndf-Cyrl": "ndf-Cyrl-RU", - "ndf-RU": "ndf-Cyrl-RU", - "ndg": "ndg-Latn-TZ", - "ndg-Latn": "ndg-Latn-TZ", - "ndg-TZ": "ndg-Latn-TZ", - "ndh": "ndh-Latn-TZ", - "ndh-Latn": "ndh-Latn-TZ", - "ndh-TZ": "ndh-Latn-TZ", - "ndi": "ndi-Latn-NG", - "ndi-Latn": "ndi-Latn-NG", - "ndi-NG": "ndi-Latn-NG", - "ndj": "ndj-Latn-TZ", - "ndj-Latn": "ndj-Latn-TZ", - "ndj-TZ": "ndj-Latn-TZ", - "ndk": "ndk-Latn-CD", - "ndk-CD": "ndk-Latn-CD", - "ndk-Latn": "ndk-Latn-CD", - "ndl": "ndl-Latn-CD", - "ndl-CD": "ndl-Latn-CD", - "ndl-Latn": "ndl-Latn-CD", - "ndm": "ndm-Latn-TD", - "ndm-Latn": "ndm-Latn-TD", - "ndm-TD": "ndm-Latn-TD", - "ndn": "ndn-Latn-CG", - "ndn-CG": "ndn-Latn-CG", - "ndn-Latn": "ndn-Latn-CG", - "ndp": "ndp-Latn-UG", - "ndp-Latn": "ndp-Latn-UG", - "ndp-UG": "ndp-Latn-UG", - "ndq": "ndq-Latn-AO", - "ndq-AO": "ndq-Latn-AO", - "ndq-Latn": "ndq-Latn-AO", - "ndr": "ndr-Latn-NG", - "ndr-Latn": "ndr-Latn-NG", - "ndr-NG": "ndr-Latn-NG", - "nds": "nds-Latn-DE", - "nds-DE": "nds-Latn-DE", - "nds-Latn": "nds-Latn-DE", - "ndt": "ndt-Latn-CD", - "ndt-CD": "ndt-Latn-CD", - "ndt-Latn": "ndt-Latn-CD", - "ndu": "ndu-Latn-CM", - "ndu-CM": "ndu-Latn-CM", - "ndu-Latn": "ndu-Latn-CM", - "ndv": "ndv-Latn-SN", - "ndv-Latn": "ndv-Latn-SN", - "ndv-SN": "ndv-Latn-SN", - "ndw": "ndw-Latn-CD", - "ndw-CD": "ndw-Latn-CD", - "ndw-Latn": "ndw-Latn-CD", - "ndx": "ndx-Latn-ID", - "ndx-ID": "ndx-Latn-ID", - "ndx-Latn": "ndx-Latn-ID", - "ndy": "ndy-Latn-CF", - "ndy-CF": "ndy-Latn-CF", - "ndy-Latn": "ndy-Latn-CF", - "ndz": "ndz-Latn-SS", - "ndz-Latn": "ndz-Latn-SS", - "ndz-SS": "ndz-Latn-SS", - "ne": "ne-Deva-NP", - "ne-Deva": "ne-Deva-NP", - "ne-Deva-BT": "ne-Deva-BT", - "ne-Deva-NP": "ne-Deva-NP", - "ne-NP": "ne-Deva-NP", - "nea": "nea-Latn-ID", - "nea-ID": "nea-Latn-ID", - "nea-Latn": "nea-Latn-ID", - "neb": "neb-Latn-CI", - "neb-CI": "neb-Latn-CI", - "neb-Latn": "neb-Latn-CI", - "nec": "nec-Latn-ID", - "nec-ID": "nec-Latn-ID", - "nec-Latn": "nec-Latn-ID", - "ned": "ned-Latn-NG", - "ned-Latn": "ned-Latn-NG", - "ned-NG": "ned-Latn-NG", - "nee": "nee-Latn-NC", - "nee-Latn": "nee-Latn-NC", - "nee-NC": "nee-Latn-NC", - "neg": "neg-Cyrl-RU", - "neg-Cyrl": "neg-Cyrl-RU", - "neg-RU": "neg-Cyrl-RU", - "neh": "neh-Tibt-BT", - "neh-BT": "neh-Tibt-BT", - "neh-Tibt": "neh-Tibt-BT", - "nei": "nei-Xsux-TR", - "nei-TR": "nei-Xsux-TR", - "nei-Xsux": "nei-Xsux-TR", - "nej": "nej-Latn-PG", - "nej-Latn": "nej-Latn-PG", - "nej-PG": "nej-Latn-PG", - "nek": "nek-Latn-NC", - "nek-Latn": "nek-Latn-NC", - "nek-NC": "nek-Latn-NC", - "nem": "nem-Latn-NC", - "nem-Latn": "nem-Latn-NC", - "nem-NC": "nem-Latn-NC", - "nen": "nen-Latn-NC", - "nen-Latn": "nen-Latn-NC", - "nen-NC": "nen-Latn-NC", - "neo": "neo-Latn-VN", - "neo-Latn": "neo-Latn-VN", - "neo-VN": "neo-Latn-VN", - "neq": "neq-Latn-MX", - "neq-Latn": "neq-Latn-MX", - "neq-MX": "neq-Latn-MX", - "ner": "ner-Latn-ID", - "ner-ID": "ner-Latn-ID", - "ner-Latn": "ner-Latn-ID", - "net": "net-Latn-PG", - "net-Latn": "net-Latn-PG", - "net-PG": "net-Latn-PG", - "neu": "neu-Latn-001", - "neu-001": "neu-Latn-001", - "neu-Latn": "neu-Latn-001", - "new": "new-Deva-NP", - "new-Deva": "new-Deva-NP", - "new-NP": "new-Deva-NP", - "new-Newa": "new-Newa-NP", - "nex": "nex-Latn-PG", - "nex-Latn": "nex-Latn-PG", - "nex-PG": "nex-Latn-PG", - "ney": "ney-Latn-CI", - "ney-CI": "ney-Latn-CI", - "ney-Latn": "ney-Latn-CI", - "nez": "nez-Latn-US", - "nez-Latn": "nez-Latn-US", - "nez-US": "nez-Latn-US", - "nfa": "nfa-Latn-ID", - "nfa-ID": "nfa-Latn-ID", - "nfa-Latn": "nfa-Latn-ID", - "nfd": "nfd-Latn-NG", - "nfd-Latn": "nfd-Latn-NG", - "nfd-NG": "nfd-Latn-NG", - "nfl": "nfl-Latn-SB", - "nfl-Latn": "nfl-Latn-SB", - "nfl-SB": "nfl-Latn-SB", - "nfr": "nfr-Latn-GH", - "nfr-GH": "nfr-Latn-GH", - "nfr-Latn": "nfr-Latn-GH", - "nfu": "nfu-Latn-CM", - "nfu-CM": "nfu-Latn-CM", - "nfu-Latn": "nfu-Latn-CM", - "ng": "ng-Latn-NA", - "ng-Latn": "ng-Latn-NA", - "ng-NA": "ng-Latn-NA", - "nga": "nga-Latn-CD", - "nga-CD": "nga-Latn-CD", - "nga-Latn": "nga-Latn-CD", - "ngb": "ngb-Latn-CD", - "ngb-CD": "ngb-Latn-CD", - "ngb-Latn": "ngb-Latn-CD", - "ngc": "ngc-Latn-CD", - "ngc-CD": "ngc-Latn-CD", - "ngc-Latn": "ngc-Latn-CD", - "ngd": "ngd-Latn-CF", - "ngd-CF": "ngd-Latn-CF", - "ngd-Latn": "ngd-Latn-CF", - "nge": "nge-Latn-CM", - "nge-CM": "nge-Latn-CM", - "nge-Latn": "nge-Latn-CM", - "ngg": "ngg-Latn-CF", - "ngg-CF": "ngg-Latn-CF", - "ngg-Latn": "ngg-Latn-CF", - "ngh": "ngh-Latn-ZA", - "ngh-Latn": "ngh-Latn-ZA", - "ngh-ZA": "ngh-Latn-ZA", - "ngi": "ngi-Latn-NG", - "ngi-Latn": "ngi-Latn-NG", - "ngi-NG": "ngi-Latn-NG", - "ngj": "ngj-Latn-CM", - "ngj-CM": "ngj-Latn-CM", - "ngj-Latn": "ngj-Latn-CM", - "ngk": "ngk-Latn-AU", - "ngk-AU": "ngk-Latn-AU", - "ngk-Latn": "ngk-Latn-AU", - "ngl": "ngl-Latn-MZ", - "ngl-Latn": "ngl-Latn-MZ", - "ngl-MZ": "ngl-Latn-MZ", - "ngm": "ngm-Latn-FM", - "ngm-FM": "ngm-Latn-FM", - "ngm-Latn": "ngm-Latn-FM", - "ngn": "ngn-Latn-CM", - "ngn-CM": "ngn-Latn-CM", - "ngn-Latn": "ngn-Latn-CM", - "ngp": "ngp-Latn-TZ", - "ngp-Latn": "ngp-Latn-TZ", - "ngp-TZ": "ngp-Latn-TZ", - "ngq": "ngq-Latn-TZ", - "ngq-Latn": "ngq-Latn-TZ", - "ngq-TZ": "ngq-Latn-TZ", - "ngr": "ngr-Latn-SB", - "ngr-Latn": "ngr-Latn-SB", - "ngr-SB": "ngr-Latn-SB", - "ngs": "ngs-Latn-NG", - "ngs-Latn": "ngs-Latn-NG", - "ngs-NG": "ngs-Latn-NG", - "ngt": "ngt-Laoo-LA", - "ngt-LA": "ngt-Laoo-LA", - "ngt-Laoo": "ngt-Laoo-LA", - "ngu": "ngu-Latn-MX", - "ngu-Latn": "ngu-Latn-MX", - "ngu-MX": "ngu-Latn-MX", - "ngv": "ngv-Latn-CM", - "ngv-CM": "ngv-Latn-CM", - "ngv-Latn": "ngv-Latn-CM", - "ngw": "ngw-Latn-NG", - "ngw-Latn": "ngw-Latn-NG", - "ngw-NG": "ngw-Latn-NG", - "ngx": "ngx-Latn-NG", - "ngx-Latn": "ngx-Latn-NG", - "ngx-NG": "ngx-Latn-NG", - "ngy": "ngy-Latn-CM", - "ngy-CM": "ngy-Latn-CM", - "ngy-Latn": "ngy-Latn-CM", - "ngz": "ngz-Latn-CG", - "ngz-CG": "ngz-Latn-CG", - "ngz-Latn": "ngz-Latn-CG", - "nha": "nha-Latn-AU", - "nha-AU": "nha-Latn-AU", - "nha-Latn": "nha-Latn-AU", - "nhb": "nhb-Latn-CI", - "nhb-CI": "nhb-Latn-CI", - "nhb-Latn": "nhb-Latn-CI", - "nhc": "nhc-Latn-MX", - "nhc-Latn": "nhc-Latn-MX", - "nhc-MX": "nhc-Latn-MX", - "nhd": "nhd-Latn-PY", - "nhd-Latn": "nhd-Latn-PY", - "nhd-PY": "nhd-Latn-PY", - "nhe": "nhe-Latn-MX", - "nhe-Latn": "nhe-Latn-MX", - "nhe-MX": "nhe-Latn-MX", - "nhf": "nhf-Latn-AU", - "nhf-AU": "nhf-Latn-AU", - "nhf-Latn": "nhf-Latn-AU", - "nhg": "nhg-Latn-MX", - "nhg-Latn": "nhg-Latn-MX", - "nhg-MX": "nhg-Latn-MX", - "nhi": "nhi-Latn-MX", - "nhi-Latn": "nhi-Latn-MX", - "nhi-MX": "nhi-Latn-MX", - "nhk": "nhk-Latn-MX", - "nhk-Latn": "nhk-Latn-MX", - "nhk-MX": "nhk-Latn-MX", - "nhm": "nhm-Latn-MX", - "nhm-Latn": "nhm-Latn-MX", - "nhm-MX": "nhm-Latn-MX", - "nhn": "nhn-Latn-MX", - "nhn-Latn": "nhn-Latn-MX", - "nhn-MX": "nhn-Latn-MX", - "nho": "nho-Latn-PG", - "nho-Latn": "nho-Latn-PG", - "nho-PG": "nho-Latn-PG", - "nhp": "nhp-Latn-MX", - "nhp-Latn": "nhp-Latn-MX", - "nhp-MX": "nhp-Latn-MX", - "nhq": "nhq-Latn-MX", - "nhq-Latn": "nhq-Latn-MX", - "nhq-MX": "nhq-Latn-MX", - "nhr": "nhr-Latn-BW", - "nhr-BW": "nhr-Latn-BW", - "nhr-Latn": "nhr-Latn-BW", - "nht": "nht-Latn-MX", - "nht-Latn": "nht-Latn-MX", - "nht-MX": "nht-Latn-MX", - "nhu": "nhu-Latn-CM", - "nhu-CM": "nhu-Latn-CM", - "nhu-Latn": "nhu-Latn-CM", - "nhv": "nhv-Latn-MX", - "nhv-Latn": "nhv-Latn-MX", - "nhv-MX": "nhv-Latn-MX", - "nhw": "nhw-Latn-MX", - "nhw-Latn": "nhw-Latn-MX", - "nhw-MX": "nhw-Latn-MX", - "nhx": "nhx-Latn-MX", - "nhx-Latn": "nhx-Latn-MX", - "nhx-MX": "nhx-Latn-MX", - "nhy": "nhy-Latn-MX", - "nhy-Latn": "nhy-Latn-MX", - "nhy-MX": "nhy-Latn-MX", - "nhz": "nhz-Latn-MX", - "nhz-Latn": "nhz-Latn-MX", - "nhz-MX": "nhz-Latn-MX", - "nia": "nia-Latn-ID", - "nia-ID": "nia-Latn-ID", - "nia-Latn": "nia-Latn-ID", - "nib": "nib-Latn-PG", - "nib-Latn": "nib-Latn-PG", - "nib-PG": "nib-Latn-PG", - "nid": "nid-Latn-AU", - "nid-AU": "nid-Latn-AU", - "nid-Latn": "nid-Latn-AU", - "nie": "nie-Latn-TD", - "nie-Latn": "nie-Latn-TD", - "nie-TD": "nie-Latn-TD", - "nif": "nif-Latn-PG", - "nif-Latn": "nif-Latn-PG", - "nif-PG": "nif-Latn-PG", - "nig": "nig-Latn-AU", - "nig-AU": "nig-Latn-AU", - "nig-Latn": "nig-Latn-AU", - "nih": "nih-Latn-TZ", - "nih-Latn": "nih-Latn-TZ", - "nih-TZ": "nih-Latn-TZ", - "nii": "nii-Latn-PG", - "nii-Latn": "nii-Latn-PG", - "nii-PG": "nii-Latn-PG", - "nij": "nij-Latn-ID", - "nij-ID": "nij-Latn-ID", - "nij-Latn": "nij-Latn-ID", - "nil": "nil-Latn-ID", - "nil-ID": "nil-Latn-ID", - "nil-Latn": "nil-Latn-ID", - "nim": "nim-Latn-TZ", - "nim-Latn": "nim-Latn-TZ", - "nim-TZ": "nim-Latn-TZ", - "nin": "nin-Latn-NG", - "nin-Latn": "nin-Latn-NG", - "nin-NG": "nin-Latn-NG", - "nio": "nio-Cyrl-RU", - "nio-Cyrl": "nio-Cyrl-RU", - "nio-RU": "nio-Cyrl-RU", - "niq": "niq-Latn-KE", - "niq-KE": "niq-Latn-KE", - "niq-Latn": "niq-Latn-KE", - "nir": "nir-Latn-ID", - "nir-ID": "nir-Latn-ID", - "nir-Latn": "nir-Latn-ID", - "nis": "nis-Latn-PG", - "nis-Latn": "nis-Latn-PG", - "nis-PG": "nis-Latn-PG", - "nit": "nit-Telu-IN", - "nit-IN": "nit-Telu-IN", - "nit-Telu": "nit-Telu-IN", - "niu": "niu-Latn-NU", - "niu-Latn": "niu-Latn-NU", - "niu-NU": "niu-Latn-NU", - "niv": "niv-Cyrl-RU", - "niv-Cyrl": "niv-Cyrl-RU", - "niv-RU": "niv-Cyrl-RU", - "niw": "niw-Latn-PG", - "niw-Latn": "niw-Latn-PG", - "niw-PG": "niw-Latn-PG", - "nix": "nix-Latn-CD", - "nix-CD": "nix-Latn-CD", - "nix-Latn": "nix-Latn-CD", - "niy": "niy-Latn-CD", - "niy-CD": "niy-Latn-CD", - "niy-Latn": "niy-Latn-CD", - "niz": "niz-Latn-PG", - "niz-Latn": "niz-Latn-PG", - "niz-PG": "niz-Latn-PG", - "nja": "nja-Latn-NG", - "nja-Latn": "nja-Latn-NG", - "nja-NG": "nja-Latn-NG", - "njb": "njb-Latn-IN", - "njb-IN": "njb-Latn-IN", - "njb-Latn": "njb-Latn-IN", - "njd": "njd-Latn-TZ", - "njd-Latn": "njd-Latn-TZ", - "njd-TZ": "njd-Latn-TZ", - "njh": "njh-Latn-IN", - "njh-IN": "njh-Latn-IN", - "njh-Latn": "njh-Latn-IN", - "nji": "nji-Latn-AU", - "nji-AU": "nji-Latn-AU", - "nji-Latn": "nji-Latn-AU", - "njj": "njj-Latn-CM", - "njj-CM": "njj-Latn-CM", - "njj-Latn": "njj-Latn-CM", - "njl": "njl-Latn-SS", - "njl-Latn": "njl-Latn-SS", - "njl-SS": "njl-Latn-SS", - "njm": "njm-Latn-IN", - "njm-IN": "njm-Latn-IN", - "njm-Latn": "njm-Latn-IN", - "njn": "njn-Latn-IN", - "njn-IN": "njn-Latn-IN", - "njn-Latn": "njn-Latn-IN", - "njo": "njo-Latn-IN", - "njo-IN": "njo-Latn-IN", - "njo-Latn": "njo-Latn-IN", - "njr": "njr-Latn-NG", - "njr-Latn": "njr-Latn-NG", - "njr-NG": "njr-Latn-NG", - "njs": "njs-Latn-ID", - "njs-ID": "njs-Latn-ID", - "njs-Latn": "njs-Latn-ID", - "njt": "njt-Latn-SR", - "njt-Latn": "njt-Latn-SR", - "njt-SR": "njt-Latn-SR", - "nju": "nju-Latn-AU", - "nju-AU": "nju-Latn-AU", - "nju-Latn": "nju-Latn-AU", - "njx": "njx-Latn-CG", - "njx-CG": "njx-Latn-CG", - "njx-Latn": "njx-Latn-CG", - "njy": "njy-Latn-CM", - "njy-CM": "njy-Latn-CM", - "njy-Latn": "njy-Latn-CM", - "njz": "njz-Latn-IN", - "njz-IN": "njz-Latn-IN", - "njz-Latn": "njz-Latn-IN", - "nka": "nka-Latn-ZM", - "nka-Latn": "nka-Latn-ZM", - "nka-ZM": "nka-Latn-ZM", - "nkb": "nkb-Latn-IN", - "nkb-IN": "nkb-Latn-IN", - "nkb-Latn": "nkb-Latn-IN", - "nkc": "nkc-Latn-CM", - "nkc-CM": "nkc-Latn-CM", - "nkc-Latn": "nkc-Latn-CM", - "nkd": "nkd-Latn-IN", - "nkd-IN": "nkd-Latn-IN", - "nkd-Latn": "nkd-Latn-IN", - "nke": "nke-Latn-SB", - "nke-Latn": "nke-Latn-SB", - "nke-SB": "nke-Latn-SB", - "nkf": "nkf-Latn-IN", - "nkf-IN": "nkf-Latn-IN", - "nkf-Latn": "nkf-Latn-IN", - "nkg": "nkg-Latn-PG", - "nkg-Latn": "nkg-Latn-PG", - "nkg-PG": "nkg-Latn-PG", - "nkh": "nkh-Latn-IN", - "nkh-IN": "nkh-Latn-IN", - "nkh-Latn": "nkh-Latn-IN", - "nki": "nki-Latn-IN", - "nki-IN": "nki-Latn-IN", - "nki-Latn": "nki-Latn-IN", - "nkj": "nkj-Latn-ID", - "nkj-ID": "nkj-Latn-ID", - "nkj-Latn": "nkj-Latn-ID", - "nkk": "nkk-Latn-VU", - "nkk-Latn": "nkk-Latn-VU", - "nkk-VU": "nkk-Latn-VU", - "nkm": "nkm-Latn-PG", - "nkm-Latn": "nkm-Latn-PG", - "nkm-PG": "nkm-Latn-PG", - "nkn": "nkn-Latn-AO", - "nkn-AO": "nkn-Latn-AO", - "nkn-Latn": "nkn-Latn-AO", - "nko": "nko-Latn-GH", - "nko-GH": "nko-Latn-GH", - "nko-Latn": "nko-Latn-GH", - "nkq": "nkq-Latn-GH", - "nkq-GH": "nkq-Latn-GH", - "nkq-Latn": "nkq-Latn-GH", - "nkr": "nkr-Latn-FM", - "nkr-FM": "nkr-Latn-FM", - "nkr-Latn": "nkr-Latn-FM", - "nks": "nks-Latn-ID", - "nks-ID": "nks-Latn-ID", - "nks-Latn": "nks-Latn-ID", - "nkt": "nkt-Latn-TZ", - "nkt-Latn": "nkt-Latn-TZ", - "nkt-TZ": "nkt-Latn-TZ", - "nku": "nku-Latn-CI", - "nku-CI": "nku-Latn-CI", - "nku-Latn": "nku-Latn-CI", - "nkv": "nkv-Latn-MW", - "nkv-Latn": "nkv-Latn-MW", - "nkv-MW": "nkv-Latn-MW", - "nkw": "nkw-Latn-CD", - "nkw-CD": "nkw-Latn-CD", - "nkw-Latn": "nkw-Latn-CD", - "nkx": "nkx-Latn-NG", - "nkx-Latn": "nkx-Latn-NG", - "nkx-NG": "nkx-Latn-NG", - "nkz": "nkz-Latn-NG", - "nkz-Latn": "nkz-Latn-NG", - "nkz-NG": "nkz-Latn-NG", - "nl": "nl-Latn-NL", - "nl-AW": "nl-Latn-AW", - "nl-BE": "nl-Latn-BE", - "nl-BQ": "nl-Latn-BQ", - "nl-CW": "nl-Latn-CW", - "nl-Latn": "nl-Latn-NL", - "nl-NL": "nl-Latn-NL", - "nl-SR": "nl-Latn-SR", - "nla": "nla-Latn-CM", - "nla-CM": "nla-Latn-CM", - "nla-Latn": "nla-Latn-CM", - "nlc": "nlc-Latn-ID", - "nlc-ID": "nlc-Latn-ID", - "nlc-Latn": "nlc-Latn-ID", - "nle": "nle-Latn-KE", - "nle-KE": "nle-Latn-KE", - "nle-Latn": "nle-Latn-KE", - "nlg": "nlg-Latn-SB", - "nlg-Latn": "nlg-Latn-SB", - "nlg-SB": "nlg-Latn-SB", - "nli": "nli-Arab-AF", - "nli-AF": "nli-Arab-AF", - "nli-Arab": "nli-Arab-AF", - "nlj": "nlj-Latn-CD", - "nlj-CD": "nlj-Latn-CD", - "nlj-Latn": "nlj-Latn-CD", - "nlk": "nlk-Latn-ID", - "nlk-ID": "nlk-Latn-ID", - "nlk-Latn": "nlk-Latn-ID", - "nlm": "nlm-Arab-PK", - "nlm-Arab": "nlm-Arab-PK", - "nlm-PK": "nlm-Arab-PK", - "nlo": "nlo-Latn-CD", - "nlo-CD": "nlo-Latn-CD", - "nlo-Latn": "nlo-Latn-CD", - "nlq": "nlq-Latn-MM", - "nlq-Latn": "nlq-Latn-MM", - "nlq-MM": "nlq-Latn-MM", - "nlu": "nlu-Latn-GH", - "nlu-GH": "nlu-Latn-GH", - "nlu-Latn": "nlu-Latn-GH", - "nlv": "nlv-Latn-MX", - "nlv-Latn": "nlv-Latn-MX", - "nlv-MX": "nlv-Latn-MX", - "nlw": "nlw-Latn-AU", - "nlw-AU": "nlw-Latn-AU", - "nlw-Latn": "nlw-Latn-AU", - "nlx": "nlx-Deva-IN", - "nlx-Deva": "nlx-Deva-IN", - "nlx-IN": "nlx-Deva-IN", - "nly": "nly-Latn-AU", - "nly-AU": "nly-Latn-AU", - "nly-Latn": "nly-Latn-AU", - "nlz": "nlz-Latn-SB", - "nlz-Latn": "nlz-Latn-SB", - "nlz-SB": "nlz-Latn-SB", - "nma": "nma-Latn-IN", - "nma-IN": "nma-Latn-IN", - "nma-Latn": "nma-Latn-IN", - "nmb": "nmb-Latn-VU", - "nmb-Latn": "nmb-Latn-VU", - "nmb-VU": "nmb-Latn-VU", - "nmc": "nmc-Latn-TD", - "nmc-Latn": "nmc-Latn-TD", - "nmc-TD": "nmc-Latn-TD", - "nmd": "nmd-Latn-GA", - "nmd-GA": "nmd-Latn-GA", - "nmd-Latn": "nmd-Latn-GA", - "nme": "nme-Latn-IN", - "nme-IN": "nme-Latn-IN", - "nme-Latn": "nme-Latn-IN", - "nmf": "nmf-Latn-IN", - "nmf-IN": "nmf-Latn-IN", - "nmf-Latn": "nmf-Latn-IN", - "nmg": "nmg-Latn-CM", - "nmg-CM": "nmg-Latn-CM", - "nmg-Latn": "nmg-Latn-CM", - "nmh": "nmh-Latn-IN", - "nmh-IN": "nmh-Latn-IN", - "nmh-Latn": "nmh-Latn-IN", - "nmi": "nmi-Latn-NG", - "nmi-Latn": "nmi-Latn-NG", - "nmi-NG": "nmi-Latn-NG", - "nmj": "nmj-Latn-CF", - "nmj-CF": "nmj-Latn-CF", - "nmj-Latn": "nmj-Latn-CF", - "nmk": "nmk-Latn-VU", - "nmk-Latn": "nmk-Latn-VU", - "nmk-VU": "nmk-Latn-VU", - "nml": "nml-Latn-CM", - "nml-CM": "nml-Latn-CM", - "nml-Latn": "nml-Latn-CM", - "nmm": "nmm-Deva-NP", - "nmm-Deva": "nmm-Deva-NP", - "nmm-NP": "nmm-Deva-NP", - "nmn": "nmn-Latn-BW", - "nmn-BW": "nmn-Latn-BW", - "nmn-Latn": "nmn-Latn-BW", - "nmo": "nmo-Latn-IN", - "nmo-IN": "nmo-Latn-IN", - "nmo-Latn": "nmo-Latn-IN", - "nmp": "nmp-Latn-AU", - "nmp-AU": "nmp-Latn-AU", - "nmp-Latn": "nmp-Latn-AU", - "nmq": "nmq-Latn-ZW", - "nmq-Latn": "nmq-Latn-ZW", - "nmq-ZW": "nmq-Latn-ZW", - "nmr": "nmr-Latn-CM", - "nmr-CM": "nmr-Latn-CM", - "nmr-Latn": "nmr-Latn-CM", - "nms": "nms-Latn-VU", - "nms-Latn": "nms-Latn-VU", - "nms-VU": "nms-Latn-VU", - "nmt": "nmt-Latn-FM", - "nmt-FM": "nmt-Latn-FM", - "nmt-Latn": "nmt-Latn-FM", - "nmu": "nmu-Latn-US", - "nmu-Latn": "nmu-Latn-US", - "nmu-US": "nmu-Latn-US", - "nmv": "nmv-Latn-AU", - "nmv-AU": "nmv-Latn-AU", - "nmv-Latn": "nmv-Latn-AU", - "nmw": "nmw-Latn-PG", - "nmw-Latn": "nmw-Latn-PG", - "nmw-PG": "nmw-Latn-PG", - "nmx": "nmx-Latn-PG", - "nmx-Latn": "nmx-Latn-PG", - "nmx-PG": "nmx-Latn-PG", - "nmz": "nmz-Latn-TG", - "nmz-Latn": "nmz-Latn-TG", - "nmz-TG": "nmz-Latn-TG", - "nn": "nn-Latn-NO", - "nn-Latn": "nn-Latn-NO", - "nn-NO": "nn-Latn-NO", - "nna": "nna-Latn-AU", - "nna-AU": "nna-Latn-AU", - "nna-Latn": "nna-Latn-AU", - "nnb": "nnb-Latn-CD", - "nnb-CD": "nnb-Latn-CD", - "nnb-Latn": "nnb-Latn-CD", - "nnc": "nnc-Latn-TD", - "nnc-Latn": "nnc-Latn-TD", - "nnc-TD": "nnc-Latn-TD", - "nnd": "nnd-Latn-VU", - "nnd-Latn": "nnd-Latn-VU", - "nnd-VU": "nnd-Latn-VU", - "nne": "nne-Latn-AO", - "nne-AO": "nne-Latn-AO", - "nne-Latn": "nne-Latn-AO", - "nnf": "nnf-Latn-PG", - "nnf-Latn": "nnf-Latn-PG", - "nnf-PG": "nnf-Latn-PG", - "nng": "nng-Latn-IN", - "nng-IN": "nng-Latn-IN", - "nng-Latn": "nng-Latn-IN", - "nnh": "nnh-Latn-CM", - "nnh-CM": "nnh-Latn-CM", - "nnh-Latn": "nnh-Latn-CM", - "nni": "nni-Latn-ID", - "nni-ID": "nni-Latn-ID", - "nni-Latn": "nni-Latn-ID", - "nnj": "nnj-Latn-ET", - "nnj-ET": "nnj-Latn-ET", - "nnj-Latn": "nnj-Latn-ET", - "nnk": "nnk-Latn-PG", - "nnk-Latn": "nnk-Latn-PG", - "nnk-PG": "nnk-Latn-PG", - "nnl": "nnl-Latn-IN", - "nnl-IN": "nnl-Latn-IN", - "nnl-Latn": "nnl-Latn-IN", - "nnm": "nnm-Latn-PG", - "nnm-Latn": "nnm-Latn-PG", - "nnm-PG": "nnm-Latn-PG", - "nnn": "nnn-Latn-TD", - "nnn-Latn": "nnn-Latn-TD", - "nnn-TD": "nnn-Latn-TD", - "nnp": "nnp-Wcho-IN", - "nnp-IN": "nnp-Wcho-IN", - "nnp-Wcho": "nnp-Wcho-IN", - "nnq": "nnq-Latn-TZ", - "nnq-Latn": "nnq-Latn-TZ", - "nnq-TZ": "nnq-Latn-TZ", - "nnr": "nnr-Latn-AU", - "nnr-AU": "nnr-Latn-AU", - "nnr-Latn": "nnr-Latn-AU", - "nnt": "nnt-Latn-US", - "nnt-Latn": "nnt-Latn-US", - "nnt-US": "nnt-Latn-US", - "nnu": "nnu-Latn-GH", - "nnu-GH": "nnu-Latn-GH", - "nnu-Latn": "nnu-Latn-GH", - "nnv": "nnv-Latn-AU", - "nnv-AU": "nnv-Latn-AU", - "nnv-Latn": "nnv-Latn-AU", - "nnw": "nnw-Latn-BF", - "nnw-BF": "nnw-Latn-BF", - "nnw-Latn": "nnw-Latn-BF", - "nny": "nny-Latn-AU", - "nny-AU": "nny-Latn-AU", - "nny-Latn": "nny-Latn-AU", - "nnz": "nnz-Latn-CM", - "nnz-CM": "nnz-Latn-CM", - "nnz-Latn": "nnz-Latn-CM", - "no": "no-Latn-NO", - "no-BV": "no-Latn-BV", - "no-Latn": "no-Latn-NO", - "no-NO": "no-Latn-NO", - "no-SJ": "no-Latn-SJ", - "noa": "noa-Latn-CO", - "noa-CO": "noa-Latn-CO", - "noa-Latn": "noa-Latn-CO", - "noc": "noc-Latn-PG", - "noc-Latn": "noc-Latn-PG", - "noc-PG": "noc-Latn-PG", - "nod": "nod-Lana-TH", - "nod-Lana": "nod-Lana-TH", - "nod-TH": "nod-Lana-TH", - "noe": "noe-Deva-IN", - "noe-Deva": "noe-Deva-IN", - "noe-IN": "noe-Deva-IN", - "nof": "nof-Latn-PG", - "nof-Latn": "nof-Latn-PG", - "nof-PG": "nof-Latn-PG", - "nog": "nog-Cyrl-RU", - "nog-Cyrl": "nog-Cyrl-RU", - "nog-RU": "nog-Cyrl-RU", - "noh": "noh-Latn-PG", - "noh-Latn": "noh-Latn-PG", - "noh-PG": "noh-Latn-PG", - "noi": "noi-Deva-IN", - "noi-Deva": "noi-Deva-IN", - "noi-IN": "noi-Deva-IN", - "noj": "noj-Latn-CO", - "noj-CO": "noj-Latn-CO", - "noj-Latn": "noj-Latn-CO", - "nok": "nok-Latn-US", - "nok-Latn": "nok-Latn-US", - "nok-US": "nok-Latn-US", - "non": "non-Runr-SE", - "non-Runr": "non-Runr-SE", - "non-SE": "non-Runr-SE", - "nop": "nop-Latn-PG", - "nop-Latn": "nop-Latn-PG", - "nop-PG": "nop-Latn-PG", - "noq": "noq-Latn-CD", - "noq-CD": "noq-Latn-CD", - "noq-Latn": "noq-Latn-CD", - "nos": "nos-Yiii-CN", - "nos-CN": "nos-Yiii-CN", - "nos-Yiii": "nos-Yiii-CN", - "not": "not-Latn-PE", - "not-Latn": "not-Latn-PE", - "not-PE": "not-Latn-PE", - "nou": "nou-Latn-PG", - "nou-Latn": "nou-Latn-PG", - "nou-PG": "nou-Latn-PG", - "nov": "nov-Latn-001", - "nov-001": "nov-Latn-001", - "nov-Latn": "nov-Latn-001", - "now": "now-Latn-TZ", - "now-Latn": "now-Latn-TZ", - "now-TZ": "now-Latn-TZ", - "noy": "noy-Latn-TD", - "noy-Latn": "noy-Latn-TD", - "noy-TD": "noy-Latn-TD", - "npb": "npb-Tibt-BT", - "npb-BT": "npb-Tibt-BT", - "npb-Tibt": "npb-Tibt-BT", - "npg": "npg-Latn-MM", - "npg-Latn": "npg-Latn-MM", - "npg-MM": "npg-Latn-MM", - "nph": "nph-Latn-IN", - "nph-IN": "nph-Latn-IN", - "nph-Latn": "nph-Latn-IN", - "npl": "npl-Latn-MX", - "npl-Latn": "npl-Latn-MX", - "npl-MX": "npl-Latn-MX", - "npn": "npn-Latn-PG", - "npn-Latn": "npn-Latn-PG", - "npn-PG": "npn-Latn-PG", - "npo": "npo-Latn-IN", - "npo-IN": "npo-Latn-IN", - "npo-Latn": "npo-Latn-IN", - "nps": "nps-Latn-ID", - "nps-ID": "nps-Latn-ID", - "nps-Latn": "nps-Latn-ID", - "npu": "npu-Latn-IN", - "npu-IN": "npu-Latn-IN", - "npu-Latn": "npu-Latn-IN", - "npx": "npx-Latn-SB", - "npx-Latn": "npx-Latn-SB", - "npx-SB": "npx-Latn-SB", - "npy": "npy-Latn-ID", - "npy-ID": "npy-Latn-ID", - "npy-Latn": "npy-Latn-ID", - "nqg": "nqg-Latn-BJ", - "nqg-BJ": "nqg-Latn-BJ", - "nqg-Latn": "nqg-Latn-BJ", - "nqk": "nqk-Latn-BJ", - "nqk-BJ": "nqk-Latn-BJ", - "nqk-Latn": "nqk-Latn-BJ", - "nql": "nql-Latn-AO", - "nql-AO": "nql-Latn-AO", - "nql-Latn": "nql-Latn-AO", - "nqm": "nqm-Latn-ID", - "nqm-ID": "nqm-Latn-ID", - "nqm-Latn": "nqm-Latn-ID", - "nqn": "nqn-Latn-PG", - "nqn-Latn": "nqn-Latn-PG", - "nqn-PG": "nqn-Latn-PG", - "nqo": "nqo-Nkoo-GN", - "nqo-GN": "nqo-Nkoo-GN", - "nqo-Nkoo": "nqo-Nkoo-GN", - "nqq": "nqq-Latn-MM", - "nqq-Latn": "nqq-Latn-MM", - "nqq-MM": "nqq-Latn-MM", - "nqt": "nqt-Latn-NG", - "nqt-Latn": "nqt-Latn-NG", - "nqt-NG": "nqt-Latn-NG", - "nqy": "nqy-Latn-MM", - "nqy-Latn": "nqy-Latn-MM", - "nqy-MM": "nqy-Latn-MM", - "nr": "nr-Latn-ZA", - "nr-Latn": "nr-Latn-ZA", - "nr-ZA": "nr-Latn-ZA", - "nra": "nra-Latn-GA", - "nra-GA": "nra-Latn-GA", - "nra-Latn": "nra-Latn-GA", - "nrb": "nrb-Latn-ER", - "nrb-ER": "nrb-Latn-ER", - "nrb-Latn": "nrb-Latn-ER", - "nre": "nre-Latn-IN", - "nre-IN": "nre-Latn-IN", - "nre-Latn": "nre-Latn-IN", - "nrf": "nrf-Latn-JE", - "nrf-JE": "nrf-Latn-JE", - "nrf-Latn": "nrf-Latn-JE", - "nrg": "nrg-Latn-VU", - "nrg-Latn": "nrg-Latn-VU", - "nrg-VU": "nrg-Latn-VU", - "nri": "nri-Latn-IN", - "nri-IN": "nri-Latn-IN", - "nri-Latn": "nri-Latn-IN", - "nrk": "nrk-Latn-AU", - "nrk-AU": "nrk-Latn-AU", - "nrk-Latn": "nrk-Latn-AU", - "nrl": "nrl-Latn-AU", - "nrl-AU": "nrl-Latn-AU", - "nrl-Latn": "nrl-Latn-AU", - "nrm": "nrm-Latn-MY", - "nrm-Latn": "nrm-Latn-MY", - "nrm-MY": "nrm-Latn-MY", - "nrn": "nrn-Runr-GB", - "nrn-GB": "nrn-Runr-GB", - "nrn-Runr": "nrn-Runr-GB", - "nrp": "nrp-Latn-IT", - "nrp-IT": "nrp-Latn-IT", - "nrp-Latn": "nrp-Latn-IT", - "nru": "nru-Latn-CN", - "nru-CN": "nru-Latn-CN", - "nru-Latn": "nru-Latn-CN", - "nrx": "nrx-Latn-AU", - "nrx-AU": "nrx-Latn-AU", - "nrx-Latn": "nrx-Latn-AU", - "nrz": "nrz-Latn-PG", - "nrz-Latn": "nrz-Latn-PG", - "nrz-PG": "nrz-Latn-PG", - "nsa": "nsa-Latn-IN", - "nsa-IN": "nsa-Latn-IN", - "nsa-Latn": "nsa-Latn-IN", - "nsb": "nsb-Latn-ZA", - "nsb-Latn": "nsb-Latn-ZA", - "nsb-ZA": "nsb-Latn-ZA", - "nsc": "nsc-Latn-NG", - "nsc-Latn": "nsc-Latn-NG", - "nsc-NG": "nsc-Latn-NG", - "nsd": "nsd-Yiii-CN", - "nsd-CN": "nsd-Yiii-CN", - "nsd-Yiii": "nsd-Yiii-CN", - "nse": "nse-Latn-ZM", - "nse-Latn": "nse-Latn-ZM", - "nse-ZM": "nse-Latn-ZM", - "nsf": "nsf-Yiii-CN", - "nsf-CN": "nsf-Yiii-CN", - "nsf-Yiii": "nsf-Yiii-CN", - "nsg": "nsg-Latn-TZ", - "nsg-Latn": "nsg-Latn-TZ", - "nsg-TZ": "nsg-Latn-TZ", - "nsh": "nsh-Latn-CM", - "nsh-CM": "nsh-Latn-CM", - "nsh-Latn": "nsh-Latn-CM", - "nsk": "nsk-Cans-CA", - "nsk-CA": "nsk-Cans-CA", - "nsk-Cans": "nsk-Cans-CA", - "nsm": "nsm-Latn-IN", - "nsm-IN": "nsm-Latn-IN", - "nsm-Latn": "nsm-Latn-IN", - "nsn": "nsn-Latn-PG", - "nsn-Latn": "nsn-Latn-PG", - "nsn-PG": "nsn-Latn-PG", - "nso": "nso-Latn-ZA", - "nso-Latn": "nso-Latn-ZA", - "nso-ZA": "nso-Latn-ZA", - "nsq": "nsq-Latn-US", - "nsq-Latn": "nsq-Latn-US", - "nsq-US": "nsq-Latn-US", - "nss": "nss-Latn-PG", - "nss-Latn": "nss-Latn-PG", - "nss-PG": "nss-Latn-PG", - "nst": "nst-Tnsa-IN", - "nst-IN": "nst-Tnsa-IN", - "nst-Tnsa": "nst-Tnsa-IN", - "nsu": "nsu-Latn-MX", - "nsu-Latn": "nsu-Latn-MX", - "nsu-MX": "nsu-Latn-MX", - "nsv": "nsv-Yiii-CN", - "nsv-CN": "nsv-Yiii-CN", - "nsv-Yiii": "nsv-Yiii-CN", - "nsw": "nsw-Latn-VU", - "nsw-Latn": "nsw-Latn-VU", - "nsw-VU": "nsw-Latn-VU", - "nsx": "nsx-Latn-AO", - "nsx-AO": "nsx-Latn-AO", - "nsx-Latn": "nsx-Latn-AO", - "nsy": "nsy-Latn-ID", - "nsy-ID": "nsy-Latn-ID", - "nsy-Latn": "nsy-Latn-ID", - "nsz": "nsz-Latn-US", - "nsz-Latn": "nsz-Latn-US", - "nsz-US": "nsz-Latn-US", - "ntd": "ntd-Latn-MY", - "ntd-Latn": "ntd-Latn-MY", - "ntd-MY": "ntd-Latn-MY", - "nte": "nte-Latn-MZ", - "nte-Latn": "nte-Latn-MZ", - "nte-MZ": "nte-Latn-MZ", - "ntg": "ntg-Latn-AU", - "ntg-AU": "ntg-Latn-AU", - "ntg-Latn": "ntg-Latn-AU", - "nti": "nti-Latn-BF", - "nti-BF": "nti-Latn-BF", - "nti-Latn": "nti-Latn-BF", - "ntj": "ntj-Latn-AU", - "ntj-AU": "ntj-Latn-AU", - "ntj-Latn": "ntj-Latn-AU", - "ntk": "ntk-Latn-TZ", - "ntk-Latn": "ntk-Latn-TZ", - "ntk-TZ": "ntk-Latn-TZ", - "ntm": "ntm-Latn-BJ", - "ntm-BJ": "ntm-Latn-BJ", - "ntm-Latn": "ntm-Latn-BJ", - "nto": "nto-Latn-CD", - "nto-CD": "nto-Latn-CD", - "nto-Latn": "nto-Latn-CD", - "ntp": "ntp-Latn-MX", - "ntp-Latn": "ntp-Latn-MX", - "ntp-MX": "ntp-Latn-MX", - "ntr": "ntr-Latn-GH", - "ntr-GH": "ntr-Latn-GH", - "ntr-Latn": "ntr-Latn-GH", - "ntu": "ntu-Latn-SB", - "ntu-Latn": "ntu-Latn-SB", - "ntu-SB": "ntu-Latn-SB", - "ntx": "ntx-Latn-MM", - "ntx-Latn": "ntx-Latn-MM", - "ntx-MM": "ntx-Latn-MM", - "nty": "nty-Yiii-VN", - "nty-VN": "nty-Yiii-VN", - "nty-Yiii": "nty-Yiii-VN", - "ntz": "ntz-Arab-IR", - "ntz-Arab": "ntz-Arab-IR", - "ntz-IR": "ntz-Arab-IR", - "nua": "nua-Latn-NC", - "nua-Latn": "nua-Latn-NC", - "nua-NC": "nua-Latn-NC", - "nuc": "nuc-Latn-BR", - "nuc-BR": "nuc-Latn-BR", - "nuc-Latn": "nuc-Latn-BR", - "nud": "nud-Latn-PG", - "nud-Latn": "nud-Latn-PG", - "nud-PG": "nud-Latn-PG", - "nue": "nue-Latn-CD", - "nue-CD": "nue-Latn-CD", - "nue-Latn": "nue-Latn-CD", - "nuf": "nuf-Latn-CN", - "nuf-CN": "nuf-Latn-CN", - "nuf-Latn": "nuf-Latn-CN", - "nug": "nug-Latn-AU", - "nug-AU": "nug-Latn-AU", - "nug-Latn": "nug-Latn-AU", - "nuh": "nuh-Latn-NG", - "nuh-Latn": "nuh-Latn-NG", - "nuh-NG": "nuh-Latn-NG", - "nui": "nui-Latn-GQ", - "nui-GQ": "nui-Latn-GQ", - "nui-Latn": "nui-Latn-GQ", - "nuj": "nuj-Latn-UG", - "nuj-Latn": "nuj-Latn-UG", - "nuj-UG": "nuj-Latn-UG", - "nuk": "nuk-Latn-CA", - "nuk-CA": "nuk-Latn-CA", - "nuk-Latn": "nuk-Latn-CA", - "num": "num-Latn-TO", - "num-Latn": "num-Latn-TO", - "num-TO": "num-Latn-TO", - "nun": "nun-Latn-MM", - "nun-Latn": "nun-Latn-MM", - "nun-MM": "nun-Latn-MM", - "nuo": "nuo-Latn-VN", - "nuo-Latn": "nuo-Latn-VN", - "nuo-VN": "nuo-Latn-VN", - "nup": "nup-Latn-NG", - "nup-Latn": "nup-Latn-NG", - "nup-NG": "nup-Latn-NG", - "nuq": "nuq-Latn-PG", - "nuq-Latn": "nuq-Latn-PG", - "nuq-PG": "nuq-Latn-PG", - "nur": "nur-Latn-PG", - "nur-Latn": "nur-Latn-PG", - "nur-PG": "nur-Latn-PG", - "nus": "nus-Latn-SS", - "nus-Latn": "nus-Latn-SS", - "nus-SS": "nus-Latn-SS", - "nut": "nut-Latn-VN", - "nut-Latn": "nut-Latn-VN", - "nut-VN": "nut-Latn-VN", - "nuu": "nuu-Latn-CD", - "nuu-CD": "nuu-Latn-CD", - "nuu-Latn": "nuu-Latn-CD", - "nuv": "nuv-Latn-BF", - "nuv-BF": "nuv-Latn-BF", - "nuv-Latn": "nuv-Latn-BF", - "nuw": "nuw-Latn-FM", - "nuw-FM": "nuw-Latn-FM", - "nuw-Latn": "nuw-Latn-FM", - "nux": "nux-Latn-PG", - "nux-Latn": "nux-Latn-PG", - "nux-PG": "nux-Latn-PG", - "nuy": "nuy-Latn-AU", - "nuy-AU": "nuy-Latn-AU", - "nuy-Latn": "nuy-Latn-AU", - "nuz": "nuz-Latn-MX", - "nuz-Latn": "nuz-Latn-MX", - "nuz-MX": "nuz-Latn-MX", - "nv": "nv-Latn-US", - "nv-Latn": "nv-Latn-US", - "nv-US": "nv-Latn-US", - "nvh": "nvh-Latn-VU", - "nvh-Latn": "nvh-Latn-VU", - "nvh-VU": "nvh-Latn-VU", - "nvm": "nvm-Latn-PG", - "nvm-Latn": "nvm-Latn-PG", - "nvm-PG": "nvm-Latn-PG", - "nvo": "nvo-Latn-CM", - "nvo-CM": "nvo-Latn-CM", - "nvo-Latn": "nvo-Latn-CM", - "nwb": "nwb-Latn-CI", - "nwb-CI": "nwb-Latn-CI", - "nwb-Latn": "nwb-Latn-CI", - "nwc": "nwc-Newa-NP", - "nwc-NP": "nwc-Newa-NP", - "nwc-Newa": "nwc-Newa-NP", - "nwe": "nwe-Latn-CM", - "nwe-CM": "nwe-Latn-CM", - "nwe-Latn": "nwe-Latn-CM", - "nwg": "nwg-Latn-AU", - "nwg-AU": "nwg-Latn-AU", - "nwg-Latn": "nwg-Latn-AU", - "nwi": "nwi-Latn-VU", - "nwi-Latn": "nwi-Latn-VU", - "nwi-VU": "nwi-Latn-VU", - "nwm": "nwm-Latn-SS", - "nwm-Latn": "nwm-Latn-SS", - "nwm-SS": "nwm-Latn-SS", - "nwo": "nwo-Latn-AU", - "nwo-AU": "nwo-Latn-AU", - "nwo-Latn": "nwo-Latn-AU", - "nwr": "nwr-Latn-PG", - "nwr-Latn": "nwr-Latn-PG", - "nwr-PG": "nwr-Latn-PG", - "nww": "nww-Latn-TZ", - "nww-Latn": "nww-Latn-TZ", - "nww-TZ": "nww-Latn-TZ", - "nwx": "nwx-Deva-NP", - "nwx-Deva": "nwx-Deva-NP", - "nwx-NP": "nwx-Deva-NP", - "nxa": "nxa-Latn-TL", - "nxa-Latn": "nxa-Latn-TL", - "nxa-TL": "nxa-Latn-TL", - "nxd": "nxd-Latn-CD", - "nxd-CD": "nxd-Latn-CD", - "nxd-Latn": "nxd-Latn-CD", - "nxe": "nxe-Latn-ID", - "nxe-ID": "nxe-Latn-ID", - "nxe-Latn": "nxe-Latn-ID", - "nxg": "nxg-Latn-ID", - "nxg-ID": "nxg-Latn-ID", - "nxg-Latn": "nxg-Latn-ID", - "nxi": "nxi-Latn-TZ", - "nxi-Latn": "nxi-Latn-TZ", - "nxi-TZ": "nxi-Latn-TZ", - "nxl": "nxl-Latn-ID", - "nxl-ID": "nxl-Latn-ID", - "nxl-Latn": "nxl-Latn-ID", - "nxn": "nxn-Latn-AU", - "nxn-AU": "nxn-Latn-AU", - "nxn-Latn": "nxn-Latn-AU", - "nxo": "nxo-Latn-GA", - "nxo-GA": "nxo-Latn-GA", - "nxo-Latn": "nxo-Latn-GA", - "nxq": "nxq-Latn-CN", - "nxq-CN": "nxq-Latn-CN", - "nxq-Latn": "nxq-Latn-CN", - "nxr": "nxr-Latn-PG", - "nxr-Latn": "nxr-Latn-PG", - "nxr-PG": "nxr-Latn-PG", - "nxx": "nxx-Latn-ID", - "nxx-ID": "nxx-Latn-ID", - "nxx-Latn": "nxx-Latn-ID", - "ny": "ny-Latn-MW", - "ny-Latn": "ny-Latn-MW", - "ny-MW": "ny-Latn-MW", - "nyb": "nyb-Latn-GH", - "nyb-GH": "nyb-Latn-GH", - "nyb-Latn": "nyb-Latn-GH", - "nyc": "nyc-Latn-CD", - "nyc-CD": "nyc-Latn-CD", - "nyc-Latn": "nyc-Latn-CD", - "nyd": "nyd-Latn-KE", - "nyd-KE": "nyd-Latn-KE", - "nyd-Latn": "nyd-Latn-KE", - "nye": "nye-Latn-AO", - "nye-AO": "nye-Latn-AO", - "nye-Latn": "nye-Latn-AO", - "nyf": "nyf-Latn-KE", - "nyf-KE": "nyf-Latn-KE", - "nyf-Latn": "nyf-Latn-KE", - "nyg": "nyg-Latn-CD", - "nyg-CD": "nyg-Latn-CD", - "nyg-Latn": "nyg-Latn-CD", - "nyh": "nyh-Latn-AU", - "nyh-AU": "nyh-Latn-AU", - "nyh-Latn": "nyh-Latn-AU", - "nyi": "nyi-Latn-SD", - "nyi-Latn": "nyi-Latn-SD", - "nyi-SD": "nyi-Latn-SD", - "nyj": "nyj-Latn-CD", - "nyj-CD": "nyj-Latn-CD", - "nyj-Latn": "nyj-Latn-CD", - "nyk": "nyk-Latn-AO", - "nyk-AO": "nyk-Latn-AO", - "nyk-Latn": "nyk-Latn-AO", - "nyl": "nyl-Thai-TH", - "nyl-TH": "nyl-Thai-TH", - "nyl-Thai": "nyl-Thai-TH", - "nym": "nym-Latn-TZ", - "nym-Latn": "nym-Latn-TZ", - "nym-TZ": "nym-Latn-TZ", - "nyn": "nyn-Latn-UG", - "nyn-Latn": "nyn-Latn-UG", - "nyn-UG": "nyn-Latn-UG", - "nyo": "nyo-Latn-UG", - "nyo-Latn": "nyo-Latn-UG", - "nyo-UG": "nyo-Latn-UG", - "nyp": "nyp-Latn-UG", - "nyp-Latn": "nyp-Latn-UG", - "nyp-UG": "nyp-Latn-UG", - "nyq": "nyq-Arab-IR", - "nyq-Arab": "nyq-Arab-IR", - "nyq-IR": "nyq-Arab-IR", - "nyr": "nyr-Latn-MW", - "nyr-Latn": "nyr-Latn-MW", - "nyr-MW": "nyr-Latn-MW", - "nys": "nys-Latn-AU", - "nys-AU": "nys-Latn-AU", - "nys-Latn": "nys-Latn-AU", - "nyt": "nyt-Latn-AU", - "nyt-AU": "nyt-Latn-AU", - "nyt-Latn": "nyt-Latn-AU", - "nyu": "nyu-Latn-MZ", - "nyu-Latn": "nyu-Latn-MZ", - "nyu-MZ": "nyu-Latn-MZ", - "nyv": "nyv-Latn-AU", - "nyv-AU": "nyv-Latn-AU", - "nyv-Latn": "nyv-Latn-AU", - "nyw": "nyw-Thai-TH", - "nyw-TH": "nyw-Thai-TH", - "nyw-Thai": "nyw-Thai-TH", - "nyx": "nyx-Latn-AU", - "nyx-AU": "nyx-Latn-AU", - "nyx-Latn": "nyx-Latn-AU", - "nyy": "nyy-Latn-TZ", - "nyy-Latn": "nyy-Latn-TZ", - "nyy-TZ": "nyy-Latn-TZ", - "nza": "nza-Latn-CM", - "nza-CM": "nza-Latn-CM", - "nza-Latn": "nza-Latn-CM", - "nzb": "nzb-Latn-GA", - "nzb-GA": "nzb-Latn-GA", - "nzb-Latn": "nzb-Latn-GA", - "nzd": "nzd-Latn-CD", - "nzd-CD": "nzd-Latn-CD", - "nzd-Latn": "nzd-Latn-CD", - "nzi": "nzi-Latn-GH", - "nzi-GH": "nzi-Latn-GH", - "nzi-Latn": "nzi-Latn-GH", - "nzk": "nzk-Latn-CF", - "nzk-CF": "nzk-Latn-CF", - "nzk-Latn": "nzk-Latn-CF", - "nzm": "nzm-Latn-IN", - "nzm-IN": "nzm-Latn-IN", - "nzm-Latn": "nzm-Latn-IN", - "nzr": "nzr-Latn-NG", - "nzr-Latn": "nzr-Latn-NG", - "nzr-NG": "nzr-Latn-NG", - "nzu": "nzu-Latn-CG", - "nzu-CG": "nzu-Latn-CG", - "nzu-Latn": "nzu-Latn-CG", - "nzy": "nzy-Latn-TD", - "nzy-Latn": "nzy-Latn-TD", - "nzy-TD": "nzy-Latn-TD", - "nzz": "nzz-Latn-ML", - "nzz-Latn": "nzz-Latn-ML", - "nzz-ML": "nzz-Latn-ML", - "oaa": "oaa-Cyrl-RU", - "oaa-Cyrl": "oaa-Cyrl-RU", - "oaa-RU": "oaa-Cyrl-RU", - "oac": "oac-Cyrl-RU", - "oac-Cyrl": "oac-Cyrl-RU", - "oac-RU": "oac-Cyrl-RU", - "oar": "oar-Syrc-SY", - "oar-SY": "oar-Syrc-SY", - "oar-Syrc": "oar-Syrc-SY", - "oav": "oav-Geor-GE", - "oav-GE": "oav-Geor-GE", - "oav-Geor": "oav-Geor-GE", - "obi": "obi-Latn-US", - "obi-Latn": "obi-Latn-US", - "obi-US": "obi-Latn-US", - "obk": "obk-Latn-PH", - "obk-Latn": "obk-Latn-PH", - "obk-PH": "obk-Latn-PH", - "obl": "obl-Latn-CM", - "obl-CM": "obl-Latn-CM", - "obl-Latn": "obl-Latn-CM", - "obm": "obm-Phnx-JO", - "obm-JO": "obm-Phnx-JO", - "obm-Phnx": "obm-Phnx-JO", - "obo": "obo-Latn-PH", - "obo-Latn": "obo-Latn-PH", - "obo-PH": "obo-Latn-PH", - "obr": "obr-Mymr-MM", - "obr-MM": "obr-Mymr-MM", - "obr-Mymr": "obr-Mymr-MM", - "obt": "obt-Latn-FR", - "obt-FR": "obt-Latn-FR", - "obt-Latn": "obt-Latn-FR", - "obu": "obu-Latn-NG", - "obu-Latn": "obu-Latn-NG", - "obu-NG": "obu-Latn-NG", - "oc": "oc-Latn-FR", - "oc-FR": "oc-Latn-FR", - "oc-Latn": "oc-Latn-FR", - "oca": "oca-Latn-PE", - "oca-Latn": "oca-Latn-PE", - "oca-PE": "oca-Latn-PE", - "oco": "oco-Latn-GB", - "oco-GB": "oco-Latn-GB", - "oco-Latn": "oco-Latn-GB", - "ocu": "ocu-Latn-MX", - "ocu-Latn": "ocu-Latn-MX", - "ocu-MX": "ocu-Latn-MX", - "oda": "oda-Latn-NG", - "oda-Latn": "oda-Latn-NG", - "oda-NG": "oda-Latn-NG", - "odk": "odk-Arab-PK", - "odk-Arab": "odk-Arab-PK", - "odk-PK": "odk-Arab-PK", - "odt": "odt-Latn-NL", - "odt-Latn": "odt-Latn-NL", - "odt-NL": "odt-Latn-NL", - "odu": "odu-Latn-NG", - "odu-Latn": "odu-Latn-NG", - "odu-NG": "odu-Latn-NG", - "ofs": "ofs-Latn-NL", - "ofs-Latn": "ofs-Latn-NL", - "ofs-NL": "ofs-Latn-NL", - "ofu": "ofu-Latn-NG", - "ofu-Latn": "ofu-Latn-NG", - "ofu-NG": "ofu-Latn-NG", - "ogb": "ogb-Latn-NG", - "ogb-Latn": "ogb-Latn-NG", - "ogb-NG": "ogb-Latn-NG", - "ogc": "ogc-Latn-NG", - "ogc-Latn": "ogc-Latn-NG", - "ogc-NG": "ogc-Latn-NG", - "ogg": "ogg-Latn-NG", - "ogg-Latn": "ogg-Latn-NG", - "ogg-NG": "ogg-Latn-NG", - "ogo": "ogo-Latn-NG", - "ogo-Latn": "ogo-Latn-NG", - "ogo-NG": "ogo-Latn-NG", - "ogu": "ogu-Latn-NG", - "ogu-Latn": "ogu-Latn-NG", - "ogu-NG": "ogu-Latn-NG", - "oht": "oht-Xsux-TR", - "oht-TR": "oht-Xsux-TR", - "oht-Xsux": "oht-Xsux-TR", - "ohu": "ohu-Latn-HU", - "ohu-HU": "ohu-Latn-HU", - "ohu-Latn": "ohu-Latn-HU", - "oia": "oia-Latn-ID", - "oia-ID": "oia-Latn-ID", - "oia-Latn": "oia-Latn-ID", - "oie": "oie-Latn-SS", - "oie-Latn": "oie-Latn-SS", - "oie-SS": "oie-Latn-SS", - "oin": "oin-Latn-PG", - "oin-Latn": "oin-Latn-PG", - "oin-PG": "oin-Latn-PG", - "oj": "oj-Cans-CA", - "oj-CA": "oj-Cans-CA", - "oj-Cans": "oj-Cans-CA", - "ojb": "ojb-Latn-CA", - "ojb-CA": "ojb-Latn-CA", - "ojb-Latn": "ojb-Latn-CA", - "ojc": "ojc-Latn-CA", - "ojc-CA": "ojc-Latn-CA", - "ojc-Latn": "ojc-Latn-CA", - "ojs": "ojs-Cans-CA", - "ojs-CA": "ojs-Cans-CA", - "ojs-Cans": "ojs-Cans-CA", - "ojv": "ojv-Latn-SB", - "ojv-Latn": "ojv-Latn-SB", - "ojv-SB": "ojv-Latn-SB", - "ojw": "ojw-Latn-CA", - "ojw-CA": "ojw-Latn-CA", - "ojw-Latn": "ojw-Latn-CA", - "oka": "oka-Latn-CA", - "oka-CA": "oka-Latn-CA", - "oka-Latn": "oka-Latn-CA", - "okb": "okb-Latn-NG", - "okb-Latn": "okb-Latn-NG", - "okb-NG": "okb-Latn-NG", - "okc": "okc-Latn-CD", - "okc-CD": "okc-Latn-CD", - "okc-Latn": "okc-Latn-CD", - "okd": "okd-Latn-NG", - "okd-Latn": "okd-Latn-NG", - "okd-NG": "okd-Latn-NG", - "oke": "oke-Latn-NG", - "oke-Latn": "oke-Latn-NG", - "oke-NG": "oke-Latn-NG", - "okg": "okg-Latn-AU", - "okg-AU": "okg-Latn-AU", - "okg-Latn": "okg-Latn-AU", - "oki": "oki-Latn-KE", - "oki-KE": "oki-Latn-KE", - "oki-Latn": "oki-Latn-KE", - "okk": "okk-Latn-PG", - "okk-Latn": "okk-Latn-PG", - "okk-PG": "okk-Latn-PG", - "okm": "okm-Hang-KR", - "okm-Hang": "okm-Hang-KR", - "okm-KR": "okm-Hang-KR", - "oko": "oko-Hani-KR", - "oko-Hani": "oko-Hani-KR", - "oko-KR": "oko-Hani-KR", - "okr": "okr-Latn-NG", - "okr-Latn": "okr-Latn-NG", - "okr-NG": "okr-Latn-NG", - "oks": "oks-Latn-NG", - "oks-Latn": "oks-Latn-NG", - "oks-NG": "oks-Latn-NG", - "oku": "oku-Latn-CM", - "oku-CM": "oku-Latn-CM", - "oku-Latn": "oku-Latn-CM", - "okv": "okv-Latn-PG", - "okv-Latn": "okv-Latn-PG", - "okv-PG": "okv-Latn-PG", - "okx": "okx-Latn-NG", - "okx-Latn": "okx-Latn-NG", - "okx-NG": "okx-Latn-NG", - "okz": "okz-Khmr-KH", - "okz-KH": "okz-Khmr-KH", - "okz-Khmr": "okz-Khmr-KH", - "ola": "ola-Deva-NP", - "ola-Deva": "ola-Deva-NP", - "ola-NP": "ola-Deva-NP", - "old": "old-Latn-TZ", - "old-Latn": "old-Latn-TZ", - "old-TZ": "old-Latn-TZ", - "ole": "ole-Tibt-BT", - "ole-BT": "ole-Tibt-BT", - "ole-Tibt": "ole-Tibt-BT", - "olk": "olk-Latn-AU", - "olk-AU": "olk-Latn-AU", - "olk-Latn": "olk-Latn-AU", - "olm": "olm-Latn-NG", - "olm-Latn": "olm-Latn-NG", - "olm-NG": "olm-Latn-NG", - "olo": "olo-Latn-RU", - "olo-Latn": "olo-Latn-RU", - "olo-RU": "olo-Latn-RU", - "olr": "olr-Latn-VU", - "olr-Latn": "olr-Latn-VU", - "olr-VU": "olr-Latn-VU", - "olt": "olt-Latn-LT", - "olt-LT": "olt-Latn-LT", - "olt-Latn": "olt-Latn-LT", - "olu": "olu-Latn-AO", - "olu-AO": "olu-Latn-AO", - "olu-Latn": "olu-Latn-AO", - "om": "om-Latn-ET", - "om-ET": "om-Latn-ET", - "om-Latn": "om-Latn-ET", - "oma": "oma-Latn-US", - "oma-Latn": "oma-Latn-US", - "oma-US": "oma-Latn-US", - "omb": "omb-Latn-VU", - "omb-Latn": "omb-Latn-VU", - "omb-VU": "omb-Latn-VU", - "omc": "omc-Latn-PE", - "omc-Latn": "omc-Latn-PE", - "omc-PE": "omc-Latn-PE", - "omg": "omg-Latn-PE", - "omg-Latn": "omg-Latn-PE", - "omg-PE": "omg-Latn-PE", - "omi": "omi-Latn-CD", - "omi-CD": "omi-Latn-CD", - "omi-Latn": "omi-Latn-CD", - "omk": "omk-Cyrl-RU", - "omk-Cyrl": "omk-Cyrl-RU", - "omk-RU": "omk-Cyrl-RU", - "oml": "oml-Latn-CD", - "oml-CD": "oml-Latn-CD", - "oml-Latn": "oml-Latn-CD", - "omo": "omo-Latn-PG", - "omo-Latn": "omo-Latn-PG", - "omo-PG": "omo-Latn-PG", - "omp": "omp-Mtei-IN", - "omp-IN": "omp-Mtei-IN", - "omp-Mtei": "omp-Mtei-IN", - "omr": "omr-Modi-IN", - "omr-IN": "omr-Modi-IN", - "omr-Modi": "omr-Modi-IN", - "omt": "omt-Latn-KE", - "omt-KE": "omt-Latn-KE", - "omt-Latn": "omt-Latn-KE", - "omu": "omu-Latn-PE", - "omu-Latn": "omu-Latn-PE", - "omu-PE": "omu-Latn-PE", - "omw": "omw-Latn-PG", - "omw-Latn": "omw-Latn-PG", - "omw-PG": "omw-Latn-PG", - "omx": "omx-Mymr-MM", - "omx-MM": "omx-Mymr-MM", - "omx-Mymr": "omx-Mymr-MM", - "ona": "ona-Latn-AR", - "ona-AR": "ona-Latn-AR", - "ona-Latn": "ona-Latn-AR", - "one": "one-Latn-CA", - "one-CA": "one-Latn-CA", - "one-Latn": "one-Latn-CA", - "ong": "ong-Latn-PG", - "ong-Latn": "ong-Latn-PG", - "ong-PG": "ong-Latn-PG", - "oni": "oni-Latn-ID", - "oni-ID": "oni-Latn-ID", - "oni-Latn": "oni-Latn-ID", - "onj": "onj-Latn-PG", - "onj-Latn": "onj-Latn-PG", - "onj-PG": "onj-Latn-PG", - "onk": "onk-Latn-PG", - "onk-Latn": "onk-Latn-PG", - "onk-PG": "onk-Latn-PG", - "onn": "onn-Latn-PG", - "onn-Latn": "onn-Latn-PG", - "onn-PG": "onn-Latn-PG", - "ono": "ono-Latn-CA", - "ono-CA": "ono-Latn-CA", - "ono-Latn": "ono-Latn-CA", - "onp": "onp-Latn-IN", - "onp-IN": "onp-Latn-IN", - "onp-Latn": "onp-Latn-IN", - "onr": "onr-Latn-PG", - "onr-Latn": "onr-Latn-PG", - "onr-PG": "onr-Latn-PG", - "ons": "ons-Latn-PG", - "ons-Latn": "ons-Latn-PG", - "ons-PG": "ons-Latn-PG", - "ont": "ont-Latn-PG", - "ont-Latn": "ont-Latn-PG", - "ont-PG": "ont-Latn-PG", - "onu": "onu-Latn-VU", - "onu-Latn": "onu-Latn-VU", - "onu-VU": "onu-Latn-VU", - "onx": "onx-Latn-ID", - "onx-ID": "onx-Latn-ID", - "onx-Latn": "onx-Latn-ID", - "ood": "ood-Latn-US", - "ood-Latn": "ood-Latn-US", - "ood-US": "ood-Latn-US", - "oon": "oon-Deva-IN", - "oon-Deva": "oon-Deva-IN", - "oon-IN": "oon-Deva-IN", - "oor": "oor-Latn-ZA", - "oor-Latn": "oor-Latn-ZA", - "oor-ZA": "oor-Latn-ZA", - "opa": "opa-Latn-NG", - "opa-Latn": "opa-Latn-NG", - "opa-NG": "opa-Latn-NG", - "opk": "opk-Latn-ID", - "opk-ID": "opk-Latn-ID", - "opk-Latn": "opk-Latn-ID", - "opm": "opm-Latn-PG", - "opm-Latn": "opm-Latn-PG", - "opm-PG": "opm-Latn-PG", - "opo": "opo-Latn-PG", - "opo-Latn": "opo-Latn-PG", - "opo-PG": "opo-Latn-PG", - "opt": "opt-Latn-MX", - "opt-Latn": "opt-Latn-MX", - "opt-MX": "opt-Latn-MX", - "opy": "opy-Latn-BR", - "opy-BR": "opy-Latn-BR", - "opy-Latn": "opy-Latn-BR", - "or": "or-Orya-IN", - "or-IN": "or-Orya-IN", - "or-Orya": "or-Orya-IN", - "or-XX": "or-Orya-XX", - "ora": "ora-Latn-SB", - "ora-Latn": "ora-Latn-SB", - "ora-SB": "ora-Latn-SB", - "orc": "orc-Latn-KE", - "orc-KE": "orc-Latn-KE", - "orc-Latn": "orc-Latn-KE", - "ore": "ore-Latn-PE", - "ore-Latn": "ore-Latn-PE", - "ore-PE": "ore-Latn-PE", - "org": "org-Latn-NG", - "org-Latn": "org-Latn-NG", - "org-NG": "org-Latn-NG", - "orn": "orn-Latn-MY", - "orn-Latn": "orn-Latn-MY", - "orn-MY": "orn-Latn-MY", - "oro": "oro-Latn-PG", - "oro-Latn": "oro-Latn-PG", - "oro-PG": "oro-Latn-PG", - "orr": "orr-Latn-NG", - "orr-Latn": "orr-Latn-NG", - "orr-NG": "orr-Latn-NG", - "ors": "ors-Latn-MY", - "ors-Latn": "ors-Latn-MY", - "ors-MY": "ors-Latn-MY", - "ort": "ort-Telu-IN", - "ort-IN": "ort-Telu-IN", - "ort-Telu": "ort-Telu-IN", - "oru": "oru-Arab-PK", - "oru-Arab": "oru-Arab-PK", - "oru-PK": "oru-Arab-PK", - "orv": "orv-Cyrl-RU", - "orv-Cyrl": "orv-Cyrl-RU", - "orv-RU": "orv-Cyrl-RU", - "orw": "orw-Latn-BR", - "orw-BR": "orw-Latn-BR", - "orw-Latn": "orw-Latn-BR", - "orx": "orx-Latn-NG", - "orx-Latn": "orx-Latn-NG", - "orx-NG": "orx-Latn-NG", - "orz": "orz-Latn-ID", - "orz-ID": "orz-Latn-ID", - "orz-Latn": "orz-Latn-ID", - "os": "os-Cyrl-GE", - "os-Cyrl": "os-Cyrl-GE", - "os-GE": "os-Cyrl-GE", - "osa": "osa-Osge-US", - "osa-Osge": "osa-Osge-US", - "osa-US": "osa-Osge-US", - "osc": "osc-Ital-IT", - "osc-IT": "osc-Ital-IT", - "osc-Ital": "osc-Ital-IT", - "osi": "osi-Java-ID", - "osi-ID": "osi-Java-ID", - "osi-Java": "osi-Java-ID", - "oso": "oso-Latn-NG", - "oso-Latn": "oso-Latn-NG", - "oso-NG": "oso-Latn-NG", - "osp": "osp-Latn-ES", - "osp-ES": "osp-Latn-ES", - "osp-Latn": "osp-Latn-ES", - "ost": "ost-Latn-CM", - "ost-CM": "ost-Latn-CM", - "ost-Latn": "ost-Latn-CM", - "osu": "osu-Latn-PG", - "osu-Latn": "osu-Latn-PG", - "osu-PG": "osu-Latn-PG", - "osx": "osx-Latn-DE", - "osx-DE": "osx-Latn-DE", - "osx-Latn": "osx-Latn-DE", - "ota": "ota-Arab-TR", - "ota-Arab": "ota-Arab-TR", - "ota-TR": "ota-Arab-TR", - "otb": "otb-Tibt-CN", - "otb-CN": "otb-Tibt-CN", - "otb-Tibt": "otb-Tibt-CN", - "otd": "otd-Latn-ID", - "otd-ID": "otd-Latn-ID", - "otd-Latn": "otd-Latn-ID", - "ote": "ote-Latn-MX", - "ote-Latn": "ote-Latn-MX", - "ote-MX": "ote-Latn-MX", - "oti": "oti-Latn-BR", - "oti-BR": "oti-Latn-BR", - "oti-Latn": "oti-Latn-BR", - "otk": "otk-Orkh-MN", - "otk-MN": "otk-Orkh-MN", - "otk-Orkh": "otk-Orkh-MN", - "otl": "otl-Latn-MX", - "otl-Latn": "otl-Latn-MX", - "otl-MX": "otl-Latn-MX", - "otm": "otm-Latn-MX", - "otm-Latn": "otm-Latn-MX", - "otm-MX": "otm-Latn-MX", - "otn": "otn-Latn-MX", - "otn-Latn": "otn-Latn-MX", - "otn-MX": "otn-Latn-MX", - "otq": "otq-Latn-MX", - "otq-Latn": "otq-Latn-MX", - "otq-MX": "otq-Latn-MX", - "otr": "otr-Latn-SD", - "otr-Latn": "otr-Latn-SD", - "otr-SD": "otr-Latn-SD", - "ots": "ots-Latn-MX", - "ots-Latn": "ots-Latn-MX", - "ots-MX": "ots-Latn-MX", - "ott": "ott-Latn-MX", - "ott-Latn": "ott-Latn-MX", - "ott-MX": "ott-Latn-MX", - "otu": "otu-Latn-BR", - "otu-BR": "otu-Latn-BR", - "otu-Latn": "otu-Latn-BR", - "otw": "otw-Latn-CA", - "otw-CA": "otw-Latn-CA", - "otw-Latn": "otw-Latn-CA", - "otx": "otx-Latn-MX", - "otx-Latn": "otx-Latn-MX", - "otx-MX": "otx-Latn-MX", - "oty": "oty-Gran-IN", - "oty-Gran": "oty-Gran-IN", - "oty-IN": "oty-Gran-IN", - "otz": "otz-Latn-MX", - "otz-Latn": "otz-Latn-MX", - "otz-MX": "otz-Latn-MX", - "oub": "oub-Latn-LR", - "oub-LR": "oub-Latn-LR", - "oub-Latn": "oub-Latn-LR", - "oue": "oue-Latn-PG", - "oue-Latn": "oue-Latn-PG", - "oue-PG": "oue-Latn-PG", - "oui": "oui-Ougr-CN", - "oui-CN": "oui-Ougr-CN", - "oui-Ougr": "oui-Ougr-CN", - "oum": "oum-Latn-PG", - "oum-Latn": "oum-Latn-PG", - "oum-PG": "oum-Latn-PG", - "ovd": "ovd-Latn-SE", - "ovd-Latn": "ovd-Latn-SE", - "ovd-SE": "ovd-Latn-SE", - "owi": "owi-Latn-PG", - "owi-Latn": "owi-Latn-PG", - "owi-PG": "owi-Latn-PG", - "owl": "owl-Latn-GB", - "owl-GB": "owl-Latn-GB", - "owl-Latn": "owl-Latn-GB", - "oyd": "oyd-Latn-ET", - "oyd-ET": "oyd-Latn-ET", - "oyd-Latn": "oyd-Latn-ET", - "oym": "oym-Latn-BR", - "oym-BR": "oym-Latn-BR", - "oym-Latn": "oym-Latn-BR", - "oyy": "oyy-Latn-PG", - "oyy-Latn": "oyy-Latn-PG", - "oyy-PG": "oyy-Latn-PG", - "ozm": "ozm-Latn-CM", - "ozm-CM": "ozm-Latn-CM", - "ozm-Latn": "ozm-Latn-CM", - "pa": "pa-Guru-IN", - "pa-Arab": "pa-Arab-PK", - "pa-Guru": "pa-Guru-IN", - "pa-IN": "pa-Guru-IN", - "pa-PK": "pa-Arab-PK", - "pa-XX": "pa-Guru-XX", - "pab": "pab-Latn-BR", - "pab-BR": "pab-Latn-BR", - "pab-Latn": "pab-Latn-BR", - "pac": "pac-Latn-VN", - "pac-Latn": "pac-Latn-VN", - "pac-VN": "pac-Latn-VN", - "pad": "pad-Latn-BR", - "pad-BR": "pad-Latn-BR", - "pad-Latn": "pad-Latn-BR", - "pae": "pae-Latn-CD", - "pae-CD": "pae-Latn-CD", - "pae-Latn": "pae-Latn-CD", - "paf": "paf-Latn-BR", - "paf-BR": "paf-Latn-BR", - "paf-Latn": "paf-Latn-BR", - "pag": "pag-Latn-PH", - "pag-Latn": "pag-Latn-PH", - "pag-PH": "pag-Latn-PH", - "pah": "pah-Latn-BR", - "pah-BR": "pah-Latn-BR", - "pah-Latn": "pah-Latn-BR", - "pai": "pai-Latn-NG", - "pai-Latn": "pai-Latn-NG", - "pai-NG": "pai-Latn-NG", - "pak": "pak-Latn-BR", - "pak-BR": "pak-Latn-BR", - "pak-Latn": "pak-Latn-BR", - "pal": "pal-Phli-IR", - "pal-IR": "pal-Phli-IR", - "pal-Phli": "pal-Phli-IR", - "pal-Phlp": "pal-Phlp-CN", - "pam": "pam-Latn-PH", - "pam-Latn": "pam-Latn-PH", - "pam-PH": "pam-Latn-PH", - "pao": "pao-Latn-US", - "pao-Latn": "pao-Latn-US", - "pao-US": "pao-Latn-US", - "pap": "pap-Latn-CW", - "pap-BQ": "pap-Latn-BQ", - "pap-CW": "pap-Latn-CW", - "pap-Latn": "pap-Latn-CW", - "paq": "paq-Cyrl-TJ", - "paq-Cyrl": "paq-Cyrl-TJ", - "paq-TJ": "paq-Cyrl-TJ", - "par": "par-Latn-US", - "par-Latn": "par-Latn-US", - "par-US": "par-Latn-US", - "pas": "pas-Latn-ID", - "pas-ID": "pas-Latn-ID", - "pas-Latn": "pas-Latn-ID", - "pau": "pau-Latn-PW", - "pau-Latn": "pau-Latn-PW", - "pau-PW": "pau-Latn-PW", - "pav": "pav-Latn-BR", - "pav-BR": "pav-Latn-BR", - "pav-Latn": "pav-Latn-BR", - "paw": "paw-Latn-US", - "paw-Latn": "paw-Latn-US", - "paw-US": "paw-Latn-US", - "pax": "pax-Latn-BR", - "pax-BR": "pax-Latn-BR", - "pax-Latn": "pax-Latn-BR", - "pay": "pay-Latn-HN", - "pay-HN": "pay-Latn-HN", - "pay-Latn": "pay-Latn-HN", - "paz": "paz-Latn-BR", - "paz-BR": "paz-Latn-BR", - "paz-Latn": "paz-Latn-BR", - "pbb": "pbb-Latn-CO", - "pbb-CO": "pbb-Latn-CO", - "pbb-Latn": "pbb-Latn-CO", - "pbc": "pbc-Latn-GY", - "pbc-GY": "pbc-Latn-GY", - "pbc-Latn": "pbc-Latn-GY", - "pbe": "pbe-Latn-MX", - "pbe-Latn": "pbe-Latn-MX", - "pbe-MX": "pbe-Latn-MX", - "pbf": "pbf-Latn-MX", - "pbf-Latn": "pbf-Latn-MX", - "pbf-MX": "pbf-Latn-MX", - "pbg": "pbg-Latn-VE", - "pbg-Latn": "pbg-Latn-VE", - "pbg-VE": "pbg-Latn-VE", - "pbh": "pbh-Latn-VE", - "pbh-Latn": "pbh-Latn-VE", - "pbh-VE": "pbh-Latn-VE", - "pbi": "pbi-Latn-CM", - "pbi-CM": "pbi-Latn-CM", - "pbi-Latn": "pbi-Latn-CM", - "pbl": "pbl-Latn-NG", - "pbl-Latn": "pbl-Latn-NG", - "pbl-NG": "pbl-Latn-NG", - "pbm": "pbm-Latn-MX", - "pbm-Latn": "pbm-Latn-MX", - "pbm-MX": "pbm-Latn-MX", - "pbn": "pbn-Latn-NG", - "pbn-Latn": "pbn-Latn-NG", - "pbn-NG": "pbn-Latn-NG", - "pbo": "pbo-Latn-GW", - "pbo-GW": "pbo-Latn-GW", - "pbo-Latn": "pbo-Latn-GW", - "pbp": "pbp-Latn-GN", - "pbp-GN": "pbp-Latn-GN", - "pbp-Latn": "pbp-Latn-GN", - "pbr": "pbr-Latn-TZ", - "pbr-Latn": "pbr-Latn-TZ", - "pbr-TZ": "pbr-Latn-TZ", - "pbs": "pbs-Latn-MX", - "pbs-Latn": "pbs-Latn-MX", - "pbs-MX": "pbs-Latn-MX", - "pbt": "pbt-Arab-AF", - "pbt-AF": "pbt-Arab-AF", - "pbt-Arab": "pbt-Arab-AF", - "pbv": "pbv-Latn-IN", - "pbv-IN": "pbv-Latn-IN", - "pbv-Latn": "pbv-Latn-IN", - "pby": "pby-Latn-PG", - "pby-Latn": "pby-Latn-PG", - "pby-PG": "pby-Latn-PG", - "pca": "pca-Latn-MX", - "pca-Latn": "pca-Latn-MX", - "pca-MX": "pca-Latn-MX", - "pcb": "pcb-Khmr-KH", - "pcb-KH": "pcb-Khmr-KH", - "pcb-Khmr": "pcb-Khmr-KH", - "pcc": "pcc-Latn-CN", - "pcc-CN": "pcc-Latn-CN", - "pcc-Latn": "pcc-Latn-CN", - "pcd": "pcd-Latn-FR", - "pcd-FR": "pcd-Latn-FR", - "pcd-Latn": "pcd-Latn-FR", - "pce": "pce-Mymr-MM", - "pce-MM": "pce-Mymr-MM", - "pce-Mymr": "pce-Mymr-MM", - "pcf": "pcf-Mlym-IN", - "pcf-IN": "pcf-Mlym-IN", - "pcf-Mlym": "pcf-Mlym-IN", - "pcg": "pcg-Mlym-IN", - "pcg-IN": "pcg-Mlym-IN", - "pcg-Mlym": "pcg-Mlym-IN", - "pch": "pch-Deva-IN", - "pch-Deva": "pch-Deva-IN", - "pch-IN": "pch-Deva-IN", - "pci": "pci-Deva-IN", - "pci-Deva": "pci-Deva-IN", - "pci-IN": "pci-Deva-IN", - "pcj": "pcj-Telu-IN", - "pcj-IN": "pcj-Telu-IN", - "pcj-Telu": "pcj-Telu-IN", - "pck": "pck-Latn-IN", - "pck-IN": "pck-Latn-IN", - "pck-Latn": "pck-Latn-IN", - "pcm": "pcm-Latn-NG", - "pcm-Latn": "pcm-Latn-NG", - "pcm-NG": "pcm-Latn-NG", - "pcn": "pcn-Latn-NG", - "pcn-Latn": "pcn-Latn-NG", - "pcn-NG": "pcn-Latn-NG", - "pcp": "pcp-Latn-BO", - "pcp-BO": "pcp-Latn-BO", - "pcp-Latn": "pcp-Latn-BO", - "pcw": "pcw-Latn-NG", - "pcw-Latn": "pcw-Latn-NG", - "pcw-NG": "pcw-Latn-NG", - "pda": "pda-Latn-PG", - "pda-Latn": "pda-Latn-PG", - "pda-PG": "pda-Latn-PG", - "pdc": "pdc-Latn-US", - "pdc-Latn": "pdc-Latn-US", - "pdc-US": "pdc-Latn-US", - "pdn": "pdn-Latn-ID", - "pdn-ID": "pdn-Latn-ID", - "pdn-Latn": "pdn-Latn-ID", - "pdo": "pdo-Latn-ID", - "pdo-ID": "pdo-Latn-ID", - "pdo-Latn": "pdo-Latn-ID", - "pdt": "pdt-Latn-CA", - "pdt-CA": "pdt-Latn-CA", - "pdt-Latn": "pdt-Latn-CA", - "pdu": "pdu-Latn-MM", - "pdu-Latn": "pdu-Latn-MM", - "pdu-MM": "pdu-Latn-MM", - "pea": "pea-Latn-ID", - "pea-ID": "pea-Latn-ID", - "pea-Latn": "pea-Latn-ID", - "peb": "peb-Latn-US", - "peb-Latn": "peb-Latn-US", - "peb-US": "peb-Latn-US", - "ped": "ped-Latn-PG", - "ped-Latn": "ped-Latn-PG", - "ped-PG": "ped-Latn-PG", - "pee": "pee-Latn-ID", - "pee-ID": "pee-Latn-ID", - "pee-Latn": "pee-Latn-ID", - "peg": "peg-Orya-IN", - "peg-IN": "peg-Orya-IN", - "peg-Orya": "peg-Orya-IN", - "pei": "pei-Latn-MX", - "pei-Latn": "pei-Latn-MX", - "pei-MX": "pei-Latn-MX", - "pek": "pek-Latn-PG", - "pek-Latn": "pek-Latn-PG", - "pek-PG": "pek-Latn-PG", - "pel": "pel-Latn-ID", - "pel-ID": "pel-Latn-ID", - "pel-Latn": "pel-Latn-ID", - "pem": "pem-Latn-CD", - "pem-CD": "pem-Latn-CD", - "pem-Latn": "pem-Latn-CD", - "peo": "peo-Xpeo-IR", - "peo-IR": "peo-Xpeo-IR", - "peo-Xpeo": "peo-Xpeo-IR", - "pep": "pep-Latn-PG", - "pep-Latn": "pep-Latn-PG", - "pep-PG": "pep-Latn-PG", - "peq": "peq-Latn-US", - "peq-Latn": "peq-Latn-US", - "peq-US": "peq-Latn-US", - "pev": "pev-Latn-VE", - "pev-Latn": "pev-Latn-VE", - "pev-VE": "pev-Latn-VE", - "pex": "pex-Latn-PG", - "pex-Latn": "pex-Latn-PG", - "pex-PG": "pex-Latn-PG", - "pey": "pey-Latn-ID", - "pey-ID": "pey-Latn-ID", - "pey-Latn": "pey-Latn-ID", - "pez": "pez-Latn-MY", - "pez-Latn": "pez-Latn-MY", - "pez-MY": "pez-Latn-MY", - "pfa": "pfa-Latn-FM", - "pfa-FM": "pfa-Latn-FM", - "pfa-Latn": "pfa-Latn-FM", - "pfe": "pfe-Latn-CM", - "pfe-CM": "pfe-Latn-CM", - "pfe-Latn": "pfe-Latn-CM", - "pfl": "pfl-Latn-DE", - "pfl-DE": "pfl-Latn-DE", - "pfl-Latn": "pfl-Latn-DE", - "pga": "pga-Latn-SS", - "pga-Latn": "pga-Latn-SS", - "pga-SS": "pga-Latn-SS", - "pgd": "pgd-Khar-PK", - "pgd-Khar": "pgd-Khar-PK", - "pgd-PK": "pgd-Khar-PK", - "pgg": "pgg-Deva-IN", - "pgg-Deva": "pgg-Deva-IN", - "pgg-IN": "pgg-Deva-IN", - "pgi": "pgi-Latn-PG", - "pgi-Latn": "pgi-Latn-PG", - "pgi-PG": "pgi-Latn-PG", - "pgk": "pgk-Latn-VU", - "pgk-Latn": "pgk-Latn-VU", - "pgk-VU": "pgk-Latn-VU", - "pgl": "pgl-Ogam-IE", - "pgl-IE": "pgl-Ogam-IE", - "pgl-Ogam": "pgl-Ogam-IE", - "pgn": "pgn-Ital-IT", - "pgn-IT": "pgn-Ital-IT", - "pgn-Ital": "pgn-Ital-IT", - "pgs": "pgs-Latn-NG", - "pgs-Latn": "pgs-Latn-NG", - "pgs-NG": "pgs-Latn-NG", - "pgu": "pgu-Latn-ID", - "pgu-ID": "pgu-Latn-ID", - "pgu-Latn": "pgu-Latn-ID", - "phd": "phd-Deva-IN", - "phd-Deva": "phd-Deva-IN", - "phd-IN": "phd-Deva-IN", - "phg": "phg-Latn-VN", - "phg-Latn": "phg-Latn-VN", - "phg-VN": "phg-Latn-VN", - "phh": "phh-Latn-VN", - "phh-Latn": "phh-Latn-VN", - "phh-VN": "phh-Latn-VN", - "phk": "phk-Mymr-IN", - "phk-IN": "phk-Mymr-IN", - "phk-Mymr": "phk-Mymr-IN", - "phl": "phl-Arab-PK", - "phl-Arab": "phl-Arab-PK", - "phl-PK": "phl-Arab-PK", - "phm": "phm-Latn-MZ", - "phm-Latn": "phm-Latn-MZ", - "phm-MZ": "phm-Latn-MZ", - "phn": "phn-Phnx-LB", - "phn-LB": "phn-Phnx-LB", - "phn-Phnx": "phn-Phnx-LB", - "pho": "pho-Laoo-LA", - "pho-LA": "pho-Laoo-LA", - "pho-Laoo": "pho-Laoo-LA", - "phr": "phr-Arab-PK", - "phr-Arab": "phr-Arab-PK", - "phr-PK": "phr-Arab-PK", - "pht": "pht-Thai-TH", - "pht-TH": "pht-Thai-TH", - "pht-Thai": "pht-Thai-TH", - "phu": "phu-Thai-TH", - "phu-TH": "phu-Thai-TH", - "phu-Thai": "phu-Thai-TH", - "phv": "phv-Arab-AF", - "phv-AF": "phv-Arab-AF", - "phv-Arab": "phv-Arab-AF", - "phw": "phw-Deva-NP", - "phw-Deva": "phw-Deva-NP", - "phw-NP": "phw-Deva-NP", - "pi": "pi-Sinh-IN", - "pi-IN": "pi-Sinh-IN", - "pi-Sinh": "pi-Sinh-IN", - "pia": "pia-Latn-MX", - "pia-Latn": "pia-Latn-MX", - "pia-MX": "pia-Latn-MX", - "pib": "pib-Latn-PE", - "pib-Latn": "pib-Latn-PE", - "pib-PE": "pib-Latn-PE", - "pic": "pic-Latn-GA", - "pic-GA": "pic-Latn-GA", - "pic-Latn": "pic-Latn-GA", - "pid": "pid-Latn-VE", - "pid-Latn": "pid-Latn-VE", - "pid-VE": "pid-Latn-VE", - "pif": "pif-Latn-FM", - "pif-FM": "pif-Latn-FM", - "pif-Latn": "pif-Latn-FM", - "pig": "pig-Latn-PE", - "pig-Latn": "pig-Latn-PE", - "pig-PE": "pig-Latn-PE", - "pih": "pih-Latn-NF", - "pih-Latn": "pih-Latn-NF", - "pih-NF": "pih-Latn-NF", - "pij": "pij-Latn-CO", - "pij-CO": "pij-Latn-CO", - "pij-Latn": "pij-Latn-CO", - "pil": "pil-Latn-BJ", - "pil-BJ": "pil-Latn-BJ", - "pil-Latn": "pil-Latn-BJ", - "pim": "pim-Latn-US", - "pim-Latn": "pim-Latn-US", - "pim-US": "pim-Latn-US", - "pin": "pin-Latn-PG", - "pin-Latn": "pin-Latn-PG", - "pin-PG": "pin-Latn-PG", - "pio": "pio-Latn-CO", - "pio-CO": "pio-Latn-CO", - "pio-Latn": "pio-Latn-CO", - "pip": "pip-Latn-NG", - "pip-Latn": "pip-Latn-NG", - "pip-NG": "pip-Latn-NG", - "pir": "pir-Latn-BR", - "pir-BR": "pir-Latn-BR", - "pir-Latn": "pir-Latn-BR", - "pis": "pis-Latn-SB", - "pis-Latn": "pis-Latn-SB", - "pis-SB": "pis-Latn-SB", - "pit": "pit-Latn-AU", - "pit-AU": "pit-Latn-AU", - "pit-Latn": "pit-Latn-AU", - "piu": "piu-Latn-AU", - "piu-AU": "piu-Latn-AU", - "piu-Latn": "piu-Latn-AU", - "piv": "piv-Latn-SB", - "piv-Latn": "piv-Latn-SB", - "piv-SB": "piv-Latn-SB", - "piw": "piw-Latn-TZ", - "piw-Latn": "piw-Latn-TZ", - "piw-TZ": "piw-Latn-TZ", - "pix": "pix-Latn-PG", - "pix-Latn": "pix-Latn-PG", - "pix-PG": "pix-Latn-PG", - "piy": "piy-Latn-NG", - "piy-Latn": "piy-Latn-NG", - "piy-NG": "piy-Latn-NG", - "piz": "piz-Latn-NC", - "piz-Latn": "piz-Latn-NC", - "piz-NC": "piz-Latn-NC", - "pjt": "pjt-Latn-AU", - "pjt-AU": "pjt-Latn-AU", - "pjt-Latn": "pjt-Latn-AU", - "pka": "pka-Brah-IN", - "pka-Brah": "pka-Brah-IN", - "pka-IN": "pka-Brah-IN", - "pkb": "pkb-Latn-KE", - "pkb-KE": "pkb-Latn-KE", - "pkb-Latn": "pkb-Latn-KE", - "pkg": "pkg-Latn-PG", - "pkg-Latn": "pkg-Latn-PG", - "pkg-PG": "pkg-Latn-PG", - "pkh": "pkh-Latn-BD", - "pkh-BD": "pkh-Latn-BD", - "pkh-Latn": "pkh-Latn-BD", - "pkn": "pkn-Latn-AU", - "pkn-AU": "pkn-Latn-AU", - "pkn-Latn": "pkn-Latn-AU", - "pko": "pko-Latn-KE", - "pko-KE": "pko-Latn-KE", - "pko-Latn": "pko-Latn-KE", - "pkp": "pkp-Latn-CK", - "pkp-CK": "pkp-Latn-CK", - "pkp-Latn": "pkp-Latn-CK", - "pkr": "pkr-Mlym-IN", - "pkr-IN": "pkr-Mlym-IN", - "pkr-Mlym": "pkr-Mlym-IN", - "pku": "pku-Latn-ID", - "pku-ID": "pku-Latn-ID", - "pku-Latn": "pku-Latn-ID", - "pl": "pl-Latn-PL", - "pl-Latn": "pl-Latn-PL", - "pl-Latn-UA": "pl-Latn-UA", - "pl-PL": "pl-Latn-PL", - "pla": "pla-Latn-PG", - "pla-Latn": "pla-Latn-PG", - "pla-PG": "pla-Latn-PG", - "plb": "plb-Latn-VU", - "plb-Latn": "plb-Latn-VU", - "plb-VU": "plb-Latn-VU", - "plc": "plc-Latn-PH", - "plc-Latn": "plc-Latn-PH", - "plc-PH": "plc-Latn-PH", - "pld": "pld-Latn-GB", - "pld-GB": "pld-Latn-GB", - "pld-Latn": "pld-Latn-GB", - "ple": "ple-Latn-ID", - "ple-ID": "ple-Latn-ID", - "ple-Latn": "ple-Latn-ID", - "plg": "plg-Latn-AR", - "plg-AR": "plg-Latn-AR", - "plg-Latn": "plg-Latn-AR", - "plh": "plh-Latn-ID", - "plh-ID": "plh-Latn-ID", - "plh-Latn": "plh-Latn-ID", - "plk": "plk-Arab-PK", - "plk-Arab": "plk-Arab-PK", - "plk-PK": "plk-Arab-PK", - "pll": "pll-Mymr-MM", - "pll-MM": "pll-Mymr-MM", - "pll-Mymr": "pll-Mymr-MM", - "pln": "pln-Latn-CO", - "pln-CO": "pln-Latn-CO", - "pln-Latn": "pln-Latn-CO", - "plo": "plo-Latn-MX", - "plo-Latn": "plo-Latn-MX", - "plo-MX": "plo-Latn-MX", - "plr": "plr-Latn-CI", - "plr-CI": "plr-Latn-CI", - "plr-Latn": "plr-Latn-CI", - "pls": "pls-Latn-MX", - "pls-Latn": "pls-Latn-MX", - "pls-MX": "pls-Latn-MX", - "plu": "plu-Latn-BR", - "plu-BR": "plu-Latn-BR", - "plu-Latn": "plu-Latn-BR", - "plv": "plv-Latn-PH", - "plv-Latn": "plv-Latn-PH", - "plv-PH": "plv-Latn-PH", - "plw": "plw-Latn-PH", - "plw-Latn": "plw-Latn-PH", - "plw-PH": "plw-Latn-PH", - "plz": "plz-Latn-MY", - "plz-Latn": "plz-Latn-MY", - "plz-MY": "plz-Latn-MY", - "pma": "pma-Latn-VU", - "pma-Latn": "pma-Latn-VU", - "pma-VU": "pma-Latn-VU", - "pmb": "pmb-Latn-CD", - "pmb-CD": "pmb-Latn-CD", - "pmb-Latn": "pmb-Latn-CD", - "pmd": "pmd-Latn-AU", - "pmd-AU": "pmd-Latn-AU", - "pmd-Latn": "pmd-Latn-AU", - "pme": "pme-Latn-NC", - "pme-Latn": "pme-Latn-NC", - "pme-NC": "pme-Latn-NC", - "pmf": "pmf-Latn-ID", - "pmf-ID": "pmf-Latn-ID", - "pmf-Latn": "pmf-Latn-ID", - "pmh": "pmh-Brah-IN", - "pmh-Brah": "pmh-Brah-IN", - "pmh-IN": "pmh-Brah-IN", - "pmi": "pmi-Latn-CN", - "pmi-CN": "pmi-Latn-CN", - "pmi-Latn": "pmi-Latn-CN", - "pmj": "pmj-Latn-CN", - "pmj-CN": "pmj-Latn-CN", - "pmj-Latn": "pmj-Latn-CN", - "pml": "pml-Latn-TN", - "pml-Latn": "pml-Latn-TN", - "pml-TN": "pml-Latn-TN", - "pmm": "pmm-Latn-CM", - "pmm-CM": "pmm-Latn-CM", - "pmm-Latn": "pmm-Latn-CM", - "pmn": "pmn-Latn-CM", - "pmn-CM": "pmn-Latn-CM", - "pmn-Latn": "pmn-Latn-CM", - "pmo": "pmo-Latn-ID", - "pmo-ID": "pmo-Latn-ID", - "pmo-Latn": "pmo-Latn-ID", - "pmq": "pmq-Latn-MX", - "pmq-Latn": "pmq-Latn-MX", - "pmq-MX": "pmq-Latn-MX", - "pmr": "pmr-Latn-PG", - "pmr-Latn": "pmr-Latn-PG", - "pmr-PG": "pmr-Latn-PG", - "pms": "pms-Latn-IT", - "pms-IT": "pms-Latn-IT", - "pms-Latn": "pms-Latn-IT", - "pmt": "pmt-Latn-PF", - "pmt-Latn": "pmt-Latn-PF", - "pmt-PF": "pmt-Latn-PF", - "pmw": "pmw-Latn-US", - "pmw-Latn": "pmw-Latn-US", - "pmw-US": "pmw-Latn-US", - "pmx": "pmx-Latn-IN", - "pmx-IN": "pmx-Latn-IN", - "pmx-Latn": "pmx-Latn-IN", - "pmy": "pmy-Latn-ID", - "pmy-ID": "pmy-Latn-ID", - "pmy-Latn": "pmy-Latn-ID", - "pmz": "pmz-Latn-MX", - "pmz-Latn": "pmz-Latn-MX", - "pmz-MX": "pmz-Latn-MX", - "pna": "pna-Latn-MY", - "pna-Latn": "pna-Latn-MY", - "pna-MY": "pna-Latn-MY", - "pnc": "pnc-Latn-ID", - "pnc-ID": "pnc-Latn-ID", - "pnc-Latn": "pnc-Latn-ID", - "pnd": "pnd-Latn-AO", - "pnd-AO": "pnd-Latn-AO", - "pnd-Latn": "pnd-Latn-AO", - "pne": "pne-Latn-MY", - "pne-Latn": "pne-Latn-MY", - "pne-MY": "pne-Latn-MY", - "png": "png-Latn-NG", - "png-Latn": "png-Latn-NG", - "png-NG": "png-Latn-NG", - "pnh": "pnh-Latn-CK", - "pnh-CK": "pnh-Latn-CK", - "pnh-Latn": "pnh-Latn-CK", - "pni": "pni-Latn-ID", - "pni-ID": "pni-Latn-ID", - "pni-Latn": "pni-Latn-ID", - "pnj": "pnj-Latn-AU", - "pnj-AU": "pnj-Latn-AU", - "pnj-Latn": "pnj-Latn-AU", - "pnk": "pnk-Latn-BO", - "pnk-BO": "pnk-Latn-BO", - "pnk-Latn": "pnk-Latn-BO", - "pnl": "pnl-Latn-BF", - "pnl-BF": "pnl-Latn-BF", - "pnl-Latn": "pnl-Latn-BF", - "pnm": "pnm-Latn-MY", - "pnm-Latn": "pnm-Latn-MY", - "pnm-MY": "pnm-Latn-MY", - "pnn": "pnn-Latn-PG", - "pnn-Latn": "pnn-Latn-PG", - "pnn-PG": "pnn-Latn-PG", - "pno": "pno-Latn-PE", - "pno-Latn": "pno-Latn-PE", - "pno-PE": "pno-Latn-PE", - "pnp": "pnp-Latn-ID", - "pnp-ID": "pnp-Latn-ID", - "pnp-Latn": "pnp-Latn-ID", - "pnq": "pnq-Latn-BF", - "pnq-BF": "pnq-Latn-BF", - "pnq-Latn": "pnq-Latn-BF", - "pnr": "pnr-Latn-PG", - "pnr-Latn": "pnr-Latn-PG", - "pnr-PG": "pnr-Latn-PG", - "pns": "pns-Latn-ID", - "pns-ID": "pns-Latn-ID", - "pns-Latn": "pns-Latn-ID", - "pnt": "pnt-Grek-GR", - "pnt-GR": "pnt-Grek-GR", - "pnt-Grek": "pnt-Grek-GR", - "pnv": "pnv-Latn-AU", - "pnv-AU": "pnv-Latn-AU", - "pnv-Latn": "pnv-Latn-AU", - "pnw": "pnw-Latn-AU", - "pnw-AU": "pnw-Latn-AU", - "pnw-Latn": "pnw-Latn-AU", - "pny": "pny-Latn-CM", - "pny-CM": "pny-Latn-CM", - "pny-Latn": "pny-Latn-CM", - "pnz": "pnz-Latn-CF", - "pnz-CF": "pnz-Latn-CF", - "pnz-Latn": "pnz-Latn-CF", - "poc": "poc-Latn-GT", - "poc-GT": "poc-Latn-GT", - "poc-Latn": "poc-Latn-GT", - "poe": "poe-Latn-MX", - "poe-Latn": "poe-Latn-MX", - "poe-MX": "poe-Latn-MX", - "pof": "pof-Latn-CD", - "pof-CD": "pof-Latn-CD", - "pof-Latn": "pof-Latn-CD", - "pog": "pog-Latn-BR", - "pog-BR": "pog-Latn-BR", - "pog-Latn": "pog-Latn-BR", - "poh": "poh-Latn-GT", - "poh-GT": "poh-Latn-GT", - "poh-Latn": "poh-Latn-GT", - "poi": "poi-Latn-MX", - "poi-Latn": "poi-Latn-MX", - "poi-MX": "poi-Latn-MX", - "pok": "pok-Latn-BR", - "pok-BR": "pok-Latn-BR", - "pok-Latn": "pok-Latn-BR", - "pom": "pom-Latn-US", - "pom-Latn": "pom-Latn-US", - "pom-US": "pom-Latn-US", - "pon": "pon-Latn-FM", - "pon-FM": "pon-Latn-FM", - "pon-Latn": "pon-Latn-FM", - "poo": "poo-Latn-US", - "poo-Latn": "poo-Latn-US", - "poo-US": "poo-Latn-US", - "pop": "pop-Latn-NC", - "pop-Latn": "pop-Latn-NC", - "pop-NC": "pop-Latn-NC", - "poq": "poq-Latn-MX", - "poq-Latn": "poq-Latn-MX", - "poq-MX": "poq-Latn-MX", - "pos": "pos-Latn-MX", - "pos-Latn": "pos-Latn-MX", - "pos-MX": "pos-Latn-MX", - "pot": "pot-Latn-US", - "pot-Latn": "pot-Latn-US", - "pot-US": "pot-Latn-US", - "pov": "pov-Latn-GW", - "pov-GW": "pov-Latn-GW", - "pov-Latn": "pov-Latn-GW", - "pow": "pow-Latn-MX", - "pow-Latn": "pow-Latn-MX", - "pow-MX": "pow-Latn-MX", - "poy": "poy-Latn-TZ", - "poy-Latn": "poy-Latn-TZ", - "poy-TZ": "poy-Latn-TZ", - "ppe": "ppe-Latn-PG", - "ppe-Latn": "ppe-Latn-PG", - "ppe-PG": "ppe-Latn-PG", - "ppi": "ppi-Latn-MX", - "ppi-Latn": "ppi-Latn-MX", - "ppi-MX": "ppi-Latn-MX", - "ppk": "ppk-Latn-ID", - "ppk-ID": "ppk-Latn-ID", - "ppk-Latn": "ppk-Latn-ID", - "ppl": "ppl-Latn-SV", - "ppl-Latn": "ppl-Latn-SV", - "ppl-SV": "ppl-Latn-SV", - "ppm": "ppm-Latn-ID", - "ppm-ID": "ppm-Latn-ID", - "ppm-Latn": "ppm-Latn-ID", - "ppn": "ppn-Latn-PG", - "ppn-Latn": "ppn-Latn-PG", - "ppn-PG": "ppn-Latn-PG", - "ppo": "ppo-Latn-PG", - "ppo-Latn": "ppo-Latn-PG", - "ppo-PG": "ppo-Latn-PG", - "ppp": "ppp-Latn-CD", - "ppp-CD": "ppp-Latn-CD", - "ppp-Latn": "ppp-Latn-CD", - "ppq": "ppq-Latn-PG", - "ppq-Latn": "ppq-Latn-PG", - "ppq-PG": "ppq-Latn-PG", - "pps": "pps-Latn-MX", - "pps-Latn": "pps-Latn-MX", - "pps-MX": "pps-Latn-MX", - "ppt": "ppt-Latn-PG", - "ppt-Latn": "ppt-Latn-PG", - "ppt-PG": "ppt-Latn-PG", - "pqa": "pqa-Latn-NG", - "pqa-Latn": "pqa-Latn-NG", - "pqa-NG": "pqa-Latn-NG", - "pqm": "pqm-Latn-CA", - "pqm-CA": "pqm-Latn-CA", - "pqm-Latn": "pqm-Latn-CA", - "pra": "pra-Khar-PK", - "pra-Khar": "pra-Khar-PK", - "pra-PK": "pra-Khar-PK", - "prc": "prc-Arab-AF", - "prc-AF": "prc-Arab-AF", - "prc-Arab": "prc-Arab-AF", - "prd": "prd-Arab-IR", - "prd-Arab": "prd-Arab-IR", - "prd-IR": "prd-Arab-IR", - "pre": "pre-Latn-ST", - "pre-Latn": "pre-Latn-ST", - "pre-ST": "pre-Latn-ST", - "prf": "prf-Latn-PH", - "prf-Latn": "prf-Latn-PH", - "prf-PH": "prf-Latn-PH", - "prg": "prg-Latn-PL", - "prg-Latn": "prg-Latn-PL", - "prg-PL": "prg-Latn-PL", - "prh": "prh-Latn-PH", - "prh-Latn": "prh-Latn-PH", - "prh-PH": "prh-Latn-PH", - "pri": "pri-Latn-NC", - "pri-Latn": "pri-Latn-NC", - "pri-NC": "pri-Latn-NC", - "prk": "prk-Latn-MM", - "prk-Latn": "prk-Latn-MM", - "prk-MM": "prk-Latn-MM", - "prm": "prm-Latn-PG", - "prm-Latn": "prm-Latn-PG", - "prm-PG": "prm-Latn-PG", - "pro": "pro-Latn-FR", - "pro-FR": "pro-Latn-FR", - "pro-Latn": "pro-Latn-FR", - "prq": "prq-Latn-PE", - "prq-Latn": "prq-Latn-PE", - "prq-PE": "prq-Latn-PE", - "prr": "prr-Latn-BR", - "prr-BR": "prr-Latn-BR", - "prr-Latn": "prr-Latn-BR", - "prt": "prt-Thai-TH", - "prt-TH": "prt-Thai-TH", - "prt-Thai": "prt-Thai-TH", - "pru": "pru-Latn-ID", - "pru-ID": "pru-Latn-ID", - "pru-Latn": "pru-Latn-ID", - "prw": "prw-Latn-PG", - "prw-Latn": "prw-Latn-PG", - "prw-PG": "prw-Latn-PG", - "prx": "prx-Arab-IN", - "prx-Arab": "prx-Arab-IN", - "prx-IN": "prx-Arab-IN", - "ps": "ps-Arab-AF", - "ps-AF": "ps-Arab-AF", - "ps-Arab": "ps-Arab-AF", - "ps-PK": "ps-Arab-PK", - "psa": "psa-Latn-ID", - "psa-ID": "psa-Latn-ID", - "psa-Latn": "psa-Latn-ID", - "pse": "pse-Latn-ID", - "pse-ID": "pse-Latn-ID", - "pse-Latn": "pse-Latn-ID", - "psh": "psh-Arab-AF", - "psh-AF": "psh-Arab-AF", - "psh-Arab": "psh-Arab-AF", - "psi": "psi-Arab-AF", - "psi-AF": "psi-Arab-AF", - "psi-Arab": "psi-Arab-AF", - "psm": "psm-Latn-BO", - "psm-BO": "psm-Latn-BO", - "psm-Latn": "psm-Latn-BO", - "psn": "psn-Latn-ID", - "psn-ID": "psn-Latn-ID", - "psn-Latn": "psn-Latn-ID", - "psq": "psq-Latn-PG", - "psq-Latn": "psq-Latn-PG", - "psq-PG": "psq-Latn-PG", - "pss": "pss-Latn-PG", - "pss-Latn": "pss-Latn-PG", - "pss-PG": "pss-Latn-PG", - "pst": "pst-Arab-PK", - "pst-Arab": "pst-Arab-PK", - "pst-PK": "pst-Arab-PK", - "psu": "psu-Brah-IN", - "psu-Brah": "psu-Brah-IN", - "psu-IN": "psu-Brah-IN", - "psw": "psw-Latn-VU", - "psw-Latn": "psw-Latn-VU", - "psw-VU": "psw-Latn-VU", - "pt": "pt-Latn-BR", - "pt-AO": "pt-Latn-AO", - "pt-BR": "pt-Latn-BR", - "pt-CV": "pt-Latn-CV", - "pt-GQ": "pt-Latn-GQ", - "pt-GW": "pt-Latn-GW", - "pt-Latn": "pt-Latn-BR", - "pt-Latn-MO": "pt-Latn-MO", - "pt-MO": "pt-Latn-MO", - "pt-MZ": "pt-Latn-MZ", - "pt-PT": "pt-Latn-PT", - "pt-ST": "pt-Latn-ST", - "pt-TL": "pt-Latn-TL", - "pta": "pta-Latn-PY", - "pta-Latn": "pta-Latn-PY", - "pta-PY": "pta-Latn-PY", - "pth": "pth-Latn-BR", - "pth-BR": "pth-Latn-BR", - "pth-Latn": "pth-Latn-BR", - "pti": "pti-Latn-AU", - "pti-AU": "pti-Latn-AU", - "pti-Latn": "pti-Latn-AU", - "ptn": "ptn-Latn-ID", - "ptn-ID": "ptn-Latn-ID", - "ptn-Latn": "ptn-Latn-ID", - "pto": "pto-Latn-BR", - "pto-BR": "pto-Latn-BR", - "pto-Latn": "pto-Latn-BR", - "ptp": "ptp-Latn-PG", - "ptp-Latn": "ptp-Latn-PG", - "ptp-PG": "ptp-Latn-PG", - "ptr": "ptr-Latn-VU", - "ptr-Latn": "ptr-Latn-VU", - "ptr-VU": "ptr-Latn-VU", - "ptt": "ptt-Latn-ID", - "ptt-ID": "ptt-Latn-ID", - "ptt-Latn": "ptt-Latn-ID", - "ptu": "ptu-Latn-ID", - "ptu-ID": "ptu-Latn-ID", - "ptu-Latn": "ptu-Latn-ID", - "ptv": "ptv-Latn-VU", - "ptv-Latn": "ptv-Latn-VU", - "ptv-VU": "ptv-Latn-VU", - "pua": "pua-Latn-MX", - "pua-Latn": "pua-Latn-MX", - "pua-MX": "pua-Latn-MX", - "pub": "pub-Latn-IN", - "pub-IN": "pub-Latn-IN", - "pub-Latn": "pub-Latn-IN", - "puc": "puc-Latn-ID", - "puc-ID": "puc-Latn-ID", - "puc-Latn": "puc-Latn-ID", - "pud": "pud-Latn-ID", - "pud-ID": "pud-Latn-ID", - "pud-Latn": "pud-Latn-ID", - "pue": "pue-Latn-AR", - "pue-AR": "pue-Latn-AR", - "pue-Latn": "pue-Latn-AR", - "puf": "puf-Latn-ID", - "puf-ID": "puf-Latn-ID", - "puf-Latn": "puf-Latn-ID", - "pug": "pug-Latn-BF", - "pug-BF": "pug-Latn-BF", - "pug-Latn": "pug-Latn-BF", - "pui": "pui-Latn-CO", - "pui-CO": "pui-Latn-CO", - "pui-Latn": "pui-Latn-CO", - "puj": "puj-Latn-ID", - "puj-ID": "puj-Latn-ID", - "puj-Latn": "puj-Latn-ID", - "pum": "pum-Deva-NP", - "pum-Deva": "pum-Deva-NP", - "pum-NP": "pum-Deva-NP", - "puo": "puo-Latn-VN", - "puo-Latn": "puo-Latn-VN", - "puo-VN": "puo-Latn-VN", - "pup": "pup-Latn-PG", - "pup-Latn": "pup-Latn-PG", - "pup-PG": "pup-Latn-PG", - "puq": "puq-Latn-BO", - "puq-BO": "puq-Latn-BO", - "puq-Latn": "puq-Latn-BO", - "pur": "pur-Latn-BR", - "pur-BR": "pur-Latn-BR", - "pur-Latn": "pur-Latn-BR", - "put": "put-Latn-ID", - "put-ID": "put-Latn-ID", - "put-Latn": "put-Latn-ID", - "puu": "puu-Latn-GA", - "puu-GA": "puu-Latn-GA", - "puu-Latn": "puu-Latn-GA", - "puw": "puw-Latn-FM", - "puw-FM": "puw-Latn-FM", - "puw-Latn": "puw-Latn-FM", - "pux": "pux-Latn-PG", - "pux-Latn": "pux-Latn-PG", - "pux-PG": "pux-Latn-PG", - "puy": "puy-Latn-US", - "puy-Latn": "puy-Latn-US", - "puy-US": "puy-Latn-US", - "pwa": "pwa-Latn-PG", - "pwa-Latn": "pwa-Latn-PG", - "pwa-PG": "pwa-Latn-PG", - "pwb": "pwb-Latn-NG", - "pwb-Latn": "pwb-Latn-NG", - "pwb-NG": "pwb-Latn-NG", - "pwg": "pwg-Latn-PG", - "pwg-Latn": "pwg-Latn-PG", - "pwg-PG": "pwg-Latn-PG", - "pwm": "pwm-Latn-PH", - "pwm-Latn": "pwm-Latn-PH", - "pwm-PH": "pwm-Latn-PH", - "pwn": "pwn-Latn-TW", - "pwn-Latn": "pwn-Latn-TW", - "pwn-TW": "pwn-Latn-TW", - "pwo": "pwo-Mymr-MM", - "pwo-MM": "pwo-Mymr-MM", - "pwo-Mymr": "pwo-Mymr-MM", - "pwr": "pwr-Deva-IN", - "pwr-Deva": "pwr-Deva-IN", - "pwr-IN": "pwr-Deva-IN", - "pww": "pww-Thai-TH", - "pww-TH": "pww-Thai-TH", - "pww-Thai": "pww-Thai-TH", - "pxm": "pxm-Latn-MX", - "pxm-Latn": "pxm-Latn-MX", - "pxm-MX": "pxm-Latn-MX", - "pye": "pye-Latn-CI", - "pye-CI": "pye-Latn-CI", - "pye-Latn": "pye-Latn-CI", - "pym": "pym-Latn-NG", - "pym-Latn": "pym-Latn-NG", - "pym-NG": "pym-Latn-NG", - "pyn": "pyn-Latn-BR", - "pyn-BR": "pyn-Latn-BR", - "pyn-Latn": "pyn-Latn-BR", - "pyu": "pyu-Latn-TW", - "pyu-Latn": "pyu-Latn-TW", - "pyu-TW": "pyu-Latn-TW", - "pyx": "pyx-Mymr-MM", - "pyx-MM": "pyx-Mymr-MM", - "pyx-Mymr": "pyx-Mymr-MM", - "pyy": "pyy-Latn-MM", - "pyy-Latn": "pyy-Latn-MM", - "pyy-MM": "pyy-Latn-MM", - "pze": "pze-Latn-NG", - "pze-Latn": "pze-Latn-NG", - "pze-NG": "pze-Latn-NG", - "pzh": "pzh-Latn-TW", - "pzh-Latn": "pzh-Latn-TW", - "pzh-TW": "pzh-Latn-TW", - "pzn": "pzn-Latn-MM", - "pzn-Latn": "pzn-Latn-MM", - "pzn-MM": "pzn-Latn-MM", - "qu": "qu-Latn-PE", - "qu-Latn": "qu-Latn-PE", - "qu-PE": "qu-Latn-PE", - "qua": "qua-Latn-US", - "qua-Latn": "qua-Latn-US", - "qua-US": "qua-Latn-US", - "qub": "qub-Latn-PE", - "qub-Latn": "qub-Latn-PE", - "qub-PE": "qub-Latn-PE", - "quc": "quc-Latn-GT", - "quc-GT": "quc-Latn-GT", - "quc-Latn": "quc-Latn-GT", - "qud": "qud-Latn-EC", - "qud-EC": "qud-Latn-EC", - "qud-Latn": "qud-Latn-EC", - "quf": "quf-Latn-PE", - "quf-Latn": "quf-Latn-PE", - "quf-PE": "quf-Latn-PE", - "qug": "qug-Latn-EC", - "qug-EC": "qug-Latn-EC", - "qug-Latn": "qug-Latn-EC", - "qui": "qui-Latn-US", - "qui-Latn": "qui-Latn-US", - "qui-US": "qui-Latn-US", - "quk": "quk-Latn-PE", - "quk-Latn": "quk-Latn-PE", - "quk-PE": "quk-Latn-PE", - "qul": "qul-Latn-BO", - "qul-BO": "qul-Latn-BO", - "qul-Latn": "qul-Latn-BO", - "qum": "qum-Latn-GT", - "qum-GT": "qum-Latn-GT", - "qum-Latn": "qum-Latn-GT", - "qun": "qun-Latn-US", - "qun-Latn": "qun-Latn-US", - "qun-US": "qun-Latn-US", - "qup": "qup-Latn-PE", - "qup-Latn": "qup-Latn-PE", - "qup-PE": "qup-Latn-PE", - "quq": "quq-Latn-ES", - "quq-ES": "quq-Latn-ES", - "quq-Latn": "quq-Latn-ES", - "qur": "qur-Latn-PE", - "qur-Latn": "qur-Latn-PE", - "qur-PE": "qur-Latn-PE", - "qus": "qus-Latn-AR", - "qus-AR": "qus-Latn-AR", - "qus-Latn": "qus-Latn-AR", - "quv": "quv-Latn-GT", - "quv-GT": "quv-Latn-GT", - "quv-Latn": "quv-Latn-GT", - "quw": "quw-Latn-EC", - "quw-EC": "quw-Latn-EC", - "quw-Latn": "quw-Latn-EC", - "qux": "qux-Latn-PE", - "qux-Latn": "qux-Latn-PE", - "qux-PE": "qux-Latn-PE", - "quy": "quy-Latn-PE", - "quy-Latn": "quy-Latn-PE", - "quy-PE": "quy-Latn-PE", - "qva": "qva-Latn-PE", - "qva-Latn": "qva-Latn-PE", - "qva-PE": "qva-Latn-PE", - "qvc": "qvc-Latn-PE", - "qvc-Latn": "qvc-Latn-PE", - "qvc-PE": "qvc-Latn-PE", - "qve": "qve-Latn-PE", - "qve-Latn": "qve-Latn-PE", - "qve-PE": "qve-Latn-PE", - "qvh": "qvh-Latn-PE", - "qvh-Latn": "qvh-Latn-PE", - "qvh-PE": "qvh-Latn-PE", - "qvi": "qvi-Latn-EC", - "qvi-EC": "qvi-Latn-EC", - "qvi-Latn": "qvi-Latn-EC", - "qvj": "qvj-Latn-EC", - "qvj-EC": "qvj-Latn-EC", - "qvj-Latn": "qvj-Latn-EC", - "qvl": "qvl-Latn-PE", - "qvl-Latn": "qvl-Latn-PE", - "qvl-PE": "qvl-Latn-PE", - "qvm": "qvm-Latn-PE", - "qvm-Latn": "qvm-Latn-PE", - "qvm-PE": "qvm-Latn-PE", - "qvn": "qvn-Latn-PE", - "qvn-Latn": "qvn-Latn-PE", - "qvn-PE": "qvn-Latn-PE", - "qvo": "qvo-Latn-PE", - "qvo-Latn": "qvo-Latn-PE", - "qvo-PE": "qvo-Latn-PE", - "qvp": "qvp-Latn-PE", - "qvp-Latn": "qvp-Latn-PE", - "qvp-PE": "qvp-Latn-PE", - "qvs": "qvs-Latn-PE", - "qvs-Latn": "qvs-Latn-PE", - "qvs-PE": "qvs-Latn-PE", - "qvw": "qvw-Latn-PE", - "qvw-Latn": "qvw-Latn-PE", - "qvw-PE": "qvw-Latn-PE", - "qvz": "qvz-Latn-EC", - "qvz-EC": "qvz-Latn-EC", - "qvz-Latn": "qvz-Latn-EC", - "qwa": "qwa-Latn-PE", - "qwa-Latn": "qwa-Latn-PE", - "qwa-PE": "qwa-Latn-PE", - "qwc": "qwc-Latn-PE", - "qwc-Latn": "qwc-Latn-PE", - "qwc-PE": "qwc-Latn-PE", - "qwh": "qwh-Latn-PE", - "qwh-Latn": "qwh-Latn-PE", - "qwh-PE": "qwh-Latn-PE", - "qwm": "qwm-Latn-HU", - "qwm-HU": "qwm-Latn-HU", - "qwm-Latn": "qwm-Latn-HU", - "qws": "qws-Latn-PE", - "qws-Latn": "qws-Latn-PE", - "qws-PE": "qws-Latn-PE", - "qwt": "qwt-Latn-US", - "qwt-Latn": "qwt-Latn-US", - "qwt-US": "qwt-Latn-US", - "qxa": "qxa-Latn-PE", - "qxa-Latn": "qxa-Latn-PE", - "qxa-PE": "qxa-Latn-PE", - "qxc": "qxc-Latn-PE", - "qxc-Latn": "qxc-Latn-PE", - "qxc-PE": "qxc-Latn-PE", - "qxh": "qxh-Latn-PE", - "qxh-Latn": "qxh-Latn-PE", - "qxh-PE": "qxh-Latn-PE", - "qxl": "qxl-Latn-EC", - "qxl-EC": "qxl-Latn-EC", - "qxl-Latn": "qxl-Latn-EC", - "qxn": "qxn-Latn-PE", - "qxn-Latn": "qxn-Latn-PE", - "qxn-PE": "qxn-Latn-PE", - "qxo": "qxo-Latn-PE", - "qxo-Latn": "qxo-Latn-PE", - "qxo-PE": "qxo-Latn-PE", - "qxp": "qxp-Latn-PE", - "qxp-Latn": "qxp-Latn-PE", - "qxp-PE": "qxp-Latn-PE", - "qxq": "qxq-Arab-IR", - "qxq-Arab": "qxq-Arab-IR", - "qxq-IR": "qxq-Arab-IR", - "qxr": "qxr-Latn-EC", - "qxr-EC": "qxr-Latn-EC", - "qxr-Latn": "qxr-Latn-EC", - "qxt": "qxt-Latn-PE", - "qxt-Latn": "qxt-Latn-PE", - "qxt-PE": "qxt-Latn-PE", - "qxu": "qxu-Latn-PE", - "qxu-Latn": "qxu-Latn-PE", - "qxu-PE": "qxu-Latn-PE", - "qxw": "qxw-Latn-PE", - "qxw-Latn": "qxw-Latn-PE", - "qxw-PE": "qxw-Latn-PE", - "qya": "qya-Latn-001", - "qya-001": "qya-Latn-001", - "qya-Latn": "qya-Latn-001", - "qyp": "qyp-Latn-US", - "qyp-Latn": "qyp-Latn-US", - "qyp-US": "qyp-Latn-US", - "raa": "raa-Deva-NP", - "raa-Deva": "raa-Deva-NP", - "raa-NP": "raa-Deva-NP", - "rab": "rab-Deva-NP", - "rab-Deva": "rab-Deva-NP", - "rab-NP": "rab-Deva-NP", - "rac": "rac-Latn-ID", - "rac-ID": "rac-Latn-ID", - "rac-Latn": "rac-Latn-ID", - "rad": "rad-Latn-VN", - "rad-Latn": "rad-Latn-VN", - "rad-VN": "rad-Latn-VN", - "raf": "raf-Deva-NP", - "raf-Deva": "raf-Deva-NP", - "raf-NP": "raf-Deva-NP", - "rag": "rag-Latn-KE", - "rag-KE": "rag-Latn-KE", - "rag-Latn": "rag-Latn-KE", - "rah": "rah-Beng-IN", - "rah-Beng": "rah-Beng-IN", - "rah-IN": "rah-Beng-IN", - "rai": "rai-Latn-PG", - "rai-Latn": "rai-Latn-PG", - "rai-PG": "rai-Latn-PG", - "raj": "raj-Deva-IN", - "raj-Deva": "raj-Deva-IN", - "raj-IN": "raj-Deva-IN", - "rak": "rak-Latn-PG", - "rak-Latn": "rak-Latn-PG", - "rak-PG": "rak-Latn-PG", - "ram": "ram-Latn-BR", - "ram-BR": "ram-Latn-BR", - "ram-Latn": "ram-Latn-BR", - "ran": "ran-Latn-ID", - "ran-ID": "ran-Latn-ID", - "ran-Latn": "ran-Latn-ID", - "rao": "rao-Latn-PG", - "rao-Latn": "rao-Latn-PG", - "rao-PG": "rao-Latn-PG", - "rap": "rap-Latn-CL", - "rap-CL": "rap-Latn-CL", - "rap-Latn": "rap-Latn-CL", - "rar": "rar-Latn-CK", - "rar-CK": "rar-Latn-CK", - "rar-Latn": "rar-Latn-CK", - "rav": "rav-Deva-NP", - "rav-Deva": "rav-Deva-NP", - "rav-NP": "rav-Deva-NP", - "raw": "raw-Latn-MM", - "raw-Latn": "raw-Latn-MM", - "raw-MM": "raw-Latn-MM", - "rax": "rax-Latn-NG", - "rax-Latn": "rax-Latn-NG", - "rax-NG": "rax-Latn-NG", - "ray": "ray-Latn-PF", - "ray-Latn": "ray-Latn-PF", - "ray-PF": "ray-Latn-PF", - "raz": "raz-Latn-ID", - "raz-ID": "raz-Latn-ID", - "raz-Latn": "raz-Latn-ID", - "rbb": "rbb-Mymr-MM", - "rbb-MM": "rbb-Mymr-MM", - "rbb-Mymr": "rbb-Mymr-MM", - "rbk": "rbk-Latn-PH", - "rbk-Latn": "rbk-Latn-PH", - "rbk-PH": "rbk-Latn-PH", - "rbl": "rbl-Latn-PH", - "rbl-Latn": "rbl-Latn-PH", - "rbl-PH": "rbl-Latn-PH", - "rbp": "rbp-Latn-AU", - "rbp-AU": "rbp-Latn-AU", - "rbp-Latn": "rbp-Latn-AU", - "rcf": "rcf-Latn-RE", - "rcf-Latn": "rcf-Latn-RE", - "rcf-RE": "rcf-Latn-RE", - "rdb": "rdb-Arab-IR", - "rdb-Arab": "rdb-Arab-IR", - "rdb-IR": "rdb-Arab-IR", - "rea": "rea-Latn-PG", - "rea-Latn": "rea-Latn-PG", - "rea-PG": "rea-Latn-PG", - "reb": "reb-Latn-ID", - "reb-ID": "reb-Latn-ID", - "reb-Latn": "reb-Latn-ID", - "ree": "ree-Latn-MY", - "ree-Latn": "ree-Latn-MY", - "ree-MY": "ree-Latn-MY", - "reg": "reg-Latn-TZ", - "reg-Latn": "reg-Latn-TZ", - "reg-TZ": "reg-Latn-TZ", - "rei": "rei-Orya-IN", - "rei-IN": "rei-Orya-IN", - "rei-Orya": "rei-Orya-IN", - "rej": "rej-Latn-ID", - "rej-ID": "rej-Latn-ID", - "rej-Latn": "rej-Latn-ID", - "rej-Rjng": "rej-Rjng-ID", - "rel": "rel-Latn-KE", - "rel-KE": "rel-Latn-KE", - "rel-Latn": "rel-Latn-KE", - "rem": "rem-Latn-PE", - "rem-Latn": "rem-Latn-PE", - "rem-PE": "rem-Latn-PE", - "ren": "ren-Latn-VN", - "ren-Latn": "ren-Latn-VN", - "ren-VN": "ren-Latn-VN", - "res": "res-Latn-NG", - "res-Latn": "res-Latn-NG", - "res-NG": "res-Latn-NG", - "ret": "ret-Latn-ID", - "ret-ID": "ret-Latn-ID", - "ret-Latn": "ret-Latn-ID", - "rey": "rey-Latn-BO", - "rey-BO": "rey-Latn-BO", - "rey-Latn": "rey-Latn-BO", - "rga": "rga-Latn-VU", - "rga-Latn": "rga-Latn-VU", - "rga-VU": "rga-Latn-VU", - "rgn": "rgn-Latn-IT", - "rgn-IT": "rgn-Latn-IT", - "rgn-Latn": "rgn-Latn-IT", - "rgr": "rgr-Latn-PE", - "rgr-Latn": "rgr-Latn-PE", - "rgr-PE": "rgr-Latn-PE", - "rgs": "rgs-Latn-VN", - "rgs-Latn": "rgs-Latn-VN", - "rgs-VN": "rgs-Latn-VN", - "rgu": "rgu-Latn-ID", - "rgu-ID": "rgu-Latn-ID", - "rgu-Latn": "rgu-Latn-ID", - "rhg": "rhg-Rohg-MM", - "rhg-Arab-MM": "rhg-Arab-MM", - "rhg-MM": "rhg-Rohg-MM", - "rhg-Rohg": "rhg-Rohg-MM", - "rhp": "rhp-Latn-PG", - "rhp-Latn": "rhp-Latn-PG", - "rhp-PG": "rhp-Latn-PG", - "ria": "ria-Latn-IN", - "ria-IN": "ria-Latn-IN", - "ria-Latn": "ria-Latn-IN", - "rif": "rif-Latn-MA", - "rif-Latn": "rif-Latn-MA", - "rif-MA": "rif-Latn-MA", - "ril": "ril-Latn-MM", - "ril-Latn": "ril-Latn-MM", - "ril-MM": "ril-Latn-MM", - "rim": "rim-Latn-TZ", - "rim-Latn": "rim-Latn-TZ", - "rim-TZ": "rim-Latn-TZ", - "rin": "rin-Latn-NG", - "rin-Latn": "rin-Latn-NG", - "rin-NG": "rin-Latn-NG", - "rir": "rir-Latn-ID", - "rir-ID": "rir-Latn-ID", - "rir-Latn": "rir-Latn-ID", - "rit": "rit-Latn-AU", - "rit-AU": "rit-Latn-AU", - "rit-Latn": "rit-Latn-AU", - "riu": "riu-Latn-ID", - "riu-ID": "riu-Latn-ID", - "riu-Latn": "riu-Latn-ID", - "rjg": "rjg-Latn-ID", - "rjg-ID": "rjg-Latn-ID", - "rjg-Latn": "rjg-Latn-ID", - "rji": "rji-Deva-NP", - "rji-Deva": "rji-Deva-NP", - "rji-NP": "rji-Deva-NP", - "rjs": "rjs-Deva-NP", - "rjs-Deva": "rjs-Deva-NP", - "rjs-NP": "rjs-Deva-NP", - "rka": "rka-Khmr-KH", - "rka-KH": "rka-Khmr-KH", - "rka-Khmr": "rka-Khmr-KH", - "rkb": "rkb-Latn-BR", - "rkb-BR": "rkb-Latn-BR", - "rkb-Latn": "rkb-Latn-BR", - "rkh": "rkh-Latn-CK", - "rkh-CK": "rkh-Latn-CK", - "rkh-Latn": "rkh-Latn-CK", - "rki": "rki-Mymr-MM", - "rki-MM": "rki-Mymr-MM", - "rki-Mymr": "rki-Mymr-MM", - "rkm": "rkm-Latn-BF", - "rkm-BF": "rkm-Latn-BF", - "rkm-Latn": "rkm-Latn-BF", - "rkt": "rkt-Beng-BD", - "rkt-BD": "rkt-Beng-BD", - "rkt-Beng": "rkt-Beng-BD", - "rkw": "rkw-Latn-AU", - "rkw-AU": "rkw-Latn-AU", - "rkw-Latn": "rkw-Latn-AU", - "rm": "rm-Latn-CH", - "rm-CH": "rm-Latn-CH", - "rm-Latn": "rm-Latn-CH", - "rma": "rma-Latn-NI", - "rma-Latn": "rma-Latn-NI", - "rma-NI": "rma-Latn-NI", - "rmb": "rmb-Latn-AU", - "rmb-AU": "rmb-Latn-AU", - "rmb-Latn": "rmb-Latn-AU", - "rmc": "rmc-Latn-SK", - "rmc-Latn": "rmc-Latn-SK", - "rmc-SK": "rmc-Latn-SK", - "rmd": "rmd-Latn-DK", - "rmd-DK": "rmd-Latn-DK", - "rmd-Latn": "rmd-Latn-DK", - "rme": "rme-Latn-GB", - "rme-GB": "rme-Latn-GB", - "rme-Latn": "rme-Latn-GB", - "rmf": "rmf-Latn-FI", - "rmf-FI": "rmf-Latn-FI", - "rmf-Latn": "rmf-Latn-FI", - "rmg": "rmg-Latn-NO", - "rmg-Latn": "rmg-Latn-NO", - "rmg-NO": "rmg-Latn-NO", - "rmh": "rmh-Latn-ID", - "rmh-ID": "rmh-Latn-ID", - "rmh-Latn": "rmh-Latn-ID", - "rmi": "rmi-Armn-AM", - "rmi-AM": "rmi-Armn-AM", - "rmi-Armn": "rmi-Armn-AM", - "rmk": "rmk-Latn-PG", - "rmk-Latn": "rmk-Latn-PG", - "rmk-PG": "rmk-Latn-PG", - "rml": "rml-Latn-PL", - "rml-Latn": "rml-Latn-PL", - "rml-PL": "rml-Latn-PL", - "rmm": "rmm-Latn-ID", - "rmm-ID": "rmm-Latn-ID", - "rmm-Latn": "rmm-Latn-ID", - "rmn": "rmn-Latn-RS", - "rmn-Latn": "rmn-Latn-RS", - "rmn-RS": "rmn-Latn-RS", - "rmo": "rmo-Latn-CH", - "rmo-CH": "rmo-Latn-CH", - "rmo-Latn": "rmo-Latn-CH", - "rmp": "rmp-Latn-PG", - "rmp-Latn": "rmp-Latn-PG", - "rmp-PG": "rmp-Latn-PG", - "rmq": "rmq-Latn-ES", - "rmq-ES": "rmq-Latn-ES", - "rmq-Latn": "rmq-Latn-ES", - "rmt": "rmt-Arab-IR", - "rmt-Arab": "rmt-Arab-IR", - "rmt-IR": "rmt-Arab-IR", - "rmu": "rmu-Latn-SE", - "rmu-Latn": "rmu-Latn-SE", - "rmu-SE": "rmu-Latn-SE", - "rmw": "rmw-Latn-GB", - "rmw-GB": "rmw-Latn-GB", - "rmw-Latn": "rmw-Latn-GB", - "rmx": "rmx-Latn-VN", - "rmx-Latn": "rmx-Latn-VN", - "rmx-VN": "rmx-Latn-VN", - "rmz": "rmz-Mymr-IN", - "rmz-IN": "rmz-Mymr-IN", - "rmz-Mymr": "rmz-Mymr-IN", - "rn": "rn-Latn-BI", - "rn-BI": "rn-Latn-BI", - "rn-Latn": "rn-Latn-BI", - "rnd": "rnd-Latn-CD", - "rnd-CD": "rnd-Latn-CD", - "rnd-Latn": "rnd-Latn-CD", - "rng": "rng-Latn-MZ", - "rng-Latn": "rng-Latn-MZ", - "rng-MZ": "rng-Latn-MZ", - "rnl": "rnl-Latn-IN", - "rnl-IN": "rnl-Latn-IN", - "rnl-Latn": "rnl-Latn-IN", - "rnn": "rnn-Latn-ID", - "rnn-ID": "rnn-Latn-ID", - "rnn-Latn": "rnn-Latn-ID", - "rnr": "rnr-Latn-AU", - "rnr-AU": "rnr-Latn-AU", - "rnr-Latn": "rnr-Latn-AU", - "rnw": "rnw-Latn-TZ", - "rnw-Latn": "rnw-Latn-TZ", - "rnw-TZ": "rnw-Latn-TZ", - "ro": "ro-Latn-RO", - "ro-Latn": "ro-Latn-RO", - "ro-MD": "ro-Latn-MD", - "ro-RO": "ro-Latn-RO", - "rob": "rob-Latn-ID", - "rob-ID": "rob-Latn-ID", - "rob-Latn": "rob-Latn-ID", - "roc": "roc-Latn-VN", - "roc-Latn": "roc-Latn-VN", - "roc-VN": "roc-Latn-VN", - "rod": "rod-Latn-NG", - "rod-Latn": "rod-Latn-NG", - "rod-NG": "rod-Latn-NG", - "roe": "roe-Latn-PG", - "roe-Latn": "roe-Latn-PG", - "roe-PG": "roe-Latn-PG", - "rof": "rof-Latn-TZ", - "rof-Latn": "rof-Latn-TZ", - "rof-TZ": "rof-Latn-TZ", - "rog": "rog-Latn-VN", - "rog-Latn": "rog-Latn-VN", - "rog-VN": "rog-Latn-VN", - "rol": "rol-Latn-PH", - "rol-Latn": "rol-Latn-PH", - "rol-PH": "rol-Latn-PH", - "rom": "rom-Latn-RO", - "rom-Latn": "rom-Latn-RO", - "rom-RO": "rom-Latn-RO", - "roo": "roo-Latn-PG", - "roo-Latn": "roo-Latn-PG", - "roo-PG": "roo-Latn-PG", - "rop": "rop-Latn-AU", - "rop-AU": "rop-Latn-AU", - "rop-Latn": "rop-Latn-AU", - "ror": "ror-Latn-ID", - "ror-ID": "ror-Latn-ID", - "ror-Latn": "ror-Latn-ID", - "rou": "rou-Latn-TD", - "rou-Latn": "rou-Latn-TD", - "rou-TD": "rou-Latn-TD", - "row": "row-Latn-ID", - "row-ID": "row-Latn-ID", - "row-Latn": "row-Latn-ID", - "rpn": "rpn-Latn-VU", - "rpn-Latn": "rpn-Latn-VU", - "rpn-VU": "rpn-Latn-VU", - "rpt": "rpt-Latn-PG", - "rpt-Latn": "rpt-Latn-PG", - "rpt-PG": "rpt-Latn-PG", - "rri": "rri-Latn-SB", - "rri-Latn": "rri-Latn-SB", - "rri-SB": "rri-Latn-SB", - "rrm": "rrm-Latn-NZ", - "rrm-Latn": "rrm-Latn-NZ", - "rrm-NZ": "rrm-Latn-NZ", - "rro": "rro-Latn-PG", - "rro-Latn": "rro-Latn-PG", - "rro-PG": "rro-Latn-PG", - "rrt": "rrt-Latn-AU", - "rrt-AU": "rrt-Latn-AU", - "rrt-Latn": "rrt-Latn-AU", - "rsk": "rsk-Cyrl-RS", - "rsk-Cyrl": "rsk-Cyrl-RS", - "rsk-RS": "rsk-Cyrl-RS", - "rsw": "rsw-Latn-NG", - "rsw-Latn": "rsw-Latn-NG", - "rsw-NG": "rsw-Latn-NG", - "rtc": "rtc-Latn-MM", - "rtc-Latn": "rtc-Latn-MM", - "rtc-MM": "rtc-Latn-MM", - "rth": "rth-Latn-ID", - "rth-ID": "rth-Latn-ID", - "rth-Latn": "rth-Latn-ID", - "rtm": "rtm-Latn-FJ", - "rtm-FJ": "rtm-Latn-FJ", - "rtm-Latn": "rtm-Latn-FJ", - "rtw": "rtw-Deva-IN", - "rtw-Deva": "rtw-Deva-IN", - "rtw-IN": "rtw-Deva-IN", - "ru": "ru-Cyrl-RU", - "ru-BY": "ru-Cyrl-BY", - "ru-Cyrl": "ru-Cyrl-RU", - "ru-Cyrs": "ru-Cyrs-RU", - "ru-GE": "ru-Cyrl-GE", - "ru-KG": "ru-Cyrl-KG", - "ru-KZ": "ru-Cyrl-KZ", - "ru-RU": "ru-Cyrl-RU", - "ru-UA": "ru-Cyrl-UA", - "rub": "rub-Latn-UG", - "rub-Latn": "rub-Latn-UG", - "rub-UG": "rub-Latn-UG", - "ruc": "ruc-Latn-UG", - "ruc-Latn": "ruc-Latn-UG", - "ruc-UG": "ruc-Latn-UG", - "rue": "rue-Cyrl-UA", - "rue-Cyrl": "rue-Cyrl-UA", - "rue-UA": "rue-Cyrl-UA", - "ruf": "ruf-Latn-TZ", - "ruf-Latn": "ruf-Latn-TZ", - "ruf-TZ": "ruf-Latn-TZ", - "rug": "rug-Latn-SB", - "rug-Latn": "rug-Latn-SB", - "rug-SB": "rug-Latn-SB", - "rui": "rui-Latn-TZ", - "rui-Latn": "rui-Latn-TZ", - "rui-TZ": "rui-Latn-TZ", - "ruk": "ruk-Latn-NG", - "ruk-Latn": "ruk-Latn-NG", - "ruk-NG": "ruk-Latn-NG", - "ruo": "ruo-Latn-HR", - "ruo-HR": "ruo-Latn-HR", - "ruo-Latn": "ruo-Latn-HR", - "rup": "rup-Latn-RO", - "rup-Latn": "rup-Latn-RO", - "rup-RO": "rup-Latn-RO", - "ruq": "ruq-Latn-GR", - "ruq-GR": "ruq-Latn-GR", - "ruq-Latn": "ruq-Latn-GR", - "rut": "rut-Cyrl-RU", - "rut-Cyrl": "rut-Cyrl-RU", - "rut-RU": "rut-Cyrl-RU", - "ruu": "ruu-Latn-MY", - "ruu-Latn": "ruu-Latn-MY", - "ruu-MY": "ruu-Latn-MY", - "ruy": "ruy-Latn-NG", - "ruy-Latn": "ruy-Latn-NG", - "ruy-NG": "ruy-Latn-NG", - "ruz": "ruz-Latn-NG", - "ruz-Latn": "ruz-Latn-NG", - "ruz-NG": "ruz-Latn-NG", - "rw": "rw-Latn-RW", - "rw-Latn": "rw-Latn-RW", - "rw-RW": "rw-Latn-RW", - "rwa": "rwa-Latn-PG", - "rwa-Latn": "rwa-Latn-PG", - "rwa-PG": "rwa-Latn-PG", - "rwk": "rwk-Latn-TZ", - "rwk-Latn": "rwk-Latn-TZ", - "rwk-TZ": "rwk-Latn-TZ", - "rwl": "rwl-Latn-TZ", - "rwl-Latn": "rwl-Latn-TZ", - "rwl-TZ": "rwl-Latn-TZ", - "rwm": "rwm-Latn-UG", - "rwm-Latn": "rwm-Latn-UG", - "rwm-UG": "rwm-Latn-UG", - "rwo": "rwo-Latn-PG", - "rwo-Latn": "rwo-Latn-PG", - "rwo-PG": "rwo-Latn-PG", - "rwr": "rwr-Deva-IN", - "rwr-Deva": "rwr-Deva-IN", - "rwr-IN": "rwr-Deva-IN", - "rxd": "rxd-Latn-AU", - "rxd-AU": "rxd-Latn-AU", - "rxd-Latn": "rxd-Latn-AU", - "rxw": "rxw-Latn-AU", - "rxw-AU": "rxw-Latn-AU", - "rxw-Latn": "rxw-Latn-AU", - "ryu": "ryu-Kana-JP", - "ryu-JP": "ryu-Kana-JP", - "ryu-Kana": "ryu-Kana-JP", - "sa": "sa-Deva-IN", - "sa-Bhks": "sa-Bhks-IN", - "sa-Deva": "sa-Deva-IN", - "sa-Gran": "sa-Gran-IN", - "sa-IN": "sa-Deva-IN", - "sa-Nand": "sa-Nand-IN", - "sa-Shrd": "sa-Shrd-IN", - "sa-Sidd": "sa-Sidd-IN", - "sa-Tutg": "sa-Tutg-IN", - "saa": "saa-Latn-TD", - "saa-Latn": "saa-Latn-TD", - "saa-TD": "saa-Latn-TD", - "sab": "sab-Latn-PA", - "sab-Latn": "sab-Latn-PA", - "sab-PA": "sab-Latn-PA", - "sac": "sac-Latn-US", - "sac-Latn": "sac-Latn-US", - "sac-US": "sac-Latn-US", - "sad": "sad-Latn-TZ", - "sad-Latn": "sad-Latn-TZ", - "sad-TZ": "sad-Latn-TZ", - "sae": "sae-Latn-BR", - "sae-BR": "sae-Latn-BR", - "sae-Latn": "sae-Latn-BR", - "saf": "saf-Latn-GH", - "saf-GH": "saf-Latn-GH", - "saf-Latn": "saf-Latn-GH", - "sah": "sah-Cyrl-RU", - "sah-Cyrl": "sah-Cyrl-RU", - "sah-RU": "sah-Cyrl-RU", - "saj": "saj-Latn-ID", - "saj-ID": "saj-Latn-ID", - "saj-Latn": "saj-Latn-ID", - "sak": "sak-Latn-GA", - "sak-GA": "sak-Latn-GA", - "sak-Latn": "sak-Latn-GA", - "sam": "sam-Samr-PS", - "sam-PS": "sam-Samr-PS", - "sam-Samr": "sam-Samr-PS", - "sao": "sao-Latn-ID", - "sao-ID": "sao-Latn-ID", - "sao-Latn": "sao-Latn-ID", - "saq": "saq-Latn-KE", - "saq-KE": "saq-Latn-KE", - "saq-Latn": "saq-Latn-KE", - "sar": "sar-Latn-BO", - "sar-BO": "sar-Latn-BO", - "sar-Latn": "sar-Latn-BO", - "sas": "sas-Latn-ID", - "sas-ID": "sas-Latn-ID", - "sas-Latn": "sas-Latn-ID", - "sat": "sat-Olck-IN", - "sat-IN": "sat-Olck-IN", - "sat-Olck": "sat-Olck-IN", - "sau": "sau-Latn-ID", - "sau-ID": "sau-Latn-ID", - "sau-Latn": "sau-Latn-ID", - "sav": "sav-Latn-SN", - "sav-Latn": "sav-Latn-SN", - "sav-SN": "sav-Latn-SN", - "saw": "saw-Latn-ID", - "saw-ID": "saw-Latn-ID", - "saw-Latn": "saw-Latn-ID", - "sax": "sax-Latn-VU", - "sax-Latn": "sax-Latn-VU", - "sax-VU": "sax-Latn-VU", - "say": "say-Latn-NG", - "say-Latn": "say-Latn-NG", - "say-NG": "say-Latn-NG", - "saz": "saz-Saur-IN", - "saz-IN": "saz-Saur-IN", - "saz-Saur": "saz-Saur-IN", - "sba": "sba-Latn-TD", - "sba-Latn": "sba-Latn-TD", - "sba-TD": "sba-Latn-TD", - "sbb": "sbb-Latn-SB", - "sbb-Latn": "sbb-Latn-SB", - "sbb-SB": "sbb-Latn-SB", - "sbc": "sbc-Latn-PG", - "sbc-Latn": "sbc-Latn-PG", - "sbc-PG": "sbc-Latn-PG", - "sbd": "sbd-Latn-BF", - "sbd-BF": "sbd-Latn-BF", - "sbd-Latn": "sbd-Latn-BF", - "sbe": "sbe-Latn-PG", - "sbe-Latn": "sbe-Latn-PG", - "sbe-PG": "sbe-Latn-PG", - "sbg": "sbg-Latn-ID", - "sbg-ID": "sbg-Latn-ID", - "sbg-Latn": "sbg-Latn-ID", - "sbh": "sbh-Latn-PG", - "sbh-Latn": "sbh-Latn-PG", - "sbh-PG": "sbh-Latn-PG", - "sbi": "sbi-Latn-PG", - "sbi-Latn": "sbi-Latn-PG", - "sbi-PG": "sbi-Latn-PG", - "sbj": "sbj-Latn-TD", - "sbj-Latn": "sbj-Latn-TD", - "sbj-TD": "sbj-Latn-TD", - "sbk": "sbk-Latn-TZ", - "sbk-Latn": "sbk-Latn-TZ", - "sbk-TZ": "sbk-Latn-TZ", - "sbl": "sbl-Latn-PH", - "sbl-Latn": "sbl-Latn-PH", - "sbl-PH": "sbl-Latn-PH", - "sbm": "sbm-Latn-TZ", - "sbm-Latn": "sbm-Latn-TZ", - "sbm-TZ": "sbm-Latn-TZ", - "sbn": "sbn-Arab-PK", - "sbn-Arab": "sbn-Arab-PK", - "sbn-PK": "sbn-Arab-PK", - "sbo": "sbo-Latn-MY", - "sbo-Latn": "sbo-Latn-MY", - "sbo-MY": "sbo-Latn-MY", - "sbp": "sbp-Latn-TZ", - "sbp-Latn": "sbp-Latn-TZ", - "sbp-TZ": "sbp-Latn-TZ", - "sbq": "sbq-Latn-PG", - "sbq-Latn": "sbq-Latn-PG", - "sbq-PG": "sbq-Latn-PG", - "sbr": "sbr-Latn-ID", - "sbr-ID": "sbr-Latn-ID", - "sbr-Latn": "sbr-Latn-ID", - "sbs": "sbs-Latn-NA", - "sbs-Latn": "sbs-Latn-NA", - "sbs-NA": "sbs-Latn-NA", - "sbt": "sbt-Latn-ID", - "sbt-ID": "sbt-Latn-ID", - "sbt-Latn": "sbt-Latn-ID", - "sbu": "sbu-Tibt-IN", - "sbu-IN": "sbu-Tibt-IN", - "sbu-Tibt": "sbu-Tibt-IN", - "sbv": "sbv-Latn-IT", - "sbv-IT": "sbv-Latn-IT", - "sbv-Latn": "sbv-Latn-IT", - "sbw": "sbw-Latn-GA", - "sbw-GA": "sbw-Latn-GA", - "sbw-Latn": "sbw-Latn-GA", - "sbx": "sbx-Latn-ID", - "sbx-ID": "sbx-Latn-ID", - "sbx-Latn": "sbx-Latn-ID", - "sby": "sby-Latn-ZM", - "sby-Latn": "sby-Latn-ZM", - "sby-ZM": "sby-Latn-ZM", - "sbz": "sbz-Latn-CF", - "sbz-CF": "sbz-Latn-CF", - "sbz-Latn": "sbz-Latn-CF", - "sc": "sc-Latn-IT", - "sc-IT": "sc-Latn-IT", - "sc-Latn": "sc-Latn-IT", - "scb": "scb-Latn-VN", - "scb-Latn": "scb-Latn-VN", - "scb-VN": "scb-Latn-VN", - "sce": "sce-Latn-CN", - "sce-CN": "sce-Latn-CN", - "sce-Latn": "sce-Latn-CN", - "scf": "scf-Latn-PA", - "scf-Latn": "scf-Latn-PA", - "scf-PA": "scf-Latn-PA", - "scg": "scg-Latn-ID", - "scg-ID": "scg-Latn-ID", - "scg-Latn": "scg-Latn-ID", - "sch": "sch-Latn-IN", - "sch-IN": "sch-Latn-IN", - "sch-Latn": "sch-Latn-IN", - "sci": "sci-Latn-LK", - "sci-LK": "sci-Latn-LK", - "sci-Latn": "sci-Latn-LK", - "sck": "sck-Deva-IN", - "sck-Deva": "sck-Deva-IN", - "sck-IN": "sck-Deva-IN", - "scl": "scl-Arab-PK", - "scl-Arab": "scl-Arab-PK", - "scl-PK": "scl-Arab-PK", - "scn": "scn-Latn-IT", - "scn-IT": "scn-Latn-IT", - "scn-Latn": "scn-Latn-IT", - "sco": "sco-Latn-GB", - "sco-GB": "sco-Latn-GB", - "sco-Latn": "sco-Latn-GB", - "scp": "scp-Deva-NP", - "scp-Deva": "scp-Deva-NP", - "scp-NP": "scp-Deva-NP", - "scs": "scs-Latn-CA", - "scs-CA": "scs-Latn-CA", - "scs-Latn": "scs-Latn-CA", - "sct": "sct-Laoo-LA", - "sct-LA": "sct-Laoo-LA", - "sct-Laoo": "sct-Laoo-LA", - "scu": "scu-Takr-IN", - "scu-IN": "scu-Takr-IN", - "scu-Takr": "scu-Takr-IN", - "scv": "scv-Latn-NG", - "scv-Latn": "scv-Latn-NG", - "scv-NG": "scv-Latn-NG", - "scw": "scw-Latn-NG", - "scw-Latn": "scw-Latn-NG", - "scw-NG": "scw-Latn-NG", - "scx": "scx-Grek-IT", - "scx-Grek": "scx-Grek-IT", - "scx-IT": "scx-Grek-IT", - "sd": "sd-Arab-PK", - "sd-Arab": "sd-Arab-PK", - "sd-Deva": "sd-Deva-IN", - "sd-IN": "sd-Deva-IN", - "sd-Khoj": "sd-Khoj-IN", - "sd-PK": "sd-Arab-PK", - "sd-Sind": "sd-Sind-IN", - "sda": "sda-Latn-ID", - "sda-ID": "sda-Latn-ID", - "sda-Latn": "sda-Latn-ID", - "sdb": "sdb-Arab-IQ", - "sdb-Arab": "sdb-Arab-IQ", - "sdb-IQ": "sdb-Arab-IQ", - "sdc": "sdc-Latn-IT", - "sdc-IT": "sdc-Latn-IT", - "sdc-Latn": "sdc-Latn-IT", - "sde": "sde-Latn-NG", - "sde-Latn": "sde-Latn-NG", - "sde-NG": "sde-Latn-NG", - "sdf": "sdf-Arab-IQ", - "sdf-Arab": "sdf-Arab-IQ", - "sdf-IQ": "sdf-Arab-IQ", - "sdg": "sdg-Arab-AF", - "sdg-AF": "sdg-Arab-AF", - "sdg-Arab": "sdg-Arab-AF", - "sdh": "sdh-Arab-IR", - "sdh-Arab": "sdh-Arab-IR", - "sdh-IR": "sdh-Arab-IR", - "sdj": "sdj-Latn-CG", - "sdj-CG": "sdj-Latn-CG", - "sdj-Latn": "sdj-Latn-CG", - "sdk": "sdk-Latn-PG", - "sdk-Latn": "sdk-Latn-PG", - "sdk-PG": "sdk-Latn-PG", - "sdn": "sdn-Latn-IT", - "sdn-IT": "sdn-Latn-IT", - "sdn-Latn": "sdn-Latn-IT", - "sdo": "sdo-Latn-MY", - "sdo-Latn": "sdo-Latn-MY", - "sdo-MY": "sdo-Latn-MY", - "sdq": "sdq-Latn-ID", - "sdq-ID": "sdq-Latn-ID", - "sdq-Latn": "sdq-Latn-ID", - "sdr": "sdr-Beng-BD", - "sdr-BD": "sdr-Beng-BD", - "sdr-Beng": "sdr-Beng-BD", - "sds": "sds-Arab-TN", - "sds-Arab": "sds-Arab-TN", - "sds-TN": "sds-Arab-TN", - "sdu": "sdu-Latn-ID", - "sdu-ID": "sdu-Latn-ID", - "sdu-Latn": "sdu-Latn-ID", - "sdx": "sdx-Latn-MY", - "sdx-Latn": "sdx-Latn-MY", - "sdx-MY": "sdx-Latn-MY", - "se": "se-Latn-NO", - "se-Latn": "se-Latn-NO", - "se-NO": "se-Latn-NO", - "sea": "sea-Latn-MY", - "sea-Latn": "sea-Latn-MY", - "sea-MY": "sea-Latn-MY", - "seb": "seb-Latn-CI", - "seb-CI": "seb-Latn-CI", - "seb-Latn": "seb-Latn-CI", - "sec": "sec-Latn-CA", - "sec-CA": "sec-Latn-CA", - "sec-Latn": "sec-Latn-CA", - "sed": "sed-Latn-VN", - "sed-Latn": "sed-Latn-VN", - "sed-VN": "sed-Latn-VN", - "see": "see-Latn-US", - "see-Latn": "see-Latn-US", - "see-US": "see-Latn-US", - "sef": "sef-Latn-CI", - "sef-CI": "sef-Latn-CI", - "sef-Latn": "sef-Latn-CI", - "seg": "seg-Latn-TZ", - "seg-Latn": "seg-Latn-TZ", - "seg-TZ": "seg-Latn-TZ", - "seh": "seh-Latn-MZ", - "seh-Latn": "seh-Latn-MZ", - "seh-MZ": "seh-Latn-MZ", - "sei": "sei-Latn-MX", - "sei-Latn": "sei-Latn-MX", - "sei-MX": "sei-Latn-MX", - "sej": "sej-Latn-PG", - "sej-Latn": "sej-Latn-PG", - "sej-PG": "sej-Latn-PG", - "sek": "sek-Latn-CA", - "sek-CA": "sek-Latn-CA", - "sek-Latn": "sek-Latn-CA", - "sel": "sel-Cyrl-RU", - "sel-Cyrl": "sel-Cyrl-RU", - "sel-RU": "sel-Cyrl-RU", - "sen": "sen-Latn-BF", - "sen-BF": "sen-Latn-BF", - "sen-Latn": "sen-Latn-BF", - "seo": "seo-Latn-PG", - "seo-Latn": "seo-Latn-PG", - "seo-PG": "seo-Latn-PG", - "sep": "sep-Latn-BF", - "sep-BF": "sep-Latn-BF", - "sep-Latn": "sep-Latn-BF", - "seq": "seq-Latn-BF", - "seq-BF": "seq-Latn-BF", - "seq-Latn": "seq-Latn-BF", - "ser": "ser-Latn-US", - "ser-Latn": "ser-Latn-US", - "ser-US": "ser-Latn-US", - "ses": "ses-Latn-ML", - "ses-Latn": "ses-Latn-ML", - "ses-ML": "ses-Latn-ML", - "set": "set-Latn-ID", - "set-ID": "set-Latn-ID", - "set-Latn": "set-Latn-ID", - "seu": "seu-Latn-ID", - "seu-ID": "seu-Latn-ID", - "seu-Latn": "seu-Latn-ID", - "sev": "sev-Latn-CI", - "sev-CI": "sev-Latn-CI", - "sev-Latn": "sev-Latn-CI", - "sew": "sew-Latn-PG", - "sew-Latn": "sew-Latn-PG", - "sew-PG": "sew-Latn-PG", - "sey": "sey-Latn-EC", - "sey-EC": "sey-Latn-EC", - "sey-Latn": "sey-Latn-EC", - "sez": "sez-Latn-MM", - "sez-Latn": "sez-Latn-MM", - "sez-MM": "sez-Latn-MM", - "sfe": "sfe-Latn-PH", - "sfe-Latn": "sfe-Latn-PH", - "sfe-PH": "sfe-Latn-PH", - "sfm": "sfm-Plrd-CN", - "sfm-CN": "sfm-Plrd-CN", - "sfm-Plrd": "sfm-Plrd-CN", - "sfw": "sfw-Latn-GH", - "sfw-GH": "sfw-Latn-GH", - "sfw-Latn": "sfw-Latn-GH", - "sg": "sg-Latn-CF", - "sg-CF": "sg-Latn-CF", - "sg-Latn": "sg-Latn-CF", - "sga": "sga-Ogam-IE", - "sga-IE": "sga-Ogam-IE", - "sga-Ogam": "sga-Ogam-IE", - "sgb": "sgb-Latn-PH", - "sgb-Latn": "sgb-Latn-PH", - "sgb-PH": "sgb-Latn-PH", - "sgc": "sgc-Latn-KE", - "sgc-KE": "sgc-Latn-KE", - "sgc-Latn": "sgc-Latn-KE", - "sgd": "sgd-Latn-PH", - "sgd-Latn": "sgd-Latn-PH", - "sgd-PH": "sgd-Latn-PH", - "sge": "sge-Latn-ID", - "sge-ID": "sge-Latn-ID", - "sge-Latn": "sge-Latn-ID", - "sgh": "sgh-Cyrl-TJ", - "sgh-Cyrl": "sgh-Cyrl-TJ", - "sgh-TJ": "sgh-Cyrl-TJ", - "sgi": "sgi-Latn-CM", - "sgi-CM": "sgi-Latn-CM", - "sgi-Latn": "sgi-Latn-CM", - "sgj": "sgj-Deva-IN", - "sgj-Deva": "sgj-Deva-IN", - "sgj-IN": "sgj-Deva-IN", - "sgm": "sgm-Latn-KE", - "sgm-KE": "sgm-Latn-KE", - "sgm-Latn": "sgm-Latn-KE", - "sgp": "sgp-Latn-IN", - "sgp-IN": "sgp-Latn-IN", - "sgp-Latn": "sgp-Latn-IN", - "sgr": "sgr-Arab-IR", - "sgr-Arab": "sgr-Arab-IR", - "sgr-IR": "sgr-Arab-IR", - "sgs": "sgs-Latn-LT", - "sgs-LT": "sgs-Latn-LT", - "sgs-Latn": "sgs-Latn-LT", - "sgt": "sgt-Tibt-BT", - "sgt-BT": "sgt-Tibt-BT", - "sgt-Tibt": "sgt-Tibt-BT", - "sgu": "sgu-Latn-ID", - "sgu-ID": "sgu-Latn-ID", - "sgu-Latn": "sgu-Latn-ID", - "sgw": "sgw-Ethi-ET", - "sgw-ET": "sgw-Ethi-ET", - "sgw-Ethi": "sgw-Ethi-ET", - "sgy": "sgy-Arab-AF", - "sgy-AF": "sgy-Arab-AF", - "sgy-Arab": "sgy-Arab-AF", - "sgz": "sgz-Latn-PG", - "sgz-Latn": "sgz-Latn-PG", - "sgz-PG": "sgz-Latn-PG", - "sha": "sha-Latn-NG", - "sha-Latn": "sha-Latn-NG", - "sha-NG": "sha-Latn-NG", - "shb": "shb-Latn-BR", - "shb-BR": "shb-Latn-BR", - "shb-Latn": "shb-Latn-BR", - "shc": "shc-Latn-CD", - "shc-CD": "shc-Latn-CD", - "shc-Latn": "shc-Latn-CD", - "shd": "shd-Arab-PK", - "shd-Arab": "shd-Arab-PK", - "shd-PK": "shd-Arab-PK", - "she": "she-Latn-ET", - "she-ET": "she-Latn-ET", - "she-Latn": "she-Latn-ET", - "shg": "shg-Latn-BW", - "shg-BW": "shg-Latn-BW", - "shg-Latn": "shg-Latn-BW", - "shh": "shh-Latn-US", - "shh-Latn": "shh-Latn-US", - "shh-US": "shh-Latn-US", - "shi": "shi-Tfng-MA", - "shi-MA": "shi-Tfng-MA", - "shi-Tfng": "shi-Tfng-MA", - "shj": "shj-Latn-SD", - "shj-Latn": "shj-Latn-SD", - "shj-SD": "shj-Latn-SD", - "shk": "shk-Latn-SS", - "shk-Latn": "shk-Latn-SS", - "shk-SS": "shk-Latn-SS", - "shm": "shm-Arab-IR", - "shm-Arab": "shm-Arab-IR", - "shm-IR": "shm-Arab-IR", - "shn": "shn-Mymr-MM", - "shn-MM": "shn-Mymr-MM", - "shn-Mymr": "shn-Mymr-MM", - "sho": "sho-Latn-NG", - "sho-Latn": "sho-Latn-NG", - "sho-NG": "sho-Latn-NG", - "shp": "shp-Latn-PE", - "shp-Latn": "shp-Latn-PE", - "shp-PE": "shp-Latn-PE", - "shq": "shq-Latn-ZM", - "shq-Latn": "shq-Latn-ZM", - "shq-ZM": "shq-Latn-ZM", - "shr": "shr-Latn-CD", - "shr-CD": "shr-Latn-CD", - "shr-Latn": "shr-Latn-CD", - "shs": "shs-Latn-CA", - "shs-CA": "shs-Latn-CA", - "shs-Latn": "shs-Latn-CA", - "sht": "sht-Latn-US", - "sht-Latn": "sht-Latn-US", - "sht-US": "sht-Latn-US", - "shu": "shu-Arab-TD", - "shu-Arab": "shu-Arab-TD", - "shu-TD": "shu-Arab-TD", - "shv": "shv-Arab-OM", - "shv-Arab": "shv-Arab-OM", - "shv-OM": "shv-Arab-OM", - "shw": "shw-Latn-SD", - "shw-Latn": "shw-Latn-SD", - "shw-SD": "shw-Latn-SD", - "shy": "shy-Latn-DZ", - "shy-DZ": "shy-Latn-DZ", - "shy-Latn": "shy-Latn-DZ", - "shz": "shz-Latn-ML", - "shz-Latn": "shz-Latn-ML", - "shz-ML": "shz-Latn-ML", - "si": "si-Sinh-LK", - "si-LK": "si-Sinh-LK", - "si-Sinh": "si-Sinh-LK", - "si-XX": "si-Sinh-XX", - "sia": "sia-Cyrl-RU", - "sia-Cyrl": "sia-Cyrl-RU", - "sia-RU": "sia-Cyrl-RU", - "sib": "sib-Latn-MY", - "sib-Latn": "sib-Latn-MY", - "sib-MY": "sib-Latn-MY", - "sid": "sid-Latn-ET", - "sid-ET": "sid-Latn-ET", - "sid-Latn": "sid-Latn-ET", - "sie": "sie-Latn-ZM", - "sie-Latn": "sie-Latn-ZM", - "sie-ZM": "sie-Latn-ZM", - "sif": "sif-Latn-BF", - "sif-BF": "sif-Latn-BF", - "sif-Latn": "sif-Latn-BF", - "sig": "sig-Latn-GH", - "sig-GH": "sig-Latn-GH", - "sig-Latn": "sig-Latn-GH", - "sih": "sih-Latn-NC", - "sih-Latn": "sih-Latn-NC", - "sih-NC": "sih-Latn-NC", - "sii": "sii-Latn-IN", - "sii-IN": "sii-Latn-IN", - "sii-Latn": "sii-Latn-IN", - "sij": "sij-Latn-PG", - "sij-Latn": "sij-Latn-PG", - "sij-PG": "sij-Latn-PG", - "sik": "sik-Latn-BR", - "sik-BR": "sik-Latn-BR", - "sik-Latn": "sik-Latn-BR", - "sil": "sil-Latn-GH", - "sil-GH": "sil-Latn-GH", - "sil-Latn": "sil-Latn-GH", - "sim": "sim-Latn-PG", - "sim-Latn": "sim-Latn-PG", - "sim-PG": "sim-Latn-PG", - "sip": "sip-Tibt-IN", - "sip-IN": "sip-Tibt-IN", - "sip-Tibt": "sip-Tibt-IN", - "siq": "siq-Latn-PG", - "siq-Latn": "siq-Latn-PG", - "siq-PG": "siq-Latn-PG", - "sir": "sir-Latn-NG", - "sir-Latn": "sir-Latn-NG", - "sir-NG": "sir-Latn-NG", - "sis": "sis-Latn-US", - "sis-Latn": "sis-Latn-US", - "sis-US": "sis-Latn-US", - "siu": "siu-Latn-PG", - "siu-Latn": "siu-Latn-PG", - "siu-PG": "siu-Latn-PG", - "siv": "siv-Latn-PG", - "siv-Latn": "siv-Latn-PG", - "siv-PG": "siv-Latn-PG", - "siw": "siw-Latn-PG", - "siw-Latn": "siw-Latn-PG", - "siw-PG": "siw-Latn-PG", - "six": "six-Latn-PG", - "six-Latn": "six-Latn-PG", - "six-PG": "six-Latn-PG", - "siy": "siy-Arab-IR", - "siy-Arab": "siy-Arab-IR", - "siy-IR": "siy-Arab-IR", - "siz": "siz-Arab-EG", - "siz-Arab": "siz-Arab-EG", - "siz-EG": "siz-Arab-EG", - "sja": "sja-Latn-CO", - "sja-CO": "sja-Latn-CO", - "sja-Latn": "sja-Latn-CO", - "sjb": "sjb-Latn-ID", - "sjb-ID": "sjb-Latn-ID", - "sjb-Latn": "sjb-Latn-ID", - "sjd": "sjd-Cyrl-RU", - "sjd-Cyrl": "sjd-Cyrl-RU", - "sjd-RU": "sjd-Cyrl-RU", - "sje": "sje-Latn-SE", - "sje-Latn": "sje-Latn-SE", - "sje-SE": "sje-Latn-SE", - "sjg": "sjg-Latn-TD", - "sjg-Latn": "sjg-Latn-TD", - "sjg-TD": "sjg-Latn-TD", - "sjl": "sjl-Latn-IN", - "sjl-IN": "sjl-Latn-IN", - "sjl-Latn": "sjl-Latn-IN", - "sjm": "sjm-Latn-PH", - "sjm-Latn": "sjm-Latn-PH", - "sjm-PH": "sjm-Latn-PH", - "sjp": "sjp-Deva-IN", - "sjp-Deva": "sjp-Deva-IN", - "sjp-IN": "sjp-Deva-IN", - "sjr": "sjr-Latn-PG", - "sjr-Latn": "sjr-Latn-PG", - "sjr-PG": "sjr-Latn-PG", - "sjt": "sjt-Cyrl-RU", - "sjt-Cyrl": "sjt-Cyrl-RU", - "sjt-RU": "sjt-Cyrl-RU", - "sju": "sju-Latn-SE", - "sju-Latn": "sju-Latn-SE", - "sju-SE": "sju-Latn-SE", - "sjw": "sjw-Latn-US", - "sjw-Latn": "sjw-Latn-US", - "sjw-US": "sjw-Latn-US", - "sk": "sk-Latn-SK", - "sk-Latn": "sk-Latn-SK", - "sk-SK": "sk-Latn-SK", - "ska": "ska-Latn-US", - "ska-Latn": "ska-Latn-US", - "ska-US": "ska-Latn-US", - "skb": "skb-Thai-TH", - "skb-TH": "skb-Thai-TH", - "skb-Thai": "skb-Thai-TH", - "skc": "skc-Latn-PG", - "skc-Latn": "skc-Latn-PG", - "skc-PG": "skc-Latn-PG", - "skd": "skd-Latn-US", - "skd-Latn": "skd-Latn-US", - "skd-US": "skd-Latn-US", - "ske": "ske-Latn-VU", - "ske-Latn": "ske-Latn-VU", - "ske-VU": "ske-Latn-VU", - "skf": "skf-Latn-BR", - "skf-BR": "skf-Latn-BR", - "skf-Latn": "skf-Latn-BR", - "skg": "skg-Latn-MG", - "skg-Latn": "skg-Latn-MG", - "skg-MG": "skg-Latn-MG", - "skh": "skh-Latn-ID", - "skh-ID": "skh-Latn-ID", - "skh-Latn": "skh-Latn-ID", - "ski": "ski-Latn-ID", - "ski-ID": "ski-Latn-ID", - "ski-Latn": "ski-Latn-ID", - "skj": "skj-Deva-NP", - "skj-Deva": "skj-Deva-NP", - "skj-NP": "skj-Deva-NP", - "skm": "skm-Latn-PG", - "skm-Latn": "skm-Latn-PG", - "skm-PG": "skm-Latn-PG", - "skn": "skn-Latn-PH", - "skn-Latn": "skn-Latn-PH", - "skn-PH": "skn-Latn-PH", - "sko": "sko-Latn-ID", - "sko-ID": "sko-Latn-ID", - "sko-Latn": "sko-Latn-ID", - "skp": "skp-Latn-MY", - "skp-Latn": "skp-Latn-MY", - "skp-MY": "skp-Latn-MY", - "skq": "skq-Latn-BF", - "skq-BF": "skq-Latn-BF", - "skq-Latn": "skq-Latn-BF", - "skr": "skr-Arab-PK", - "skr-Arab": "skr-Arab-PK", - "skr-Mult": "skr-Mult-PK", - "skr-PK": "skr-Arab-PK", - "sks": "sks-Latn-PG", - "sks-Latn": "sks-Latn-PG", - "sks-PG": "sks-Latn-PG", - "skt": "skt-Latn-CD", - "skt-CD": "skt-Latn-CD", - "skt-Latn": "skt-Latn-CD", - "sku": "sku-Latn-VU", - "sku-Latn": "sku-Latn-VU", - "sku-VU": "sku-Latn-VU", - "skv": "skv-Latn-ID", - "skv-ID": "skv-Latn-ID", - "skv-Latn": "skv-Latn-ID", - "skw": "skw-Latn-GY", - "skw-GY": "skw-Latn-GY", - "skw-Latn": "skw-Latn-GY", - "skx": "skx-Latn-ID", - "skx-ID": "skx-Latn-ID", - "skx-Latn": "skx-Latn-ID", - "sky": "sky-Latn-SB", - "sky-Latn": "sky-Latn-SB", - "sky-SB": "sky-Latn-SB", - "skz": "skz-Latn-ID", - "skz-ID": "skz-Latn-ID", - "skz-Latn": "skz-Latn-ID", - "sl": "sl-Latn-SI", - "sl-Latn": "sl-Latn-SI", - "sl-SI": "sl-Latn-SI", - "slc": "slc-Latn-CO", - "slc-CO": "slc-Latn-CO", - "slc-Latn": "slc-Latn-CO", - "sld": "sld-Latn-BF", - "sld-BF": "sld-Latn-BF", - "sld-Latn": "sld-Latn-BF", - "slg": "slg-Latn-ID", - "slg-ID": "slg-Latn-ID", - "slg-Latn": "slg-Latn-ID", - "slh": "slh-Latn-US", - "slh-Latn": "slh-Latn-US", - "slh-US": "slh-Latn-US", - "sli": "sli-Latn-PL", - "sli-Latn": "sli-Latn-PL", - "sli-PL": "sli-Latn-PL", - "slj": "slj-Latn-BR", - "slj-BR": "slj-Latn-BR", - "slj-Latn": "slj-Latn-BR", - "sll": "sll-Latn-PG", - "sll-Latn": "sll-Latn-PG", - "sll-PG": "sll-Latn-PG", - "slm": "slm-Latn-PH", - "slm-Latn": "slm-Latn-PH", - "slm-PH": "slm-Latn-PH", - "sln": "sln-Latn-US", - "sln-Latn": "sln-Latn-US", - "sln-US": "sln-Latn-US", - "slp": "slp-Latn-ID", - "slp-ID": "slp-Latn-ID", - "slp-Latn": "slp-Latn-ID", - "slr": "slr-Latn-CN", - "slr-CN": "slr-Latn-CN", - "slr-Latn": "slr-Latn-CN", - "slu": "slu-Latn-ID", - "slu-ID": "slu-Latn-ID", - "slu-Latn": "slu-Latn-ID", - "slw": "slw-Latn-PG", - "slw-Latn": "slw-Latn-PG", - "slw-PG": "slw-Latn-PG", - "slx": "slx-Latn-CD", - "slx-CD": "slx-Latn-CD", - "slx-Latn": "slx-Latn-CD", - "sly": "sly-Latn-ID", - "sly-ID": "sly-Latn-ID", - "sly-Latn": "sly-Latn-ID", - "slz": "slz-Latn-ID", - "slz-ID": "slz-Latn-ID", - "slz-Latn": "slz-Latn-ID", - "sm": "sm-Latn-WS", - "sm-AS": "sm-Latn-AS", - "sm-Latn": "sm-Latn-WS", - "sm-WS": "sm-Latn-WS", - "sma": "sma-Latn-SE", - "sma-Latn": "sma-Latn-SE", - "sma-SE": "sma-Latn-SE", - "smb": "smb-Latn-PG", - "smb-Latn": "smb-Latn-PG", - "smb-PG": "smb-Latn-PG", - "smc": "smc-Latn-PG", - "smc-Latn": "smc-Latn-PG", - "smc-PG": "smc-Latn-PG", - "smf": "smf-Latn-PG", - "smf-Latn": "smf-Latn-PG", - "smf-PG": "smf-Latn-PG", - "smg": "smg-Latn-PG", - "smg-Latn": "smg-Latn-PG", - "smg-PG": "smg-Latn-PG", - "smh": "smh-Yiii-CN", - "smh-CN": "smh-Yiii-CN", - "smh-Yiii": "smh-Yiii-CN", - "smj": "smj-Latn-SE", - "smj-Latn": "smj-Latn-SE", - "smj-SE": "smj-Latn-SE", - "smk": "smk-Latn-PH", - "smk-Latn": "smk-Latn-PH", - "smk-PH": "smk-Latn-PH", - "sml": "sml-Latn-PH", - "sml-Latn": "sml-Latn-PH", - "sml-PH": "sml-Latn-PH", - "smn": "smn-Latn-FI", - "smn-FI": "smn-Latn-FI", - "smn-Latn": "smn-Latn-FI", - "smp": "smp-Samr-IL", - "smp-IL": "smp-Samr-IL", - "smp-Samr": "smp-Samr-IL", - "smq": "smq-Latn-PG", - "smq-Latn": "smq-Latn-PG", - "smq-PG": "smq-Latn-PG", - "smr": "smr-Latn-ID", - "smr-ID": "smr-Latn-ID", - "smr-Latn": "smr-Latn-ID", - "sms": "sms-Latn-FI", - "sms-FI": "sms-Latn-FI", - "sms-Latn": "sms-Latn-FI", - "smt": "smt-Latn-IN", - "smt-IN": "smt-Latn-IN", - "smt-Latn": "smt-Latn-IN", - "smu": "smu-Khmr-KH", - "smu-KH": "smu-Khmr-KH", - "smu-Khmr": "smu-Khmr-KH", - "smw": "smw-Latn-ID", - "smw-ID": "smw-Latn-ID", - "smw-Latn": "smw-Latn-ID", - "smx": "smx-Latn-CD", - "smx-CD": "smx-Latn-CD", - "smx-Latn": "smx-Latn-CD", - "smy": "smy-Arab-IR", - "smy-Arab": "smy-Arab-IR", - "smy-IR": "smy-Arab-IR", - "smz": "smz-Latn-PG", - "smz-Latn": "smz-Latn-PG", - "smz-PG": "smz-Latn-PG", - "sn": "sn-Latn-ZW", - "sn-Latn": "sn-Latn-ZW", - "sn-ZW": "sn-Latn-ZW", - "snc": "snc-Latn-PG", - "snc-Latn": "snc-Latn-PG", - "snc-PG": "snc-Latn-PG", - "sne": "sne-Latn-MY", - "sne-Latn": "sne-Latn-MY", - "sne-MY": "sne-Latn-MY", - "snf": "snf-Latn-SN", - "snf-Latn": "snf-Latn-SN", - "snf-SN": "snf-Latn-SN", - "sng": "sng-Latn-CD", - "sng-CD": "sng-Latn-CD", - "sng-Latn": "sng-Latn-CD", - "sni": "sni-Latn-PE", - "sni-Latn": "sni-Latn-PE", - "sni-PE": "sni-Latn-PE", - "snj": "snj-Latn-CF", - "snj-CF": "snj-Latn-CF", - "snj-Latn": "snj-Latn-CF", - "snk": "snk-Latn-ML", - "snk-Latn": "snk-Latn-ML", - "snk-ML": "snk-Latn-ML", - "snl": "snl-Latn-PH", - "snl-Latn": "snl-Latn-PH", - "snl-PH": "snl-Latn-PH", - "snm": "snm-Latn-UG", - "snm-Latn": "snm-Latn-UG", - "snm-UG": "snm-Latn-UG", - "snn": "snn-Latn-CO", - "snn-CO": "snn-Latn-CO", - "snn-Latn": "snn-Latn-CO", - "sno": "sno-Latn-US", - "sno-Latn": "sno-Latn-US", - "sno-US": "sno-Latn-US", - "snp": "snp-Latn-PG", - "snp-Latn": "snp-Latn-PG", - "snp-PG": "snp-Latn-PG", - "snq": "snq-Latn-GA", - "snq-GA": "snq-Latn-GA", - "snq-Latn": "snq-Latn-GA", - "snr": "snr-Latn-PG", - "snr-Latn": "snr-Latn-PG", - "snr-PG": "snr-Latn-PG", - "sns": "sns-Latn-VU", - "sns-Latn": "sns-Latn-VU", - "sns-VU": "sns-Latn-VU", - "snu": "snu-Latn-ID", - "snu-ID": "snu-Latn-ID", - "snu-Latn": "snu-Latn-ID", - "snv": "snv-Latn-MY", - "snv-Latn": "snv-Latn-MY", - "snv-MY": "snv-Latn-MY", - "snw": "snw-Latn-GH", - "snw-GH": "snw-Latn-GH", - "snw-Latn": "snw-Latn-GH", - "snx": "snx-Latn-PG", - "snx-Latn": "snx-Latn-PG", - "snx-PG": "snx-Latn-PG", - "sny": "sny-Latn-PG", - "sny-Latn": "sny-Latn-PG", - "sny-PG": "sny-Latn-PG", - "snz": "snz-Latn-PG", - "snz-Latn": "snz-Latn-PG", - "snz-PG": "snz-Latn-PG", - "so": "so-Latn-SO", - "so-DJ": "so-Latn-DJ", - "so-Latn": "so-Latn-SO", - "so-Osma": "so-Osma-SO", - "so-SO": "so-Latn-SO", - "soa": "soa-Tavt-TH", - "soa-TH": "soa-Tavt-TH", - "soa-Tavt": "soa-Tavt-TH", - "sob": "sob-Latn-ID", - "sob-ID": "sob-Latn-ID", - "sob-Latn": "sob-Latn-ID", - "soc": "soc-Latn-CD", - "soc-CD": "soc-Latn-CD", - "soc-Latn": "soc-Latn-CD", - "sod": "sod-Latn-CD", - "sod-CD": "sod-Latn-CD", - "sod-Latn": "sod-Latn-CD", - "soe": "soe-Latn-CD", - "soe-CD": "soe-Latn-CD", - "soe-Latn": "soe-Latn-CD", - "sog": "sog-Sogd-UZ", - "sog-Sogd": "sog-Sogd-UZ", - "sog-Sogo": "sog-Sogo-UZ", - "sog-UZ": "sog-Sogd-UZ", - "soi": "soi-Deva-NP", - "soi-Deva": "soi-Deva-NP", - "soi-NP": "soi-Deva-NP", - "sok": "sok-Latn-TD", - "sok-Latn": "sok-Latn-TD", - "sok-TD": "sok-Latn-TD", - "sol": "sol-Latn-PG", - "sol-Latn": "sol-Latn-PG", - "sol-PG": "sol-Latn-PG", - "soo": "soo-Latn-CD", - "soo-CD": "soo-Latn-CD", - "soo-Latn": "soo-Latn-CD", - "sop": "sop-Latn-CD", - "sop-CD": "sop-Latn-CD", - "sop-Latn": "sop-Latn-CD", - "soq": "soq-Latn-PG", - "soq-Latn": "soq-Latn-PG", - "soq-PG": "soq-Latn-PG", - "sor": "sor-Latn-TD", - "sor-Latn": "sor-Latn-TD", - "sor-TD": "sor-Latn-TD", - "sos": "sos-Latn-BF", - "sos-BF": "sos-Latn-BF", - "sos-Latn": "sos-Latn-BF", - "sou": "sou-Thai-TH", - "sou-TH": "sou-Thai-TH", - "sou-Thai": "sou-Thai-TH", - "sov": "sov-Latn-PW", - "sov-Latn": "sov-Latn-PW", - "sov-PW": "sov-Latn-PW", - "sow": "sow-Latn-PG", - "sow-Latn": "sow-Latn-PG", - "sow-PG": "sow-Latn-PG", - "sox": "sox-Latn-CM", - "sox-CM": "sox-Latn-CM", - "sox-Latn": "sox-Latn-CM", - "soy": "soy-Latn-BJ", - "soy-BJ": "soy-Latn-BJ", - "soy-Latn": "soy-Latn-BJ", - "soz": "soz-Latn-TZ", - "soz-Latn": "soz-Latn-TZ", - "soz-TZ": "soz-Latn-TZ", - "spb": "spb-Latn-ID", - "spb-ID": "spb-Latn-ID", - "spb-Latn": "spb-Latn-ID", - "spc": "spc-Latn-VE", - "spc-Latn": "spc-Latn-VE", - "spc-VE": "spc-Latn-VE", - "spd": "spd-Latn-PG", - "spd-Latn": "spd-Latn-PG", - "spd-PG": "spd-Latn-PG", - "spe": "spe-Latn-PG", - "spe-Latn": "spe-Latn-PG", - "spe-PG": "spe-Latn-PG", - "spg": "spg-Latn-MY", - "spg-Latn": "spg-Latn-MY", - "spg-MY": "spg-Latn-MY", - "spi": "spi-Latn-ID", - "spi-ID": "spi-Latn-ID", - "spi-Latn": "spi-Latn-ID", - "spk": "spk-Latn-PG", - "spk-Latn": "spk-Latn-PG", - "spk-PG": "spk-Latn-PG", - "spl": "spl-Latn-PG", - "spl-Latn": "spl-Latn-PG", - "spl-PG": "spl-Latn-PG", - "spm": "spm-Latn-PG", - "spm-Latn": "spm-Latn-PG", - "spm-PG": "spm-Latn-PG", - "spn": "spn-Latn-PY", - "spn-Latn": "spn-Latn-PY", - "spn-PY": "spn-Latn-PY", - "spo": "spo-Latn-US", - "spo-Latn": "spo-Latn-US", - "spo-US": "spo-Latn-US", - "spp": "spp-Latn-ML", - "spp-Latn": "spp-Latn-ML", - "spp-ML": "spp-Latn-ML", - "spq": "spq-Latn-PE", - "spq-Latn": "spq-Latn-PE", - "spq-PE": "spq-Latn-PE", - "spr": "spr-Latn-ID", - "spr-ID": "spr-Latn-ID", - "spr-Latn": "spr-Latn-ID", - "sps": "sps-Latn-PG", - "sps-Latn": "sps-Latn-PG", - "sps-PG": "sps-Latn-PG", - "spt": "spt-Tibt-IN", - "spt-IN": "spt-Tibt-IN", - "spt-Tibt": "spt-Tibt-IN", - "spv": "spv-Orya-IN", - "spv-IN": "spv-Orya-IN", - "spv-Orya": "spv-Orya-IN", - "sq": "sq-Latn-AL", - "sq-AL": "sq-Latn-AL", - "sq-Elba": "sq-Elba-AL", - "sq-Latn": "sq-Latn-AL", - "sq-Latn-MK": "sq-Latn-MK", - "sq-ME": "sq-Latn-ME", - "sq-Todr": "sq-Todr-AL", - "sq-Vith": "sq-Vith-AL", - "sq-XK": "sq-Latn-XK", - "sqa": "sqa-Latn-NG", - "sqa-Latn": "sqa-Latn-NG", - "sqa-NG": "sqa-Latn-NG", - "sqh": "sqh-Latn-NG", - "sqh-Latn": "sqh-Latn-NG", - "sqh-NG": "sqh-Latn-NG", - "sqm": "sqm-Latn-CF", - "sqm-CF": "sqm-Latn-CF", - "sqm-Latn": "sqm-Latn-CF", - "sqo": "sqo-Arab-IR", - "sqo-Arab": "sqo-Arab-IR", - "sqo-IR": "sqo-Arab-IR", - "sqq": "sqq-Laoo-LA", - "sqq-LA": "sqq-Laoo-LA", - "sqq-Laoo": "sqq-Laoo-LA", - "sqt": "sqt-Arab-YE", - "sqt-Arab": "sqt-Arab-YE", - "sqt-YE": "sqt-Arab-YE", - "squ": "squ-Latn-CA", - "squ-CA": "squ-Latn-CA", - "squ-Latn": "squ-Latn-CA", - "sr": "sr-Cyrl-RS", - "sr-Cyrl": "sr-Cyrl-RS", - "sr-Cyrl-BA": "sr-Cyrl-BA", - "sr-Cyrl-ME": "sr-Cyrl-ME", - "sr-Cyrl-RS": "sr-Cyrl-RS", - "sr-Cyrl-XK": "sr-Cyrl-XK", - "sr-Latn": "sr-Latn-ME", - "sr-ME": "sr-Latn-ME", - "sr-RO": "sr-Latn-RO", - "sr-RS": "sr-Cyrl-RS", - "sr-RU": "sr-Latn-RU", - "sr-TR": "sr-Latn-TR", - "sra": "sra-Latn-PG", - "sra-Latn": "sra-Latn-PG", - "sra-PG": "sra-Latn-PG", - "srb": "srb-Sora-IN", - "srb-IN": "srb-Sora-IN", - "srb-Sora": "srb-Sora-IN", - "sre": "sre-Latn-ID", - "sre-ID": "sre-Latn-ID", - "sre-Latn": "sre-Latn-ID", - "srf": "srf-Latn-PG", - "srf-Latn": "srf-Latn-PG", - "srf-PG": "srf-Latn-PG", - "srg": "srg-Latn-PH", - "srg-Latn": "srg-Latn-PH", - "srg-PH": "srg-Latn-PH", - "srh": "srh-Arab-CN", - "srh-Arab": "srh-Arab-CN", - "srh-CN": "srh-Arab-CN", - "sri": "sri-Latn-CO", - "sri-CO": "sri-Latn-CO", - "sri-Latn": "sri-Latn-CO", - "srk": "srk-Latn-MY", - "srk-Latn": "srk-Latn-MY", - "srk-MY": "srk-Latn-MY", - "srl": "srl-Latn-ID", - "srl-ID": "srl-Latn-ID", - "srl-Latn": "srl-Latn-ID", - "srm": "srm-Latn-SR", - "srm-Latn": "srm-Latn-SR", - "srm-SR": "srm-Latn-SR", - "srn": "srn-Latn-SR", - "srn-Latn": "srn-Latn-SR", - "srn-SR": "srn-Latn-SR", - "sro": "sro-Latn-IT", - "sro-IT": "sro-Latn-IT", - "sro-Latn": "sro-Latn-IT", - "srq": "srq-Latn-BO", - "srq-BO": "srq-Latn-BO", - "srq-Latn": "srq-Latn-BO", - "srr": "srr-Latn-SN", - "srr-Latn": "srr-Latn-SN", - "srr-SN": "srr-Latn-SN", - "srs": "srs-Latn-CA", - "srs-CA": "srs-Latn-CA", - "srs-Latn": "srs-Latn-CA", - "srt": "srt-Latn-ID", - "srt-ID": "srt-Latn-ID", - "srt-Latn": "srt-Latn-ID", - "sru": "sru-Latn-BR", - "sru-BR": "sru-Latn-BR", - "sru-Latn": "sru-Latn-BR", - "srv": "srv-Latn-PH", - "srv-Latn": "srv-Latn-PH", - "srv-PH": "srv-Latn-PH", - "srw": "srw-Latn-ID", - "srw-ID": "srw-Latn-ID", - "srw-Latn": "srw-Latn-ID", - "srx": "srx-Deva-IN", - "srx-Deva": "srx-Deva-IN", - "srx-IN": "srx-Deva-IN", - "sry": "sry-Latn-PG", - "sry-Latn": "sry-Latn-PG", - "sry-PG": "sry-Latn-PG", - "srz": "srz-Arab-IR", - "srz-Arab": "srz-Arab-IR", - "srz-IR": "srz-Arab-IR", - "ss": "ss-Latn-ZA", - "ss-Latn": "ss-Latn-ZA", - "ss-SZ": "ss-Latn-SZ", - "ss-ZA": "ss-Latn-ZA", - "ssb": "ssb-Latn-PH", - "ssb-Latn": "ssb-Latn-PH", - "ssb-PH": "ssb-Latn-PH", - "ssc": "ssc-Latn-TZ", - "ssc-Latn": "ssc-Latn-TZ", - "ssc-TZ": "ssc-Latn-TZ", - "ssd": "ssd-Latn-PG", - "ssd-Latn": "ssd-Latn-PG", - "ssd-PG": "ssd-Latn-PG", - "sse": "sse-Latn-PH", - "sse-Latn": "sse-Latn-PH", - "sse-PH": "sse-Latn-PH", - "ssf": "ssf-Latn-TW", - "ssf-Latn": "ssf-Latn-TW", - "ssf-TW": "ssf-Latn-TW", - "ssg": "ssg-Latn-PG", - "ssg-Latn": "ssg-Latn-PG", - "ssg-PG": "ssg-Latn-PG", - "ssh": "ssh-Arab-AE", - "ssh-AE": "ssh-Arab-AE", - "ssh-Arab": "ssh-Arab-AE", - "ssj": "ssj-Latn-PG", - "ssj-Latn": "ssj-Latn-PG", - "ssj-PG": "ssj-Latn-PG", - "ssl": "ssl-Latn-GH", - "ssl-GH": "ssl-Latn-GH", - "ssl-Latn": "ssl-Latn-GH", - "ssm": "ssm-Latn-MY", - "ssm-Latn": "ssm-Latn-MY", - "ssm-MY": "ssm-Latn-MY", - "ssn": "ssn-Latn-KE", - "ssn-KE": "ssn-Latn-KE", - "ssn-Latn": "ssn-Latn-KE", - "sso": "sso-Latn-PG", - "sso-Latn": "sso-Latn-PG", - "sso-PG": "sso-Latn-PG", - "ssq": "ssq-Latn-ID", - "ssq-ID": "ssq-Latn-ID", - "ssq-Latn": "ssq-Latn-ID", - "sss": "sss-Laoo-LA", - "sss-LA": "sss-Laoo-LA", - "sss-Laoo": "sss-Laoo-LA", - "sst": "sst-Latn-PG", - "sst-Latn": "sst-Latn-PG", - "sst-PG": "sst-Latn-PG", - "ssu": "ssu-Latn-PG", - "ssu-Latn": "ssu-Latn-PG", - "ssu-PG": "ssu-Latn-PG", - "ssv": "ssv-Latn-VU", - "ssv-Latn": "ssv-Latn-VU", - "ssv-VU": "ssv-Latn-VU", - "ssx": "ssx-Latn-PG", - "ssx-Latn": "ssx-Latn-PG", - "ssx-PG": "ssx-Latn-PG", - "ssy": "ssy-Latn-ER", - "ssy-ER": "ssy-Latn-ER", - "ssy-Latn": "ssy-Latn-ER", - "ssz": "ssz-Latn-PG", - "ssz-Latn": "ssz-Latn-PG", - "ssz-PG": "ssz-Latn-PG", - "st": "st-Latn-ZA", - "st-LS": "st-Latn-LS", - "st-Latn": "st-Latn-ZA", - "st-ZA": "st-Latn-ZA", - "sta": "sta-Latn-ZM", - "sta-Latn": "sta-Latn-ZM", - "sta-ZM": "sta-Latn-ZM", - "stb": "stb-Latn-PH", - "stb-Latn": "stb-Latn-PH", - "stb-PH": "stb-Latn-PH", - "ste": "ste-Latn-ID", - "ste-ID": "ste-Latn-ID", - "ste-Latn": "ste-Latn-ID", - "stf": "stf-Latn-PG", - "stf-Latn": "stf-Latn-PG", - "stf-PG": "stf-Latn-PG", - "stg": "stg-Latn-VN", - "stg-Latn": "stg-Latn-VN", - "stg-VN": "stg-Latn-VN", - "sth": "sth-Latn-IE", - "sth-IE": "sth-Latn-IE", - "sth-Latn": "sth-Latn-IE", - "sti": "sti-Latn-VN", - "sti-Latn": "sti-Latn-VN", - "sti-VN": "sti-Latn-VN", - "stj": "stj-Latn-BF", - "stj-BF": "stj-Latn-BF", - "stj-Latn": "stj-Latn-BF", - "stk": "stk-Latn-PG", - "stk-Latn": "stk-Latn-PG", - "stk-PG": "stk-Latn-PG", - "stl": "stl-Latn-NL", - "stl-Latn": "stl-Latn-NL", - "stl-NL": "stl-Latn-NL", - "stm": "stm-Latn-PG", - "stm-Latn": "stm-Latn-PG", - "stm-PG": "stm-Latn-PG", - "stn": "stn-Latn-SB", - "stn-Latn": "stn-Latn-SB", - "stn-SB": "stn-Latn-SB", - "sto": "sto-Latn-CA", - "sto-CA": "sto-Latn-CA", - "sto-Latn": "sto-Latn-CA", - "stp": "stp-Latn-MX", - "stp-Latn": "stp-Latn-MX", - "stp-MX": "stp-Latn-MX", - "stq": "stq-Latn-DE", - "stq-DE": "stq-Latn-DE", - "stq-Latn": "stq-Latn-DE", - "str": "str-Latn-CA", - "str-CA": "str-Latn-CA", - "str-Latn": "str-Latn-CA", - "sts": "sts-Arab-AF", - "sts-AF": "sts-Arab-AF", - "sts-Arab": "sts-Arab-AF", - "stt": "stt-Latn-VN", - "stt-Latn": "stt-Latn-VN", - "stt-VN": "stt-Latn-VN", - "stv": "stv-Ethi-ET", - "stv-ET": "stv-Ethi-ET", - "stv-Ethi": "stv-Ethi-ET", - "stw": "stw-Latn-FM", - "stw-FM": "stw-Latn-FM", - "stw-Latn": "stw-Latn-FM", - "sty": "sty-Cyrl-RU", - "sty-Cyrl": "sty-Cyrl-RU", - "sty-RU": "sty-Cyrl-RU", - "su": "su-Latn-ID", - "su-ID": "su-Latn-ID", - "su-Latn": "su-Latn-ID", - "su-Sund": "su-Sund-ID", - "sua": "sua-Latn-PG", - "sua-Latn": "sua-Latn-PG", - "sua-PG": "sua-Latn-PG", - "sub": "sub-Latn-CD", - "sub-CD": "sub-Latn-CD", - "sub-Latn": "sub-Latn-CD", - "suc": "suc-Latn-PH", - "suc-Latn": "suc-Latn-PH", - "suc-PH": "suc-Latn-PH", - "sue": "sue-Latn-PG", - "sue-Latn": "sue-Latn-PG", - "sue-PG": "sue-Latn-PG", - "sug": "sug-Latn-PG", - "sug-Latn": "sug-Latn-PG", - "sug-PG": "sug-Latn-PG", - "sui": "sui-Latn-PG", - "sui-Latn": "sui-Latn-PG", - "sui-PG": "sui-Latn-PG", - "suj": "suj-Latn-TZ", - "suj-Latn": "suj-Latn-TZ", - "suj-TZ": "suj-Latn-TZ", - "suk": "suk-Latn-TZ", - "suk-Latn": "suk-Latn-TZ", - "suk-TZ": "suk-Latn-TZ", - "suo": "suo-Latn-PG", - "suo-Latn": "suo-Latn-PG", - "suo-PG": "suo-Latn-PG", - "suq": "suq-Latn-ET", - "suq-ET": "suq-Latn-ET", - "suq-Latn": "suq-Latn-ET", - "sur": "sur-Latn-NG", - "sur-Latn": "sur-Latn-NG", - "sur-NG": "sur-Latn-NG", - "sus": "sus-Latn-GN", - "sus-GN": "sus-Latn-GN", - "sus-Latn": "sus-Latn-GN", - "sut": "sut-Latn-NI", - "sut-Latn": "sut-Latn-NI", - "sut-NI": "sut-Latn-NI", - "suv": "suv-Latn-IN", - "suv-IN": "suv-Latn-IN", - "suv-Latn": "suv-Latn-IN", - "suw": "suw-Latn-TZ", - "suw-Latn": "suw-Latn-TZ", - "suw-TZ": "suw-Latn-TZ", - "suy": "suy-Latn-BR", - "suy-BR": "suy-Latn-BR", - "suy-Latn": "suy-Latn-BR", - "suz": "suz-Sunu-NP", - "suz-NP": "suz-Sunu-NP", - "suz-Sunu": "suz-Sunu-NP", - "sv": "sv-Latn-SE", - "sv-AX": "sv-Latn-AX", - "sv-FI": "sv-Latn-FI", - "sv-Latn": "sv-Latn-SE", - "sv-SE": "sv-Latn-SE", - "sva": "sva-Geor-GE", - "sva-GE": "sva-Geor-GE", - "sva-Geor": "sva-Geor-GE", - "svb": "svb-Latn-PG", - "svb-Latn": "svb-Latn-PG", - "svb-PG": "svb-Latn-PG", - "svc": "svc-Latn-VC", - "svc-Latn": "svc-Latn-VC", - "svc-VC": "svc-Latn-VC", - "sve": "sve-Latn-ID", - "sve-ID": "sve-Latn-ID", - "sve-Latn": "sve-Latn-ID", - "svm": "svm-Latn-IT", - "svm-IT": "svm-Latn-IT", - "svm-Latn": "svm-Latn-IT", - "svs": "svs-Latn-SB", - "svs-Latn": "svs-Latn-SB", - "svs-SB": "svs-Latn-SB", - "sw": "sw-Latn-TZ", - "sw-CD": "sw-Latn-CD", - "sw-KE": "sw-Latn-KE", - "sw-Latn": "sw-Latn-TZ", - "sw-TZ": "sw-Latn-TZ", - "sw-UG": "sw-Latn-UG", - "swb": "swb-Arab-YT", - "swb-Arab": "swb-Arab-YT", - "swb-Arab-YT": "swb-Arab-YT", - "swb-YT": "swb-Arab-YT", - "swf": "swf-Latn-CD", - "swf-CD": "swf-Latn-CD", - "swf-Latn": "swf-Latn-CD", - "swg": "swg-Latn-DE", - "swg-DE": "swg-Latn-DE", - "swg-Latn": "swg-Latn-DE", - "swi": "swi-Hani-CN", - "swi-CN": "swi-Hani-CN", - "swi-Hani": "swi-Hani-CN", - "swj": "swj-Latn-GA", - "swj-GA": "swj-Latn-GA", - "swj-Latn": "swj-Latn-GA", - "swk": "swk-Latn-MW", - "swk-Latn": "swk-Latn-MW", - "swk-MW": "swk-Latn-MW", - "swm": "swm-Latn-PG", - "swm-Latn": "swm-Latn-PG", - "swm-PG": "swm-Latn-PG", - "swo": "swo-Latn-BR", - "swo-BR": "swo-Latn-BR", - "swo-Latn": "swo-Latn-BR", - "swp": "swp-Latn-PG", - "swp-Latn": "swp-Latn-PG", - "swp-PG": "swp-Latn-PG", - "swq": "swq-Latn-CM", - "swq-CM": "swq-Latn-CM", - "swq-Latn": "swq-Latn-CM", - "swr": "swr-Latn-ID", - "swr-ID": "swr-Latn-ID", - "swr-Latn": "swr-Latn-ID", - "sws": "sws-Latn-ID", - "sws-ID": "sws-Latn-ID", - "sws-Latn": "sws-Latn-ID", - "swt": "swt-Latn-ID", - "swt-ID": "swt-Latn-ID", - "swt-Latn": "swt-Latn-ID", - "swu": "swu-Latn-ID", - "swu-ID": "swu-Latn-ID", - "swu-Latn": "swu-Latn-ID", - "swv": "swv-Deva-IN", - "swv-Deva": "swv-Deva-IN", - "swv-IN": "swv-Deva-IN", - "sww": "sww-Latn-VU", - "sww-Latn": "sww-Latn-VU", - "sww-VU": "sww-Latn-VU", - "swx": "swx-Latn-BR", - "swx-BR": "swx-Latn-BR", - "swx-Latn": "swx-Latn-BR", - "swy": "swy-Latn-TD", - "swy-Latn": "swy-Latn-TD", - "swy-TD": "swy-Latn-TD", - "sxb": "sxb-Latn-KE", - "sxb-KE": "sxb-Latn-KE", - "sxb-Latn": "sxb-Latn-KE", - "sxe": "sxe-Latn-GA", - "sxe-GA": "sxe-Latn-GA", - "sxe-Latn": "sxe-Latn-GA", - "sxn": "sxn-Latn-ID", - "sxn-ID": "sxn-Latn-ID", - "sxn-Latn": "sxn-Latn-ID", - "sxr": "sxr-Latn-TW", - "sxr-Latn": "sxr-Latn-TW", - "sxr-TW": "sxr-Latn-TW", - "sxs": "sxs-Latn-NG", - "sxs-Latn": "sxs-Latn-NG", - "sxs-NG": "sxs-Latn-NG", - "sxu": "sxu-Runr-DE", - "sxu-DE": "sxu-Runr-DE", - "sxu-Runr": "sxu-Runr-DE", - "sxw": "sxw-Latn-BJ", - "sxw-BJ": "sxw-Latn-BJ", - "sxw-Latn": "sxw-Latn-BJ", - "sya": "sya-Latn-ID", - "sya-ID": "sya-Latn-ID", - "sya-Latn": "sya-Latn-ID", - "syb": "syb-Latn-PH", - "syb-Latn": "syb-Latn-PH", - "syb-PH": "syb-Latn-PH", - "syc": "syc-Syrc-TR", - "syc-Syrc": "syc-Syrc-TR", - "syc-TR": "syc-Syrc-TR", - "syi": "syi-Latn-GA", - "syi-GA": "syi-Latn-GA", - "syi-Latn": "syi-Latn-GA", - "syk": "syk-Latn-NG", - "syk-Latn": "syk-Latn-NG", - "syk-NG": "syk-Latn-NG", - "syl": "syl-Beng-BD", - "syl-BD": "syl-Beng-BD", - "syl-Beng": "syl-Beng-BD", - "syl-Sylo": "syl-Sylo-BD", - "sym": "sym-Latn-BF", - "sym-BF": "sym-Latn-BF", - "sym-Latn": "sym-Latn-BF", - "syn": "syn-Syrc-IR", - "syn-IR": "syn-Syrc-IR", - "syn-Syrc": "syn-Syrc-IR", - "syo": "syo-Latn-KH", - "syo-KH": "syo-Latn-KH", - "syo-Latn": "syo-Latn-KH", - "syr": "syr-Syrc-IQ", - "syr-IQ": "syr-Syrc-IQ", - "syr-Syrc": "syr-Syrc-IQ", - "sys": "sys-Latn-TD", - "sys-Latn": "sys-Latn-TD", - "sys-TD": "sys-Latn-TD", - "syw": "syw-Deva-NP", - "syw-Deva": "syw-Deva-NP", - "syw-NP": "syw-Deva-NP", - "syx": "syx-Latn-GA", - "syx-GA": "syx-Latn-GA", - "syx-Latn": "syx-Latn-GA", - "sza": "sza-Latn-MY", - "sza-Latn": "sza-Latn-MY", - "sza-MY": "sza-Latn-MY", - "szb": "szb-Latn-ID", - "szb-ID": "szb-Latn-ID", - "szb-Latn": "szb-Latn-ID", - "szc": "szc-Latn-MY", - "szc-Latn": "szc-Latn-MY", - "szc-MY": "szc-Latn-MY", - "szg": "szg-Latn-CD", - "szg-CD": "szg-Latn-CD", - "szg-Latn": "szg-Latn-CD", - "szl": "szl-Latn-PL", - "szl-Latn": "szl-Latn-PL", - "szl-PL": "szl-Latn-PL", - "szn": "szn-Latn-ID", - "szn-ID": "szn-Latn-ID", - "szn-Latn": "szn-Latn-ID", - "szp": "szp-Latn-ID", - "szp-ID": "szp-Latn-ID", - "szp-Latn": "szp-Latn-ID", - "szv": "szv-Latn-CM", - "szv-CM": "szv-Latn-CM", - "szv-Latn": "szv-Latn-CM", - "szw": "szw-Latn-ID", - "szw-ID": "szw-Latn-ID", - "szw-Latn": "szw-Latn-ID", - "szy": "szy-Latn-TW", - "szy-Latn": "szy-Latn-TW", - "szy-TW": "szy-Latn-TW", - "ta": "ta-Taml-IN", - "ta-IN": "ta-Taml-IN", - "ta-Taml": "ta-Taml-IN", - "ta-XX": "ta-Taml-XX", - "taa": "taa-Latn-US", - "taa-Latn": "taa-Latn-US", - "taa-US": "taa-Latn-US", - "tab": "tab-Cyrl-RU", - "tab-Cyrl": "tab-Cyrl-RU", - "tab-RU": "tab-Cyrl-RU", - "tac": "tac-Latn-MX", - "tac-Latn": "tac-Latn-MX", - "tac-MX": "tac-Latn-MX", - "tad": "tad-Latn-ID", - "tad-ID": "tad-Latn-ID", - "tad-Latn": "tad-Latn-ID", - "tae": "tae-Latn-BR", - "tae-BR": "tae-Latn-BR", - "tae-Latn": "tae-Latn-BR", - "taf": "taf-Latn-BR", - "taf-BR": "taf-Latn-BR", - "taf-Latn": "taf-Latn-BR", - "tag": "tag-Latn-SD", - "tag-Latn": "tag-Latn-SD", - "tag-SD": "tag-Latn-SD", - "taj": "taj-Deva-NP", - "taj-Deva": "taj-Deva-NP", - "taj-NP": "taj-Deva-NP", - "tak": "tak-Latn-NG", - "tak-Latn": "tak-Latn-NG", - "tak-NG": "tak-Latn-NG", - "tal": "tal-Latn-NG", - "tal-Latn": "tal-Latn-NG", - "tal-NG": "tal-Latn-NG", - "tan": "tan-Latn-NG", - "tan-Latn": "tan-Latn-NG", - "tan-NG": "tan-Latn-NG", - "tao": "tao-Latn-TW", - "tao-Latn": "tao-Latn-TW", - "tao-TW": "tao-Latn-TW", - "tap": "tap-Latn-CD", - "tap-CD": "tap-Latn-CD", - "tap-Latn": "tap-Latn-CD", - "taq": "taq-Latn-ML", - "taq-Latn": "taq-Latn-ML", - "taq-ML": "taq-Latn-ML", - "tar": "tar-Latn-MX", - "tar-Latn": "tar-Latn-MX", - "tar-MX": "tar-Latn-MX", - "tas": "tas-Latn-VN", - "tas-Latn": "tas-Latn-VN", - "tas-VN": "tas-Latn-VN", - "tau": "tau-Latn-US", - "tau-Latn": "tau-Latn-US", - "tau-US": "tau-Latn-US", - "tav": "tav-Latn-CO", - "tav-CO": "tav-Latn-CO", - "tav-Latn": "tav-Latn-CO", - "taw": "taw-Latn-PG", - "taw-Latn": "taw-Latn-PG", - "taw-PG": "taw-Latn-PG", - "tax": "tax-Latn-TD", - "tax-Latn": "tax-Latn-TD", - "tax-TD": "tax-Latn-TD", - "tay": "tay-Latn-TW", - "tay-Latn": "tay-Latn-TW", - "tay-TW": "tay-Latn-TW", - "taz": "taz-Latn-SD", - "taz-Latn": "taz-Latn-SD", - "taz-SD": "taz-Latn-SD", - "tba": "tba-Latn-BR", - "tba-BR": "tba-Latn-BR", - "tba-Latn": "tba-Latn-BR", - "tbc": "tbc-Latn-PG", - "tbc-Latn": "tbc-Latn-PG", - "tbc-PG": "tbc-Latn-PG", - "tbd": "tbd-Latn-PG", - "tbd-Latn": "tbd-Latn-PG", - "tbd-PG": "tbd-Latn-PG", - "tbe": "tbe-Latn-SB", - "tbe-Latn": "tbe-Latn-SB", - "tbe-SB": "tbe-Latn-SB", - "tbf": "tbf-Latn-PG", - "tbf-Latn": "tbf-Latn-PG", - "tbf-PG": "tbf-Latn-PG", - "tbg": "tbg-Latn-PG", - "tbg-Latn": "tbg-Latn-PG", - "tbg-PG": "tbg-Latn-PG", - "tbh": "tbh-Latn-AU", - "tbh-AU": "tbh-Latn-AU", - "tbh-Latn": "tbh-Latn-AU", - "tbi": "tbi-Latn-SD", - "tbi-Latn": "tbi-Latn-SD", - "tbi-SD": "tbi-Latn-SD", - "tbj": "tbj-Latn-PG", - "tbj-Latn": "tbj-Latn-PG", - "tbj-PG": "tbj-Latn-PG", - "tbk": "tbk-Tagb-PH", - "tbk-PH": "tbk-Tagb-PH", - "tbk-Tagb": "tbk-Tagb-PH", - "tbl": "tbl-Latn-PH", - "tbl-Latn": "tbl-Latn-PH", - "tbl-PH": "tbl-Latn-PH", - "tbm": "tbm-Latn-CD", - "tbm-CD": "tbm-Latn-CD", - "tbm-Latn": "tbm-Latn-CD", - "tbn": "tbn-Latn-CO", - "tbn-CO": "tbn-Latn-CO", - "tbn-Latn": "tbn-Latn-CO", - "tbo": "tbo-Latn-PG", - "tbo-Latn": "tbo-Latn-PG", - "tbo-PG": "tbo-Latn-PG", - "tbp": "tbp-Latn-ID", - "tbp-ID": "tbp-Latn-ID", - "tbp-Latn": "tbp-Latn-ID", - "tbs": "tbs-Latn-PG", - "tbs-Latn": "tbs-Latn-PG", - "tbs-PG": "tbs-Latn-PG", - "tbt": "tbt-Latn-CD", - "tbt-CD": "tbt-Latn-CD", - "tbt-Latn": "tbt-Latn-CD", - "tbu": "tbu-Latn-MX", - "tbu-Latn": "tbu-Latn-MX", - "tbu-MX": "tbu-Latn-MX", - "tbv": "tbv-Latn-PG", - "tbv-Latn": "tbv-Latn-PG", - "tbv-PG": "tbv-Latn-PG", - "tbw": "tbw-Latn-PH", - "tbw-Latn": "tbw-Latn-PH", - "tbw-PH": "tbw-Latn-PH", - "tbw-Tagb": "tbw-Tagb-PH", - "tbx": "tbx-Latn-PG", - "tbx-Latn": "tbx-Latn-PG", - "tbx-PG": "tbx-Latn-PG", - "tby": "tby-Latn-ID", - "tby-ID": "tby-Latn-ID", - "tby-Latn": "tby-Latn-ID", - "tbz": "tbz-Latn-BJ", - "tbz-BJ": "tbz-Latn-BJ", - "tbz-Latn": "tbz-Latn-BJ", - "tca": "tca-Latn-BR", - "tca-BR": "tca-Latn-BR", - "tca-Latn": "tca-Latn-BR", - "tcb": "tcb-Latn-US", - "tcb-Latn": "tcb-Latn-US", - "tcb-US": "tcb-Latn-US", - "tcc": "tcc-Latn-TZ", - "tcc-Latn": "tcc-Latn-TZ", - "tcc-TZ": "tcc-Latn-TZ", - "tcd": "tcd-Latn-GH", - "tcd-GH": "tcd-Latn-GH", - "tcd-Latn": "tcd-Latn-GH", - "tce": "tce-Latn-CA", - "tce-CA": "tce-Latn-CA", - "tce-Latn": "tce-Latn-CA", - "tcf": "tcf-Latn-MX", - "tcf-Latn": "tcf-Latn-MX", - "tcf-MX": "tcf-Latn-MX", - "tcg": "tcg-Latn-ID", - "tcg-ID": "tcg-Latn-ID", - "tcg-Latn": "tcg-Latn-ID", - "tch": "tch-Latn-TC", - "tch-Latn": "tch-Latn-TC", - "tch-TC": "tch-Latn-TC", - "tci": "tci-Latn-PG", - "tci-Latn": "tci-Latn-PG", - "tci-PG": "tci-Latn-PG", - "tck": "tck-Latn-GA", - "tck-GA": "tck-Latn-GA", - "tck-Latn": "tck-Latn-GA", - "tcm": "tcm-Latn-ID", - "tcm-ID": "tcm-Latn-ID", - "tcm-Latn": "tcm-Latn-ID", - "tcn": "tcn-Tibt-NP", - "tcn-NP": "tcn-Tibt-NP", - "tcn-Tibt": "tcn-Tibt-NP", - "tco": "tco-Mymr-MM", - "tco-MM": "tco-Mymr-MM", - "tco-Mymr": "tco-Mymr-MM", - "tcp": "tcp-Latn-MM", - "tcp-Latn": "tcp-Latn-MM", - "tcp-MM": "tcp-Latn-MM", - "tcq": "tcq-Latn-ID", - "tcq-ID": "tcq-Latn-ID", - "tcq-Latn": "tcq-Latn-ID", - "tcs": "tcs-Latn-AU", - "tcs-AU": "tcs-Latn-AU", - "tcs-Latn": "tcs-Latn-AU", - "tcu": "tcu-Latn-MX", - "tcu-Latn": "tcu-Latn-MX", - "tcu-MX": "tcu-Latn-MX", - "tcw": "tcw-Latn-MX", - "tcw-Latn": "tcw-Latn-MX", - "tcw-MX": "tcw-Latn-MX", - "tcx": "tcx-Taml-IN", - "tcx-IN": "tcx-Taml-IN", - "tcx-Taml": "tcx-Taml-IN", - "tcy": "tcy-Knda-IN", - "tcy-IN": "tcy-Knda-IN", - "tcy-Knda": "tcy-Knda-IN", - "tcz": "tcz-Latn-IN", - "tcz-IN": "tcz-Latn-IN", - "tcz-Latn": "tcz-Latn-IN", - "tda": "tda-Tfng-NE", - "tda-NE": "tda-Tfng-NE", - "tda-Tfng": "tda-Tfng-NE", - "tdb": "tdb-Deva-IN", - "tdb-Deva": "tdb-Deva-IN", - "tdb-IN": "tdb-Deva-IN", - "tdc": "tdc-Latn-CO", - "tdc-CO": "tdc-Latn-CO", - "tdc-Latn": "tdc-Latn-CO", - "tdd": "tdd-Tale-CN", - "tdd-CN": "tdd-Tale-CN", - "tdd-Tale": "tdd-Tale-CN", - "tde": "tde-Latn-ML", - "tde-Latn": "tde-Latn-ML", - "tde-ML": "tde-Latn-ML", - "tdg": "tdg-Deva-NP", - "tdg-Deva": "tdg-Deva-NP", - "tdg-NP": "tdg-Deva-NP", - "tdh": "tdh-Deva-NP", - "tdh-Deva": "tdh-Deva-NP", - "tdh-NP": "tdh-Deva-NP", - "tdi": "tdi-Latn-ID", - "tdi-ID": "tdi-Latn-ID", - "tdi-Latn": "tdi-Latn-ID", - "tdj": "tdj-Latn-ID", - "tdj-ID": "tdj-Latn-ID", - "tdj-Latn": "tdj-Latn-ID", - "tdk": "tdk-Latn-NG", - "tdk-Latn": "tdk-Latn-NG", - "tdk-NG": "tdk-Latn-NG", - "tdl": "tdl-Latn-NG", - "tdl-Latn": "tdl-Latn-NG", - "tdl-NG": "tdl-Latn-NG", - "tdm": "tdm-Latn-GY", - "tdm-GY": "tdm-Latn-GY", - "tdm-Latn": "tdm-Latn-GY", - "tdn": "tdn-Latn-ID", - "tdn-ID": "tdn-Latn-ID", - "tdn-Latn": "tdn-Latn-ID", - "tdo": "tdo-Latn-NG", - "tdo-Latn": "tdo-Latn-NG", - "tdo-NG": "tdo-Latn-NG", - "tdq": "tdq-Latn-NG", - "tdq-Latn": "tdq-Latn-NG", - "tdq-NG": "tdq-Latn-NG", - "tdr": "tdr-Latn-VN", - "tdr-Latn": "tdr-Latn-VN", - "tdr-VN": "tdr-Latn-VN", - "tds": "tds-Latn-ID", - "tds-ID": "tds-Latn-ID", - "tds-Latn": "tds-Latn-ID", - "tdt": "tdt-Latn-TL", - "tdt-Latn": "tdt-Latn-TL", - "tdt-TL": "tdt-Latn-TL", - "tdv": "tdv-Latn-NG", - "tdv-Latn": "tdv-Latn-NG", - "tdv-NG": "tdv-Latn-NG", - "tdx": "tdx-Latn-MG", - "tdx-Latn": "tdx-Latn-MG", - "tdx-MG": "tdx-Latn-MG", - "tdy": "tdy-Latn-PH", - "tdy-Latn": "tdy-Latn-PH", - "tdy-PH": "tdy-Latn-PH", - "te": "te-Telu-IN", - "te-IN": "te-Telu-IN", - "te-Telu": "te-Telu-IN", - "te-XX": "te-Telu-XX", - "tea": "tea-Latn-MY", - "tea-Latn": "tea-Latn-MY", - "tea-MY": "tea-Latn-MY", - "teb": "teb-Latn-EC", - "teb-EC": "teb-Latn-EC", - "teb-Latn": "teb-Latn-EC", - "tec": "tec-Latn-KE", - "tec-KE": "tec-Latn-KE", - "tec-Latn": "tec-Latn-KE", - "ted": "ted-Latn-CI", - "ted-CI": "ted-Latn-CI", - "ted-Latn": "ted-Latn-CI", - "tee": "tee-Latn-MX", - "tee-Latn": "tee-Latn-MX", - "tee-MX": "tee-Latn-MX", - "teg": "teg-Latn-GA", - "teg-GA": "teg-Latn-GA", - "teg-Latn": "teg-Latn-GA", - "teh": "teh-Latn-AR", - "teh-AR": "teh-Latn-AR", - "teh-Latn": "teh-Latn-AR", - "tei": "tei-Latn-PG", - "tei-Latn": "tei-Latn-PG", - "tei-PG": "tei-Latn-PG", - "tek": "tek-Latn-CD", - "tek-CD": "tek-Latn-CD", - "tek-Latn": "tek-Latn-CD", - "tem": "tem-Latn-SL", - "tem-Latn": "tem-Latn-SL", - "tem-SL": "tem-Latn-SL", - "ten": "ten-Latn-CO", - "ten-CO": "ten-Latn-CO", - "ten-Latn": "ten-Latn-CO", - "teo": "teo-Latn-UG", - "teo-Latn": "teo-Latn-UG", - "teo-UG": "teo-Latn-UG", - "tep": "tep-Latn-MX", - "tep-Latn": "tep-Latn-MX", - "tep-MX": "tep-Latn-MX", - "teq": "teq-Latn-SD", - "teq-Latn": "teq-Latn-SD", - "teq-SD": "teq-Latn-SD", - "ter": "ter-Latn-BR", - "ter-BR": "ter-Latn-BR", - "ter-Latn": "ter-Latn-BR", - "tes": "tes-Java-ID", - "tes-ID": "tes-Java-ID", - "tes-Java": "tes-Java-ID", - "tet": "tet-Latn-TL", - "tet-Latn": "tet-Latn-TL", - "tet-TL": "tet-Latn-TL", - "teu": "teu-Latn-UG", - "teu-Latn": "teu-Latn-UG", - "teu-UG": "teu-Latn-UG", - "tev": "tev-Latn-ID", - "tev-ID": "tev-Latn-ID", - "tev-Latn": "tev-Latn-ID", - "tew": "tew-Latn-US", - "tew-Latn": "tew-Latn-US", - "tew-US": "tew-Latn-US", - "tex": "tex-Latn-SS", - "tex-Latn": "tex-Latn-SS", - "tex-SS": "tex-Latn-SS", - "tey": "tey-Latn-SD", - "tey-Latn": "tey-Latn-SD", - "tey-SD": "tey-Latn-SD", - "tez": "tez-Latn-NE", - "tez-Latn": "tez-Latn-NE", - "tez-NE": "tez-Latn-NE", - "tfi": "tfi-Latn-BJ", - "tfi-BJ": "tfi-Latn-BJ", - "tfi-Latn": "tfi-Latn-BJ", - "tfn": "tfn-Latn-US", - "tfn-Latn": "tfn-Latn-US", - "tfn-US": "tfn-Latn-US", - "tfo": "tfo-Latn-ID", - "tfo-ID": "tfo-Latn-ID", - "tfo-Latn": "tfo-Latn-ID", - "tfr": "tfr-Latn-PA", - "tfr-Latn": "tfr-Latn-PA", - "tfr-PA": "tfr-Latn-PA", - "tft": "tft-Latn-ID", - "tft-ID": "tft-Latn-ID", - "tft-Latn": "tft-Latn-ID", - "tg": "tg-Cyrl-TJ", - "tg-Arab": "tg-Arab-PK", - "tg-Cyrl": "tg-Cyrl-TJ", - "tg-Cyrl-TJ": "tg-Cyrl-TJ", - "tg-PK": "tg-Arab-PK", - "tg-TJ": "tg-Cyrl-TJ", - "tga": "tga-Latn-KE", - "tga-KE": "tga-Latn-KE", - "tga-Latn": "tga-Latn-KE", - "tgb": "tgb-Latn-MY", - "tgb-Latn": "tgb-Latn-MY", - "tgb-MY": "tgb-Latn-MY", - "tgc": "tgc-Latn-PG", - "tgc-Latn": "tgc-Latn-PG", - "tgc-PG": "tgc-Latn-PG", - "tgd": "tgd-Latn-NG", - "tgd-Latn": "tgd-Latn-NG", - "tgd-NG": "tgd-Latn-NG", - "tge": "tge-Deva-NP", - "tge-Deva": "tge-Deva-NP", - "tge-NP": "tge-Deva-NP", - "tgf": "tgf-Tibt-BT", - "tgf-BT": "tgf-Tibt-BT", - "tgf-Tibt": "tgf-Tibt-BT", - "tgh": "tgh-Latn-TT", - "tgh-Latn": "tgh-Latn-TT", - "tgh-TT": "tgh-Latn-TT", - "tgi": "tgi-Latn-PG", - "tgi-Latn": "tgi-Latn-PG", - "tgi-PG": "tgi-Latn-PG", - "tgj": "tgj-Latn-IN", - "tgj-IN": "tgj-Latn-IN", - "tgj-Latn": "tgj-Latn-IN", - "tgn": "tgn-Latn-PH", - "tgn-Latn": "tgn-Latn-PH", - "tgn-PH": "tgn-Latn-PH", - "tgo": "tgo-Latn-PG", - "tgo-Latn": "tgo-Latn-PG", - "tgo-PG": "tgo-Latn-PG", - "tgp": "tgp-Latn-VU", - "tgp-Latn": "tgp-Latn-VU", - "tgp-VU": "tgp-Latn-VU", - "tgq": "tgq-Latn-MY", - "tgq-Latn": "tgq-Latn-MY", - "tgq-MY": "tgq-Latn-MY", - "tgs": "tgs-Latn-VU", - "tgs-Latn": "tgs-Latn-VU", - "tgs-VU": "tgs-Latn-VU", - "tgt": "tgt-Latn-PH", - "tgt-Latn": "tgt-Latn-PH", - "tgt-PH": "tgt-Latn-PH", - "tgu": "tgu-Latn-PG", - "tgu-Latn": "tgu-Latn-PG", - "tgu-PG": "tgu-Latn-PG", - "tgv": "tgv-Latn-BR", - "tgv-BR": "tgv-Latn-BR", - "tgv-Latn": "tgv-Latn-BR", - "tgw": "tgw-Latn-CI", - "tgw-CI": "tgw-Latn-CI", - "tgw-Latn": "tgw-Latn-CI", - "tgx": "tgx-Latn-CA", - "tgx-CA": "tgx-Latn-CA", - "tgx-Latn": "tgx-Latn-CA", - "tgy": "tgy-Latn-SS", - "tgy-Latn": "tgy-Latn-SS", - "tgy-SS": "tgy-Latn-SS", - "tgz": "tgz-Latn-AU", - "tgz-AU": "tgz-Latn-AU", - "tgz-Latn": "tgz-Latn-AU", - "th": "th-Thai-TH", - "th-TH": "th-Thai-TH", - "th-Thai": "th-Thai-TH", - "thd": "thd-Latn-AU", - "thd-AU": "thd-Latn-AU", - "thd-Latn": "thd-Latn-AU", - "the": "the-Deva-NP", - "the-Deva": "the-Deva-NP", - "the-NP": "the-Deva-NP", - "thf": "thf-Deva-NP", - "thf-Deva": "thf-Deva-NP", - "thf-NP": "thf-Deva-NP", - "thh": "thh-Latn-MX", - "thh-Latn": "thh-Latn-MX", - "thh-MX": "thh-Latn-MX", - "thi": "thi-Tale-LA", - "thi-LA": "thi-Tale-LA", - "thi-Tale": "thi-Tale-LA", - "thk": "thk-Latn-KE", - "thk-KE": "thk-Latn-KE", - "thk-Latn": "thk-Latn-KE", - "thl": "thl-Deva-NP", - "thl-Deva": "thl-Deva-NP", - "thl-NP": "thl-Deva-NP", - "thm": "thm-Thai-TH", - "thm-TH": "thm-Thai-TH", - "thm-Thai": "thm-Thai-TH", - "thp": "thp-Latn-CA", - "thp-CA": "thp-Latn-CA", - "thp-Latn": "thp-Latn-CA", - "thq": "thq-Deva-NP", - "thq-Deva": "thq-Deva-NP", - "thq-NP": "thq-Deva-NP", - "thr": "thr-Deva-NP", - "thr-Deva": "thr-Deva-NP", - "thr-NP": "thr-Deva-NP", - "ths": "ths-Deva-NP", - "ths-Deva": "ths-Deva-NP", - "ths-NP": "ths-Deva-NP", - "tht": "tht-Latn-CA", - "tht-CA": "tht-Latn-CA", - "tht-Latn": "tht-Latn-CA", - "thu": "thu-Latn-SS", - "thu-Latn": "thu-Latn-SS", - "thu-SS": "thu-Latn-SS", - "thv": "thv-Latn-DZ", - "thv-DZ": "thv-Latn-DZ", - "thv-Latn": "thv-Latn-DZ", - "thy": "thy-Latn-NG", - "thy-Latn": "thy-Latn-NG", - "thy-NG": "thy-Latn-NG", - "thz": "thz-Latn-NE", - "thz-Latn": "thz-Latn-NE", - "thz-NE": "thz-Latn-NE", - "ti": "ti-Ethi-ET", - "ti-ER": "ti-Ethi-ER", - "ti-ET": "ti-Ethi-ET", - "ti-Ethi": "ti-Ethi-ET", - "ti-Ethi-ER": "ti-Ethi-ER", - "tic": "tic-Latn-SD", - "tic-Latn": "tic-Latn-SD", - "tic-SD": "tic-Latn-SD", - "tif": "tif-Latn-PG", - "tif-Latn": "tif-Latn-PG", - "tif-PG": "tif-Latn-PG", - "tig": "tig-Ethi-ER", - "tig-ER": "tig-Ethi-ER", - "tig-Ethi": "tig-Ethi-ER", - "tih": "tih-Latn-MY", - "tih-Latn": "tih-Latn-MY", - "tih-MY": "tih-Latn-MY", - "tii": "tii-Latn-CD", - "tii-CD": "tii-Latn-CD", - "tii-Latn": "tii-Latn-CD", - "tij": "tij-Deva-NP", - "tij-Deva": "tij-Deva-NP", - "tij-NP": "tij-Deva-NP", - "tik": "tik-Latn-CM", - "tik-CM": "tik-Latn-CM", - "tik-Latn": "tik-Latn-CM", - "til": "til-Latn-US", - "til-Latn": "til-Latn-US", - "til-US": "til-Latn-US", - "tim": "tim-Latn-PG", - "tim-Latn": "tim-Latn-PG", - "tim-PG": "tim-Latn-PG", - "tin": "tin-Cyrl-RU", - "tin-Cyrl": "tin-Cyrl-RU", - "tin-RU": "tin-Cyrl-RU", - "tio": "tio-Latn-PG", - "tio-Latn": "tio-Latn-PG", - "tio-PG": "tio-Latn-PG", - "tip": "tip-Latn-ID", - "tip-ID": "tip-Latn-ID", - "tip-Latn": "tip-Latn-ID", - "tiq": "tiq-Latn-BF", - "tiq-BF": "tiq-Latn-BF", - "tiq-Latn": "tiq-Latn-BF", - "tis": "tis-Latn-PH", - "tis-Latn": "tis-Latn-PH", - "tis-PH": "tis-Latn-PH", - "tit": "tit-Latn-CO", - "tit-CO": "tit-Latn-CO", - "tit-Latn": "tit-Latn-CO", - "tiu": "tiu-Latn-PH", - "tiu-Latn": "tiu-Latn-PH", - "tiu-PH": "tiu-Latn-PH", - "tiv": "tiv-Latn-NG", - "tiv-Latn": "tiv-Latn-NG", - "tiv-NG": "tiv-Latn-NG", - "tiw": "tiw-Latn-AU", - "tiw-AU": "tiw-Latn-AU", - "tiw-Latn": "tiw-Latn-AU", - "tix": "tix-Latn-US", - "tix-Latn": "tix-Latn-US", - "tix-US": "tix-Latn-US", - "tiy": "tiy-Latn-PH", - "tiy-Latn": "tiy-Latn-PH", - "tiy-PH": "tiy-Latn-PH", - "tja": "tja-Latn-LR", - "tja-LR": "tja-Latn-LR", - "tja-Latn": "tja-Latn-LR", - "tjg": "tjg-Latn-ID", - "tjg-ID": "tjg-Latn-ID", - "tjg-Latn": "tjg-Latn-ID", - "tji": "tji-Latn-CN", - "tji-CN": "tji-Latn-CN", - "tji-Latn": "tji-Latn-CN", - "tjj": "tjj-Latn-AU", - "tjj-AU": "tjj-Latn-AU", - "tjj-Latn": "tjj-Latn-AU", - "tjl": "tjl-Mymr-MM", - "tjl-MM": "tjl-Mymr-MM", - "tjl-Mymr": "tjl-Mymr-MM", - "tjn": "tjn-Latn-CI", - "tjn-CI": "tjn-Latn-CI", - "tjn-Latn": "tjn-Latn-CI", - "tjo": "tjo-Arab-DZ", - "tjo-Arab": "tjo-Arab-DZ", - "tjo-DZ": "tjo-Arab-DZ", - "tjp": "tjp-Latn-AU", - "tjp-AU": "tjp-Latn-AU", - "tjp-Latn": "tjp-Latn-AU", - "tjs": "tjs-Latn-CN", - "tjs-CN": "tjs-Latn-CN", - "tjs-Latn": "tjs-Latn-CN", - "tju": "tju-Latn-AU", - "tju-AU": "tju-Latn-AU", - "tju-Latn": "tju-Latn-AU", - "tjw": "tjw-Latn-AU", - "tjw-AU": "tjw-Latn-AU", - "tjw-Latn": "tjw-Latn-AU", - "tk": "tk-Latn-TM", - "tk-Latn": "tk-Latn-TM", - "tk-Latn-AF": "tk-Latn-AF", - "tk-Latn-IR": "tk-Latn-IR", - "tk-TM": "tk-Latn-TM", - "tka": "tka-Latn-BR", - "tka-BR": "tka-Latn-BR", - "tka-Latn": "tka-Latn-BR", - "tkb": "tkb-Deva-IN", - "tkb-Deva": "tkb-Deva-IN", - "tkb-IN": "tkb-Deva-IN", - "tkd": "tkd-Latn-TL", - "tkd-Latn": "tkd-Latn-TL", - "tkd-TL": "tkd-Latn-TL", - "tke": "tke-Latn-MZ", - "tke-Latn": "tke-Latn-MZ", - "tke-MZ": "tke-Latn-MZ", - "tkf": "tkf-Latn-BR", - "tkf-BR": "tkf-Latn-BR", - "tkf-Latn": "tkf-Latn-BR", - "tkg": "tkg-Latn-MG", - "tkg-Latn": "tkg-Latn-MG", - "tkg-MG": "tkg-Latn-MG", - "tkl": "tkl-Latn-TK", - "tkl-Latn": "tkl-Latn-TK", - "tkl-TK": "tkl-Latn-TK", - "tkp": "tkp-Latn-SB", - "tkp-Latn": "tkp-Latn-SB", - "tkp-SB": "tkp-Latn-SB", - "tkq": "tkq-Latn-NG", - "tkq-Latn": "tkq-Latn-NG", - "tkq-NG": "tkq-Latn-NG", - "tkr": "tkr-Latn-AZ", - "tkr-AZ": "tkr-Latn-AZ", - "tkr-Latn": "tkr-Latn-AZ", - "tks": "tks-Arab-IR", - "tks-Arab": "tks-Arab-IR", - "tks-IR": "tks-Arab-IR", - "tkt": "tkt-Deva-NP", - "tkt-Deva": "tkt-Deva-NP", - "tkt-NP": "tkt-Deva-NP", - "tku": "tku-Latn-MX", - "tku-Latn": "tku-Latn-MX", - "tku-MX": "tku-Latn-MX", - "tkv": "tkv-Latn-PG", - "tkv-Latn": "tkv-Latn-PG", - "tkv-PG": "tkv-Latn-PG", - "tkw": "tkw-Latn-SB", - "tkw-Latn": "tkw-Latn-SB", - "tkw-SB": "tkw-Latn-SB", - "tkx": "tkx-Latn-ID", - "tkx-ID": "tkx-Latn-ID", - "tkx-Latn": "tkx-Latn-ID", - "tkz": "tkz-Latn-VN", - "tkz-Latn": "tkz-Latn-VN", - "tkz-VN": "tkz-Latn-VN", - "tl": "tl-Latn-PH", - "tl-Latn": "tl-Latn-PH", - "tl-PH": "tl-Latn-PH", - "tla": "tla-Latn-MX", - "tla-Latn": "tla-Latn-MX", - "tla-MX": "tla-Latn-MX", - "tlb": "tlb-Latn-ID", - "tlb-ID": "tlb-Latn-ID", - "tlb-Latn": "tlb-Latn-ID", - "tlc": "tlc-Latn-MX", - "tlc-Latn": "tlc-Latn-MX", - "tlc-MX": "tlc-Latn-MX", - "tld": "tld-Latn-ID", - "tld-ID": "tld-Latn-ID", - "tld-Latn": "tld-Latn-ID", - "tlf": "tlf-Latn-PG", - "tlf-Latn": "tlf-Latn-PG", - "tlf-PG": "tlf-Latn-PG", - "tlg": "tlg-Latn-ID", - "tlg-ID": "tlg-Latn-ID", - "tlg-Latn": "tlg-Latn-ID", - "tlh": "tlh-Piqd-XX", - "tlh-Piqd": "tlh-Piqd-XX", - "tlh-XX": "tlh-Piqd-XX", - "tli": "tli-Latn-US", - "tli-Latn": "tli-Latn-US", - "tli-US": "tli-Latn-US", - "tlj": "tlj-Latn-UG", - "tlj-Latn": "tlj-Latn-UG", - "tlj-UG": "tlj-Latn-UG", - "tlk": "tlk-Latn-ID", - "tlk-ID": "tlk-Latn-ID", - "tlk-Latn": "tlk-Latn-ID", - "tll": "tll-Latn-CD", - "tll-CD": "tll-Latn-CD", - "tll-Latn": "tll-Latn-CD", - "tlm": "tlm-Latn-VU", - "tlm-Latn": "tlm-Latn-VU", - "tlm-VU": "tlm-Latn-VU", - "tln": "tln-Latn-ID", - "tln-ID": "tln-Latn-ID", - "tln-Latn": "tln-Latn-ID", - "tlp": "tlp-Latn-MX", - "tlp-Latn": "tlp-Latn-MX", - "tlp-MX": "tlp-Latn-MX", - "tlq": "tlq-Latn-MM", - "tlq-Latn": "tlq-Latn-MM", - "tlq-MM": "tlq-Latn-MM", - "tlr": "tlr-Latn-SB", - "tlr-Latn": "tlr-Latn-SB", - "tlr-SB": "tlr-Latn-SB", - "tls": "tls-Latn-VU", - "tls-Latn": "tls-Latn-VU", - "tls-VU": "tls-Latn-VU", - "tlt": "tlt-Latn-ID", - "tlt-ID": "tlt-Latn-ID", - "tlt-Latn": "tlt-Latn-ID", - "tlu": "tlu-Latn-ID", - "tlu-ID": "tlu-Latn-ID", - "tlu-Latn": "tlu-Latn-ID", - "tlv": "tlv-Latn-ID", - "tlv-ID": "tlv-Latn-ID", - "tlv-Latn": "tlv-Latn-ID", - "tlx": "tlx-Latn-PG", - "tlx-Latn": "tlx-Latn-PG", - "tlx-PG": "tlx-Latn-PG", - "tly": "tly-Latn-AZ", - "tly-AZ": "tly-Latn-AZ", - "tly-Latn": "tly-Latn-AZ", - "tma": "tma-Latn-TD", - "tma-Latn": "tma-Latn-TD", - "tma-TD": "tma-Latn-TD", - "tmb": "tmb-Latn-VU", - "tmb-Latn": "tmb-Latn-VU", - "tmb-VU": "tmb-Latn-VU", - "tmc": "tmc-Latn-TD", - "tmc-Latn": "tmc-Latn-TD", - "tmc-TD": "tmc-Latn-TD", - "tmd": "tmd-Latn-PG", - "tmd-Latn": "tmd-Latn-PG", - "tmd-PG": "tmd-Latn-PG", - "tme": "tme-Latn-BR", - "tme-BR": "tme-Latn-BR", - "tme-Latn": "tme-Latn-BR", - "tmf": "tmf-Latn-PY", - "tmf-Latn": "tmf-Latn-PY", - "tmf-PY": "tmf-Latn-PY", - "tmg": "tmg-Latn-ID", - "tmg-ID": "tmg-Latn-ID", - "tmg-Latn": "tmg-Latn-ID", - "tmh": "tmh-Latn-NE", - "tmh-Latn": "tmh-Latn-NE", - "tmh-NE": "tmh-Latn-NE", - "tmi": "tmi-Latn-VU", - "tmi-Latn": "tmi-Latn-VU", - "tmi-VU": "tmi-Latn-VU", - "tmj": "tmj-Latn-ID", - "tmj-ID": "tmj-Latn-ID", - "tmj-Latn": "tmj-Latn-ID", - "tml": "tml-Latn-ID", - "tml-ID": "tml-Latn-ID", - "tml-Latn": "tml-Latn-ID", - "tmm": "tmm-Latn-VN", - "tmm-Latn": "tmm-Latn-VN", - "tmm-VN": "tmm-Latn-VN", - "tmn": "tmn-Latn-ID", - "tmn-ID": "tmn-Latn-ID", - "tmn-Latn": "tmn-Latn-ID", - "tmo": "tmo-Latn-MY", - "tmo-Latn": "tmo-Latn-MY", - "tmo-MY": "tmo-Latn-MY", - "tmq": "tmq-Latn-PG", - "tmq-Latn": "tmq-Latn-PG", - "tmq-PG": "tmq-Latn-PG", - "tmr": "tmr-Syrc-IL", - "tmr-IL": "tmr-Syrc-IL", - "tmr-Syrc": "tmr-Syrc-IL", - "tmt": "tmt-Latn-VU", - "tmt-Latn": "tmt-Latn-VU", - "tmt-VU": "tmt-Latn-VU", - "tmu": "tmu-Latn-ID", - "tmu-ID": "tmu-Latn-ID", - "tmu-Latn": "tmu-Latn-ID", - "tmv": "tmv-Latn-CD", - "tmv-CD": "tmv-Latn-CD", - "tmv-Latn": "tmv-Latn-CD", - "tmw": "tmw-Latn-MY", - "tmw-Latn": "tmw-Latn-MY", - "tmw-MY": "tmw-Latn-MY", - "tmy": "tmy-Latn-PG", - "tmy-Latn": "tmy-Latn-PG", - "tmy-PG": "tmy-Latn-PG", - "tmz": "tmz-Latn-VE", - "tmz-Latn": "tmz-Latn-VE", - "tmz-VE": "tmz-Latn-VE", - "tn": "tn-Latn-ZA", - "tn-Latn": "tn-Latn-ZA", - "tn-ZA": "tn-Latn-ZA", - "tna": "tna-Latn-BO", - "tna-BO": "tna-Latn-BO", - "tna-Latn": "tna-Latn-BO", - "tnb": "tnb-Latn-CO", - "tnb-CO": "tnb-Latn-CO", - "tnb-Latn": "tnb-Latn-CO", - "tnc": "tnc-Latn-CO", - "tnc-CO": "tnc-Latn-CO", - "tnc-Latn": "tnc-Latn-CO", - "tnd": "tnd-Latn-CO", - "tnd-CO": "tnd-Latn-CO", - "tnd-Latn": "tnd-Latn-CO", - "tng": "tng-Latn-TD", - "tng-Latn": "tng-Latn-TD", - "tng-TD": "tng-Latn-TD", - "tnh": "tnh-Latn-PG", - "tnh-Latn": "tnh-Latn-PG", - "tnh-PG": "tnh-Latn-PG", - "tni": "tni-Latn-ID", - "tni-ID": "tni-Latn-ID", - "tni-Latn": "tni-Latn-ID", - "tnk": "tnk-Latn-VU", - "tnk-Latn": "tnk-Latn-VU", - "tnk-VU": "tnk-Latn-VU", - "tnl": "tnl-Latn-VU", - "tnl-Latn": "tnl-Latn-VU", - "tnl-VU": "tnl-Latn-VU", - "tnm": "tnm-Latn-ID", - "tnm-ID": "tnm-Latn-ID", - "tnm-Latn": "tnm-Latn-ID", - "tnn": "tnn-Latn-VU", - "tnn-Latn": "tnn-Latn-VU", - "tnn-VU": "tnn-Latn-VU", - "tno": "tno-Latn-BO", - "tno-BO": "tno-Latn-BO", - "tno-Latn": "tno-Latn-BO", - "tnp": "tnp-Latn-VU", - "tnp-Latn": "tnp-Latn-VU", - "tnp-VU": "tnp-Latn-VU", - "tnq": "tnq-Latn-PR", - "tnq-Latn": "tnq-Latn-PR", - "tnq-PR": "tnq-Latn-PR", - "tnr": "tnr-Latn-SN", - "tnr-Latn": "tnr-Latn-SN", - "tnr-SN": "tnr-Latn-SN", - "tns": "tns-Latn-PG", - "tns-Latn": "tns-Latn-PG", - "tns-PG": "tns-Latn-PG", - "tnt": "tnt-Latn-ID", - "tnt-ID": "tnt-Latn-ID", - "tnt-Latn": "tnt-Latn-ID", - "tnv": "tnv-Cakm-BD", - "tnv-BD": "tnv-Cakm-BD", - "tnv-Cakm": "tnv-Cakm-BD", - "tnw": "tnw-Latn-ID", - "tnw-ID": "tnw-Latn-ID", - "tnw-Latn": "tnw-Latn-ID", - "tnx": "tnx-Latn-SB", - "tnx-Latn": "tnx-Latn-SB", - "tnx-SB": "tnx-Latn-SB", - "tny": "tny-Latn-TZ", - "tny-Latn": "tny-Latn-TZ", - "tny-TZ": "tny-Latn-TZ", - "to": "to-Latn-TO", - "to-Latn": "to-Latn-TO", - "to-TO": "to-Latn-TO", - "tob": "tob-Latn-AR", - "tob-AR": "tob-Latn-AR", - "tob-Latn": "tob-Latn-AR", - "toc": "toc-Latn-MX", - "toc-Latn": "toc-Latn-MX", - "toc-MX": "toc-Latn-MX", - "tod": "tod-Latn-GN", - "tod-GN": "tod-Latn-GN", - "tod-Latn": "tod-Latn-GN", - "tof": "tof-Latn-PG", - "tof-Latn": "tof-Latn-PG", - "tof-PG": "tof-Latn-PG", - "tog": "tog-Latn-MW", - "tog-Latn": "tog-Latn-MW", - "tog-MW": "tog-Latn-MW", - "toh": "toh-Latn-MZ", - "toh-Latn": "toh-Latn-MZ", - "toh-MZ": "toh-Latn-MZ", - "toi": "toi-Latn-ZM", - "toi-Latn": "toi-Latn-ZM", - "toi-ZM": "toi-Latn-ZM", - "toj": "toj-Latn-MX", - "toj-Latn": "toj-Latn-MX", - "toj-MX": "toj-Latn-MX", - "tok": "tok-Latn-001", - "tok-001": "tok-Latn-001", - "tok-Latn": "tok-Latn-001", - "tol": "tol-Latn-US", - "tol-Latn": "tol-Latn-US", - "tol-US": "tol-Latn-US", - "tom": "tom-Latn-ID", - "tom-ID": "tom-Latn-ID", - "tom-Latn": "tom-Latn-ID", - "too": "too-Latn-MX", - "too-Latn": "too-Latn-MX", - "too-MX": "too-Latn-MX", - "top": "top-Latn-MX", - "top-Latn": "top-Latn-MX", - "top-MX": "top-Latn-MX", - "toq": "toq-Latn-SS", - "toq-Latn": "toq-Latn-SS", - "toq-SS": "toq-Latn-SS", - "tor": "tor-Latn-CD", - "tor-CD": "tor-Latn-CD", - "tor-Latn": "tor-Latn-CD", - "tos": "tos-Latn-MX", - "tos-Latn": "tos-Latn-MX", - "tos-MX": "tos-Latn-MX", - "tou": "tou-Latn-VN", - "tou-Latn": "tou-Latn-VN", - "tou-VN": "tou-Latn-VN", - "tov": "tov-Arab-IR", - "tov-Arab": "tov-Arab-IR", - "tov-IR": "tov-Arab-IR", - "tow": "tow-Latn-US", - "tow-Latn": "tow-Latn-US", - "tow-US": "tow-Latn-US", - "tox": "tox-Latn-PW", - "tox-Latn": "tox-Latn-PW", - "tox-PW": "tox-Latn-PW", - "toy": "toy-Latn-ID", - "toy-ID": "toy-Latn-ID", - "toy-Latn": "toy-Latn-ID", - "toz": "toz-Latn-CM", - "toz-CM": "toz-Latn-CM", - "toz-Latn": "toz-Latn-CM", - "tpa": "tpa-Latn-PG", - "tpa-Latn": "tpa-Latn-PG", - "tpa-PG": "tpa-Latn-PG", - "tpc": "tpc-Latn-MX", - "tpc-Latn": "tpc-Latn-MX", - "tpc-MX": "tpc-Latn-MX", - "tpe": "tpe-Latn-BD", - "tpe-BD": "tpe-Latn-BD", - "tpe-Latn": "tpe-Latn-BD", - "tpf": "tpf-Latn-ID", - "tpf-ID": "tpf-Latn-ID", - "tpf-Latn": "tpf-Latn-ID", - "tpg": "tpg-Latn-ID", - "tpg-ID": "tpg-Latn-ID", - "tpg-Latn": "tpg-Latn-ID", - "tpi": "tpi-Latn-PG", - "tpi-Latn": "tpi-Latn-PG", - "tpi-PG": "tpi-Latn-PG", - "tpj": "tpj-Latn-PY", - "tpj-Latn": "tpj-Latn-PY", - "tpj-PY": "tpj-Latn-PY", - "tpk": "tpk-Latn-BR", - "tpk-BR": "tpk-Latn-BR", - "tpk-Latn": "tpk-Latn-BR", - "tpl": "tpl-Latn-MX", - "tpl-Latn": "tpl-Latn-MX", - "tpl-MX": "tpl-Latn-MX", - "tpm": "tpm-Latn-GH", - "tpm-GH": "tpm-Latn-GH", - "tpm-Latn": "tpm-Latn-GH", - "tpn": "tpn-Latn-BR", - "tpn-BR": "tpn-Latn-BR", - "tpn-Latn": "tpn-Latn-BR", - "tpp": "tpp-Latn-MX", - "tpp-Latn": "tpp-Latn-MX", - "tpp-MX": "tpp-Latn-MX", - "tpr": "tpr-Latn-BR", - "tpr-BR": "tpr-Latn-BR", - "tpr-Latn": "tpr-Latn-BR", - "tpt": "tpt-Latn-MX", - "tpt-Latn": "tpt-Latn-MX", - "tpt-MX": "tpt-Latn-MX", - "tpu": "tpu-Khmr-KH", - "tpu-KH": "tpu-Khmr-KH", - "tpu-Khmr": "tpu-Khmr-KH", - "tpv": "tpv-Latn-MP", - "tpv-Latn": "tpv-Latn-MP", - "tpv-MP": "tpv-Latn-MP", - "tpx": "tpx-Latn-MX", - "tpx-Latn": "tpx-Latn-MX", - "tpx-MX": "tpx-Latn-MX", - "tpy": "tpy-Latn-BR", - "tpy-BR": "tpy-Latn-BR", - "tpy-Latn": "tpy-Latn-BR", - "tpz": "tpz-Latn-PG", - "tpz-Latn": "tpz-Latn-PG", - "tpz-PG": "tpz-Latn-PG", - "tqb": "tqb-Latn-BR", - "tqb-BR": "tqb-Latn-BR", - "tqb-Latn": "tqb-Latn-BR", - "tql": "tql-Latn-VU", - "tql-Latn": "tql-Latn-VU", - "tql-VU": "tql-Latn-VU", - "tqm": "tqm-Latn-PG", - "tqm-Latn": "tqm-Latn-PG", - "tqm-PG": "tqm-Latn-PG", - "tqn": "tqn-Latn-US", - "tqn-Latn": "tqn-Latn-US", - "tqn-US": "tqn-Latn-US", - "tqo": "tqo-Latn-PG", - "tqo-Latn": "tqo-Latn-PG", - "tqo-PG": "tqo-Latn-PG", - "tqp": "tqp-Latn-PG", - "tqp-Latn": "tqp-Latn-PG", - "tqp-PG": "tqp-Latn-PG", - "tqt": "tqt-Latn-MX", - "tqt-Latn": "tqt-Latn-MX", - "tqt-MX": "tqt-Latn-MX", - "tqu": "tqu-Latn-SB", - "tqu-Latn": "tqu-Latn-SB", - "tqu-SB": "tqu-Latn-SB", - "tqw": "tqw-Latn-US", - "tqw-Latn": "tqw-Latn-US", - "tqw-US": "tqw-Latn-US", - "tr": "tr-Latn-TR", - "tr-AM": "tr-Latn-AM", - "tr-AZ": "tr-Latn-AZ", - "tr-CY": "tr-Latn-CY", - "tr-Latn": "tr-Latn-TR", - "tr-Latn-CY": "tr-Latn-CY", - "tr-TR": "tr-Latn-TR", - "tra": "tra-Arab-AF", - "tra-AF": "tra-Arab-AF", - "tra-Arab": "tra-Arab-AF", - "trb": "trb-Latn-PG", - "trb-Latn": "trb-Latn-PG", - "trb-PG": "trb-Latn-PG", - "trc": "trc-Latn-MX", - "trc-Latn": "trc-Latn-MX", - "trc-MX": "trc-Latn-MX", - "tre": "tre-Latn-ID", - "tre-ID": "tre-Latn-ID", - "tre-Latn": "tre-Latn-ID", - "trf": "trf-Latn-TT", - "trf-Latn": "trf-Latn-TT", - "trf-TT": "trf-Latn-TT", - "trg": "trg-Hebr-IL", - "trg-Hebr": "trg-Hebr-IL", - "trg-IL": "trg-Hebr-IL", - "trh": "trh-Latn-PG", - "trh-Latn": "trh-Latn-PG", - "trh-PG": "trh-Latn-PG", - "tri": "tri-Latn-SR", - "tri-Latn": "tri-Latn-SR", - "tri-SR": "tri-Latn-SR", - "trj": "trj-Latn-TD", - "trj-Latn": "trj-Latn-TD", - "trj-TD": "trj-Latn-TD", - "trl": "trl-Latn-GB", - "trl-GB": "trl-Latn-GB", - "trl-Latn": "trl-Latn-GB", - "trm": "trm-Arab-AF", - "trm-AF": "trm-Arab-AF", - "trm-Arab": "trm-Arab-AF", - "trn": "trn-Latn-BO", - "trn-BO": "trn-Latn-BO", - "trn-Latn": "trn-Latn-BO", - "tro": "tro-Latn-IN", - "tro-IN": "tro-Latn-IN", - "tro-Latn": "tro-Latn-IN", - "trp": "trp-Latn-IN", - "trp-IN": "trp-Latn-IN", - "trp-Latn": "trp-Latn-IN", - "trq": "trq-Latn-MX", - "trq-Latn": "trq-Latn-MX", - "trq-MX": "trq-Latn-MX", - "trr": "trr-Latn-PE", - "trr-Latn": "trr-Latn-PE", - "trr-PE": "trr-Latn-PE", - "trs": "trs-Latn-MX", - "trs-Latn": "trs-Latn-MX", - "trs-MX": "trs-Latn-MX", - "trt": "trt-Latn-ID", - "trt-ID": "trt-Latn-ID", - "trt-Latn": "trt-Latn-ID", - "tru": "tru-Latn-TR", - "tru-Latn": "tru-Latn-TR", - "tru-TR": "tru-Latn-TR", - "trv": "trv-Latn-TW", - "trv-Latn": "trv-Latn-TW", - "trv-Latn-TW": "trv-Latn-TW", - "trv-TW": "trv-Latn-TW", - "trw": "trw-Arab-PK", - "trw-Arab": "trw-Arab-PK", - "trw-PK": "trw-Arab-PK", - "trx": "trx-Latn-MY", - "trx-Latn": "trx-Latn-MY", - "trx-MY": "trx-Latn-MY", - "try": "try-Latn-IN", - "try-IN": "try-Latn-IN", - "try-Latn": "try-Latn-IN", - "trz": "trz-Latn-BR", - "trz-BR": "trz-Latn-BR", - "trz-Latn": "trz-Latn-BR", - "ts": "ts-Latn-ZA", - "ts-Latn": "ts-Latn-ZA", - "ts-ZA": "ts-Latn-ZA", - "tsa": "tsa-Latn-CG", - "tsa-CG": "tsa-Latn-CG", - "tsa-Latn": "tsa-Latn-CG", - "tsb": "tsb-Latn-ET", - "tsb-ET": "tsb-Latn-ET", - "tsb-Latn": "tsb-Latn-ET", - "tsc": "tsc-Latn-MZ", - "tsc-Latn": "tsc-Latn-MZ", - "tsc-MZ": "tsc-Latn-MZ", - "tsd": "tsd-Grek-GR", - "tsd-GR": "tsd-Grek-GR", - "tsd-Grek": "tsd-Grek-GR", - "tsg": "tsg-Latn-PH", - "tsg-Latn": "tsg-Latn-PH", - "tsg-PH": "tsg-Latn-PH", - "tsh": "tsh-Latn-CM", - "tsh-CM": "tsh-Latn-CM", - "tsh-Latn": "tsh-Latn-CM", - "tsi": "tsi-Latn-CA", - "tsi-CA": "tsi-Latn-CA", - "tsi-Latn": "tsi-Latn-CA", - "tsj": "tsj-Tibt-BT", - "tsj-BT": "tsj-Tibt-BT", - "tsj-Tibt": "tsj-Tibt-BT", - "tsl": "tsl-Latn-VN", - "tsl-Latn": "tsl-Latn-VN", - "tsl-VN": "tsl-Latn-VN", - "tsp": "tsp-Latn-BF", - "tsp-BF": "tsp-Latn-BF", - "tsp-Latn": "tsp-Latn-BF", - "tsr": "tsr-Latn-VU", - "tsr-Latn": "tsr-Latn-VU", - "tsr-VU": "tsr-Latn-VU", - "tst": "tst-Latn-ML", - "tst-Latn": "tst-Latn-ML", - "tst-ML": "tst-Latn-ML", - "tsu": "tsu-Latn-TW", - "tsu-Latn": "tsu-Latn-TW", - "tsu-TW": "tsu-Latn-TW", - "tsv": "tsv-Latn-GA", - "tsv-GA": "tsv-Latn-GA", - "tsv-Latn": "tsv-Latn-GA", - "tsw": "tsw-Latn-NG", - "tsw-Latn": "tsw-Latn-NG", - "tsw-NG": "tsw-Latn-NG", - "tsx": "tsx-Latn-PG", - "tsx-Latn": "tsx-Latn-PG", - "tsx-PG": "tsx-Latn-PG", - "tsz": "tsz-Latn-MX", - "tsz-Latn": "tsz-Latn-MX", - "tsz-MX": "tsz-Latn-MX", - "tt": "tt-Cyrl-RU", - "tt-Cyrl": "tt-Cyrl-RU", - "tt-RU": "tt-Cyrl-RU", - "ttb": "ttb-Latn-NG", - "ttb-Latn": "ttb-Latn-NG", - "ttb-NG": "ttb-Latn-NG", - "ttc": "ttc-Latn-GT", - "ttc-GT": "ttc-Latn-GT", - "ttc-Latn": "ttc-Latn-GT", - "ttd": "ttd-Latn-PG", - "ttd-Latn": "ttd-Latn-PG", - "ttd-PG": "ttd-Latn-PG", - "tte": "tte-Latn-PG", - "tte-Latn": "tte-Latn-PG", - "tte-PG": "tte-Latn-PG", - "ttf": "ttf-Latn-CM", - "ttf-CM": "ttf-Latn-CM", - "ttf-Latn": "ttf-Latn-CM", - "tth": "tth-Laoo-LA", - "tth-LA": "tth-Laoo-LA", - "tth-Laoo": "tth-Laoo-LA", - "tti": "tti-Latn-ID", - "tti-ID": "tti-Latn-ID", - "tti-Latn": "tti-Latn-ID", - "ttj": "ttj-Latn-UG", - "ttj-Latn": "ttj-Latn-UG", - "ttj-UG": "ttj-Latn-UG", - "ttk": "ttk-Latn-CO", - "ttk-CO": "ttk-Latn-CO", - "ttk-Latn": "ttk-Latn-CO", - "ttl": "ttl-Latn-ZM", - "ttl-Latn": "ttl-Latn-ZM", - "ttl-ZM": "ttl-Latn-ZM", - "ttm": "ttm-Latn-CA", - "ttm-CA": "ttm-Latn-CA", - "ttm-Latn": "ttm-Latn-CA", - "ttn": "ttn-Latn-ID", - "ttn-ID": "ttn-Latn-ID", - "ttn-Latn": "ttn-Latn-ID", - "tto": "tto-Laoo-LA", - "tto-LA": "tto-Laoo-LA", - "tto-Laoo": "tto-Laoo-LA", - "ttp": "ttp-Latn-ID", - "ttp-ID": "ttp-Latn-ID", - "ttp-Latn": "ttp-Latn-ID", - "ttr": "ttr-Latn-NG", - "ttr-Latn": "ttr-Latn-NG", - "ttr-NG": "ttr-Latn-NG", - "tts": "tts-Thai-TH", - "tts-TH": "tts-Thai-TH", - "tts-Thai": "tts-Thai-TH", - "ttt": "ttt-Latn-AZ", - "ttt-AZ": "ttt-Latn-AZ", - "ttt-Latn": "ttt-Latn-AZ", - "ttu": "ttu-Latn-PG", - "ttu-Latn": "ttu-Latn-PG", - "ttu-PG": "ttu-Latn-PG", - "ttv": "ttv-Latn-PG", - "ttv-Latn": "ttv-Latn-PG", - "ttv-PG": "ttv-Latn-PG", - "ttw": "ttw-Latn-MY", - "ttw-Latn": "ttw-Latn-MY", - "ttw-MY": "ttw-Latn-MY", - "tty": "tty-Latn-ID", - "tty-ID": "tty-Latn-ID", - "tty-Latn": "tty-Latn-ID", - "ttz": "ttz-Deva-NP", - "ttz-Deva": "ttz-Deva-NP", - "ttz-NP": "ttz-Deva-NP", - "tua": "tua-Latn-PG", - "tua-Latn": "tua-Latn-PG", - "tua-PG": "tua-Latn-PG", - "tub": "tub-Latn-US", - "tub-Latn": "tub-Latn-US", - "tub-US": "tub-Latn-US", - "tuc": "tuc-Latn-PG", - "tuc-Latn": "tuc-Latn-PG", - "tuc-PG": "tuc-Latn-PG", - "tud": "tud-Latn-BR", - "tud-BR": "tud-Latn-BR", - "tud-Latn": "tud-Latn-BR", - "tue": "tue-Latn-CO", - "tue-CO": "tue-Latn-CO", - "tue-Latn": "tue-Latn-CO", - "tuf": "tuf-Latn-CO", - "tuf-CO": "tuf-Latn-CO", - "tuf-Latn": "tuf-Latn-CO", - "tug": "tug-Latn-TD", - "tug-Latn": "tug-Latn-TD", - "tug-TD": "tug-Latn-TD", - "tuh": "tuh-Latn-PG", - "tuh-Latn": "tuh-Latn-PG", - "tuh-PG": "tuh-Latn-PG", - "tui": "tui-Latn-CM", - "tui-CM": "tui-Latn-CM", - "tui-Latn": "tui-Latn-CM", - "tuj": "tuj-Latn-ID", - "tuj-ID": "tuj-Latn-ID", - "tuj-Latn": "tuj-Latn-ID", - "tul": "tul-Latn-NG", - "tul-Latn": "tul-Latn-NG", - "tul-NG": "tul-Latn-NG", - "tum": "tum-Latn-MW", - "tum-Latn": "tum-Latn-MW", - "tum-MW": "tum-Latn-MW", - "tun": "tun-Latn-US", - "tun-Latn": "tun-Latn-US", - "tun-US": "tun-Latn-US", - "tuo": "tuo-Latn-BR", - "tuo-BR": "tuo-Latn-BR", - "tuo-Latn": "tuo-Latn-BR", - "tuq": "tuq-Latn-TD", - "tuq-Latn": "tuq-Latn-TD", - "tuq-TD": "tuq-Latn-TD", - "tus": "tus-Latn-CA", - "tus-CA": "tus-Latn-CA", - "tus-Latn": "tus-Latn-CA", - "tuu": "tuu-Latn-US", - "tuu-Latn": "tuu-Latn-US", - "tuu-US": "tuu-Latn-US", - "tuv": "tuv-Latn-KE", - "tuv-KE": "tuv-Latn-KE", - "tuv-Latn": "tuv-Latn-KE", - "tux": "tux-Latn-BR", - "tux-BR": "tux-Latn-BR", - "tux-Latn": "tux-Latn-BR", - "tuy": "tuy-Latn-KE", - "tuy-KE": "tuy-Latn-KE", - "tuy-Latn": "tuy-Latn-KE", - "tuz": "tuz-Latn-BF", - "tuz-BF": "tuz-Latn-BF", - "tuz-Latn": "tuz-Latn-BF", - "tva": "tva-Latn-SB", - "tva-Latn": "tva-Latn-SB", - "tva-SB": "tva-Latn-SB", - "tvd": "tvd-Latn-NG", - "tvd-Latn": "tvd-Latn-NG", - "tvd-NG": "tvd-Latn-NG", - "tve": "tve-Latn-ID", - "tve-ID": "tve-Latn-ID", - "tve-Latn": "tve-Latn-ID", - "tvi": "tvi-Latn-NG", - "tvi-Latn": "tvi-Latn-NG", - "tvi-NG": "tvi-Latn-NG", - "tvk": "tvk-Latn-VU", - "tvk-Latn": "tvk-Latn-VU", - "tvk-VU": "tvk-Latn-VU", - "tvl": "tvl-Latn-TV", - "tvl-Latn": "tvl-Latn-TV", - "tvl-TV": "tvl-Latn-TV", - "tvm": "tvm-Latn-ID", - "tvm-ID": "tvm-Latn-ID", - "tvm-Latn": "tvm-Latn-ID", - "tvn": "tvn-Mymr-MM", - "tvn-MM": "tvn-Mymr-MM", - "tvn-Mymr": "tvn-Mymr-MM", - "tvo": "tvo-Latn-ID", - "tvo-ID": "tvo-Latn-ID", - "tvo-Latn": "tvo-Latn-ID", - "tvs": "tvs-Latn-KE", - "tvs-KE": "tvs-Latn-KE", - "tvs-Latn": "tvs-Latn-KE", - "tvt": "tvt-Latn-IN", - "tvt-IN": "tvt-Latn-IN", - "tvt-Latn": "tvt-Latn-IN", - "tvu": "tvu-Latn-CM", - "tvu-CM": "tvu-Latn-CM", - "tvu-Latn": "tvu-Latn-CM", - "tvw": "tvw-Latn-ID", - "tvw-ID": "tvw-Latn-ID", - "tvw-Latn": "tvw-Latn-ID", - "tvx": "tvx-Latn-TW", - "tvx-Latn": "tvx-Latn-TW", - "tvx-TW": "tvx-Latn-TW", - "twa": "twa-Latn-US", - "twa-Latn": "twa-Latn-US", - "twa-US": "twa-Latn-US", - "twb": "twb-Latn-PH", - "twb-Latn": "twb-Latn-PH", - "twb-PH": "twb-Latn-PH", - "twd": "twd-Latn-NL", - "twd-Latn": "twd-Latn-NL", - "twd-NL": "twd-Latn-NL", - "twe": "twe-Latn-ID", - "twe-ID": "twe-Latn-ID", - "twe-Latn": "twe-Latn-ID", - "twf": "twf-Latn-US", - "twf-Latn": "twf-Latn-US", - "twf-US": "twf-Latn-US", - "twg": "twg-Latn-ID", - "twg-ID": "twg-Latn-ID", - "twg-Latn": "twg-Latn-ID", - "twh": "twh-Latn-VN", - "twh-Latn": "twh-Latn-VN", - "twh-VN": "twh-Latn-VN", - "twl": "twl-Latn-MZ", - "twl-Latn": "twl-Latn-MZ", - "twl-MZ": "twl-Latn-MZ", - "twm": "twm-Deva-IN", - "twm-Deva": "twm-Deva-IN", - "twm-IN": "twm-Deva-IN", - "twn": "twn-Latn-CM", - "twn-CM": "twn-Latn-CM", - "twn-Latn": "twn-Latn-CM", - "two": "two-Latn-BW", - "two-BW": "two-Latn-BW", - "two-Latn": "two-Latn-BW", - "twp": "twp-Latn-PG", - "twp-Latn": "twp-Latn-PG", - "twp-PG": "twp-Latn-PG", - "twq": "twq-Latn-NE", - "twq-Latn": "twq-Latn-NE", - "twq-NE": "twq-Latn-NE", - "twr": "twr-Latn-MX", - "twr-Latn": "twr-Latn-MX", - "twr-MX": "twr-Latn-MX", - "twt": "twt-Latn-BR", - "twt-BR": "twt-Latn-BR", - "twt-Latn": "twt-Latn-BR", - "twu": "twu-Latn-ID", - "twu-ID": "twu-Latn-ID", - "twu-Latn": "twu-Latn-ID", - "tww": "tww-Latn-PG", - "tww-Latn": "tww-Latn-PG", - "tww-PG": "tww-Latn-PG", - "twx": "twx-Latn-MZ", - "twx-Latn": "twx-Latn-MZ", - "twx-MZ": "twx-Latn-MZ", - "twy": "twy-Latn-ID", - "twy-ID": "twy-Latn-ID", - "twy-Latn": "twy-Latn-ID", - "txa": "txa-Latn-MY", - "txa-Latn": "txa-Latn-MY", - "txa-MY": "txa-Latn-MY", - "txe": "txe-Latn-ID", - "txe-ID": "txe-Latn-ID", - "txe-Latn": "txe-Latn-ID", - "txg": "txg-Tang-CN", - "txg-CN": "txg-Tang-CN", - "txg-Tang": "txg-Tang-CN", - "txi": "txi-Latn-BR", - "txi-BR": "txi-Latn-BR", - "txi-Latn": "txi-Latn-BR", - "txj": "txj-Latn-NG", - "txj-Latn": "txj-Latn-NG", - "txj-NG": "txj-Latn-NG", - "txm": "txm-Latn-ID", - "txm-ID": "txm-Latn-ID", - "txm-Latn": "txm-Latn-ID", - "txn": "txn-Latn-ID", - "txn-ID": "txn-Latn-ID", - "txn-Latn": "txn-Latn-ID", - "txo": "txo-Toto-IN", - "txo-IN": "txo-Toto-IN", - "txo-Toto": "txo-Toto-IN", - "txq": "txq-Latn-ID", - "txq-ID": "txq-Latn-ID", - "txq-Latn": "txq-Latn-ID", - "txs": "txs-Latn-ID", - "txs-ID": "txs-Latn-ID", - "txs-Latn": "txs-Latn-ID", - "txt": "txt-Latn-ID", - "txt-ID": "txt-Latn-ID", - "txt-Latn": "txt-Latn-ID", - "txu": "txu-Latn-BR", - "txu-BR": "txu-Latn-BR", - "txu-Latn": "txu-Latn-BR", - "txx": "txx-Latn-MY", - "txx-Latn": "txx-Latn-MY", - "txx-MY": "txx-Latn-MY", - "txy": "txy-Latn-MG", - "txy-Latn": "txy-Latn-MG", - "txy-MG": "txy-Latn-MG", - "ty": "ty-Latn-PF", - "ty-Latn": "ty-Latn-PF", - "ty-PF": "ty-Latn-PF", - "tya": "tya-Latn-PG", - "tya-Latn": "tya-Latn-PG", - "tya-PG": "tya-Latn-PG", - "tye": "tye-Latn-NG", - "tye-Latn": "tye-Latn-NG", - "tye-NG": "tye-Latn-NG", - "tyh": "tyh-Latn-VN", - "tyh-Latn": "tyh-Latn-VN", - "tyh-VN": "tyh-Latn-VN", - "tyi": "tyi-Latn-CG", - "tyi-CG": "tyi-Latn-CG", - "tyi-Latn": "tyi-Latn-CG", - "tyj": "tyj-Latn-VN", - "tyj-Latn": "tyj-Latn-VN", - "tyj-VN": "tyj-Latn-VN", - "tyl": "tyl-Latn-VN", - "tyl-Latn": "tyl-Latn-VN", - "tyl-VN": "tyl-Latn-VN", - "tyn": "tyn-Latn-ID", - "tyn-ID": "tyn-Latn-ID", - "tyn-Latn": "tyn-Latn-ID", - "typ": "typ-Latn-AU", - "typ-AU": "typ-Latn-AU", - "typ-Latn": "typ-Latn-AU", - "tyr": "tyr-Tavt-VN", - "tyr-Tavt": "tyr-Tavt-VN", - "tyr-VN": "tyr-Tavt-VN", - "tys": "tys-Latn-VN", - "tys-Latn": "tys-Latn-VN", - "tys-VN": "tys-Latn-VN", - "tyt": "tyt-Latn-VN", - "tyt-Latn": "tyt-Latn-VN", - "tyt-VN": "tyt-Latn-VN", - "tyu": "tyu-Latn-BW", - "tyu-BW": "tyu-Latn-BW", - "tyu-Latn": "tyu-Latn-BW", - "tyv": "tyv-Cyrl-RU", - "tyv-Cyrl": "tyv-Cyrl-RU", - "tyv-RU": "tyv-Cyrl-RU", - "tyx": "tyx-Latn-CG", - "tyx-CG": "tyx-Latn-CG", - "tyx-Latn": "tyx-Latn-CG", - "tyy": "tyy-Latn-NG", - "tyy-Latn": "tyy-Latn-NG", - "tyy-NG": "tyy-Latn-NG", - "tyz": "tyz-Latn-VN", - "tyz-Latn": "tyz-Latn-VN", - "tyz-VN": "tyz-Latn-VN", - "tzh": "tzh-Latn-MX", - "tzh-Latn": "tzh-Latn-MX", - "tzh-MX": "tzh-Latn-MX", - "tzj": "tzj-Latn-GT", - "tzj-GT": "tzj-Latn-GT", - "tzj-Latn": "tzj-Latn-GT", - "tzl": "tzl-Latn-001", - "tzl-001": "tzl-Latn-001", - "tzl-Latn": "tzl-Latn-001", - "tzm": "tzm-Latn-MA", - "tzm-Latn": "tzm-Latn-MA", - "tzm-MA": "tzm-Latn-MA", - "tzn": "tzn-Latn-ID", - "tzn-ID": "tzn-Latn-ID", - "tzn-Latn": "tzn-Latn-ID", - "tzo": "tzo-Latn-MX", - "tzo-Latn": "tzo-Latn-MX", - "tzo-MX": "tzo-Latn-MX", - "tzx": "tzx-Latn-PG", - "tzx-Latn": "tzx-Latn-PG", - "tzx-PG": "tzx-Latn-PG", - "uam": "uam-Latn-BR", - "uam-BR": "uam-Latn-BR", - "uam-Latn": "uam-Latn-BR", - "uar": "uar-Latn-PG", - "uar-Latn": "uar-Latn-PG", - "uar-PG": "uar-Latn-PG", - "uba": "uba-Latn-NG", - "uba-Latn": "uba-Latn-NG", - "uba-NG": "uba-Latn-NG", - "ubi": "ubi-Latn-TD", - "ubi-Latn": "ubi-Latn-TD", - "ubi-TD": "ubi-Latn-TD", - "ubl": "ubl-Latn-PH", - "ubl-Latn": "ubl-Latn-PH", - "ubl-PH": "ubl-Latn-PH", - "ubr": "ubr-Latn-PG", - "ubr-Latn": "ubr-Latn-PG", - "ubr-PG": "ubr-Latn-PG", - "ubu": "ubu-Latn-PG", - "ubu-Latn": "ubu-Latn-PG", - "ubu-PG": "ubu-Latn-PG", - "uby": "uby-Latn-TR", - "uby-Latn": "uby-Latn-TR", - "uby-TR": "uby-Latn-TR", - "uda": "uda-Latn-NG", - "uda-Latn": "uda-Latn-NG", - "uda-NG": "uda-Latn-NG", - "ude": "ude-Cyrl-RU", - "ude-Cyrl": "ude-Cyrl-RU", - "ude-RU": "ude-Cyrl-RU", - "udg": "udg-Mlym-IN", - "udg-IN": "udg-Mlym-IN", - "udg-Mlym": "udg-Mlym-IN", - "udi": "udi-Cyrl-RU", - "udi-Cyrl": "udi-Cyrl-RU", - "udi-RU": "udi-Cyrl-RU", - "udj": "udj-Latn-ID", - "udj-ID": "udj-Latn-ID", - "udj-Latn": "udj-Latn-ID", - "udl": "udl-Latn-CM", - "udl-CM": "udl-Latn-CM", - "udl-Latn": "udl-Latn-CM", - "udm": "udm-Cyrl-RU", - "udm-Cyrl": "udm-Cyrl-RU", - "udm-RU": "udm-Cyrl-RU", - "udu": "udu-Latn-SD", - "udu-Latn": "udu-Latn-SD", - "udu-SD": "udu-Latn-SD", - "ues": "ues-Latn-ID", - "ues-ID": "ues-Latn-ID", - "ues-Latn": "ues-Latn-ID", - "ufi": "ufi-Latn-PG", - "ufi-Latn": "ufi-Latn-PG", - "ufi-PG": "ufi-Latn-PG", - "ug": "ug-Arab-CN", - "ug-Arab": "ug-Arab-CN", - "ug-Arab-CN": "ug-Arab-CN", - "ug-CN": "ug-Arab-CN", - "ug-Cyrl": "ug-Cyrl-KZ", - "ug-KZ": "ug-Cyrl-KZ", - "ug-MN": "ug-Cyrl-MN", - "uga": "uga-Ugar-SY", - "uga-SY": "uga-Ugar-SY", - "uga-Ugar": "uga-Ugar-SY", - "ugb": "ugb-Latn-AU", - "ugb-AU": "ugb-Latn-AU", - "ugb-Latn": "ugb-Latn-AU", - "uge": "uge-Latn-SB", - "uge-Latn": "uge-Latn-SB", - "uge-SB": "uge-Latn-SB", - "ugh": "ugh-Cyrl-RU", - "ugh-Cyrl": "ugh-Cyrl-RU", - "ugh-RU": "ugh-Cyrl-RU", - "ugo": "ugo-Thai-TH", - "ugo-TH": "ugo-Thai-TH", - "ugo-Thai": "ugo-Thai-TH", - "uha": "uha-Latn-NG", - "uha-Latn": "uha-Latn-NG", - "uha-NG": "uha-Latn-NG", - "uhn": "uhn-Latn-ID", - "uhn-ID": "uhn-Latn-ID", - "uhn-Latn": "uhn-Latn-ID", - "uis": "uis-Latn-PG", - "uis-Latn": "uis-Latn-PG", - "uis-PG": "uis-Latn-PG", - "uiv": "uiv-Latn-CM", - "uiv-CM": "uiv-Latn-CM", - "uiv-Latn": "uiv-Latn-CM", - "uji": "uji-Latn-NG", - "uji-Latn": "uji-Latn-NG", - "uji-NG": "uji-Latn-NG", - "uk": "uk-Cyrl-UA", - "uk-Cyrl": "uk-Cyrl-UA", - "uk-Cyrl-MD": "uk-Cyrl-MD", - "uk-Cyrl-SK": "uk-Cyrl-SK", - "uk-Cyrl-UA": "uk-Cyrl-UA", - "uk-UA": "uk-Cyrl-UA", - "uka": "uka-Latn-ID", - "uka-ID": "uka-Latn-ID", - "uka-Latn": "uka-Latn-ID", - "ukg": "ukg-Latn-PG", - "ukg-Latn": "ukg-Latn-PG", - "ukg-PG": "ukg-Latn-PG", - "ukh": "ukh-Latn-CF", - "ukh-CF": "ukh-Latn-CF", - "ukh-Latn": "ukh-Latn-CF", - "uki": "uki-Orya-IN", - "uki-IN": "uki-Orya-IN", - "uki-Orya": "uki-Orya-IN", - "ukk": "ukk-Latn-MM", - "ukk-Latn": "ukk-Latn-MM", - "ukk-MM": "ukk-Latn-MM", - "ukp": "ukp-Latn-NG", - "ukp-Latn": "ukp-Latn-NG", - "ukp-NG": "ukp-Latn-NG", - "ukq": "ukq-Latn-NG", - "ukq-Latn": "ukq-Latn-NG", - "ukq-NG": "ukq-Latn-NG", - "uku": "uku-Latn-NG", - "uku-Latn": "uku-Latn-NG", - "uku-NG": "uku-Latn-NG", - "ukv": "ukv-Latn-SS", - "ukv-Latn": "ukv-Latn-SS", - "ukv-SS": "ukv-Latn-SS", - "ukw": "ukw-Latn-NG", - "ukw-Latn": "ukw-Latn-NG", - "ukw-NG": "ukw-Latn-NG", - "uky": "uky-Latn-AU", - "uky-AU": "uky-Latn-AU", - "uky-Latn": "uky-Latn-AU", - "ula": "ula-Latn-NG", - "ula-Latn": "ula-Latn-NG", - "ula-NG": "ula-Latn-NG", - "ulb": "ulb-Latn-NG", - "ulb-Latn": "ulb-Latn-NG", - "ulb-NG": "ulb-Latn-NG", - "ulc": "ulc-Cyrl-RU", - "ulc-Cyrl": "ulc-Cyrl-RU", - "ulc-RU": "ulc-Cyrl-RU", - "ule": "ule-Latn-AR", - "ule-AR": "ule-Latn-AR", - "ule-Latn": "ule-Latn-AR", - "ulf": "ulf-Latn-ID", - "ulf-ID": "ulf-Latn-ID", - "ulf-Latn": "ulf-Latn-ID", - "uli": "uli-Latn-FM", - "uli-FM": "uli-Latn-FM", - "uli-Latn": "uli-Latn-FM", - "ulk": "ulk-Latn-AU", - "ulk-AU": "ulk-Latn-AU", - "ulk-Latn": "ulk-Latn-AU", - "ulm": "ulm-Latn-ID", - "ulm-ID": "ulm-Latn-ID", - "ulm-Latn": "ulm-Latn-ID", - "uln": "uln-Latn-PG", - "uln-Latn": "uln-Latn-PG", - "uln-PG": "uln-Latn-PG", - "ulu": "ulu-Latn-ID", - "ulu-ID": "ulu-Latn-ID", - "ulu-Latn": "ulu-Latn-ID", - "ulw": "ulw-Latn-NI", - "ulw-Latn": "ulw-Latn-NI", - "ulw-NI": "ulw-Latn-NI", - "uly": "uly-Latn-NG", - "uly-Latn": "uly-Latn-NG", - "uly-NG": "uly-Latn-NG", - "uma": "uma-Latn-US", - "uma-Latn": "uma-Latn-US", - "uma-US": "uma-Latn-US", - "umb": "umb-Latn-AO", - "umb-AO": "umb-Latn-AO", - "umb-Latn": "umb-Latn-AO", - "umd": "umd-Latn-AU", - "umd-AU": "umd-Latn-AU", - "umd-Latn": "umd-Latn-AU", - "umg": "umg-Latn-AU", - "umg-AU": "umg-Latn-AU", - "umg-Latn": "umg-Latn-AU", - "umi": "umi-Latn-MY", - "umi-Latn": "umi-Latn-MY", - "umi-MY": "umi-Latn-MY", - "umm": "umm-Latn-NG", - "umm-Latn": "umm-Latn-NG", - "umm-NG": "umm-Latn-NG", - "umn": "umn-Latn-MM", - "umn-Latn": "umn-Latn-MM", - "umn-MM": "umn-Latn-MM", - "umo": "umo-Latn-BR", - "umo-BR": "umo-Latn-BR", - "umo-Latn": "umo-Latn-BR", - "ump": "ump-Latn-AU", - "ump-AU": "ump-Latn-AU", - "ump-Latn": "ump-Latn-AU", - "umr": "umr-Latn-AU", - "umr-AU": "umr-Latn-AU", - "umr-Latn": "umr-Latn-AU", - "ums": "ums-Latn-ID", - "ums-ID": "ums-Latn-ID", - "ums-Latn": "ums-Latn-ID", - "una": "una-Latn-PG", - "una-Latn": "una-Latn-PG", - "una-PG": "una-Latn-PG", - "und": "en-Latn-US", - "und-419": "es-Latn-419", - "und-AC": "en-Latn-AC", - "und-AD": "ca-Latn-AD", - "und-AE": "ar-Arab-AE", - "und-AF": "fa-Arab-AF", - "und-AG": "en-Latn-AG", - "und-AI": "en-Latn-AI", - "und-AL": "sq-Latn-AL", - "und-AM": "hy-Armn-AM", - "und-AO": "pt-Latn-AO", - "und-AQ": "en-Latn-AQ", - "und-AR": "es-Latn-AR", - "und-AS": "sm-Latn-AS", - "und-AT": "de-Latn-AT", - "und-AU": "en-Latn-AU", - "und-AW": "nl-Latn-AW", - "und-AX": "sv-Latn-AX", - "und-AZ": "az-Latn-AZ", - "und-Adlm": "ff-Adlm-GN", - "und-Aghb": "xag-Aghb-AZ", - "und-Ahom": "aho-Ahom-IN", - "und-Arab": "ar-Arab-EG", - "und-Arab-AF": "fa-Arab-AF", - "und-Arab-BN": "ms-Arab-BN", - "und-Arab-CC": "ms-Arab-CC", - "und-Arab-CN": "ug-Arab-CN", - "und-Arab-GB": "ur-Arab-GB", - "und-Arab-ID": "ms-Arab-ID", - "und-Arab-IN": "ur-Arab-IN", - "und-Arab-IR": "fa-Arab-IR", - "und-Arab-KH": "cja-Arab-KH", - "und-Arab-MM": "rhg-Arab-MM", - "und-Arab-MN": "kk-Arab-MN", - "und-Arab-MU": "ur-Arab-MU", - "und-Arab-NG": "ha-Arab-NG", - "und-Arab-PK": "ur-Arab-PK", - "und-Arab-TG": "apd-Arab-TG", - "und-Arab-TH": "mfa-Arab-TH", - "und-Arab-TJ": "fa-Arab-TJ", - "und-Arab-TR": "apc-Arab-TR", - "und-Arab-YT": "swb-Arab-YT", - "und-Armi": "arc-Armi-IR", - "und-Armn": "hy-Armn-AM", - "und-Avst": "ae-Avst-IR", - "und-BA": "bs-Latn-BA", - "und-BB": "en-Latn-BB", - "und-BD": "bn-Beng-BD", - "und-BE": "nl-Latn-BE", - "und-BF": "fr-Latn-BF", - "und-BG": "bg-Cyrl-BG", - "und-BH": "ar-Arab-BH", - "und-BI": "rn-Latn-BI", - "und-BJ": "fr-Latn-BJ", - "und-BL": "fr-Latn-BL", - "und-BM": "en-Latn-BM", - "und-BN": "ms-Latn-BN", - "und-BO": "es-Latn-BO", - "und-BQ": "pap-Latn-BQ", - "und-BR": "pt-Latn-BR", - "und-BS": "en-Latn-BS", - "und-BT": "dz-Tibt-BT", - "und-BV": "no-Latn-BV", - "und-BW": "en-Latn-BW", - "und-BY": "be-Cyrl-BY", - "und-BZ": "en-Latn-BZ", - "und-Bali": "ban-Bali-ID", - "und-Bamu": "bax-Bamu-CM", - "und-Bass": "bsq-Bass-LR", - "und-Batk": "bbc-Batk-ID", - "und-Beng": "bn-Beng-BD", - "und-Bhks": "sa-Bhks-IN", - "und-Bopo": "zh-Bopo-TW", - "und-Brah": "pka-Brah-IN", - "und-Brai": "fr-Brai-FR", - "und-Bugi": "bug-Bugi-ID", - "und-Buhd": "bku-Buhd-PH", - "und-CA": "en-Latn-CA", - "und-CC": "ms-Arab-CC", - "und-CD": "sw-Latn-CD", - "und-CF": "fr-Latn-CF", - "und-CG": "fr-Latn-CG", - "und-CH": "de-Latn-CH", - "und-CI": "fr-Latn-CI", - "und-CK": "en-Latn-CK", - "und-CL": "es-Latn-CL", - "und-CM": "fr-Latn-CM", - "und-CN": "zh-Hans-CN", - "und-CO": "es-Latn-CO", - "und-CP": "en-Latn-CP", - "und-CQ": "en-Latn-CQ", - "und-CR": "es-Latn-CR", - "und-CU": "es-Latn-CU", - "und-CV": "pt-Latn-CV", - "und-CW": "pap-Latn-CW", - "und-CX": "en-Latn-CX", - "und-CY": "el-Grek-CY", - "und-CZ": "cs-Latn-CZ", - "und-Cakm": "ccp-Cakm-BD", - "und-Cans": "iu-Cans-CA", - "und-Cari": "xcr-Cari-TR", - "und-Cham": "cjm-Cham-VN", - "und-Cher": "chr-Cher-US", - "und-Chrs": "xco-Chrs-UZ", - "und-Copt": "cop-Copt-EG", - "und-Cpmn": "und-Cpmn-CY", - "und-Cprt": "grc-Cprt-CY", - "und-Cyrl": "ru-Cyrl-RU", - "und-Cyrl-AF": "kaa-Cyrl-AF", - "und-Cyrl-AL": "mk-Cyrl-AL", - "und-Cyrl-AZ": "az-Cyrl-AZ", - "und-Cyrl-BA": "sr-Cyrl-BA", - "und-Cyrl-BG": "bg-Cyrl-BG", - "und-Cyrl-BY": "be-Cyrl-BY", - "und-Cyrl-GE": "ab-Cyrl-GE", - "und-Cyrl-GR": "mk-Cyrl-GR", - "und-Cyrl-IR": "kaa-Cyrl-IR", - "und-Cyrl-KG": "ky-Cyrl-KG", - "und-Cyrl-MD": "uk-Cyrl-MD", - "und-Cyrl-ME": "sr-Cyrl-ME", - "und-Cyrl-MK": "mk-Cyrl-MK", - "und-Cyrl-MN": "mn-Cyrl-MN", - "und-Cyrl-RO": "bg-Cyrl-RO", - "und-Cyrl-RS": "sr-Cyrl-RS", - "und-Cyrl-SK": "uk-Cyrl-SK", - "und-Cyrl-TJ": "tg-Cyrl-TJ", - "und-Cyrl-TR": "kbd-Cyrl-TR", - "und-Cyrl-UA": "uk-Cyrl-UA", - "und-Cyrl-UZ": "uz-Cyrl-UZ", - "und-Cyrl-XK": "sr-Cyrl-XK", - "und-DE": "de-Latn-DE", - "und-DG": "en-Latn-DG", - "und-DJ": "aa-Latn-DJ", - "und-DK": "da-Latn-DK", - "und-DM": "en-Latn-DM", - "und-DO": "es-Latn-DO", - "und-DZ": "ar-Arab-DZ", - "und-Deva": "hi-Deva-IN", - "und-Deva-BT": "ne-Deva-BT", - "und-Deva-FJ": "hif-Deva-FJ", - "und-Deva-MU": "bho-Deva-MU", - "und-Deva-NP": "ne-Deva-NP", - "und-Deva-PK": "btv-Deva-PK", - "und-Diak": "dv-Diak-MV", - "und-Dogr": "doi-Dogr-IN", - "und-Dupl": "fr-Dupl-FR", - "und-EA": "es-Latn-EA", - "und-EC": "es-Latn-EC", - "und-EE": "et-Latn-EE", - "und-EG": "ar-Arab-EG", - "und-EH": "ar-Arab-EH", - "und-ER": "ti-Ethi-ER", - "und-ES": "es-Latn-ES", - "und-ET": "am-Ethi-ET", - "und-Egyp": "egy-Egyp-EG", - "und-Elba": "sq-Elba-AL", - "und-Elym": "arc-Elym-IR", - "und-Ethi": "am-Ethi-ET", - "und-Ethi-ER": "ti-Ethi-ER", - "und-FI": "fi-Latn-FI", - "und-FJ": "en-Latn-FJ", - "und-FK": "en-Latn-FK", - "und-FM": "en-Latn-FM", - "und-FO": "fo-Latn-FO", - "und-FR": "fr-Latn-FR", - "und-GA": "fr-Latn-GA", - "und-GB": "en-Latn-GB", - "und-GD": "en-Latn-GD", - "und-GE": "ka-Geor-GE", - "und-GF": "fr-Latn-GF", - "und-GG": "en-Latn-GG", - "und-GH": "ak-Latn-GH", - "und-GI": "en-Latn-GI", - "und-GL": "kl-Latn-GL", - "und-GM": "en-Latn-GM", - "und-GN": "fr-Latn-GN", - "und-GP": "fr-Latn-GP", - "und-GQ": "es-Latn-GQ", - "und-GR": "el-Grek-GR", - "und-GS": "en-Latn-GS", - "und-GT": "es-Latn-GT", - "und-GU": "en-Latn-GU", - "und-GW": "pt-Latn-GW", - "und-GY": "en-Latn-GY", - "und-Gara": "wo-Gara-SN", - "und-Geor": "ka-Geor-GE", - "und-Glag": "cu-Glag-BG", - "und-Gong": "wsg-Gong-IN", - "und-Gonm": "esg-Gonm-IN", - "und-Goth": "got-Goth-UA", - "und-Gran": "sa-Gran-IN", - "und-Grek": "el-Grek-GR", - "und-Grek-TR": "bgx-Grek-TR", - "und-Gujr": "gu-Gujr-IN", - "und-Gukh": "gvr-Gukh-NP", - "und-Guru": "pa-Guru-IN", - "und-HK": "zh-Hant-HK", - "und-HM": "en-Latn-HM", - "und-HN": "es-Latn-HN", - "und-HR": "hr-Latn-HR", - "und-HT": "ht-Latn-HT", - "und-HU": "hu-Latn-HU", - "und-Hanb": "zh-Hanb-TW", - "und-Hang": "ko-Hang-KR", - "und-Hani": "zh-Hani-CN", - "und-Hano": "hnn-Hano-PH", - "und-Hans": "zh-Hans-CN", - "und-Hant": "zh-Hant-TW", - "und-Hant-CA": "yue-Hant-CA", - "und-Hant-CN": "yue-Hant-CN", - "und-Hatr": "arc-Hatr-IQ", - "und-Hebr": "he-Hebr-IL", - "und-Hebr-SE": "yi-Hebr-SE", - "und-Hebr-UA": "yi-Hebr-UA", - "und-Hebr-US": "yi-Hebr-US", - "und-Hira": "ja-Hira-JP", - "und-Hluw": "hlu-Hluw-TR", - "und-Hmng": "hnj-Hmng-LA", - "und-Hmnp": "hnj-Hmnp-US", - "und-Hung": "hu-Hung-HU", - "und-IC": "es-Latn-IC", - "und-ID": "id-Latn-ID", - "und-IE": "en-Latn-IE", - "und-IL": "he-Hebr-IL", - "und-IM": "en-Latn-IM", - "und-IN": "hi-Deva-IN", - "und-IO": "en-Latn-IO", - "und-IQ": "ar-Arab-IQ", - "und-IR": "fa-Arab-IR", - "und-IS": "is-Latn-IS", - "und-IT": "it-Latn-IT", - "und-Ital": "ett-Ital-IT", - "und-JE": "en-Latn-JE", - "und-JM": "en-Latn-JM", - "und-JO": "ar-Arab-JO", - "und-JP": "ja-Jpan-JP", - "und-Jamo": "ko-Jamo-KR", - "und-Java": "jv-Java-ID", - "und-Jpan": "ja-Jpan-JP", - "und-KE": "sw-Latn-KE", - "und-KG": "ky-Cyrl-KG", - "und-KH": "km-Khmr-KH", - "und-KI": "en-Latn-KI", - "und-KM": "ar-Arab-KM", - "und-KN": "en-Latn-KN", - "und-KP": "ko-Kore-KP", - "und-KR": "ko-Kore-KR", - "und-KW": "ar-Arab-KW", - "und-KY": "en-Latn-KY", - "und-KZ": "ru-Cyrl-KZ", - "und-Kali": "eky-Kali-MM", - "und-Kana": "ja-Kana-JP", - "und-Kawi": "kaw-Kawi-ID", - "und-Khar": "pra-Khar-PK", - "und-Khmr": "km-Khmr-KH", - "und-Khoj": "sd-Khoj-IN", - "und-Kits": "zkt-Kits-CN", - "und-Knda": "kn-Knda-IN", - "und-Kore": "ko-Kore-KR", - "und-Krai": "bap-Krai-IN", - "und-Kthi": "bho-Kthi-IN", - "und-LA": "lo-Laoo-LA", - "und-LB": "ar-Arab-LB", - "und-LC": "en-Latn-LC", - "und-LI": "de-Latn-LI", - "und-LK": "si-Sinh-LK", - "und-LR": "en-Latn-LR", - "und-LS": "st-Latn-LS", - "und-LT": "lt-Latn-LT", - "und-LU": "fr-Latn-LU", - "und-LV": "lv-Latn-LV", - "und-LY": "ar-Arab-LY", - "und-Lana": "nod-Lana-TH", - "und-Laoo": "lo-Laoo-LA", - "und-Laoo-AU": "hnj-Laoo-AU", - "und-Laoo-CN": "hnj-Laoo-CN", - "und-Laoo-FR": "hnj-Laoo-FR", - "und-Laoo-GF": "hnj-Laoo-GF", - "und-Laoo-MM": "hnj-Laoo-MM", - "und-Laoo-SR": "hnj-Laoo-SR", - "und-Laoo-TH": "hnj-Laoo-TH", - "und-Laoo-US": "hnj-Laoo-US", - "und-Laoo-VN": "hnj-Laoo-VN", - "und-Latn": "en-Latn-US", - "und-Latn-419": "es-Latn-419", - "und-Latn-AD": "ca-Latn-AD", - "und-Latn-AE": "en-Latn-AE", - "und-Latn-AF": "tk-Latn-AF", - "und-Latn-AL": "sq-Latn-AL", - "und-Latn-AM": "ku-Latn-AM", - "und-Latn-AO": "pt-Latn-AO", - "und-Latn-AR": "es-Latn-AR", - "und-Latn-AS": "sm-Latn-AS", - "und-Latn-AT": "de-Latn-AT", - "und-Latn-AW": "nl-Latn-AW", - "und-Latn-AX": "sv-Latn-AX", - "und-Latn-AZ": "az-Latn-AZ", - "und-Latn-BA": "bs-Latn-BA", - "und-Latn-BD": "en-Latn-BD", - "und-Latn-BE": "nl-Latn-BE", - "und-Latn-BF": "fr-Latn-BF", - "und-Latn-BG": "en-Latn-BG", - "und-Latn-BI": "rn-Latn-BI", - "und-Latn-BJ": "fr-Latn-BJ", - "und-Latn-BL": "fr-Latn-BL", - "und-Latn-BN": "ms-Latn-BN", - "und-Latn-BO": "es-Latn-BO", - "und-Latn-BQ": "pap-Latn-BQ", - "und-Latn-BR": "pt-Latn-BR", - "und-Latn-BT": "en-Latn-BT", - "und-Latn-CC": "en-Latn-CC", - "und-Latn-CD": "sw-Latn-CD", - "und-Latn-CF": "fr-Latn-CF", - "und-Latn-CG": "fr-Latn-CG", - "und-Latn-CH": "de-Latn-CH", - "und-Latn-CI": "fr-Latn-CI", - "und-Latn-CL": "es-Latn-CL", - "und-Latn-CM": "fr-Latn-CM", - "und-Latn-CN": "za-Latn-CN", - "und-Latn-CO": "es-Latn-CO", - "und-Latn-CR": "es-Latn-CR", - "und-Latn-CU": "es-Latn-CU", - "und-Latn-CV": "pt-Latn-CV", - "und-Latn-CW": "pap-Latn-CW", - "und-Latn-CY": "tr-Latn-CY", - "und-Latn-CZ": "cs-Latn-CZ", - "und-Latn-DE": "de-Latn-DE", - "und-Latn-DJ": "aa-Latn-DJ", - "und-Latn-DK": "da-Latn-DK", - "und-Latn-DO": "es-Latn-DO", - "und-Latn-DZ": "fr-Latn-DZ", - "und-Latn-EA": "es-Latn-EA", - "und-Latn-EC": "es-Latn-EC", - "und-Latn-EE": "et-Latn-EE", - "und-Latn-EG": "en-Latn-EG", - "und-Latn-ER": "en-Latn-ER", - "und-Latn-ES": "es-Latn-ES", - "und-Latn-ET": "en-Latn-ET", - "und-Latn-FI": "fi-Latn-FI", - "und-Latn-FO": "fo-Latn-FO", - "und-Latn-FR": "fr-Latn-FR", - "und-Latn-GA": "fr-Latn-GA", - "und-Latn-GE": "ku-Latn-GE", - "und-Latn-GF": "fr-Latn-GF", - "und-Latn-GH": "ak-Latn-GH", - "und-Latn-GL": "kl-Latn-GL", - "und-Latn-GN": "fr-Latn-GN", - "und-Latn-GP": "fr-Latn-GP", - "und-Latn-GQ": "es-Latn-GQ", - "und-Latn-GR": "en-Latn-GR", - "und-Latn-GT": "es-Latn-GT", - "und-Latn-GW": "pt-Latn-GW", - "und-Latn-HK": "en-Latn-HK", - "und-Latn-HN": "es-Latn-HN", - "und-Latn-HR": "hr-Latn-HR", - "und-Latn-HT": "ht-Latn-HT", - "und-Latn-HU": "hu-Latn-HU", - "und-Latn-IC": "es-Latn-IC", - "und-Latn-ID": "id-Latn-ID", - "und-Latn-IL": "en-Latn-IL", - "und-Latn-IN": "en-Latn-IN", - "und-Latn-IQ": "en-Latn-IQ", - "und-Latn-IR": "tk-Latn-IR", - "und-Latn-IS": "is-Latn-IS", - "und-Latn-IT": "it-Latn-IT", - "und-Latn-JO": "en-Latn-JO", - "und-Latn-KE": "sw-Latn-KE", - "und-Latn-KM": "fr-Latn-KM", - "und-Latn-KZ": "en-Latn-KZ", - "und-Latn-LB": "en-Latn-LB", - "und-Latn-LI": "de-Latn-LI", - "und-Latn-LK": "en-Latn-LK", - "und-Latn-LS": "st-Latn-LS", - "und-Latn-LT": "lt-Latn-LT", - "und-Latn-LU": "fr-Latn-LU", - "und-Latn-LV": "lv-Latn-LV", - "und-Latn-MA": "fr-Latn-MA", - "und-Latn-MC": "fr-Latn-MC", - "und-Latn-MD": "ro-Latn-MD", - "und-Latn-ME": "sr-Latn-ME", - "und-Latn-MF": "fr-Latn-MF", - "und-Latn-MG": "mg-Latn-MG", - "und-Latn-MK": "sq-Latn-MK", - "und-Latn-ML": "bm-Latn-ML", - "und-Latn-MM": "kac-Latn-MM", - "und-Latn-MO": "pt-Latn-MO", - "und-Latn-MQ": "fr-Latn-MQ", - "und-Latn-MR": "fr-Latn-MR", - "und-Latn-MT": "mt-Latn-MT", - "und-Latn-MU": "mfe-Latn-MU", - "und-Latn-MV": "en-Latn-MV", - "und-Latn-MX": "es-Latn-MX", - "und-Latn-MY": "ms-Latn-MY", - "und-Latn-MZ": "pt-Latn-MZ", - "und-Latn-NA": "af-Latn-NA", - "und-Latn-NC": "fr-Latn-NC", - "und-Latn-NE": "ha-Latn-NE", - "und-Latn-NI": "es-Latn-NI", - "und-Latn-NL": "nl-Latn-NL", - "und-Latn-NO": "nb-Latn-NO", - "und-Latn-NP": "en-Latn-NP", - "und-Latn-PA": "es-Latn-PA", - "und-Latn-PE": "es-Latn-PE", - "und-Latn-PF": "fr-Latn-PF", - "und-Latn-PG": "tpi-Latn-PG", - "und-Latn-PH": "fil-Latn-PH", - "und-Latn-PK": "en-Latn-PK", - "und-Latn-PL": "pl-Latn-PL", - "und-Latn-PM": "fr-Latn-PM", - "und-Latn-PR": "es-Latn-PR", - "und-Latn-PT": "pt-Latn-PT", - "und-Latn-PW": "pau-Latn-PW", - "und-Latn-PY": "gn-Latn-PY", - "und-Latn-RE": "fr-Latn-RE", - "und-Latn-RO": "ro-Latn-RO", - "und-Latn-RS": "sr-Latn-RS", - "und-Latn-RU": "krl-Latn-RU", - "und-Latn-RW": "rw-Latn-RW", - "und-Latn-SC": "fr-Latn-SC", - "und-Latn-SD": "en-Latn-SD", - "und-Latn-SE": "sv-Latn-SE", - "und-Latn-SI": "sl-Latn-SI", - "und-Latn-SJ": "nb-Latn-SJ", - "und-Latn-SK": "sk-Latn-SK", - "und-Latn-SL": "kri-Latn-SL", - "und-Latn-SM": "it-Latn-SM", - "und-Latn-SN": "fr-Latn-SN", - "und-Latn-SO": "so-Latn-SO", - "und-Latn-SR": "nl-Latn-SR", - "und-Latn-SS": "en-Latn-SS", - "und-Latn-ST": "pt-Latn-ST", - "und-Latn-SV": "es-Latn-SV", - "und-Latn-SY": "fr-Latn-SY", - "und-Latn-TD": "fr-Latn-TD", - "und-Latn-TF": "fr-Latn-TF", - "und-Latn-TG": "fr-Latn-TG", - "und-Latn-TH": "en-Latn-TH", - "und-Latn-TK": "tkl-Latn-TK", - "und-Latn-TL": "pt-Latn-TL", - "und-Latn-TM": "tk-Latn-TM", - "und-Latn-TN": "fr-Latn-TN", - "und-Latn-TO": "to-Latn-TO", - "und-Latn-TR": "tr-Latn-TR", - "und-Latn-TV": "tvl-Latn-TV", - "und-Latn-TW": "trv-Latn-TW", - "und-Latn-TZ": "sw-Latn-TZ", - "und-Latn-UA": "pl-Latn-UA", - "und-Latn-UG": "sw-Latn-UG", - "und-Latn-UY": "es-Latn-UY", - "und-Latn-UZ": "uz-Latn-UZ", - "und-Latn-VA": "it-Latn-VA", - "und-Latn-VE": "es-Latn-VE", - "und-Latn-VN": "vi-Latn-VN", - "und-Latn-VU": "bi-Latn-VU", - "und-Latn-WF": "fr-Latn-WF", - "und-Latn-WS": "sm-Latn-WS", - "und-Latn-XK": "sq-Latn-XK", - "und-Latn-YE": "en-Latn-YE", - "und-Latn-YT": "fr-Latn-YT", - "und-Latn-ZM": "bem-Latn-ZM", - "und-Latn-ZW": "sn-Latn-ZW", - "und-Lepc": "lep-Lepc-IN", - "und-Limb": "lif-Limb-IN", - "und-Lina": "lab-Lina-GR", - "und-Linb": "grc-Linb-GR", - "und-Lisu": "lis-Lisu-CN", - "und-Lyci": "xlc-Lyci-TR", - "und-Lydi": "xld-Lydi-TR", - "und-MA": "ar-Arab-MA", - "und-MC": "fr-Latn-MC", - "und-MD": "ro-Latn-MD", - "und-ME": "sr-Latn-ME", - "und-MF": "fr-Latn-MF", - "und-MG": "mg-Latn-MG", - "und-MH": "en-Latn-MH", - "und-MK": "mk-Cyrl-MK", - "und-ML": "bm-Latn-ML", - "und-MM": "my-Mymr-MM", - "und-MN": "mn-Cyrl-MN", - "und-MO": "zh-Hant-MO", - "und-MP": "en-Latn-MP", - "und-MQ": "fr-Latn-MQ", - "und-MR": "ar-Arab-MR", - "und-MS": "en-Latn-MS", - "und-MT": "mt-Latn-MT", - "und-MU": "mfe-Latn-MU", - "und-MV": "dv-Thaa-MV", - "und-MW": "en-Latn-MW", - "und-MX": "es-Latn-MX", - "und-MY": "ms-Latn-MY", - "und-MZ": "pt-Latn-MZ", - "und-Mahj": "hi-Mahj-IN", - "und-Maka": "mak-Maka-ID", - "und-Mand": "myz-Mand-IR", - "und-Mani": "xmn-Mani-CN", - "und-Marc": "bo-Marc-CN", - "und-Medf": "dmf-Medf-NG", - "und-Mend": "men-Mend-SL", - "und-Merc": "xmr-Merc-SD", - "und-Mero": "xmr-Mero-SD", - "und-Mlym": "ml-Mlym-IN", - "und-Modi": "mr-Modi-IN", - "und-Mong": "mn-Mong-CN", - "und-Mroo": "mro-Mroo-BD", - "und-Mtei": "mni-Mtei-IN", - "und-Mult": "skr-Mult-PK", - "und-Mymr": "my-Mymr-MM", - "und-Mymr-IN": "kht-Mymr-IN", - "und-Mymr-TH": "mnw-Mymr-TH", - "und-NA": "af-Latn-NA", - "und-NC": "fr-Latn-NC", - "und-NE": "ha-Latn-NE", - "und-NF": "en-Latn-NF", - "und-NG": "en-Latn-NG", - "und-NI": "es-Latn-NI", - "und-NL": "nl-Latn-NL", - "und-NO": "nb-Latn-NO", - "und-NP": "ne-Deva-NP", - "und-NR": "na-Latn-NR", - "und-NU": "en-Latn-NU", - "und-NZ": "en-Latn-NZ", - "und-Nagm": "unr-Nagm-IN", - "und-Nand": "sa-Nand-IN", - "und-Narb": "xna-Narb-SA", - "und-Nbat": "arc-Nbat-JO", - "und-Newa": "new-Newa-NP", - "und-Nkoo": "man-Nkoo-GN", - "und-Nkoo-ML": "bm-Nkoo-ML", - "und-Nshu": "zhx-Nshu-CN", - "und-OM": "ar-Arab-OM", - "und-Ogam": "sga-Ogam-IE", - "und-Olck": "sat-Olck-IN", - "und-Onao": "unr-Onao-IN", - "und-Orkh": "otk-Orkh-MN", - "und-Orya": "or-Orya-IN", - "und-Osge": "osa-Osge-US", - "und-Osma": "so-Osma-SO", - "und-Ougr": "oui-Ougr-CN", - "und-PA": "es-Latn-PA", - "und-PE": "es-Latn-PE", - "und-PF": "fr-Latn-PF", - "und-PG": "tpi-Latn-PG", - "und-PH": "fil-Latn-PH", - "und-PK": "ur-Arab-PK", - "und-PL": "pl-Latn-PL", - "und-PM": "fr-Latn-PM", - "und-PN": "en-Latn-PN", - "und-PR": "es-Latn-PR", - "und-PS": "ar-Arab-PS", - "und-PT": "pt-Latn-PT", - "und-PW": "pau-Latn-PW", - "und-PY": "gn-Latn-PY", - "und-Palm": "arc-Palm-SY", - "und-Pauc": "ctd-Pauc-MM", - "und-Perm": "kv-Perm-RU", - "und-Phag": "lzh-Phag-CN", - "und-Phli": "pal-Phli-IR", - "und-Phlp": "pal-Phlp-CN", - "und-Phnx": "phn-Phnx-LB", - "und-Plrd": "hmd-Plrd-CN", - "und-Prti": "xpr-Prti-IR", - "und-QA": "ar-Arab-QA", - "und-RE": "fr-Latn-RE", - "und-RO": "ro-Latn-RO", - "und-RS": "sr-Cyrl-RS", - "und-RU": "ru-Cyrl-RU", - "und-RW": "rw-Latn-RW", - "und-Rjng": "rej-Rjng-ID", - "und-Rohg": "rhg-Rohg-MM", - "und-Runr": "non-Runr-SE", - "und-SA": "ar-Arab-SA", - "und-SB": "en-Latn-SB", - "und-SC": "fr-Latn-SC", - "und-SD": "ar-Arab-SD", - "und-SE": "sv-Latn-SE", - "und-SG": "en-Latn-SG", - "und-SH": "en-Latn-SH", - "und-SI": "sl-Latn-SI", - "und-SJ": "nb-Latn-SJ", - "und-SK": "sk-Latn-SK", - "und-SL": "kri-Latn-SL", - "und-SM": "it-Latn-SM", - "und-SN": "fr-Latn-SN", - "und-SO": "so-Latn-SO", - "und-SR": "nl-Latn-SR", - "und-SS": "ar-Arab-SS", - "und-ST": "pt-Latn-ST", - "und-SV": "es-Latn-SV", - "und-SX": "en-Latn-SX", - "und-SY": "ar-Arab-SY", - "und-SZ": "ss-Latn-SZ", - "und-Samr": "smp-Samr-IL", - "und-Sarb": "xsa-Sarb-YE", - "und-Saur": "saz-Saur-IN", - "und-Sgnw": "ase-Sgnw-US", - "und-Shaw": "en-Shaw-GB", - "und-Shrd": "sa-Shrd-IN", - "und-Sidd": "sa-Sidd-IN", - "und-Sind": "sd-Sind-IN", - "und-Sinh": "si-Sinh-LK", - "und-Sogd": "sog-Sogd-UZ", - "und-Sogo": "sog-Sogo-UZ", - "und-Sora": "srb-Sora-IN", - "und-Soyo": "cmg-Soyo-MN", - "und-Sund": "su-Sund-ID", - "und-Sunu": "suz-Sunu-NP", - "und-Sylo": "syl-Sylo-BD", - "und-Syrc": "syr-Syrc-IQ", - "und-TA": "en-Latn-TA", - "und-TC": "en-Latn-TC", - "und-TD": "fr-Latn-TD", - "und-TF": "fr-Latn-TF", - "und-TG": "fr-Latn-TG", - "und-TH": "th-Thai-TH", - "und-TJ": "tg-Cyrl-TJ", - "und-TK": "tkl-Latn-TK", - "und-TL": "pt-Latn-TL", - "und-TM": "tk-Latn-TM", - "und-TN": "ar-Arab-TN", - "und-TO": "to-Latn-TO", - "und-TR": "tr-Latn-TR", - "und-TT": "en-Latn-TT", - "und-TV": "tvl-Latn-TV", - "und-TW": "zh-Hant-TW", - "und-TZ": "sw-Latn-TZ", - "und-Tagb": "tbw-Tagb-PH", - "und-Takr": "doi-Takr-IN", - "und-Tale": "tdd-Tale-CN", - "und-Talu": "khb-Talu-CN", - "und-Taml": "ta-Taml-IN", - "und-Tang": "txg-Tang-CN", - "und-Tavt": "blt-Tavt-VN", - "und-Telu": "te-Telu-IN", - "und-Tfng": "zgh-Tfng-MA", - "und-Tglg": "fil-Tglg-PH", - "und-Thaa": "dv-Thaa-MV", - "und-Thai": "th-Thai-TH", - "und-Thai-CN": "lcp-Thai-CN", - "und-Thai-KH": "kdt-Thai-KH", - "und-Thai-LA": "kdt-Thai-LA", - "und-Tibt": "bo-Tibt-CN", - "und-Tibt-BT": "dz-Tibt-BT", - "und-Tirh": "mai-Tirh-IN", - "und-Tnsa": "nst-Tnsa-IN", - "und-Todr": "sq-Todr-AL", - "und-Toto": "txo-Toto-IN", - "und-Tutg": "sa-Tutg-IN", - "und-UA": "uk-Cyrl-UA", - "und-UG": "sw-Latn-UG", - "und-UM": "en-Latn-UM", - "und-US": "en-Latn-US", - "und-UY": "es-Latn-UY", - "und-UZ": "uz-Latn-UZ", - "und-Ugar": "uga-Ugar-SY", - "und-VA": "it-Latn-VA", - "und-VC": "en-Latn-VC", - "und-VE": "es-Latn-VE", - "und-VG": "en-Latn-VG", - "und-VI": "en-Latn-VI", - "und-VN": "vi-Latn-VN", - "und-VU": "bi-Latn-VU", - "und-Vaii": "vai-Vaii-LR", - "und-Vith": "sq-Vith-AL", - "und-WF": "fr-Latn-WF", - "und-WS": "sm-Latn-WS", - "und-Wara": "hoc-Wara-IN", - "und-Wcho": "nnp-Wcho-IN", - "und-XK": "sq-Latn-XK", - "und-XX": "zxx-Latn-XX", - "und-Xpeo": "peo-Xpeo-IR", - "und-Xsux": "akk-Xsux-IQ", - "und-YE": "ar-Arab-YE", - "und-YT": "fr-Latn-YT", - "und-Yezi": "ku-Yezi-GE", - "und-Yiii": "ii-Yiii-CN", - "und-ZA": "en-Latn-ZA", - "und-ZM": "bem-Latn-ZM", - "und-ZW": "sn-Latn-ZW", - "und-Zanb": "cmg-Zanb-MN", - "une": "une-Latn-NG", - "une-Latn": "une-Latn-NG", - "une-NG": "une-Latn-NG", - "ung": "ung-Latn-AU", - "ung-AU": "ung-Latn-AU", - "ung-Latn": "ung-Latn-AU", - "uni": "uni-Latn-PG", - "uni-Latn": "uni-Latn-PG", - "uni-PG": "uni-Latn-PG", - "unk": "unk-Latn-BR", - "unk-BR": "unk-Latn-BR", - "unk-Latn": "unk-Latn-BR", - "unm": "unm-Latn-US", - "unm-Latn": "unm-Latn-US", - "unm-US": "unm-Latn-US", - "unn": "unn-Latn-AU", - "unn-AU": "unn-Latn-AU", - "unn-Latn": "unn-Latn-AU", - "unr": "unr-Beng-IN", - "unr-Beng": "unr-Beng-IN", - "unr-Deva": "unr-Deva-NP", - "unr-IN": "unr-Beng-IN", - "unr-NP": "unr-Deva-NP", - "unr-Nagm": "unr-Nagm-IN", - "unr-Onao": "unr-Onao-IN", - "unu": "unu-Latn-PG", - "unu-Latn": "unu-Latn-PG", - "unu-PG": "unu-Latn-PG", - "unx": "unx-Beng-IN", - "unx-Beng": "unx-Beng-IN", - "unx-IN": "unx-Beng-IN", - "unz": "unz-Latn-ID", - "unz-ID": "unz-Latn-ID", - "unz-Latn": "unz-Latn-ID", - "uon": "uon-Latn-TW", - "uon-Latn": "uon-Latn-TW", - "uon-TW": "uon-Latn-TW", - "upi": "upi-Latn-PG", - "upi-Latn": "upi-Latn-PG", - "upi-PG": "upi-Latn-PG", - "upv": "upv-Latn-VU", - "upv-Latn": "upv-Latn-VU", - "upv-VU": "upv-Latn-VU", - "ur": "ur-Arab-PK", - "ur-Arab": "ur-Arab-PK", - "ur-Arab-GB": "ur-Arab-GB", - "ur-Arab-IN": "ur-Arab-IN", - "ur-Arab-MU": "ur-Arab-MU", - "ur-Arab-PK": "ur-Arab-PK", - "ur-IN": "ur-Arab-IN", - "ur-PK": "ur-Arab-PK", - "ura": "ura-Latn-PE", - "ura-Latn": "ura-Latn-PE", - "ura-PE": "ura-Latn-PE", - "urb": "urb-Latn-BR", - "urb-BR": "urb-Latn-BR", - "urb-Latn": "urb-Latn-BR", - "urc": "urc-Latn-AU", - "urc-AU": "urc-Latn-AU", - "urc-Latn": "urc-Latn-AU", - "ure": "ure-Latn-BO", - "ure-BO": "ure-Latn-BO", - "ure-Latn": "ure-Latn-BO", - "urf": "urf-Latn-AU", - "urf-AU": "urf-Latn-AU", - "urf-Latn": "urf-Latn-AU", - "urg": "urg-Latn-PG", - "urg-Latn": "urg-Latn-PG", - "urg-PG": "urg-Latn-PG", - "urh": "urh-Latn-NG", - "urh-Latn": "urh-Latn-NG", - "urh-NG": "urh-Latn-NG", - "uri": "uri-Latn-PG", - "uri-Latn": "uri-Latn-PG", - "uri-PG": "uri-Latn-PG", - "urk": "urk-Thai-TH", - "urk-TH": "urk-Thai-TH", - "urk-Thai": "urk-Thai-TH", - "urm": "urm-Latn-PG", - "urm-Latn": "urm-Latn-PG", - "urm-PG": "urm-Latn-PG", - "urn": "urn-Latn-ID", - "urn-ID": "urn-Latn-ID", - "urn-Latn": "urn-Latn-ID", - "uro": "uro-Latn-PG", - "uro-Latn": "uro-Latn-PG", - "uro-PG": "uro-Latn-PG", - "urp": "urp-Latn-BR", - "urp-BR": "urp-Latn-BR", - "urp-Latn": "urp-Latn-BR", - "urr": "urr-Latn-VU", - "urr-Latn": "urr-Latn-VU", - "urr-VU": "urr-Latn-VU", - "urt": "urt-Latn-PG", - "urt-Latn": "urt-Latn-PG", - "urt-PG": "urt-Latn-PG", - "uru": "uru-Latn-BR", - "uru-BR": "uru-Latn-BR", - "uru-Latn": "uru-Latn-BR", - "urv": "urv-Latn-PG", - "urv-Latn": "urv-Latn-PG", - "urv-PG": "urv-Latn-PG", - "urw": "urw-Latn-PG", - "urw-Latn": "urw-Latn-PG", - "urw-PG": "urw-Latn-PG", - "urx": "urx-Latn-PG", - "urx-Latn": "urx-Latn-PG", - "urx-PG": "urx-Latn-PG", - "ury": "ury-Latn-ID", - "ury-ID": "ury-Latn-ID", - "ury-Latn": "ury-Latn-ID", - "urz": "urz-Latn-BR", - "urz-BR": "urz-Latn-BR", - "urz-Latn": "urz-Latn-BR", - "usa": "usa-Latn-PG", - "usa-Latn": "usa-Latn-PG", - "usa-PG": "usa-Latn-PG", - "ush": "ush-Arab-PK", - "ush-Arab": "ush-Arab-PK", - "ush-PK": "ush-Arab-PK", - "usi": "usi-Latn-BD", - "usi-BD": "usi-Latn-BD", - "usi-Latn": "usi-Latn-BD", - "usk": "usk-Latn-CM", - "usk-CM": "usk-Latn-CM", - "usk-Latn": "usk-Latn-CM", - "usp": "usp-Latn-GT", - "usp-GT": "usp-Latn-GT", - "usp-Latn": "usp-Latn-GT", - "uss": "uss-Latn-NG", - "uss-Latn": "uss-Latn-NG", - "uss-NG": "uss-Latn-NG", - "usu": "usu-Latn-PG", - "usu-Latn": "usu-Latn-PG", - "usu-PG": "usu-Latn-PG", - "uta": "uta-Latn-NG", - "uta-Latn": "uta-Latn-NG", - "uta-NG": "uta-Latn-NG", - "ute": "ute-Latn-US", - "ute-Latn": "ute-Latn-US", - "ute-US": "ute-Latn-US", - "uth": "uth-Latn-NG", - "uth-Latn": "uth-Latn-NG", - "uth-NG": "uth-Latn-NG", - "utp": "utp-Latn-SB", - "utp-Latn": "utp-Latn-SB", - "utp-SB": "utp-Latn-SB", - "utr": "utr-Latn-NG", - "utr-Latn": "utr-Latn-NG", - "utr-NG": "utr-Latn-NG", - "utu": "utu-Latn-PG", - "utu-Latn": "utu-Latn-PG", - "utu-PG": "utu-Latn-PG", - "uum": "uum-Grek-GE", - "uum-GE": "uum-Grek-GE", - "uum-Grek": "uum-Grek-GE", - "uur": "uur-Latn-VU", - "uur-Latn": "uur-Latn-VU", - "uur-VU": "uur-Latn-VU", - "uve": "uve-Latn-NC", - "uve-Latn": "uve-Latn-NC", - "uve-NC": "uve-Latn-NC", - "uvh": "uvh-Latn-PG", - "uvh-Latn": "uvh-Latn-PG", - "uvh-PG": "uvh-Latn-PG", - "uvl": "uvl-Latn-PG", - "uvl-Latn": "uvl-Latn-PG", - "uvl-PG": "uvl-Latn-PG", - "uwa": "uwa-Latn-AU", - "uwa-AU": "uwa-Latn-AU", - "uwa-Latn": "uwa-Latn-AU", - "uya": "uya-Latn-NG", - "uya-Latn": "uya-Latn-NG", - "uya-NG": "uya-Latn-NG", - "uz": "uz-Latn-UZ", - "uz-AF": "uz-Arab-AF", - "uz-Arab": "uz-Arab-AF", - "uz-CN": "uz-Cyrl-CN", - "uz-Cyrl-UZ": "uz-Cyrl-UZ", - "uz-Latn": "uz-Latn-UZ", - "uz-UZ": "uz-Latn-UZ", - "uzs": "uzs-Arab-AF", - "uzs-AF": "uzs-Arab-AF", - "uzs-Arab": "uzs-Arab-AF", - "vaa": "vaa-Taml-IN", - "vaa-IN": "vaa-Taml-IN", - "vaa-Taml": "vaa-Taml-IN", - "vae": "vae-Latn-CF", - "vae-CF": "vae-Latn-CF", - "vae-Latn": "vae-Latn-CF", - "vaf": "vaf-Arab-IR", - "vaf-Arab": "vaf-Arab-IR", - "vaf-IR": "vaf-Arab-IR", - "vag": "vag-Latn-GH", - "vag-GH": "vag-Latn-GH", - "vag-Latn": "vag-Latn-GH", - "vah": "vah-Deva-IN", - "vah-Deva": "vah-Deva-IN", - "vah-IN": "vah-Deva-IN", - "vai": "vai-Vaii-LR", - "vai-LR": "vai-Vaii-LR", - "vai-Vaii": "vai-Vaii-LR", - "vaj": "vaj-Latn-NA", - "vaj-Latn": "vaj-Latn-NA", - "vaj-NA": "vaj-Latn-NA", - "val": "val-Latn-PG", - "val-Latn": "val-Latn-PG", - "val-PG": "val-Latn-PG", - "vam": "vam-Latn-PG", - "vam-Latn": "vam-Latn-PG", - "vam-PG": "vam-Latn-PG", - "van": "van-Latn-PG", - "van-Latn": "van-Latn-PG", - "van-PG": "van-Latn-PG", - "vao": "vao-Latn-VU", - "vao-Latn": "vao-Latn-VU", - "vao-VU": "vao-Latn-VU", - "vap": "vap-Latn-IN", - "vap-IN": "vap-Latn-IN", - "vap-Latn": "vap-Latn-IN", - "var": "var-Latn-MX", - "var-Latn": "var-Latn-MX", - "var-MX": "var-Latn-MX", - "vas": "vas-Deva-IN", - "vas-Deva": "vas-Deva-IN", - "vas-IN": "vas-Deva-IN", - "vau": "vau-Latn-CD", - "vau-CD": "vau-Latn-CD", - "vau-Latn": "vau-Latn-CD", - "vav": "vav-Deva-IN", - "vav-Deva": "vav-Deva-IN", - "vav-IN": "vav-Deva-IN", - "vay": "vay-Deva-NP", - "vay-Deva": "vay-Deva-NP", - "vay-NP": "vay-Deva-NP", - "vbb": "vbb-Latn-ID", - "vbb-ID": "vbb-Latn-ID", - "vbb-Latn": "vbb-Latn-ID", - "vbk": "vbk-Latn-PH", - "vbk-Latn": "vbk-Latn-PH", - "vbk-PH": "vbk-Latn-PH", - "ve": "ve-Latn-ZA", - "ve-Latn": "ve-Latn-ZA", - "ve-ZA": "ve-Latn-ZA", - "vec": "vec-Latn-IT", - "vec-IT": "vec-Latn-IT", - "vec-Latn": "vec-Latn-IT", - "vem": "vem-Latn-NG", - "vem-Latn": "vem-Latn-NG", - "vem-NG": "vem-Latn-NG", - "veo": "veo-Latn-US", - "veo-Latn": "veo-Latn-US", - "veo-US": "veo-Latn-US", - "vep": "vep-Latn-RU", - "vep-Latn": "vep-Latn-RU", - "vep-RU": "vep-Latn-RU", - "ver": "ver-Latn-NG", - "ver-Latn": "ver-Latn-NG", - "ver-NG": "ver-Latn-NG", - "vgr": "vgr-Arab-PK", - "vgr-Arab": "vgr-Arab-PK", - "vgr-PK": "vgr-Arab-PK", - "vi": "vi-Latn-VN", - "vi-Latn": "vi-Latn-VN", - "vi-VN": "vi-Latn-VN", - "vic": "vic-Latn-SX", - "vic-Latn": "vic-Latn-SX", - "vic-SX": "vic-Latn-SX", - "vid": "vid-Latn-TZ", - "vid-Latn": "vid-Latn-TZ", - "vid-TZ": "vid-Latn-TZ", - "vif": "vif-Latn-CG", - "vif-CG": "vif-Latn-CG", - "vif-Latn": "vif-Latn-CG", - "vig": "vig-Latn-BF", - "vig-BF": "vig-Latn-BF", - "vig-Latn": "vig-Latn-BF", - "vil": "vil-Latn-AR", - "vil-AR": "vil-Latn-AR", - "vil-Latn": "vil-Latn-AR", - "vin": "vin-Latn-TZ", - "vin-Latn": "vin-Latn-TZ", - "vin-TZ": "vin-Latn-TZ", - "vit": "vit-Latn-NG", - "vit-Latn": "vit-Latn-NG", - "vit-NG": "vit-Latn-NG", - "viv": "viv-Latn-PG", - "viv-Latn": "viv-Latn-PG", - "viv-PG": "viv-Latn-PG", - "vjk": "vjk-Deva-IN", - "vjk-Deva": "vjk-Deva-IN", - "vjk-IN": "vjk-Deva-IN", - "vka": "vka-Latn-AU", - "vka-AU": "vka-Latn-AU", - "vka-Latn": "vka-Latn-AU", - "vkj": "vkj-Latn-TD", - "vkj-Latn": "vkj-Latn-TD", - "vkj-TD": "vkj-Latn-TD", - "vkk": "vkk-Latn-ID", - "vkk-ID": "vkk-Latn-ID", - "vkk-Latn": "vkk-Latn-ID", - "vkl": "vkl-Latn-ID", - "vkl-ID": "vkl-Latn-ID", - "vkl-Latn": "vkl-Latn-ID", - "vkm": "vkm-Latn-BR", - "vkm-BR": "vkm-Latn-BR", - "vkm-Latn": "vkm-Latn-BR", - "vkn": "vkn-Latn-NG", - "vkn-Latn": "vkn-Latn-NG", - "vkn-NG": "vkn-Latn-NG", - "vko": "vko-Latn-ID", - "vko-ID": "vko-Latn-ID", - "vko-Latn": "vko-Latn-ID", - "vkp": "vkp-Latn-IN", - "vkp-IN": "vkp-Latn-IN", - "vkp-Latn": "vkp-Latn-IN", - "vkt": "vkt-Latn-ID", - "vkt-ID": "vkt-Latn-ID", - "vkt-Latn": "vkt-Latn-ID", - "vku": "vku-Latn-AU", - "vku-AU": "vku-Latn-AU", - "vku-Latn": "vku-Latn-AU", - "vkz": "vkz-Latn-NG", - "vkz-Latn": "vkz-Latn-NG", - "vkz-NG": "vkz-Latn-NG", - "vlp": "vlp-Latn-VU", - "vlp-Latn": "vlp-Latn-VU", - "vlp-VU": "vlp-Latn-VU", - "vls": "vls-Latn-BE", - "vls-BE": "vls-Latn-BE", - "vls-Latn": "vls-Latn-BE", - "vma": "vma-Latn-AU", - "vma-AU": "vma-Latn-AU", - "vma-Latn": "vma-Latn-AU", - "vmb": "vmb-Latn-AU", - "vmb-AU": "vmb-Latn-AU", - "vmb-Latn": "vmb-Latn-AU", - "vmc": "vmc-Latn-MX", - "vmc-Latn": "vmc-Latn-MX", - "vmc-MX": "vmc-Latn-MX", - "vmd": "vmd-Knda-IN", - "vmd-IN": "vmd-Knda-IN", - "vmd-Knda": "vmd-Knda-IN", - "vme": "vme-Latn-ID", - "vme-ID": "vme-Latn-ID", - "vme-Latn": "vme-Latn-ID", - "vmf": "vmf-Latn-DE", - "vmf-DE": "vmf-Latn-DE", - "vmf-Latn": "vmf-Latn-DE", - "vmg": "vmg-Latn-PG", - "vmg-Latn": "vmg-Latn-PG", - "vmg-PG": "vmg-Latn-PG", - "vmh": "vmh-Arab-IR", - "vmh-Arab": "vmh-Arab-IR", - "vmh-IR": "vmh-Arab-IR", - "vmi": "vmi-Latn-AU", - "vmi-AU": "vmi-Latn-AU", - "vmi-Latn": "vmi-Latn-AU", - "vmj": "vmj-Latn-MX", - "vmj-Latn": "vmj-Latn-MX", - "vmj-MX": "vmj-Latn-MX", - "vmk": "vmk-Latn-MZ", - "vmk-Latn": "vmk-Latn-MZ", - "vmk-MZ": "vmk-Latn-MZ", - "vml": "vml-Latn-AU", - "vml-AU": "vml-Latn-AU", - "vml-Latn": "vml-Latn-AU", - "vmm": "vmm-Latn-MX", - "vmm-Latn": "vmm-Latn-MX", - "vmm-MX": "vmm-Latn-MX", - "vmp": "vmp-Latn-MX", - "vmp-Latn": "vmp-Latn-MX", - "vmp-MX": "vmp-Latn-MX", - "vmq": "vmq-Latn-MX", - "vmq-Latn": "vmq-Latn-MX", - "vmq-MX": "vmq-Latn-MX", - "vmr": "vmr-Latn-MZ", - "vmr-Latn": "vmr-Latn-MZ", - "vmr-MZ": "vmr-Latn-MZ", - "vms": "vms-Latn-ID", - "vms-ID": "vms-Latn-ID", - "vms-Latn": "vms-Latn-ID", - "vmu": "vmu-Latn-AU", - "vmu-AU": "vmu-Latn-AU", - "vmu-Latn": "vmu-Latn-AU", - "vmw": "vmw-Latn-MZ", - "vmw-Latn": "vmw-Latn-MZ", - "vmw-MZ": "vmw-Latn-MZ", - "vmx": "vmx-Latn-MX", - "vmx-Latn": "vmx-Latn-MX", - "vmx-MX": "vmx-Latn-MX", - "vmy": "vmy-Latn-MX", - "vmy-Latn": "vmy-Latn-MX", - "vmy-MX": "vmy-Latn-MX", - "vmz": "vmz-Latn-MX", - "vmz-Latn": "vmz-Latn-MX", - "vmz-MX": "vmz-Latn-MX", - "vnk": "vnk-Latn-SB", - "vnk-Latn": "vnk-Latn-SB", - "vnk-SB": "vnk-Latn-SB", - "vnm": "vnm-Latn-VU", - "vnm-Latn": "vnm-Latn-VU", - "vnm-VU": "vnm-Latn-VU", - "vnp": "vnp-Latn-VU", - "vnp-Latn": "vnp-Latn-VU", - "vnp-VU": "vnp-Latn-VU", - "vo": "vo-Latn-001", - "vo-001": "vo-Latn-001", - "vo-Latn": "vo-Latn-001", - "vor": "vor-Latn-NG", - "vor-Latn": "vor-Latn-NG", - "vor-NG": "vor-Latn-NG", - "vot": "vot-Latn-RU", - "vot-Latn": "vot-Latn-RU", - "vot-RU": "vot-Latn-RU", - "vra": "vra-Latn-VU", - "vra-Latn": "vra-Latn-VU", - "vra-VU": "vra-Latn-VU", - "vro": "vro-Latn-EE", - "vro-EE": "vro-Latn-EE", - "vro-Latn": "vro-Latn-EE", - "vrs": "vrs-Latn-SB", - "vrs-Latn": "vrs-Latn-SB", - "vrs-SB": "vrs-Latn-SB", - "vrt": "vrt-Latn-VU", - "vrt-Latn": "vrt-Latn-VU", - "vrt-VU": "vrt-Latn-VU", - "vto": "vto-Latn-ID", - "vto-ID": "vto-Latn-ID", - "vto-Latn": "vto-Latn-ID", - "vum": "vum-Latn-GA", - "vum-GA": "vum-Latn-GA", - "vum-Latn": "vum-Latn-GA", - "vun": "vun-Latn-TZ", - "vun-Latn": "vun-Latn-TZ", - "vun-TZ": "vun-Latn-TZ", - "vut": "vut-Latn-CM", - "vut-CM": "vut-Latn-CM", - "vut-Latn": "vut-Latn-CM", - "vwa": "vwa-Latn-CN", - "vwa-CN": "vwa-Latn-CN", - "vwa-Latn": "vwa-Latn-CN", - "wa": "wa-Latn-BE", - "wa-BE": "wa-Latn-BE", - "wa-Latn": "wa-Latn-BE", - "waa": "waa-Latn-US", - "waa-Latn": "waa-Latn-US", - "waa-US": "waa-Latn-US", - "wab": "wab-Latn-PG", - "wab-Latn": "wab-Latn-PG", - "wab-PG": "wab-Latn-PG", - "wac": "wac-Latn-US", - "wac-Latn": "wac-Latn-US", - "wac-US": "wac-Latn-US", - "wad": "wad-Latn-ID", - "wad-ID": "wad-Latn-ID", - "wad-Latn": "wad-Latn-ID", - "wae": "wae-Latn-CH", - "wae-CH": "wae-Latn-CH", - "wae-Latn": "wae-Latn-CH", - "waf": "waf-Latn-BR", - "waf-BR": "waf-Latn-BR", - "waf-Latn": "waf-Latn-BR", - "wag": "wag-Latn-PG", - "wag-Latn": "wag-Latn-PG", - "wag-PG": "wag-Latn-PG", - "wah": "wah-Latn-ID", - "wah-ID": "wah-Latn-ID", - "wah-Latn": "wah-Latn-ID", - "wai": "wai-Latn-ID", - "wai-ID": "wai-Latn-ID", - "wai-Latn": "wai-Latn-ID", - "waj": "waj-Latn-PG", - "waj-Latn": "waj-Latn-PG", - "waj-PG": "waj-Latn-PG", - "wal": "wal-Ethi-ET", - "wal-ET": "wal-Ethi-ET", - "wal-Ethi": "wal-Ethi-ET", - "wam": "wam-Latn-US", - "wam-Latn": "wam-Latn-US", - "wam-US": "wam-Latn-US", - "wan": "wan-Latn-CI", - "wan-CI": "wan-Latn-CI", - "wan-Latn": "wan-Latn-CI", - "wap": "wap-Latn-GY", - "wap-GY": "wap-Latn-GY", - "wap-Latn": "wap-Latn-GY", - "waq": "waq-Latn-AU", - "waq-AU": "waq-Latn-AU", - "waq-Latn": "waq-Latn-AU", - "war": "war-Latn-PH", - "war-Latn": "war-Latn-PH", - "war-PH": "war-Latn-PH", - "was": "was-Latn-US", - "was-Latn": "was-Latn-US", - "was-US": "was-Latn-US", - "wat": "wat-Latn-PG", - "wat-Latn": "wat-Latn-PG", - "wat-PG": "wat-Latn-PG", - "wau": "wau-Latn-BR", - "wau-BR": "wau-Latn-BR", - "wau-Latn": "wau-Latn-BR", - "wav": "wav-Latn-NG", - "wav-Latn": "wav-Latn-NG", - "wav-NG": "wav-Latn-NG", - "waw": "waw-Latn-BR", - "waw-BR": "waw-Latn-BR", - "waw-Latn": "waw-Latn-BR", - "wax": "wax-Latn-PG", - "wax-Latn": "wax-Latn-PG", - "wax-PG": "wax-Latn-PG", - "way": "way-Latn-SR", - "way-Latn": "way-Latn-SR", - "way-SR": "way-Latn-SR", - "waz": "waz-Latn-PG", - "waz-Latn": "waz-Latn-PG", - "waz-PG": "waz-Latn-PG", - "wba": "wba-Latn-VE", - "wba-Latn": "wba-Latn-VE", - "wba-VE": "wba-Latn-VE", - "wbb": "wbb-Latn-ID", - "wbb-ID": "wbb-Latn-ID", - "wbb-Latn": "wbb-Latn-ID", - "wbe": "wbe-Latn-ID", - "wbe-ID": "wbe-Latn-ID", - "wbe-Latn": "wbe-Latn-ID", - "wbf": "wbf-Latn-BF", - "wbf-BF": "wbf-Latn-BF", - "wbf-Latn": "wbf-Latn-BF", - "wbh": "wbh-Latn-TZ", - "wbh-Latn": "wbh-Latn-TZ", - "wbh-TZ": "wbh-Latn-TZ", - "wbi": "wbi-Latn-TZ", - "wbi-Latn": "wbi-Latn-TZ", - "wbi-TZ": "wbi-Latn-TZ", - "wbj": "wbj-Latn-TZ", - "wbj-Latn": "wbj-Latn-TZ", - "wbj-TZ": "wbj-Latn-TZ", - "wbk": "wbk-Arab-AF", - "wbk-AF": "wbk-Arab-AF", - "wbk-Arab": "wbk-Arab-AF", - "wbl": "wbl-Latn-PK", - "wbl-Latn": "wbl-Latn-PK", - "wbl-PK": "wbl-Latn-PK", - "wbm": "wbm-Latn-CN", - "wbm-CN": "wbm-Latn-CN", - "wbm-Latn": "wbm-Latn-CN", - "wbp": "wbp-Latn-AU", - "wbp-AU": "wbp-Latn-AU", - "wbp-Latn": "wbp-Latn-AU", - "wbq": "wbq-Telu-IN", - "wbq-IN": "wbq-Telu-IN", - "wbq-Telu": "wbq-Telu-IN", - "wbr": "wbr-Deva-IN", - "wbr-Deva": "wbr-Deva-IN", - "wbr-IN": "wbr-Deva-IN", - "wbt": "wbt-Latn-AU", - "wbt-AU": "wbt-Latn-AU", - "wbt-Latn": "wbt-Latn-AU", - "wbv": "wbv-Latn-AU", - "wbv-AU": "wbv-Latn-AU", - "wbv-Latn": "wbv-Latn-AU", - "wbw": "wbw-Latn-ID", - "wbw-ID": "wbw-Latn-ID", - "wbw-Latn": "wbw-Latn-ID", - "wca": "wca-Latn-BR", - "wca-BR": "wca-Latn-BR", - "wca-Latn": "wca-Latn-BR", - "wci": "wci-Latn-TG", - "wci-Latn": "wci-Latn-TG", - "wci-TG": "wci-Latn-TG", - "wdd": "wdd-Latn-GA", - "wdd-GA": "wdd-Latn-GA", - "wdd-Latn": "wdd-Latn-GA", - "wdg": "wdg-Latn-PG", - "wdg-Latn": "wdg-Latn-PG", - "wdg-PG": "wdg-Latn-PG", - "wdj": "wdj-Latn-AU", - "wdj-AU": "wdj-Latn-AU", - "wdj-Latn": "wdj-Latn-AU", - "wdk": "wdk-Latn-AU", - "wdk-AU": "wdk-Latn-AU", - "wdk-Latn": "wdk-Latn-AU", - "wdt": "wdt-Latn-CA", - "wdt-CA": "wdt-Latn-CA", - "wdt-Latn": "wdt-Latn-CA", - "wdu": "wdu-Latn-AU", - "wdu-AU": "wdu-Latn-AU", - "wdu-Latn": "wdu-Latn-AU", - "wdy": "wdy-Latn-AU", - "wdy-AU": "wdy-Latn-AU", - "wdy-Latn": "wdy-Latn-AU", - "wec": "wec-Latn-CI", - "wec-CI": "wec-Latn-CI", - "wec-Latn": "wec-Latn-CI", - "wed": "wed-Latn-PG", - "wed-Latn": "wed-Latn-PG", - "wed-PG": "wed-Latn-PG", - "weg": "weg-Latn-AU", - "weg-AU": "weg-Latn-AU", - "weg-Latn": "weg-Latn-AU", - "weh": "weh-Latn-CM", - "weh-CM": "weh-Latn-CM", - "weh-Latn": "weh-Latn-CM", - "wei": "wei-Latn-PG", - "wei-Latn": "wei-Latn-PG", - "wei-PG": "wei-Latn-PG", - "wem": "wem-Latn-BJ", - "wem-BJ": "wem-Latn-BJ", - "wem-Latn": "wem-Latn-BJ", - "weo": "weo-Latn-ID", - "weo-ID": "weo-Latn-ID", - "weo-Latn": "weo-Latn-ID", - "wep": "wep-Latn-DE", - "wep-DE": "wep-Latn-DE", - "wep-Latn": "wep-Latn-DE", - "wer": "wer-Latn-PG", - "wer-Latn": "wer-Latn-PG", - "wer-PG": "wer-Latn-PG", - "wes": "wes-Latn-CM", - "wes-CM": "wes-Latn-CM", - "wes-Latn": "wes-Latn-CM", - "wet": "wet-Latn-ID", - "wet-ID": "wet-Latn-ID", - "wet-Latn": "wet-Latn-ID", - "weu": "weu-Latn-MM", - "weu-Latn": "weu-Latn-MM", - "weu-MM": "weu-Latn-MM", - "wew": "wew-Latn-ID", - "wew-ID": "wew-Latn-ID", - "wew-Latn": "wew-Latn-ID", - "wfg": "wfg-Latn-ID", - "wfg-ID": "wfg-Latn-ID", - "wfg-Latn": "wfg-Latn-ID", - "wga": "wga-Latn-AU", - "wga-AU": "wga-Latn-AU", - "wga-Latn": "wga-Latn-AU", - "wgb": "wgb-Latn-PG", - "wgb-Latn": "wgb-Latn-PG", - "wgb-PG": "wgb-Latn-PG", - "wgg": "wgg-Latn-AU", - "wgg-AU": "wgg-Latn-AU", - "wgg-Latn": "wgg-Latn-AU", - "wgi": "wgi-Latn-PG", - "wgi-Latn": "wgi-Latn-PG", - "wgi-PG": "wgi-Latn-PG", - "wgo": "wgo-Latn-ID", - "wgo-ID": "wgo-Latn-ID", - "wgo-Latn": "wgo-Latn-ID", - "wgu": "wgu-Latn-AU", - "wgu-AU": "wgu-Latn-AU", - "wgu-Latn": "wgu-Latn-AU", - "wgy": "wgy-Latn-AU", - "wgy-AU": "wgy-Latn-AU", - "wgy-Latn": "wgy-Latn-AU", - "wha": "wha-Latn-ID", - "wha-ID": "wha-Latn-ID", - "wha-Latn": "wha-Latn-ID", - "whg": "whg-Latn-PG", - "whg-Latn": "whg-Latn-PG", - "whg-PG": "whg-Latn-PG", - "whk": "whk-Latn-ID", - "whk-ID": "whk-Latn-ID", - "whk-Latn": "whk-Latn-ID", - "whu": "whu-Latn-ID", - "whu-ID": "whu-Latn-ID", - "whu-Latn": "whu-Latn-ID", - "wib": "wib-Latn-BF", - "wib-BF": "wib-Latn-BF", - "wib-Latn": "wib-Latn-BF", - "wic": "wic-Latn-US", - "wic-Latn": "wic-Latn-US", - "wic-US": "wic-Latn-US", - "wie": "wie-Latn-AU", - "wie-AU": "wie-Latn-AU", - "wie-Latn": "wie-Latn-AU", - "wif": "wif-Latn-AU", - "wif-AU": "wif-Latn-AU", - "wif-Latn": "wif-Latn-AU", - "wig": "wig-Latn-AU", - "wig-AU": "wig-Latn-AU", - "wig-Latn": "wig-Latn-AU", - "wih": "wih-Latn-AU", - "wih-AU": "wih-Latn-AU", - "wih-Latn": "wih-Latn-AU", - "wii": "wii-Latn-PG", - "wii-Latn": "wii-Latn-PG", - "wii-PG": "wii-Latn-PG", - "wij": "wij-Latn-AU", - "wij-AU": "wij-Latn-AU", - "wij-Latn": "wij-Latn-AU", - "wik": "wik-Latn-AU", - "wik-AU": "wik-Latn-AU", - "wik-Latn": "wik-Latn-AU", - "wil": "wil-Latn-AU", - "wil-AU": "wil-Latn-AU", - "wil-Latn": "wil-Latn-AU", - "wim": "wim-Latn-AU", - "wim-AU": "wim-Latn-AU", - "wim-Latn": "wim-Latn-AU", - "win": "win-Latn-US", - "win-Latn": "win-Latn-US", - "win-US": "win-Latn-US", - "wir": "wir-Latn-BR", - "wir-BR": "wir-Latn-BR", - "wir-Latn": "wir-Latn-BR", - "wiu": "wiu-Latn-PG", - "wiu-Latn": "wiu-Latn-PG", - "wiu-PG": "wiu-Latn-PG", - "wiv": "wiv-Latn-PG", - "wiv-Latn": "wiv-Latn-PG", - "wiv-PG": "wiv-Latn-PG", - "wiy": "wiy-Latn-US", - "wiy-Latn": "wiy-Latn-US", - "wiy-US": "wiy-Latn-US", - "wja": "wja-Latn-NG", - "wja-Latn": "wja-Latn-NG", - "wja-NG": "wja-Latn-NG", - "wji": "wji-Latn-NG", - "wji-Latn": "wji-Latn-NG", - "wji-NG": "wji-Latn-NG", - "wka": "wka-Latn-TZ", - "wka-Latn": "wka-Latn-TZ", - "wka-TZ": "wka-Latn-TZ", - "wkd": "wkd-Latn-ID", - "wkd-ID": "wkd-Latn-ID", - "wkd-Latn": "wkd-Latn-ID", - "wkr": "wkr-Latn-AU", - "wkr-AU": "wkr-Latn-AU", - "wkr-Latn": "wkr-Latn-AU", - "wkw": "wkw-Latn-AU", - "wkw-AU": "wkw-Latn-AU", - "wkw-Latn": "wkw-Latn-AU", - "wky": "wky-Latn-AU", - "wky-AU": "wky-Latn-AU", - "wky-Latn": "wky-Latn-AU", - "wla": "wla-Latn-PG", - "wla-Latn": "wla-Latn-PG", - "wla-PG": "wla-Latn-PG", - "wle": "wle-Ethi-ET", - "wle-ET": "wle-Ethi-ET", - "wle-Ethi": "wle-Ethi-ET", - "wlg": "wlg-Latn-AU", - "wlg-AU": "wlg-Latn-AU", - "wlg-Latn": "wlg-Latn-AU", - "wlh": "wlh-Latn-TL", - "wlh-Latn": "wlh-Latn-TL", - "wlh-TL": "wlh-Latn-TL", - "wli": "wli-Latn-ID", - "wli-ID": "wli-Latn-ID", - "wli-Latn": "wli-Latn-ID", - "wlm": "wlm-Latn-GB", - "wlm-GB": "wlm-Latn-GB", - "wlm-Latn": "wlm-Latn-GB", - "wlo": "wlo-Arab-ID", - "wlo-Arab": "wlo-Arab-ID", - "wlo-ID": "wlo-Arab-ID", - "wlr": "wlr-Latn-VU", - "wlr-Latn": "wlr-Latn-VU", - "wlr-VU": "wlr-Latn-VU", - "wls": "wls-Latn-WF", - "wls-Latn": "wls-Latn-WF", - "wls-WF": "wls-Latn-WF", - "wlu": "wlu-Latn-AU", - "wlu-AU": "wlu-Latn-AU", - "wlu-Latn": "wlu-Latn-AU", - "wlv": "wlv-Latn-AR", - "wlv-AR": "wlv-Latn-AR", - "wlv-Latn": "wlv-Latn-AR", - "wlw": "wlw-Latn-ID", - "wlw-ID": "wlw-Latn-ID", - "wlw-Latn": "wlw-Latn-ID", - "wlx": "wlx-Latn-GH", - "wlx-GH": "wlx-Latn-GH", - "wlx-Latn": "wlx-Latn-GH", - "wma": "wma-Latn-NG", - "wma-Latn": "wma-Latn-NG", - "wma-NG": "wma-Latn-NG", - "wmb": "wmb-Latn-AU", - "wmb-AU": "wmb-Latn-AU", - "wmb-Latn": "wmb-Latn-AU", - "wmc": "wmc-Latn-PG", - "wmc-Latn": "wmc-Latn-PG", - "wmc-PG": "wmc-Latn-PG", - "wmd": "wmd-Latn-BR", - "wmd-BR": "wmd-Latn-BR", - "wmd-Latn": "wmd-Latn-BR", - "wme": "wme-Deva-NP", - "wme-Deva": "wme-Deva-NP", - "wme-NP": "wme-Deva-NP", - "wmh": "wmh-Latn-TL", - "wmh-Latn": "wmh-Latn-TL", - "wmh-TL": "wmh-Latn-TL", - "wmi": "wmi-Latn-AU", - "wmi-AU": "wmi-Latn-AU", - "wmi-Latn": "wmi-Latn-AU", - "wmm": "wmm-Latn-ID", - "wmm-ID": "wmm-Latn-ID", - "wmm-Latn": "wmm-Latn-ID", - "wmn": "wmn-Latn-NC", - "wmn-Latn": "wmn-Latn-NC", - "wmn-NC": "wmn-Latn-NC", - "wmo": "wmo-Latn-PG", - "wmo-Latn": "wmo-Latn-PG", - "wmo-PG": "wmo-Latn-PG", - "wms": "wms-Latn-ID", - "wms-ID": "wms-Latn-ID", - "wms-Latn": "wms-Latn-ID", - "wmt": "wmt-Latn-AU", - "wmt-AU": "wmt-Latn-AU", - "wmt-Latn": "wmt-Latn-AU", - "wmw": "wmw-Latn-MZ", - "wmw-Latn": "wmw-Latn-MZ", - "wmw-MZ": "wmw-Latn-MZ", - "wmx": "wmx-Latn-PG", - "wmx-Latn": "wmx-Latn-PG", - "wmx-PG": "wmx-Latn-PG", - "wnb": "wnb-Latn-PG", - "wnb-Latn": "wnb-Latn-PG", - "wnb-PG": "wnb-Latn-PG", - "wnc": "wnc-Latn-PG", - "wnc-Latn": "wnc-Latn-PG", - "wnc-PG": "wnc-Latn-PG", - "wnd": "wnd-Latn-AU", - "wnd-AU": "wnd-Latn-AU", - "wnd-Latn": "wnd-Latn-AU", - "wne": "wne-Arab-PK", - "wne-Arab": "wne-Arab-PK", - "wne-PK": "wne-Arab-PK", - "wng": "wng-Latn-ID", - "wng-ID": "wng-Latn-ID", - "wng-Latn": "wng-Latn-ID", - "wni": "wni-Arab-KM", - "wni-Arab": "wni-Arab-KM", - "wni-KM": "wni-Arab-KM", - "wnk": "wnk-Latn-ID", - "wnk-ID": "wnk-Latn-ID", - "wnk-Latn": "wnk-Latn-ID", - "wnm": "wnm-Latn-AU", - "wnm-AU": "wnm-Latn-AU", - "wnm-Latn": "wnm-Latn-AU", - "wnn": "wnn-Latn-AU", - "wnn-AU": "wnn-Latn-AU", - "wnn-Latn": "wnn-Latn-AU", - "wno": "wno-Latn-ID", - "wno-ID": "wno-Latn-ID", - "wno-Latn": "wno-Latn-ID", - "wnp": "wnp-Latn-PG", - "wnp-Latn": "wnp-Latn-PG", - "wnp-PG": "wnp-Latn-PG", - "wnu": "wnu-Latn-PG", - "wnu-Latn": "wnu-Latn-PG", - "wnu-PG": "wnu-Latn-PG", - "wnw": "wnw-Latn-US", - "wnw-Latn": "wnw-Latn-US", - "wnw-US": "wnw-Latn-US", - "wny": "wny-Latn-AU", - "wny-AU": "wny-Latn-AU", - "wny-Latn": "wny-Latn-AU", - "wo": "wo-Latn-SN", - "wo-Gara": "wo-Gara-SN", - "wo-Latn": "wo-Latn-SN", - "wo-SN": "wo-Latn-SN", - "woa": "woa-Latn-AU", - "woa-AU": "woa-Latn-AU", - "woa-Latn": "woa-Latn-AU", - "wob": "wob-Latn-CI", - "wob-CI": "wob-Latn-CI", - "wob-Latn": "wob-Latn-CI", - "woc": "woc-Latn-PG", - "woc-Latn": "woc-Latn-PG", - "woc-PG": "woc-Latn-PG", - "wod": "wod-Latn-ID", - "wod-ID": "wod-Latn-ID", - "wod-Latn": "wod-Latn-ID", - "woe": "woe-Latn-FM", - "woe-FM": "woe-Latn-FM", - "woe-Latn": "woe-Latn-FM", - "wof": "wof-Latn-GM", - "wof-GM": "wof-Latn-GM", - "wof-Latn": "wof-Latn-GM", - "wog": "wog-Latn-PG", - "wog-Latn": "wog-Latn-PG", - "wog-PG": "wog-Latn-PG", - "woi": "woi-Latn-ID", - "woi-ID": "woi-Latn-ID", - "woi-Latn": "woi-Latn-ID", - "wok": "wok-Latn-CM", - "wok-CM": "wok-Latn-CM", - "wok-Latn": "wok-Latn-CM", - "wom": "wom-Latn-NG", - "wom-Latn": "wom-Latn-NG", - "wom-NG": "wom-Latn-NG", - "won": "won-Latn-CD", - "won-CD": "won-Latn-CD", - "won-Latn": "won-Latn-CD", - "woo": "woo-Latn-ID", - "woo-ID": "woo-Latn-ID", - "woo-Latn": "woo-Latn-ID", - "wor": "wor-Latn-ID", - "wor-ID": "wor-Latn-ID", - "wor-Latn": "wor-Latn-ID", - "wos": "wos-Latn-PG", - "wos-Latn": "wos-Latn-PG", - "wos-PG": "wos-Latn-PG", - "wow": "wow-Latn-ID", - "wow-ID": "wow-Latn-ID", - "wow-Latn": "wow-Latn-ID", - "wpc": "wpc-Latn-VE", - "wpc-Latn": "wpc-Latn-VE", - "wpc-VE": "wpc-Latn-VE", - "wrb": "wrb-Latn-AU", - "wrb-AU": "wrb-Latn-AU", - "wrb-Latn": "wrb-Latn-AU", - "wrg": "wrg-Latn-AU", - "wrg-AU": "wrg-Latn-AU", - "wrg-Latn": "wrg-Latn-AU", - "wrh": "wrh-Latn-AU", - "wrh-AU": "wrh-Latn-AU", - "wrh-Latn": "wrh-Latn-AU", - "wri": "wri-Latn-AU", - "wri-AU": "wri-Latn-AU", - "wri-Latn": "wri-Latn-AU", - "wrk": "wrk-Latn-AU", - "wrk-AU": "wrk-Latn-AU", - "wrk-Latn": "wrk-Latn-AU", - "wrl": "wrl-Latn-AU", - "wrl-AU": "wrl-Latn-AU", - "wrl-Latn": "wrl-Latn-AU", - "wrm": "wrm-Latn-AU", - "wrm-AU": "wrm-Latn-AU", - "wrm-Latn": "wrm-Latn-AU", - "wro": "wro-Latn-AU", - "wro-AU": "wro-Latn-AU", - "wro-Latn": "wro-Latn-AU", - "wrp": "wrp-Latn-ID", - "wrp-ID": "wrp-Latn-ID", - "wrp-Latn": "wrp-Latn-ID", - "wrr": "wrr-Latn-AU", - "wrr-AU": "wrr-Latn-AU", - "wrr-Latn": "wrr-Latn-AU", - "wrs": "wrs-Latn-PG", - "wrs-Latn": "wrs-Latn-PG", - "wrs-PG": "wrs-Latn-PG", - "wru": "wru-Latn-ID", - "wru-ID": "wru-Latn-ID", - "wru-Latn": "wru-Latn-ID", - "wrv": "wrv-Latn-PG", - "wrv-Latn": "wrv-Latn-PG", - "wrv-PG": "wrv-Latn-PG", - "wrw": "wrw-Latn-AU", - "wrw-AU": "wrw-Latn-AU", - "wrw-Latn": "wrw-Latn-AU", - "wrx": "wrx-Latn-ID", - "wrx-ID": "wrx-Latn-ID", - "wrx-Latn": "wrx-Latn-ID", - "wrz": "wrz-Latn-AU", - "wrz-AU": "wrz-Latn-AU", - "wrz-Latn": "wrz-Latn-AU", - "wsa": "wsa-Latn-ID", - "wsa-ID": "wsa-Latn-ID", - "wsa-Latn": "wsa-Latn-ID", - "wsg": "wsg-Gong-IN", - "wsg-Gong": "wsg-Gong-IN", - "wsg-IN": "wsg-Gong-IN", - "wsi": "wsi-Latn-VU", - "wsi-Latn": "wsi-Latn-VU", - "wsi-VU": "wsi-Latn-VU", - "wsk": "wsk-Latn-PG", - "wsk-Latn": "wsk-Latn-PG", - "wsk-PG": "wsk-Latn-PG", - "wsr": "wsr-Latn-PG", - "wsr-Latn": "wsr-Latn-PG", - "wsr-PG": "wsr-Latn-PG", - "wss": "wss-Latn-GH", - "wss-GH": "wss-Latn-GH", - "wss-Latn": "wss-Latn-GH", - "wsu": "wsu-Latn-BR", - "wsu-BR": "wsu-Latn-BR", - "wsu-Latn": "wsu-Latn-BR", - "wsv": "wsv-Arab-AF", - "wsv-AF": "wsv-Arab-AF", - "wsv-Arab": "wsv-Arab-AF", - "wtb": "wtb-Latn-TZ", - "wtb-Latn": "wtb-Latn-TZ", - "wtb-TZ": "wtb-Latn-TZ", - "wtf": "wtf-Latn-PG", - "wtf-Latn": "wtf-Latn-PG", - "wtf-PG": "wtf-Latn-PG", - "wth": "wth-Latn-AU", - "wth-AU": "wth-Latn-AU", - "wth-Latn": "wth-Latn-AU", - "wti": "wti-Latn-ET", - "wti-ET": "wti-Latn-ET", - "wti-Latn": "wti-Latn-ET", - "wtk": "wtk-Latn-PG", - "wtk-Latn": "wtk-Latn-PG", - "wtk-PG": "wtk-Latn-PG", - "wtm": "wtm-Deva-IN", - "wtm-Deva": "wtm-Deva-IN", - "wtm-IN": "wtm-Deva-IN", - "wtw": "wtw-Latn-ID", - "wtw-ID": "wtw-Latn-ID", - "wtw-Latn": "wtw-Latn-ID", - "wua": "wua-Latn-AU", - "wua-AU": "wua-Latn-AU", - "wua-Latn": "wua-Latn-AU", - "wub": "wub-Latn-AU", - "wub-AU": "wub-Latn-AU", - "wub-Latn": "wub-Latn-AU", - "wud": "wud-Latn-TG", - "wud-Latn": "wud-Latn-TG", - "wud-TG": "wud-Latn-TG", - "wul": "wul-Latn-ID", - "wul-ID": "wul-Latn-ID", - "wul-Latn": "wul-Latn-ID", - "wum": "wum-Latn-GA", - "wum-GA": "wum-Latn-GA", - "wum-Latn": "wum-Latn-GA", - "wun": "wun-Latn-TZ", - "wun-Latn": "wun-Latn-TZ", - "wun-TZ": "wun-Latn-TZ", - "wur": "wur-Latn-AU", - "wur-AU": "wur-Latn-AU", - "wur-Latn": "wur-Latn-AU", - "wut": "wut-Latn-PG", - "wut-Latn": "wut-Latn-PG", - "wut-PG": "wut-Latn-PG", - "wuu": "wuu-Hans-CN", - "wuu-CN": "wuu-Hans-CN", - "wuu-Hans": "wuu-Hans-CN", - "wuv": "wuv-Latn-PG", - "wuv-Latn": "wuv-Latn-PG", - "wuv-PG": "wuv-Latn-PG", - "wux": "wux-Latn-AU", - "wux-AU": "wux-Latn-AU", - "wux-Latn": "wux-Latn-AU", - "wuy": "wuy-Latn-ID", - "wuy-ID": "wuy-Latn-ID", - "wuy-Latn": "wuy-Latn-ID", - "wwa": "wwa-Latn-BJ", - "wwa-BJ": "wwa-Latn-BJ", - "wwa-Latn": "wwa-Latn-BJ", - "wwb": "wwb-Latn-AU", - "wwb-AU": "wwb-Latn-AU", - "wwb-Latn": "wwb-Latn-AU", - "wwo": "wwo-Latn-VU", - "wwo-Latn": "wwo-Latn-VU", - "wwo-VU": "wwo-Latn-VU", - "wwr": "wwr-Latn-AU", - "wwr-AU": "wwr-Latn-AU", - "wwr-Latn": "wwr-Latn-AU", - "www": "www-Latn-CM", - "www-CM": "www-Latn-CM", - "www-Latn": "www-Latn-CM", - "wxw": "wxw-Latn-AU", - "wxw-AU": "wxw-Latn-AU", - "wxw-Latn": "wxw-Latn-AU", - "wyb": "wyb-Latn-AU", - "wyb-AU": "wyb-Latn-AU", - "wyb-Latn": "wyb-Latn-AU", - "wyi": "wyi-Latn-AU", - "wyi-AU": "wyi-Latn-AU", - "wyi-Latn": "wyi-Latn-AU", - "wym": "wym-Latn-PL", - "wym-Latn": "wym-Latn-PL", - "wym-PL": "wym-Latn-PL", - "wyn": "wyn-Latn-US", - "wyn-Latn": "wyn-Latn-US", - "wyn-US": "wyn-Latn-US", - "wyr": "wyr-Latn-BR", - "wyr-BR": "wyr-Latn-BR", - "wyr-Latn": "wyr-Latn-BR", - "wyy": "wyy-Latn-FJ", - "wyy-FJ": "wyy-Latn-FJ", - "wyy-Latn": "wyy-Latn-FJ", - "xaa": "xaa-Latn-ES", - "xaa-ES": "xaa-Latn-ES", - "xaa-Latn": "xaa-Latn-ES", - "xab": "xab-Latn-NG", - "xab-Latn": "xab-Latn-NG", - "xab-NG": "xab-Latn-NG", - "xag": "xag-Aghb-AZ", - "xag-AZ": "xag-Aghb-AZ", - "xag-Aghb": "xag-Aghb-AZ", - "xai": "xai-Latn-BR", - "xai-BR": "xai-Latn-BR", - "xai-Latn": "xai-Latn-BR", - "xaj": "xaj-Latn-BR", - "xaj-BR": "xaj-Latn-BR", - "xaj-Latn": "xaj-Latn-BR", - "xak": "xak-Latn-VE", - "xak-Latn": "xak-Latn-VE", - "xak-VE": "xak-Latn-VE", - "xal": "xal-Cyrl-RU", - "xal-Cyrl": "xal-Cyrl-RU", - "xal-RU": "xal-Cyrl-RU", - "xam": "xam-Latn-ZA", - "xam-Latn": "xam-Latn-ZA", - "xam-ZA": "xam-Latn-ZA", - "xan": "xan-Ethi-ET", - "xan-ET": "xan-Ethi-ET", - "xan-Ethi": "xan-Ethi-ET", - "xao": "xao-Latn-VN", - "xao-Latn": "xao-Latn-VN", - "xao-VN": "xao-Latn-VN", - "xar": "xar-Latn-PG", - "xar-Latn": "xar-Latn-PG", - "xar-PG": "xar-Latn-PG", - "xas": "xas-Cyrl-RU", - "xas-Cyrl": "xas-Cyrl-RU", - "xas-RU": "xas-Cyrl-RU", - "xat": "xat-Latn-BR", - "xat-BR": "xat-Latn-BR", - "xat-Latn": "xat-Latn-BR", - "xau": "xau-Latn-ID", - "xau-ID": "xau-Latn-ID", - "xau-Latn": "xau-Latn-ID", - "xav": "xav-Latn-BR", - "xav-BR": "xav-Latn-BR", - "xav-Latn": "xav-Latn-BR", - "xaw": "xaw-Latn-US", - "xaw-Latn": "xaw-Latn-US", - "xaw-US": "xaw-Latn-US", - "xay": "xay-Latn-ID", - "xay-ID": "xay-Latn-ID", - "xay-Latn": "xay-Latn-ID", - "xbb": "xbb-Latn-AU", - "xbb-AU": "xbb-Latn-AU", - "xbb-Latn": "xbb-Latn-AU", - "xbd": "xbd-Latn-AU", - "xbd-AU": "xbd-Latn-AU", - "xbd-Latn": "xbd-Latn-AU", - "xbe": "xbe-Latn-AU", - "xbe-AU": "xbe-Latn-AU", - "xbe-Latn": "xbe-Latn-AU", - "xbg": "xbg-Latn-AU", - "xbg-AU": "xbg-Latn-AU", - "xbg-Latn": "xbg-Latn-AU", - "xbi": "xbi-Latn-PG", - "xbi-Latn": "xbi-Latn-PG", - "xbi-PG": "xbi-Latn-PG", - "xbj": "xbj-Latn-AU", - "xbj-AU": "xbj-Latn-AU", - "xbj-Latn": "xbj-Latn-AU", - "xbm": "xbm-Latn-FR", - "xbm-FR": "xbm-Latn-FR", - "xbm-Latn": "xbm-Latn-FR", - "xbn": "xbn-Latn-MY", - "xbn-Latn": "xbn-Latn-MY", - "xbn-MY": "xbn-Latn-MY", - "xbp": "xbp-Latn-AU", - "xbp-AU": "xbp-Latn-AU", - "xbp-Latn": "xbp-Latn-AU", - "xbr": "xbr-Latn-ID", - "xbr-ID": "xbr-Latn-ID", - "xbr-Latn": "xbr-Latn-ID", - "xbw": "xbw-Latn-BR", - "xbw-BR": "xbw-Latn-BR", - "xbw-Latn": "xbw-Latn-BR", - "xby": "xby-Latn-AU", - "xby-AU": "xby-Latn-AU", - "xby-Latn": "xby-Latn-AU", - "xch": "xch-Latn-US", - "xch-Latn": "xch-Latn-US", - "xch-US": "xch-Latn-US", - "xco": "xco-Chrs-UZ", - "xco-Chrs": "xco-Chrs-UZ", - "xco-UZ": "xco-Chrs-UZ", - "xcr": "xcr-Cari-TR", - "xcr-Cari": "xcr-Cari-TR", - "xcr-TR": "xcr-Cari-TR", - "xda": "xda-Latn-AU", - "xda-AU": "xda-Latn-AU", - "xda-Latn": "xda-Latn-AU", - "xdk": "xdk-Latn-AU", - "xdk-AU": "xdk-Latn-AU", - "xdk-Latn": "xdk-Latn-AU", - "xdo": "xdo-Latn-AO", - "xdo-AO": "xdo-Latn-AO", - "xdo-Latn": "xdo-Latn-AO", - "xdq": "xdq-Cyrl-RU", - "xdq-Cyrl": "xdq-Cyrl-RU", - "xdq-RU": "xdq-Cyrl-RU", - "xdy": "xdy-Latn-ID", - "xdy-ID": "xdy-Latn-ID", - "xdy-Latn": "xdy-Latn-ID", - "xed": "xed-Latn-CM", - "xed-CM": "xed-Latn-CM", - "xed-Latn": "xed-Latn-CM", - "xeg": "xeg-Latn-ZA", - "xeg-Latn": "xeg-Latn-ZA", - "xeg-ZA": "xeg-Latn-ZA", - "xem": "xem-Latn-ID", - "xem-ID": "xem-Latn-ID", - "xem-Latn": "xem-Latn-ID", - "xer": "xer-Latn-BR", - "xer-BR": "xer-Latn-BR", - "xer-Latn": "xer-Latn-BR", - "xes": "xes-Latn-PG", - "xes-Latn": "xes-Latn-PG", - "xes-PG": "xes-Latn-PG", - "xet": "xet-Latn-BR", - "xet-BR": "xet-Latn-BR", - "xet-Latn": "xet-Latn-BR", - "xeu": "xeu-Latn-PG", - "xeu-Latn": "xeu-Latn-PG", - "xeu-PG": "xeu-Latn-PG", - "xgb": "xgb-Latn-CI", - "xgb-CI": "xgb-Latn-CI", - "xgb-Latn": "xgb-Latn-CI", - "xgd": "xgd-Latn-AU", - "xgd-AU": "xgd-Latn-AU", - "xgd-Latn": "xgd-Latn-AU", - "xgg": "xgg-Latn-AU", - "xgg-AU": "xgg-Latn-AU", - "xgg-Latn": "xgg-Latn-AU", - "xgi": "xgi-Latn-AU", - "xgi-AU": "xgi-Latn-AU", - "xgi-Latn": "xgi-Latn-AU", - "xgm": "xgm-Latn-AU", - "xgm-AU": "xgm-Latn-AU", - "xgm-Latn": "xgm-Latn-AU", - "xgu": "xgu-Latn-AU", - "xgu-AU": "xgu-Latn-AU", - "xgu-Latn": "xgu-Latn-AU", - "xgw": "xgw-Latn-AU", - "xgw-AU": "xgw-Latn-AU", - "xgw-Latn": "xgw-Latn-AU", - "xh": "xh-Latn-ZA", - "xh-Latn": "xh-Latn-ZA", - "xh-ZA": "xh-Latn-ZA", - "xhe": "xhe-Arab-PK", - "xhe-Arab": "xhe-Arab-PK", - "xhe-PK": "xhe-Arab-PK", - "xhm": "xhm-Khmr-KH", - "xhm-KH": "xhm-Khmr-KH", - "xhm-Khmr": "xhm-Khmr-KH", - "xhv": "xhv-Latn-VN", - "xhv-Latn": "xhv-Latn-VN", - "xhv-VN": "xhv-Latn-VN", - "xii": "xii-Latn-ZA", - "xii-Latn": "xii-Latn-ZA", - "xii-ZA": "xii-Latn-ZA", - "xin": "xin-Latn-GT", - "xin-GT": "xin-Latn-GT", - "xin-Latn": "xin-Latn-GT", - "xir": "xir-Latn-BR", - "xir-BR": "xir-Latn-BR", - "xir-Latn": "xir-Latn-BR", - "xis": "xis-Orya-IN", - "xis-IN": "xis-Orya-IN", - "xis-Orya": "xis-Orya-IN", - "xiy": "xiy-Latn-BR", - "xiy-BR": "xiy-Latn-BR", - "xiy-Latn": "xiy-Latn-BR", - "xjb": "xjb-Latn-AU", - "xjb-AU": "xjb-Latn-AU", - "xjb-Latn": "xjb-Latn-AU", - "xjt": "xjt-Latn-AU", - "xjt-AU": "xjt-Latn-AU", - "xjt-Latn": "xjt-Latn-AU", - "xka": "xka-Arab-PK", - "xka-Arab": "xka-Arab-PK", - "xka-PK": "xka-Arab-PK", - "xkb": "xkb-Latn-BJ", - "xkb-BJ": "xkb-Latn-BJ", - "xkb-Latn": "xkb-Latn-BJ", - "xkc": "xkc-Arab-IR", - "xkc-Arab": "xkc-Arab-IR", - "xkc-IR": "xkc-Arab-IR", - "xkd": "xkd-Latn-ID", - "xkd-ID": "xkd-Latn-ID", - "xkd-Latn": "xkd-Latn-ID", - "xke": "xke-Latn-ID", - "xke-ID": "xke-Latn-ID", - "xke-Latn": "xke-Latn-ID", - "xkf": "xkf-Tibt-BT", - "xkf-BT": "xkf-Tibt-BT", - "xkf-Tibt": "xkf-Tibt-BT", - "xkg": "xkg-Latn-ML", - "xkg-Latn": "xkg-Latn-ML", - "xkg-ML": "xkg-Latn-ML", - "xkj": "xkj-Arab-IR", - "xkj-Arab": "xkj-Arab-IR", - "xkj-IR": "xkj-Arab-IR", - "xkl": "xkl-Latn-ID", - "xkl-ID": "xkl-Latn-ID", - "xkl-Latn": "xkl-Latn-ID", - "xkn": "xkn-Latn-ID", - "xkn-ID": "xkn-Latn-ID", - "xkn-Latn": "xkn-Latn-ID", - "xkp": "xkp-Arab-IR", - "xkp-Arab": "xkp-Arab-IR", - "xkp-IR": "xkp-Arab-IR", - "xkq": "xkq-Latn-ID", - "xkq-ID": "xkq-Latn-ID", - "xkq-Latn": "xkq-Latn-ID", - "xkr": "xkr-Latn-BR", - "xkr-BR": "xkr-Latn-BR", - "xkr-Latn": "xkr-Latn-BR", - "xks": "xks-Latn-ID", - "xks-ID": "xks-Latn-ID", - "xks-Latn": "xks-Latn-ID", - "xkt": "xkt-Latn-GH", - "xkt-GH": "xkt-Latn-GH", - "xkt-Latn": "xkt-Latn-GH", - "xku": "xku-Latn-CG", - "xku-CG": "xku-Latn-CG", - "xku-Latn": "xku-Latn-CG", - "xkv": "xkv-Latn-BW", - "xkv-BW": "xkv-Latn-BW", - "xkv-Latn": "xkv-Latn-BW", - "xkw": "xkw-Latn-ID", - "xkw-ID": "xkw-Latn-ID", - "xkw-Latn": "xkw-Latn-ID", - "xkx": "xkx-Latn-PG", - "xkx-Latn": "xkx-Latn-PG", - "xkx-PG": "xkx-Latn-PG", - "xky": "xky-Latn-MY", - "xky-Latn": "xky-Latn-MY", - "xky-MY": "xky-Latn-MY", - "xkz": "xkz-Latn-BT", - "xkz-BT": "xkz-Latn-BT", - "xkz-Latn": "xkz-Latn-BT", - "xla": "xla-Latn-PG", - "xla-Latn": "xla-Latn-PG", - "xla-PG": "xla-Latn-PG", - "xlc": "xlc-Lyci-TR", - "xlc-Lyci": "xlc-Lyci-TR", - "xlc-TR": "xlc-Lyci-TR", - "xld": "xld-Lydi-TR", - "xld-Lydi": "xld-Lydi-TR", - "xld-TR": "xld-Lydi-TR", - "xly": "xly-Elym-IR", - "xly-Elym": "xly-Elym-IR", - "xly-IR": "xly-Elym-IR", - "xma": "xma-Latn-SO", - "xma-Latn": "xma-Latn-SO", - "xma-SO": "xma-Latn-SO", - "xmb": "xmb-Latn-CM", - "xmb-CM": "xmb-Latn-CM", - "xmb-Latn": "xmb-Latn-CM", - "xmc": "xmc-Latn-MZ", - "xmc-Latn": "xmc-Latn-MZ", - "xmc-MZ": "xmc-Latn-MZ", - "xmd": "xmd-Latn-CM", - "xmd-CM": "xmd-Latn-CM", - "xmd-Latn": "xmd-Latn-CM", - "xmf": "xmf-Geor-GE", - "xmf-GE": "xmf-Geor-GE", - "xmf-Geor": "xmf-Geor-GE", - "xmg": "xmg-Latn-CM", - "xmg-CM": "xmg-Latn-CM", - "xmg-Latn": "xmg-Latn-CM", - "xmh": "xmh-Latn-AU", - "xmh-AU": "xmh-Latn-AU", - "xmh-Latn": "xmh-Latn-AU", - "xmj": "xmj-Latn-CM", - "xmj-CM": "xmj-Latn-CM", - "xmj-Latn": "xmj-Latn-CM", - "xmm": "xmm-Latn-ID", - "xmm-ID": "xmm-Latn-ID", - "xmm-Latn": "xmm-Latn-ID", - "xmn": "xmn-Mani-CN", - "xmn-CN": "xmn-Mani-CN", - "xmn-Mani": "xmn-Mani-CN", - "xmo": "xmo-Latn-BR", - "xmo-BR": "xmo-Latn-BR", - "xmo-Latn": "xmo-Latn-BR", - "xmp": "xmp-Latn-AU", - "xmp-AU": "xmp-Latn-AU", - "xmp-Latn": "xmp-Latn-AU", - "xmq": "xmq-Latn-AU", - "xmq-AU": "xmq-Latn-AU", - "xmq-Latn": "xmq-Latn-AU", - "xmr": "xmr-Merc-SD", - "xmr-Merc": "xmr-Merc-SD", - "xmr-Mero": "xmr-Mero-SD", - "xmr-SD": "xmr-Merc-SD", - "xmt": "xmt-Latn-ID", - "xmt-ID": "xmt-Latn-ID", - "xmt-Latn": "xmt-Latn-ID", - "xmu": "xmu-Latn-AU", - "xmu-AU": "xmu-Latn-AU", - "xmu-Latn": "xmu-Latn-AU", - "xmv": "xmv-Latn-MG", - "xmv-Latn": "xmv-Latn-MG", - "xmv-MG": "xmv-Latn-MG", - "xmw": "xmw-Latn-MG", - "xmw-Latn": "xmw-Latn-MG", - "xmw-MG": "xmw-Latn-MG", - "xmx": "xmx-Latn-ID", - "xmx-ID": "xmx-Latn-ID", - "xmx-Latn": "xmx-Latn-ID", - "xmy": "xmy-Latn-AU", - "xmy-AU": "xmy-Latn-AU", - "xmy-Latn": "xmy-Latn-AU", - "xmz": "xmz-Latn-ID", - "xmz-ID": "xmz-Latn-ID", - "xmz-Latn": "xmz-Latn-ID", - "xna": "xna-Narb-SA", - "xna-Narb": "xna-Narb-SA", - "xna-SA": "xna-Narb-SA", - "xnb": "xnb-Latn-TW", - "xnb-Latn": "xnb-Latn-TW", - "xnb-TW": "xnb-Latn-TW", - "xni": "xni-Latn-AU", - "xni-AU": "xni-Latn-AU", - "xni-Latn": "xni-Latn-AU", - "xnj": "xnj-Latn-TZ", - "xnj-Latn": "xnj-Latn-TZ", - "xnj-TZ": "xnj-Latn-TZ", - "xnk": "xnk-Latn-AU", - "xnk-AU": "xnk-Latn-AU", - "xnk-Latn": "xnk-Latn-AU", - "xnm": "xnm-Latn-AU", - "xnm-AU": "xnm-Latn-AU", - "xnm-Latn": "xnm-Latn-AU", - "xnn": "xnn-Latn-PH", - "xnn-Latn": "xnn-Latn-PH", - "xnn-PH": "xnn-Latn-PH", - "xnq": "xnq-Latn-MZ", - "xnq-Latn": "xnq-Latn-MZ", - "xnq-MZ": "xnq-Latn-MZ", - "xnr": "xnr-Deva-IN", - "xnr-Deva": "xnr-Deva-IN", - "xnr-IN": "xnr-Deva-IN", - "xnt": "xnt-Latn-US", - "xnt-Latn": "xnt-Latn-US", - "xnt-US": "xnt-Latn-US", - "xnu": "xnu-Latn-AU", - "xnu-AU": "xnu-Latn-AU", - "xnu-Latn": "xnu-Latn-AU", - "xny": "xny-Latn-AU", - "xny-AU": "xny-Latn-AU", - "xny-Latn": "xny-Latn-AU", - "xnz": "xnz-Latn-EG", - "xnz-EG": "xnz-Latn-EG", - "xnz-Latn": "xnz-Latn-EG", - "xoc": "xoc-Latn-NG", - "xoc-Latn": "xoc-Latn-NG", - "xoc-NG": "xoc-Latn-NG", - "xod": "xod-Latn-ID", - "xod-ID": "xod-Latn-ID", - "xod-Latn": "xod-Latn-ID", - "xog": "xog-Latn-UG", - "xog-Latn": "xog-Latn-UG", - "xog-UG": "xog-Latn-UG", - "xoi": "xoi-Latn-PG", - "xoi-Latn": "xoi-Latn-PG", - "xoi-PG": "xoi-Latn-PG", - "xok": "xok-Latn-BR", - "xok-BR": "xok-Latn-BR", - "xok-Latn": "xok-Latn-BR", - "xom": "xom-Latn-SD", - "xom-Latn": "xom-Latn-SD", - "xom-SD": "xom-Latn-SD", - "xon": "xon-Latn-GH", - "xon-GH": "xon-Latn-GH", - "xon-Latn": "xon-Latn-GH", - "xoo": "xoo-Latn-BR", - "xoo-BR": "xoo-Latn-BR", - "xoo-Latn": "xoo-Latn-BR", - "xop": "xop-Latn-PG", - "xop-Latn": "xop-Latn-PG", - "xop-PG": "xop-Latn-PG", - "xor": "xor-Latn-BR", - "xor-BR": "xor-Latn-BR", - "xor-Latn": "xor-Latn-BR", - "xow": "xow-Latn-PG", - "xow-Latn": "xow-Latn-PG", - "xow-PG": "xow-Latn-PG", - "xpa": "xpa-Latn-AU", - "xpa-AU": "xpa-Latn-AU", - "xpa-Latn": "xpa-Latn-AU", - "xpb": "xpb-Latn-AU", - "xpb-AU": "xpb-Latn-AU", - "xpb-Latn": "xpb-Latn-AU", - "xpd": "xpd-Latn-AU", - "xpd-AU": "xpd-Latn-AU", - "xpd-Latn": "xpd-Latn-AU", - "xpf": "xpf-Latn-AU", - "xpf-AU": "xpf-Latn-AU", - "xpf-Latn": "xpf-Latn-AU", - "xpg": "xpg-Grek-TR", - "xpg-Grek": "xpg-Grek-TR", - "xpg-TR": "xpg-Grek-TR", - "xph": "xph-Latn-AU", - "xph-AU": "xph-Latn-AU", - "xph-Latn": "xph-Latn-AU", - "xpi": "xpi-Ogam-GB", - "xpi-GB": "xpi-Ogam-GB", - "xpi-Ogam": "xpi-Ogam-GB", - "xpj": "xpj-Latn-AU", - "xpj-AU": "xpj-Latn-AU", - "xpj-Latn": "xpj-Latn-AU", - "xpk": "xpk-Latn-BR", - "xpk-BR": "xpk-Latn-BR", - "xpk-Latn": "xpk-Latn-BR", - "xpl": "xpl-Latn-AU", - "xpl-AU": "xpl-Latn-AU", - "xpl-Latn": "xpl-Latn-AU", - "xpm": "xpm-Cyrl-RU", - "xpm-Cyrl": "xpm-Cyrl-RU", - "xpm-RU": "xpm-Cyrl-RU", - "xpn": "xpn-Latn-BR", - "xpn-BR": "xpn-Latn-BR", - "xpn-Latn": "xpn-Latn-BR", - "xpo": "xpo-Latn-MX", - "xpo-Latn": "xpo-Latn-MX", - "xpo-MX": "xpo-Latn-MX", - "xpq": "xpq-Latn-US", - "xpq-Latn": "xpq-Latn-US", - "xpq-US": "xpq-Latn-US", - "xpr": "xpr-Prti-IR", - "xpr-IR": "xpr-Prti-IR", - "xpr-Prti": "xpr-Prti-IR", - "xpt": "xpt-Latn-AU", - "xpt-AU": "xpt-Latn-AU", - "xpt-Latn": "xpt-Latn-AU", - "xpv": "xpv-Latn-AU", - "xpv-AU": "xpv-Latn-AU", - "xpv-Latn": "xpv-Latn-AU", - "xpw": "xpw-Latn-AU", - "xpw-AU": "xpw-Latn-AU", - "xpw-Latn": "xpw-Latn-AU", - "xpx": "xpx-Latn-AU", - "xpx-AU": "xpx-Latn-AU", - "xpx-Latn": "xpx-Latn-AU", - "xpz": "xpz-Latn-AU", - "xpz-AU": "xpz-Latn-AU", - "xpz-Latn": "xpz-Latn-AU", - "xra": "xra-Latn-BR", - "xra-BR": "xra-Latn-BR", - "xra-Latn": "xra-Latn-BR", - "xrb": "xrb-Latn-BF", - "xrb-BF": "xrb-Latn-BF", - "xrb-Latn": "xrb-Latn-BF", - "xrd": "xrd-Latn-AU", - "xrd-AU": "xrd-Latn-AU", - "xrd-Latn": "xrd-Latn-AU", - "xre": "xre-Latn-BR", - "xre-BR": "xre-Latn-BR", - "xre-Latn": "xre-Latn-BR", - "xrg": "xrg-Latn-AU", - "xrg-AU": "xrg-Latn-AU", - "xrg-Latn": "xrg-Latn-AU", - "xri": "xri-Latn-BR", - "xri-BR": "xri-Latn-BR", - "xri-Latn": "xri-Latn-BR", - "xrm": "xrm-Cyrl-RU", - "xrm-Cyrl": "xrm-Cyrl-RU", - "xrm-RU": "xrm-Cyrl-RU", - "xrn": "xrn-Cyrl-RU", - "xrn-Cyrl": "xrn-Cyrl-RU", - "xrn-RU": "xrn-Cyrl-RU", - "xrr": "xrr-Latn-IT", - "xrr-IT": "xrr-Latn-IT", - "xrr-Latn": "xrr-Latn-IT", - "xru": "xru-Latn-AU", - "xru-AU": "xru-Latn-AU", - "xru-Latn": "xru-Latn-AU", - "xrw": "xrw-Latn-PG", - "xrw-Latn": "xrw-Latn-PG", - "xrw-PG": "xrw-Latn-PG", - "xsa": "xsa-Sarb-YE", - "xsa-Sarb": "xsa-Sarb-YE", - "xsa-YE": "xsa-Sarb-YE", - "xsb": "xsb-Latn-PH", - "xsb-Latn": "xsb-Latn-PH", - "xsb-PH": "xsb-Latn-PH", - "xse": "xse-Latn-ID", - "xse-ID": "xse-Latn-ID", - "xse-Latn": "xse-Latn-ID", - "xsh": "xsh-Latn-NG", - "xsh-Latn": "xsh-Latn-NG", - "xsh-NG": "xsh-Latn-NG", - "xsi": "xsi-Latn-PG", - "xsi-Latn": "xsi-Latn-PG", - "xsi-PG": "xsi-Latn-PG", - "xsm": "xsm-Latn-GH", - "xsm-GH": "xsm-Latn-GH", - "xsm-Latn": "xsm-Latn-GH", - "xsn": "xsn-Latn-NG", - "xsn-Latn": "xsn-Latn-NG", - "xsn-NG": "xsn-Latn-NG", - "xsp": "xsp-Latn-PG", - "xsp-Latn": "xsp-Latn-PG", - "xsp-PG": "xsp-Latn-PG", - "xsq": "xsq-Latn-MZ", - "xsq-Latn": "xsq-Latn-MZ", - "xsq-MZ": "xsq-Latn-MZ", - "xsr": "xsr-Deva-NP", - "xsr-Deva": "xsr-Deva-NP", - "xsr-NP": "xsr-Deva-NP", - "xsu": "xsu-Latn-VE", - "xsu-Latn": "xsu-Latn-VE", - "xsu-VE": "xsu-Latn-VE", - "xsy": "xsy-Latn-TW", - "xsy-Latn": "xsy-Latn-TW", - "xsy-TW": "xsy-Latn-TW", - "xta": "xta-Latn-MX", - "xta-Latn": "xta-Latn-MX", - "xta-MX": "xta-Latn-MX", - "xtb": "xtb-Latn-MX", - "xtb-Latn": "xtb-Latn-MX", - "xtb-MX": "xtb-Latn-MX", - "xtc": "xtc-Latn-SD", - "xtc-Latn": "xtc-Latn-SD", - "xtc-SD": "xtc-Latn-SD", - "xtd": "xtd-Latn-MX", - "xtd-Latn": "xtd-Latn-MX", - "xtd-MX": "xtd-Latn-MX", - "xte": "xte-Latn-ID", - "xte-ID": "xte-Latn-ID", - "xte-Latn": "xte-Latn-ID", - "xth": "xth-Latn-AU", - "xth-AU": "xth-Latn-AU", - "xth-Latn": "xth-Latn-AU", - "xti": "xti-Latn-MX", - "xti-Latn": "xti-Latn-MX", - "xti-MX": "xti-Latn-MX", - "xtj": "xtj-Latn-MX", - "xtj-Latn": "xtj-Latn-MX", - "xtj-MX": "xtj-Latn-MX", - "xtl": "xtl-Latn-MX", - "xtl-Latn": "xtl-Latn-MX", - "xtl-MX": "xtl-Latn-MX", - "xtm": "xtm-Latn-MX", - "xtm-Latn": "xtm-Latn-MX", - "xtm-MX": "xtm-Latn-MX", - "xtn": "xtn-Latn-MX", - "xtn-Latn": "xtn-Latn-MX", - "xtn-MX": "xtn-Latn-MX", - "xtp": "xtp-Latn-MX", - "xtp-Latn": "xtp-Latn-MX", - "xtp-MX": "xtp-Latn-MX", - "xtq": "xtq-Brah-IR", - "xtq-Brah": "xtq-Brah-IR", - "xtq-IR": "xtq-Brah-IR", - "xts": "xts-Latn-MX", - "xts-Latn": "xts-Latn-MX", - "xts-MX": "xts-Latn-MX", - "xtt": "xtt-Latn-MX", - "xtt-Latn": "xtt-Latn-MX", - "xtt-MX": "xtt-Latn-MX", - "xtu": "xtu-Latn-MX", - "xtu-Latn": "xtu-Latn-MX", - "xtu-MX": "xtu-Latn-MX", - "xtv": "xtv-Latn-AU", - "xtv-AU": "xtv-Latn-AU", - "xtv-Latn": "xtv-Latn-AU", - "xtw": "xtw-Latn-BR", - "xtw-BR": "xtw-Latn-BR", - "xtw-Latn": "xtw-Latn-BR", - "xty": "xty-Latn-MX", - "xty-Latn": "xty-Latn-MX", - "xty-MX": "xty-Latn-MX", - "xub": "xub-Taml-IN", - "xub-IN": "xub-Taml-IN", - "xub-Taml": "xub-Taml-IN", - "xud": "xud-Latn-AU", - "xud-AU": "xud-Latn-AU", - "xud-Latn": "xud-Latn-AU", - "xuj": "xuj-Taml-IN", - "xuj-IN": "xuj-Taml-IN", - "xuj-Taml": "xuj-Taml-IN", - "xul": "xul-Latn-AU", - "xul-AU": "xul-Latn-AU", - "xul-Latn": "xul-Latn-AU", - "xum": "xum-Latn-IT", - "xum-IT": "xum-Latn-IT", - "xum-Latn": "xum-Latn-IT", - "xun": "xun-Latn-AU", - "xun-AU": "xun-Latn-AU", - "xun-Latn": "xun-Latn-AU", - "xuo": "xuo-Latn-TD", - "xuo-Latn": "xuo-Latn-TD", - "xuo-TD": "xuo-Latn-TD", - "xut": "xut-Latn-AU", - "xut-AU": "xut-Latn-AU", - "xut-Latn": "xut-Latn-AU", - "xuu": "xuu-Latn-NA", - "xuu-Latn": "xuu-Latn-NA", - "xuu-NA": "xuu-Latn-NA", - "xve": "xve-Ital-IT", - "xve-IT": "xve-Ital-IT", - "xve-Ital": "xve-Ital-IT", - "xvi": "xvi-Arab-AF", - "xvi-AF": "xvi-Arab-AF", - "xvi-Arab": "xvi-Arab-AF", - "xvn": "xvn-Latn-ES", - "xvn-ES": "xvn-Latn-ES", - "xvn-Latn": "xvn-Latn-ES", - "xvo": "xvo-Latn-IT", - "xvo-IT": "xvo-Latn-IT", - "xvo-Latn": "xvo-Latn-IT", - "xvs": "xvs-Latn-IT", - "xvs-IT": "xvs-Latn-IT", - "xvs-Latn": "xvs-Latn-IT", - "xwa": "xwa-Latn-BR", - "xwa-BR": "xwa-Latn-BR", - "xwa-Latn": "xwa-Latn-BR", - "xwd": "xwd-Latn-AU", - "xwd-AU": "xwd-Latn-AU", - "xwd-Latn": "xwd-Latn-AU", - "xwe": "xwe-Latn-BJ", - "xwe-BJ": "xwe-Latn-BJ", - "xwe-Latn": "xwe-Latn-BJ", - "xwj": "xwj-Latn-AU", - "xwj-AU": "xwj-Latn-AU", - "xwj-Latn": "xwj-Latn-AU", - "xwk": "xwk-Latn-AU", - "xwk-AU": "xwk-Latn-AU", - "xwk-Latn": "xwk-Latn-AU", - "xwl": "xwl-Latn-BJ", - "xwl-BJ": "xwl-Latn-BJ", - "xwl-Latn": "xwl-Latn-BJ", - "xwo": "xwo-Cyrl-RU", - "xwo-Cyrl": "xwo-Cyrl-RU", - "xwo-RU": "xwo-Cyrl-RU", - "xwr": "xwr-Latn-ID", - "xwr-ID": "xwr-Latn-ID", - "xwr-Latn": "xwr-Latn-ID", - "xwt": "xwt-Latn-AU", - "xwt-AU": "xwt-Latn-AU", - "xwt-Latn": "xwt-Latn-AU", - "xww": "xww-Latn-AU", - "xww-AU": "xww-Latn-AU", - "xww-Latn": "xww-Latn-AU", - "xxb": "xxb-Latn-GH", - "xxb-GH": "xxb-Latn-GH", - "xxb-Latn": "xxb-Latn-GH", - "xxk": "xxk-Latn-ID", - "xxk-ID": "xxk-Latn-ID", - "xxk-Latn": "xxk-Latn-ID", - "xxm": "xxm-Latn-AU", - "xxm-AU": "xxm-Latn-AU", - "xxm-Latn": "xxm-Latn-AU", - "xxr": "xxr-Latn-BR", - "xxr-BR": "xxr-Latn-BR", - "xxr-Latn": "xxr-Latn-BR", - "xxt": "xxt-Latn-ID", - "xxt-ID": "xxt-Latn-ID", - "xxt-Latn": "xxt-Latn-ID", - "xya": "xya-Latn-AU", - "xya-AU": "xya-Latn-AU", - "xya-Latn": "xya-Latn-AU", - "xyb": "xyb-Latn-AU", - "xyb-AU": "xyb-Latn-AU", - "xyb-Latn": "xyb-Latn-AU", - "xyj": "xyj-Latn-AU", - "xyj-AU": "xyj-Latn-AU", - "xyj-Latn": "xyj-Latn-AU", - "xyk": "xyk-Latn-AU", - "xyk-AU": "xyk-Latn-AU", - "xyk-Latn": "xyk-Latn-AU", - "xyl": "xyl-Latn-BR", - "xyl-BR": "xyl-Latn-BR", - "xyl-Latn": "xyl-Latn-BR", - "xyt": "xyt-Latn-AU", - "xyt-AU": "xyt-Latn-AU", - "xyt-Latn": "xyt-Latn-AU", - "xyy": "xyy-Latn-AU", - "xyy-AU": "xyy-Latn-AU", - "xyy-Latn": "xyy-Latn-AU", - "xzh": "xzh-Marc-CN", - "xzh-CN": "xzh-Marc-CN", - "xzh-Marc": "xzh-Marc-CN", - "xzp": "xzp-Latn-MX", - "xzp-Latn": "xzp-Latn-MX", - "xzp-MX": "xzp-Latn-MX", - "yaa": "yaa-Latn-PE", - "yaa-Latn": "yaa-Latn-PE", - "yaa-PE": "yaa-Latn-PE", - "yab": "yab-Latn-BR", - "yab-BR": "yab-Latn-BR", - "yab-Latn": "yab-Latn-BR", - "yac": "yac-Latn-ID", - "yac-ID": "yac-Latn-ID", - "yac-Latn": "yac-Latn-ID", - "yad": "yad-Latn-PE", - "yad-Latn": "yad-Latn-PE", - "yad-PE": "yad-Latn-PE", - "yae": "yae-Latn-VE", - "yae-Latn": "yae-Latn-VE", - "yae-VE": "yae-Latn-VE", - "yaf": "yaf-Latn-CD", - "yaf-CD": "yaf-Latn-CD", - "yaf-Latn": "yaf-Latn-CD", - "yag": "yag-Latn-CL", - "yag-CL": "yag-Latn-CL", - "yag-Latn": "yag-Latn-CL", - "yah": "yah-Latn-TJ", - "yah-Latn": "yah-Latn-TJ", - "yah-TJ": "yah-Latn-TJ", - "yai": "yai-Cyrl-TJ", - "yai-Cyrl": "yai-Cyrl-TJ", - "yai-TJ": "yai-Cyrl-TJ", - "yaj": "yaj-Latn-CF", - "yaj-CF": "yaj-Latn-CF", - "yaj-Latn": "yaj-Latn-CF", - "yak": "yak-Latn-US", - "yak-Latn": "yak-Latn-US", - "yak-US": "yak-Latn-US", - "yal": "yal-Latn-GN", - "yal-GN": "yal-Latn-GN", - "yal-Latn": "yal-Latn-GN", - "yam": "yam-Latn-CM", - "yam-CM": "yam-Latn-CM", - "yam-Latn": "yam-Latn-CM", - "yan": "yan-Latn-NI", - "yan-Latn": "yan-Latn-NI", - "yan-NI": "yan-Latn-NI", - "yao": "yao-Latn-MZ", - "yao-Latn": "yao-Latn-MZ", - "yao-MZ": "yao-Latn-MZ", - "yap": "yap-Latn-FM", - "yap-FM": "yap-Latn-FM", - "yap-Latn": "yap-Latn-FM", - "yaq": "yaq-Latn-MX", - "yaq-Latn": "yaq-Latn-MX", - "yaq-MX": "yaq-Latn-MX", - "yar": "yar-Latn-VE", - "yar-Latn": "yar-Latn-VE", - "yar-VE": "yar-Latn-VE", - "yas": "yas-Latn-CM", - "yas-CM": "yas-Latn-CM", - "yas-Latn": "yas-Latn-CM", - "yat": "yat-Latn-CM", - "yat-CM": "yat-Latn-CM", - "yat-Latn": "yat-Latn-CM", - "yau": "yau-Latn-VE", - "yau-Latn": "yau-Latn-VE", - "yau-VE": "yau-Latn-VE", - "yav": "yav-Latn-CM", - "yav-CM": "yav-Latn-CM", - "yav-Latn": "yav-Latn-CM", - "yaw": "yaw-Latn-BR", - "yaw-BR": "yaw-Latn-BR", - "yaw-Latn": "yaw-Latn-BR", - "yax": "yax-Latn-AO", - "yax-AO": "yax-Latn-AO", - "yax-Latn": "yax-Latn-AO", - "yay": "yay-Latn-NG", - "yay-Latn": "yay-Latn-NG", - "yay-NG": "yay-Latn-NG", - "yaz": "yaz-Latn-NG", - "yaz-Latn": "yaz-Latn-NG", - "yaz-NG": "yaz-Latn-NG", - "yba": "yba-Latn-NG", - "yba-Latn": "yba-Latn-NG", - "yba-NG": "yba-Latn-NG", - "ybb": "ybb-Latn-CM", - "ybb-CM": "ybb-Latn-CM", - "ybb-Latn": "ybb-Latn-CM", - "ybe": "ybe-Latn-CN", - "ybe-CN": "ybe-Latn-CN", - "ybe-Latn": "ybe-Latn-CN", - "ybh": "ybh-Deva-NP", - "ybh-Deva": "ybh-Deva-NP", - "ybh-NP": "ybh-Deva-NP", - "ybi": "ybi-Deva-NP", - "ybi-Deva": "ybi-Deva-NP", - "ybi-NP": "ybi-Deva-NP", - "ybj": "ybj-Latn-NG", - "ybj-Latn": "ybj-Latn-NG", - "ybj-NG": "ybj-Latn-NG", - "ybl": "ybl-Latn-NG", - "ybl-Latn": "ybl-Latn-NG", - "ybl-NG": "ybl-Latn-NG", - "ybm": "ybm-Latn-PG", - "ybm-Latn": "ybm-Latn-PG", - "ybm-PG": "ybm-Latn-PG", - "ybn": "ybn-Latn-BR", - "ybn-BR": "ybn-Latn-BR", - "ybn-Latn": "ybn-Latn-BR", - "ybo": "ybo-Latn-PG", - "ybo-Latn": "ybo-Latn-PG", - "ybo-PG": "ybo-Latn-PG", - "ybx": "ybx-Latn-PG", - "ybx-Latn": "ybx-Latn-PG", - "ybx-PG": "ybx-Latn-PG", - "yby": "yby-Latn-PG", - "yby-Latn": "yby-Latn-PG", - "yby-PG": "yby-Latn-PG", - "ycl": "ycl-Latn-CN", - "ycl-CN": "ycl-Latn-CN", - "ycl-Latn": "ycl-Latn-CN", - "ycn": "ycn-Latn-CO", - "ycn-CO": "ycn-Latn-CO", - "ycn-Latn": "ycn-Latn-CO", - "ycr": "ycr-Latn-TW", - "ycr-Latn": "ycr-Latn-TW", - "ycr-TW": "ycr-Latn-TW", - "yda": "yda-Latn-AU", - "yda-AU": "yda-Latn-AU", - "yda-Latn": "yda-Latn-AU", - "yde": "yde-Latn-PG", - "yde-Latn": "yde-Latn-PG", - "yde-PG": "yde-Latn-PG", - "ydg": "ydg-Arab-PK", - "ydg-Arab": "ydg-Arab-PK", - "ydg-PK": "ydg-Arab-PK", - "ydk": "ydk-Latn-PG", - "ydk-Latn": "ydk-Latn-PG", - "ydk-PG": "ydk-Latn-PG", - "yea": "yea-Mlym-IN", - "yea-IN": "yea-Mlym-IN", - "yea-Mlym": "yea-Mlym-IN", - "yec": "yec-Latn-DE", - "yec-DE": "yec-Latn-DE", - "yec-Latn": "yec-Latn-DE", - "yee": "yee-Latn-PG", - "yee-Latn": "yee-Latn-PG", - "yee-PG": "yee-Latn-PG", - "yei": "yei-Latn-CM", - "yei-CM": "yei-Latn-CM", - "yei-Latn": "yei-Latn-CM", - "yej": "yej-Grek-GR", - "yej-GR": "yej-Grek-GR", - "yej-Grek": "yej-Grek-GR", - "yel": "yel-Latn-CD", - "yel-CD": "yel-Latn-CD", - "yel-Latn": "yel-Latn-CD", - "yer": "yer-Latn-NG", - "yer-Latn": "yer-Latn-NG", - "yer-NG": "yer-Latn-NG", - "yes": "yes-Latn-NG", - "yes-Latn": "yes-Latn-NG", - "yes-NG": "yes-Latn-NG", - "yet": "yet-Latn-ID", - "yet-ID": "yet-Latn-ID", - "yet-Latn": "yet-Latn-ID", - "yeu": "yeu-Telu-IN", - "yeu-IN": "yeu-Telu-IN", - "yeu-Telu": "yeu-Telu-IN", - "yev": "yev-Latn-PG", - "yev-Latn": "yev-Latn-PG", - "yev-PG": "yev-Latn-PG", - "yey": "yey-Latn-BW", - "yey-BW": "yey-Latn-BW", - "yey-Latn": "yey-Latn-BW", - "yga": "yga-Latn-AU", - "yga-AU": "yga-Latn-AU", - "yga-Latn": "yga-Latn-AU", - "ygi": "ygi-Latn-AU", - "ygi-AU": "ygi-Latn-AU", - "ygi-Latn": "ygi-Latn-AU", - "ygl": "ygl-Latn-PG", - "ygl-Latn": "ygl-Latn-PG", - "ygl-PG": "ygl-Latn-PG", - "ygm": "ygm-Latn-PG", - "ygm-Latn": "ygm-Latn-PG", - "ygm-PG": "ygm-Latn-PG", - "ygp": "ygp-Plrd-CN", - "ygp-CN": "ygp-Plrd-CN", - "ygp-Plrd": "ygp-Plrd-CN", - "ygr": "ygr-Latn-PG", - "ygr-Latn": "ygr-Latn-PG", - "ygr-PG": "ygr-Latn-PG", - "ygu": "ygu-Latn-AU", - "ygu-AU": "ygu-Latn-AU", - "ygu-Latn": "ygu-Latn-AU", - "ygw": "ygw-Latn-PG", - "ygw-Latn": "ygw-Latn-PG", - "ygw-PG": "ygw-Latn-PG", - "yhd": "yhd-Hebr-IL", - "yhd-Hebr": "yhd-Hebr-IL", - "yhd-IL": "yhd-Hebr-IL", - "yi": "yi-Hebr-UA", - "yi-Hebr": "yi-Hebr-UA", - "yi-Hebr-SE": "yi-Hebr-SE", - "yi-Hebr-UA": "yi-Hebr-UA", - "yi-Hebr-US": "yi-Hebr-US", - "yi-UA": "yi-Hebr-UA", - "yia": "yia-Latn-AU", - "yia-AU": "yia-Latn-AU", - "yia-Latn": "yia-Latn-AU", - "yig": "yig-Yiii-CN", - "yig-CN": "yig-Yiii-CN", - "yig-Yiii": "yig-Yiii-CN", - "yih": "yih-Hebr-DE", - "yih-DE": "yih-Hebr-DE", - "yih-Hebr": "yih-Hebr-DE", - "yii": "yii-Latn-AU", - "yii-AU": "yii-Latn-AU", - "yii-Latn": "yii-Latn-AU", - "yij": "yij-Latn-AU", - "yij-AU": "yij-Latn-AU", - "yij-Latn": "yij-Latn-AU", - "yil": "yil-Latn-AU", - "yil-AU": "yil-Latn-AU", - "yil-Latn": "yil-Latn-AU", - "yim": "yim-Latn-IN", - "yim-IN": "yim-Latn-IN", - "yim-Latn": "yim-Latn-IN", - "yir": "yir-Latn-ID", - "yir-ID": "yir-Latn-ID", - "yir-Latn": "yir-Latn-ID", - "yis": "yis-Latn-PG", - "yis-Latn": "yis-Latn-PG", - "yis-PG": "yis-Latn-PG", - "yiv": "yiv-Yiii-CN", - "yiv-CN": "yiv-Yiii-CN", - "yiv-Yiii": "yiv-Yiii-CN", - "yka": "yka-Latn-PH", - "yka-Latn": "yka-Latn-PH", - "yka-PH": "yka-Latn-PH", - "ykg": "ykg-Cyrl-RU", - "ykg-Cyrl": "ykg-Cyrl-RU", - "ykg-RU": "ykg-Cyrl-RU", - "ykh": "ykh-Cyrl-MN", - "ykh-Cyrl": "ykh-Cyrl-MN", - "ykh-MN": "ykh-Cyrl-MN", - "yki": "yki-Latn-ID", - "yki-ID": "yki-Latn-ID", - "yki-Latn": "yki-Latn-ID", - "ykk": "ykk-Latn-PG", - "ykk-Latn": "ykk-Latn-PG", - "ykk-PG": "ykk-Latn-PG", - "ykm": "ykm-Latn-PG", - "ykm-Latn": "ykm-Latn-PG", - "ykm-PG": "ykm-Latn-PG", - "yko": "yko-Latn-CM", - "yko-CM": "yko-Latn-CM", - "yko-Latn": "yko-Latn-CM", - "ykr": "ykr-Latn-PG", - "ykr-Latn": "ykr-Latn-PG", - "ykr-PG": "ykr-Latn-PG", - "yky": "yky-Latn-CF", - "yky-CF": "yky-Latn-CF", - "yky-Latn": "yky-Latn-CF", - "yla": "yla-Latn-PG", - "yla-Latn": "yla-Latn-PG", - "yla-PG": "yla-Latn-PG", - "ylb": "ylb-Latn-PG", - "ylb-Latn": "ylb-Latn-PG", - "ylb-PG": "ylb-Latn-PG", - "yle": "yle-Latn-PG", - "yle-Latn": "yle-Latn-PG", - "yle-PG": "yle-Latn-PG", - "ylg": "ylg-Latn-PG", - "ylg-Latn": "ylg-Latn-PG", - "ylg-PG": "ylg-Latn-PG", - "yli": "yli-Latn-ID", - "yli-ID": "yli-Latn-ID", - "yli-Latn": "yli-Latn-ID", - "yll": "yll-Latn-PG", - "yll-Latn": "yll-Latn-PG", - "yll-PG": "yll-Latn-PG", - "ylr": "ylr-Latn-AU", - "ylr-AU": "ylr-Latn-AU", - "ylr-Latn": "ylr-Latn-AU", - "ylu": "ylu-Latn-PG", - "ylu-Latn": "ylu-Latn-PG", - "ylu-PG": "ylu-Latn-PG", - "yly": "yly-Latn-NC", - "yly-Latn": "yly-Latn-NC", - "yly-NC": "yly-Latn-NC", - "ymb": "ymb-Latn-PG", - "ymb-Latn": "ymb-Latn-PG", - "ymb-PG": "ymb-Latn-PG", - "yme": "yme-Latn-PE", - "yme-Latn": "yme-Latn-PE", - "yme-PE": "yme-Latn-PE", - "ymg": "ymg-Latn-CD", - "ymg-CD": "ymg-Latn-CD", - "ymg-Latn": "ymg-Latn-CD", - "ymk": "ymk-Latn-MZ", - "ymk-Latn": "ymk-Latn-MZ", - "ymk-MZ": "ymk-Latn-MZ", - "yml": "yml-Latn-PG", - "yml-Latn": "yml-Latn-PG", - "yml-PG": "yml-Latn-PG", - "ymm": "ymm-Latn-SO", - "ymm-Latn": "ymm-Latn-SO", - "ymm-SO": "ymm-Latn-SO", - "ymn": "ymn-Latn-ID", - "ymn-ID": "ymn-Latn-ID", - "ymn-Latn": "ymn-Latn-ID", - "ymo": "ymo-Latn-PG", - "ymo-Latn": "ymo-Latn-PG", - "ymo-PG": "ymo-Latn-PG", - "ymp": "ymp-Latn-PG", - "ymp-Latn": "ymp-Latn-PG", - "ymp-PG": "ymp-Latn-PG", - "yna": "yna-Plrd-CN", - "yna-CN": "yna-Plrd-CN", - "yna-Plrd": "yna-Plrd-CN", - "ynd": "ynd-Latn-AU", - "ynd-AU": "ynd-Latn-AU", - "ynd-Latn": "ynd-Latn-AU", - "yng": "yng-Latn-CD", - "yng-CD": "yng-Latn-CD", - "yng-Latn": "yng-Latn-CD", - "ynk": "ynk-Cyrl-RU", - "ynk-Cyrl": "ynk-Cyrl-RU", - "ynk-RU": "ynk-Cyrl-RU", - "ynl": "ynl-Latn-PG", - "ynl-Latn": "ynl-Latn-PG", - "ynl-PG": "ynl-Latn-PG", - "ynq": "ynq-Latn-NG", - "ynq-Latn": "ynq-Latn-NG", - "ynq-NG": "ynq-Latn-NG", - "yns": "yns-Latn-CD", - "yns-CD": "yns-Latn-CD", - "yns-Latn": "yns-Latn-CD", - "ynu": "ynu-Latn-CO", - "ynu-CO": "ynu-Latn-CO", - "ynu-Latn": "ynu-Latn-CO", - "yo": "yo-Latn-NG", - "yo-BJ": "yo-Latn-BJ", - "yo-Latn": "yo-Latn-NG", - "yo-NG": "yo-Latn-NG", - "yob": "yob-Latn-PG", - "yob-Latn": "yob-Latn-PG", - "yob-PG": "yob-Latn-PG", - "yog": "yog-Latn-PH", - "yog-Latn": "yog-Latn-PH", - "yog-PH": "yog-Latn-PH", - "yoi": "yoi-Jpan-JP", - "yoi-JP": "yoi-Jpan-JP", - "yoi-Jpan": "yoi-Jpan-JP", - "yok": "yok-Latn-US", - "yok-Latn": "yok-Latn-US", - "yok-US": "yok-Latn-US", - "yol": "yol-Latn-IE", - "yol-IE": "yol-Latn-IE", - "yol-Latn": "yol-Latn-IE", - "yom": "yom-Latn-CD", - "yom-CD": "yom-Latn-CD", - "yom-Latn": "yom-Latn-CD", - "yon": "yon-Latn-PG", - "yon-Latn": "yon-Latn-PG", - "yon-PG": "yon-Latn-PG", - "yot": "yot-Latn-NG", - "yot-Latn": "yot-Latn-NG", - "yot-NG": "yot-Latn-NG", - "yoy": "yoy-Thai-TH", - "yoy-TH": "yoy-Thai-TH", - "yoy-Thai": "yoy-Thai-TH", - "yra": "yra-Latn-PG", - "yra-Latn": "yra-Latn-PG", - "yra-PG": "yra-Latn-PG", - "yrb": "yrb-Latn-PG", - "yrb-Latn": "yrb-Latn-PG", - "yrb-PG": "yrb-Latn-PG", - "yre": "yre-Latn-CI", - "yre-CI": "yre-Latn-CI", - "yre-Latn": "yre-Latn-CI", - "yrk": "yrk-Cyrl-RU", - "yrk-Cyrl": "yrk-Cyrl-RU", - "yrk-RU": "yrk-Cyrl-RU", - "yrl": "yrl-Latn-BR", - "yrl-BR": "yrl-Latn-BR", - "yrl-Latn": "yrl-Latn-BR", - "yrm": "yrm-Latn-AU", - "yrm-AU": "yrm-Latn-AU", - "yrm-Latn": "yrm-Latn-AU", - "yro": "yro-Latn-BR", - "yro-BR": "yro-Latn-BR", - "yro-Latn": "yro-Latn-BR", - "yrs": "yrs-Latn-ID", - "yrs-ID": "yrs-Latn-ID", - "yrs-Latn": "yrs-Latn-ID", - "yrw": "yrw-Latn-PG", - "yrw-Latn": "yrw-Latn-PG", - "yrw-PG": "yrw-Latn-PG", - "yry": "yry-Latn-AU", - "yry-AU": "yry-Latn-AU", - "yry-Latn": "yry-Latn-AU", - "ysd": "ysd-Yiii-CN", - "ysd-CN": "ysd-Yiii-CN", - "ysd-Yiii": "ysd-Yiii-CN", - "ysn": "ysn-Yiii-CN", - "ysn-CN": "ysn-Yiii-CN", - "ysn-Yiii": "ysn-Yiii-CN", - "ysp": "ysp-Yiii-CN", - "ysp-CN": "ysp-Yiii-CN", - "ysp-Yiii": "ysp-Yiii-CN", - "ysr": "ysr-Cyrl-RU", - "ysr-Cyrl": "ysr-Cyrl-RU", - "ysr-RU": "ysr-Cyrl-RU", - "yss": "yss-Latn-PG", - "yss-Latn": "yss-Latn-PG", - "yss-PG": "yss-Latn-PG", - "ysy": "ysy-Plrd-CN", - "ysy-CN": "ysy-Plrd-CN", - "ysy-Plrd": "ysy-Plrd-CN", - "ytw": "ytw-Latn-PG", - "ytw-Latn": "ytw-Latn-PG", - "ytw-PG": "ytw-Latn-PG", - "yty": "yty-Latn-AU", - "yty-AU": "yty-Latn-AU", - "yty-Latn": "yty-Latn-AU", - "yua": "yua-Latn-MX", - "yua-Latn": "yua-Latn-MX", - "yua-MX": "yua-Latn-MX", - "yub": "yub-Latn-AU", - "yub-AU": "yub-Latn-AU", - "yub-Latn": "yub-Latn-AU", - "yuc": "yuc-Latn-US", - "yuc-Latn": "yuc-Latn-US", - "yuc-US": "yuc-Latn-US", - "yud": "yud-Hebr-IL", - "yud-Hebr": "yud-Hebr-IL", - "yud-IL": "yud-Hebr-IL", - "yue": "yue-Hant-HK", - "yue-CN": "yue-Hans-CN", - "yue-HK": "yue-Hant-HK", - "yue-Hans": "yue-Hans-CN", - "yue-Hant": "yue-Hant-HK", - "yue-Hant-CA": "yue-Hant-CA", - "yue-Hant-CN": "yue-Hant-CN", - "yuf": "yuf-Latn-US", - "yuf-Latn": "yuf-Latn-US", - "yuf-US": "yuf-Latn-US", - "yug": "yug-Cyrl-RU", - "yug-Cyrl": "yug-Cyrl-RU", - "yug-RU": "yug-Cyrl-RU", - "yui": "yui-Latn-CO", - "yui-CO": "yui-Latn-CO", - "yui-Latn": "yui-Latn-CO", - "yuj": "yuj-Latn-PG", - "yuj-Latn": "yuj-Latn-PG", - "yuj-PG": "yuj-Latn-PG", - "yul": "yul-Latn-CF", - "yul-CF": "yul-Latn-CF", - "yul-Latn": "yul-Latn-CF", - "yum": "yum-Latn-US", - "yum-Latn": "yum-Latn-US", - "yum-US": "yum-Latn-US", - "yun": "yun-Latn-NG", - "yun-Latn": "yun-Latn-NG", - "yun-NG": "yun-Latn-NG", - "yup": "yup-Latn-CO", - "yup-CO": "yup-Latn-CO", - "yup-Latn": "yup-Latn-CO", - "yuq": "yuq-Latn-BO", - "yuq-BO": "yuq-Latn-BO", - "yuq-Latn": "yuq-Latn-BO", - "yur": "yur-Latn-US", - "yur-Latn": "yur-Latn-US", - "yur-US": "yur-Latn-US", - "yut": "yut-Latn-PG", - "yut-Latn": "yut-Latn-PG", - "yut-PG": "yut-Latn-PG", - "yuw": "yuw-Latn-PG", - "yuw-Latn": "yuw-Latn-PG", - "yuw-PG": "yuw-Latn-PG", - "yux": "yux-Cyrl-RU", - "yux-Cyrl": "yux-Cyrl-RU", - "yux-RU": "yux-Cyrl-RU", - "yuz": "yuz-Latn-BO", - "yuz-BO": "yuz-Latn-BO", - "yuz-Latn": "yuz-Latn-BO", - "yva": "yva-Latn-ID", - "yva-ID": "yva-Latn-ID", - "yva-Latn": "yva-Latn-ID", - "yvt": "yvt-Latn-VE", - "yvt-Latn": "yvt-Latn-VE", - "yvt-VE": "yvt-Latn-VE", - "ywa": "ywa-Latn-PG", - "ywa-Latn": "ywa-Latn-PG", - "ywa-PG": "ywa-Latn-PG", - "ywg": "ywg-Latn-AU", - "ywg-AU": "ywg-Latn-AU", - "ywg-Latn": "ywg-Latn-AU", - "ywn": "ywn-Latn-BR", - "ywn-BR": "ywn-Latn-BR", - "ywn-Latn": "ywn-Latn-BR", - "ywq": "ywq-Plrd-CN", - "ywq-CN": "ywq-Plrd-CN", - "ywq-Plrd": "ywq-Plrd-CN", - "ywr": "ywr-Latn-AU", - "ywr-AU": "ywr-Latn-AU", - "ywr-Latn": "ywr-Latn-AU", - "ywu": "ywu-Plrd-CN", - "ywu-CN": "ywu-Plrd-CN", - "ywu-Plrd": "ywu-Plrd-CN", - "yww": "yww-Latn-AU", - "yww-AU": "yww-Latn-AU", - "yww-Latn": "yww-Latn-AU", - "yxa": "yxa-Latn-AU", - "yxa-AU": "yxa-Latn-AU", - "yxa-Latn": "yxa-Latn-AU", - "yxg": "yxg-Latn-AU", - "yxg-AU": "yxg-Latn-AU", - "yxg-Latn": "yxg-Latn-AU", - "yxl": "yxl-Latn-AU", - "yxl-AU": "yxl-Latn-AU", - "yxl-Latn": "yxl-Latn-AU", - "yxm": "yxm-Latn-AU", - "yxm-AU": "yxm-Latn-AU", - "yxm-Latn": "yxm-Latn-AU", - "yxu": "yxu-Latn-AU", - "yxu-AU": "yxu-Latn-AU", - "yxu-Latn": "yxu-Latn-AU", - "yxy": "yxy-Latn-AU", - "yxy-AU": "yxy-Latn-AU", - "yxy-Latn": "yxy-Latn-AU", - "yyr": "yyr-Latn-AU", - "yyr-AU": "yyr-Latn-AU", - "yyr-Latn": "yyr-Latn-AU", - "yyu": "yyu-Latn-PG", - "yyu-Latn": "yyu-Latn-PG", - "yyu-PG": "yyu-Latn-PG", - "za": "za-Latn-CN", - "za-CN": "za-Latn-CN", - "za-Latn": "za-Latn-CN", - "za-Latn-CN": "za-Latn-CN", - "zaa": "zaa-Latn-MX", - "zaa-Latn": "zaa-Latn-MX", - "zaa-MX": "zaa-Latn-MX", - "zab": "zab-Latn-MX", - "zab-Latn": "zab-Latn-MX", - "zab-MX": "zab-Latn-MX", - "zac": "zac-Latn-MX", - "zac-Latn": "zac-Latn-MX", - "zac-MX": "zac-Latn-MX", - "zad": "zad-Latn-MX", - "zad-Latn": "zad-Latn-MX", - "zad-MX": "zad-Latn-MX", - "zae": "zae-Latn-MX", - "zae-Latn": "zae-Latn-MX", - "zae-MX": "zae-Latn-MX", - "zaf": "zaf-Latn-MX", - "zaf-Latn": "zaf-Latn-MX", - "zaf-MX": "zaf-Latn-MX", - "zag": "zag-Latn-SD", - "zag-Latn": "zag-Latn-SD", - "zag-SD": "zag-Latn-SD", - "zah": "zah-Latn-NG", - "zah-Latn": "zah-Latn-NG", - "zah-NG": "zah-Latn-NG", - "zaj": "zaj-Latn-TZ", - "zaj-Latn": "zaj-Latn-TZ", - "zaj-TZ": "zaj-Latn-TZ", - "zak": "zak-Latn-TZ", - "zak-Latn": "zak-Latn-TZ", - "zak-TZ": "zak-Latn-TZ", - "zam": "zam-Latn-MX", - "zam-Latn": "zam-Latn-MX", - "zam-MX": "zam-Latn-MX", - "zao": "zao-Latn-MX", - "zao-Latn": "zao-Latn-MX", - "zao-MX": "zao-Latn-MX", - "zap": "zap-Latn-MX", - "zap-Latn": "zap-Latn-MX", - "zap-MX": "zap-Latn-MX", - "zaq": "zaq-Latn-MX", - "zaq-Latn": "zaq-Latn-MX", - "zaq-MX": "zaq-Latn-MX", - "zar": "zar-Latn-MX", - "zar-Latn": "zar-Latn-MX", - "zar-MX": "zar-Latn-MX", - "zas": "zas-Latn-MX", - "zas-Latn": "zas-Latn-MX", - "zas-MX": "zas-Latn-MX", - "zat": "zat-Latn-MX", - "zat-Latn": "zat-Latn-MX", - "zat-MX": "zat-Latn-MX", - "zau": "zau-Tibt-IN", - "zau-IN": "zau-Tibt-IN", - "zau-Tibt": "zau-Tibt-IN", - "zav": "zav-Latn-MX", - "zav-Latn": "zav-Latn-MX", - "zav-MX": "zav-Latn-MX", - "zaw": "zaw-Latn-MX", - "zaw-Latn": "zaw-Latn-MX", - "zaw-MX": "zaw-Latn-MX", - "zax": "zax-Latn-MX", - "zax-Latn": "zax-Latn-MX", - "zax-MX": "zax-Latn-MX", - "zay": "zay-Latn-ET", - "zay-ET": "zay-Latn-ET", - "zay-Latn": "zay-Latn-ET", - "zaz": "zaz-Latn-NG", - "zaz-Latn": "zaz-Latn-NG", - "zaz-NG": "zaz-Latn-NG", - "zba": "zba-Arab-001", - "zba-001": "zba-Arab-001", - "zba-Arab": "zba-Arab-001", - "zbc": "zbc-Latn-MY", - "zbc-Latn": "zbc-Latn-MY", - "zbc-MY": "zbc-Latn-MY", - "zbe": "zbe-Latn-MY", - "zbe-Latn": "zbe-Latn-MY", - "zbe-MY": "zbe-Latn-MY", - "zbt": "zbt-Latn-ID", - "zbt-ID": "zbt-Latn-ID", - "zbt-Latn": "zbt-Latn-ID", - "zbu": "zbu-Latn-NG", - "zbu-Latn": "zbu-Latn-NG", - "zbu-NG": "zbu-Latn-NG", - "zbw": "zbw-Latn-MY", - "zbw-Latn": "zbw-Latn-MY", - "zbw-MY": "zbw-Latn-MY", - "zca": "zca-Latn-MX", - "zca-Latn": "zca-Latn-MX", - "zca-MX": "zca-Latn-MX", - "zch": "zch-Hani-CN", - "zch-CN": "zch-Hani-CN", - "zch-Hani": "zch-Hani-CN", - "zdj": "zdj-Arab-KM", - "zdj-Arab": "zdj-Arab-KM", - "zdj-KM": "zdj-Arab-KM", - "zea": "zea-Latn-NL", - "zea-Latn": "zea-Latn-NL", - "zea-NL": "zea-Latn-NL", - "zeg": "zeg-Latn-PG", - "zeg-Latn": "zeg-Latn-PG", - "zeg-PG": "zeg-Latn-PG", - "zeh": "zeh-Hani-CN", - "zeh-CN": "zeh-Hani-CN", - "zeh-Hani": "zeh-Hani-CN", - "zem": "zem-Latn-NG", - "zem-Latn": "zem-Latn-NG", - "zem-NG": "zem-Latn-NG", - "zen": "zen-Tfng-MR", - "zen-MR": "zen-Tfng-MR", - "zen-Tfng": "zen-Tfng-MR", - "zga": "zga-Latn-TZ", - "zga-Latn": "zga-Latn-TZ", - "zga-TZ": "zga-Latn-TZ", - "zgb": "zgb-Hani-CN", - "zgb-CN": "zgb-Hani-CN", - "zgb-Hani": "zgb-Hani-CN", - "zgh": "zgh-Tfng-MA", - "zgh-MA": "zgh-Tfng-MA", - "zgh-Tfng": "zgh-Tfng-MA", - "zgm": "zgm-Hani-CN", - "zgm-CN": "zgm-Hani-CN", - "zgm-Hani": "zgm-Hani-CN", - "zgn": "zgn-Hani-CN", - "zgn-CN": "zgn-Hani-CN", - "zgn-Hani": "zgn-Hani-CN", - "zgr": "zgr-Latn-PG", - "zgr-Latn": "zgr-Latn-PG", - "zgr-PG": "zgr-Latn-PG", - "zh": "zh-Hans-CN", - "zh-AU": "zh-Hant-AU", - "zh-BN": "zh-Hant-BN", - "zh-Bopo": "zh-Bopo-TW", - "zh-CN": "zh-Hans-CN", - "zh-GB": "zh-Hant-GB", - "zh-GF": "zh-Hant-GF", - "zh-HK": "zh-Hant-HK", - "zh-Hanb": "zh-Hanb-TW", - "zh-Hani": "zh-Hani-CN", - "zh-Hans": "zh-Hans-CN", - "zh-Hant": "zh-Hant-TW", - "zh-ID": "zh-Hant-ID", - "zh-MO": "zh-Hant-MO", - "zh-PA": "zh-Hant-PA", - "zh-PF": "zh-Hant-PF", - "zh-PH": "zh-Hant-PH", - "zh-SR": "zh-Hant-SR", - "zh-TH": "zh-Hant-TH", - "zh-TW": "zh-Hant-TW", - "zh-US": "zh-Hant-US", - "zh-VN": "zh-Hant-VN", - "zhd": "zhd-Hani-CN", - "zhd-CN": "zhd-Hani-CN", - "zhd-Hani": "zhd-Hani-CN", - "zhi": "zhi-Latn-NG", - "zhi-Latn": "zhi-Latn-NG", - "zhi-NG": "zhi-Latn-NG", - "zhn": "zhn-Latn-CN", - "zhn-CN": "zhn-Latn-CN", - "zhn-Latn": "zhn-Latn-CN", - "zhw": "zhw-Latn-CM", - "zhw-CM": "zhw-Latn-CM", - "zhw-Latn": "zhw-Latn-CM", - "zhx": "zhx-Nshu-CN", - "zhx-CN": "zhx-Nshu-CN", - "zhx-Nshu": "zhx-Nshu-CN", - "zia": "zia-Latn-PG", - "zia-Latn": "zia-Latn-PG", - "zia-PG": "zia-Latn-PG", - "zik": "zik-Latn-PG", - "zik-Latn": "zik-Latn-PG", - "zik-PG": "zik-Latn-PG", - "zil": "zil-Latn-GN", - "zil-GN": "zil-Latn-GN", - "zil-Latn": "zil-Latn-GN", - "zim": "zim-Latn-TD", - "zim-Latn": "zim-Latn-TD", - "zim-TD": "zim-Latn-TD", - "zin": "zin-Latn-TZ", - "zin-Latn": "zin-Latn-TZ", - "zin-TZ": "zin-Latn-TZ", - "ziw": "ziw-Latn-TZ", - "ziw-Latn": "ziw-Latn-TZ", - "ziw-TZ": "ziw-Latn-TZ", - "ziz": "ziz-Latn-NG", - "ziz-Latn": "ziz-Latn-NG", - "ziz-NG": "ziz-Latn-NG", - "zka": "zka-Latn-ID", - "zka-ID": "zka-Latn-ID", - "zka-Latn": "zka-Latn-ID", - "zkd": "zkd-Latn-MM", - "zkd-Latn": "zkd-Latn-MM", - "zkd-MM": "zkd-Latn-MM", - "zko": "zko-Cyrl-RU", - "zko-Cyrl": "zko-Cyrl-RU", - "zko-RU": "zko-Cyrl-RU", - "zkp": "zkp-Latn-BR", - "zkp-BR": "zkp-Latn-BR", - "zkp-Latn": "zkp-Latn-BR", - "zkt": "zkt-Kits-CN", - "zkt-CN": "zkt-Kits-CN", - "zkt-Kits": "zkt-Kits-CN", - "zku": "zku-Latn-AU", - "zku-AU": "zku-Latn-AU", - "zku-Latn": "zku-Latn-AU", - "zkz": "zkz-Cyrl-RU", - "zkz-Cyrl": "zkz-Cyrl-RU", - "zkz-RU": "zkz-Cyrl-RU", - "zla": "zla-Latn-CD", - "zla-CD": "zla-Latn-CD", - "zla-Latn": "zla-Latn-CD", - "zlj": "zlj-Hani-CN", - "zlj-CN": "zlj-Hani-CN", - "zlj-Hani": "zlj-Hani-CN", - "zlm": "zlm-Latn-TG", - "zlm-Latn": "zlm-Latn-TG", - "zlm-TG": "zlm-Latn-TG", - "zln": "zln-Hani-CN", - "zln-CN": "zln-Hani-CN", - "zln-Hani": "zln-Hani-CN", - "zlq": "zlq-Hani-CN", - "zlq-CN": "zlq-Hani-CN", - "zlq-Hani": "zlq-Hani-CN", - "zlu": "zlu-Latn-NG", - "zlu-Latn": "zlu-Latn-NG", - "zlu-NG": "zlu-Latn-NG", - "zma": "zma-Latn-AU", - "zma-AU": "zma-Latn-AU", - "zma-Latn": "zma-Latn-AU", - "zmb": "zmb-Latn-CD", - "zmb-CD": "zmb-Latn-CD", - "zmb-Latn": "zmb-Latn-CD", - "zmc": "zmc-Latn-AU", - "zmc-AU": "zmc-Latn-AU", - "zmc-Latn": "zmc-Latn-AU", - "zmd": "zmd-Latn-AU", - "zmd-AU": "zmd-Latn-AU", - "zmd-Latn": "zmd-Latn-AU", - "zme": "zme-Latn-AU", - "zme-AU": "zme-Latn-AU", - "zme-Latn": "zme-Latn-AU", - "zmf": "zmf-Latn-CD", - "zmf-CD": "zmf-Latn-CD", - "zmf-Latn": "zmf-Latn-CD", - "zmg": "zmg-Latn-AU", - "zmg-AU": "zmg-Latn-AU", - "zmg-Latn": "zmg-Latn-AU", - "zmh": "zmh-Latn-PG", - "zmh-Latn": "zmh-Latn-PG", - "zmh-PG": "zmh-Latn-PG", - "zmi": "zmi-Latn-MY", - "zmi-Latn": "zmi-Latn-MY", - "zmi-MY": "zmi-Latn-MY", - "zmj": "zmj-Latn-AU", - "zmj-AU": "zmj-Latn-AU", - "zmj-Latn": "zmj-Latn-AU", - "zmk": "zmk-Latn-AU", - "zmk-AU": "zmk-Latn-AU", - "zmk-Latn": "zmk-Latn-AU", - "zml": "zml-Latn-AU", - "zml-AU": "zml-Latn-AU", - "zml-Latn": "zml-Latn-AU", - "zmm": "zmm-Latn-AU", - "zmm-AU": "zmm-Latn-AU", - "zmm-Latn": "zmm-Latn-AU", - "zmn": "zmn-Latn-GA", - "zmn-GA": "zmn-Latn-GA", - "zmn-Latn": "zmn-Latn-GA", - "zmo": "zmo-Latn-SD", - "zmo-Latn": "zmo-Latn-SD", - "zmo-SD": "zmo-Latn-SD", - "zmp": "zmp-Latn-CD", - "zmp-CD": "zmp-Latn-CD", - "zmp-Latn": "zmp-Latn-CD", - "zmq": "zmq-Latn-CD", - "zmq-CD": "zmq-Latn-CD", - "zmq-Latn": "zmq-Latn-CD", - "zmr": "zmr-Latn-AU", - "zmr-AU": "zmr-Latn-AU", - "zmr-Latn": "zmr-Latn-AU", - "zms": "zms-Latn-CD", - "zms-CD": "zms-Latn-CD", - "zms-Latn": "zms-Latn-CD", - "zmt": "zmt-Latn-AU", - "zmt-AU": "zmt-Latn-AU", - "zmt-Latn": "zmt-Latn-AU", - "zmu": "zmu-Latn-AU", - "zmu-AU": "zmu-Latn-AU", - "zmu-Latn": "zmu-Latn-AU", - "zmv": "zmv-Latn-AU", - "zmv-AU": "zmv-Latn-AU", - "zmv-Latn": "zmv-Latn-AU", - "zmw": "zmw-Latn-CD", - "zmw-CD": "zmw-Latn-CD", - "zmw-Latn": "zmw-Latn-CD", - "zmx": "zmx-Latn-CG", - "zmx-CG": "zmx-Latn-CG", - "zmx-Latn": "zmx-Latn-CG", - "zmy": "zmy-Latn-AU", - "zmy-AU": "zmy-Latn-AU", - "zmy-Latn": "zmy-Latn-AU", - "zmz": "zmz-Latn-CD", - "zmz-CD": "zmz-Latn-CD", - "zmz-Latn": "zmz-Latn-CD", - "zna": "zna-Latn-TD", - "zna-Latn": "zna-Latn-TD", - "zna-TD": "zna-Latn-TD", - "zne": "zne-Latn-CD", - "zne-CD": "zne-Latn-CD", - "zne-Latn": "zne-Latn-CD", - "zng": "zng-Latn-VN", - "zng-Latn": "zng-Latn-VN", - "zng-VN": "zng-Latn-VN", - "znk": "znk-Latn-AU", - "znk-AU": "znk-Latn-AU", - "znk-Latn": "znk-Latn-AU", - "zns": "zns-Latn-NG", - "zns-Latn": "zns-Latn-NG", - "zns-NG": "zns-Latn-NG", - "zoc": "zoc-Latn-MX", - "zoc-Latn": "zoc-Latn-MX", - "zoc-MX": "zoc-Latn-MX", - "zoh": "zoh-Latn-MX", - "zoh-Latn": "zoh-Latn-MX", - "zoh-MX": "zoh-Latn-MX", - "zom": "zom-Latn-IN", - "zom-IN": "zom-Latn-IN", - "zom-Latn": "zom-Latn-IN", - "zoo": "zoo-Latn-MX", - "zoo-Latn": "zoo-Latn-MX", - "zoo-MX": "zoo-Latn-MX", - "zoq": "zoq-Latn-MX", - "zoq-Latn": "zoq-Latn-MX", - "zoq-MX": "zoq-Latn-MX", - "zor": "zor-Latn-MX", - "zor-Latn": "zor-Latn-MX", - "zor-MX": "zor-Latn-MX", - "zos": "zos-Latn-MX", - "zos-Latn": "zos-Latn-MX", - "zos-MX": "zos-Latn-MX", - "zpa": "zpa-Latn-MX", - "zpa-Latn": "zpa-Latn-MX", - "zpa-MX": "zpa-Latn-MX", - "zpb": "zpb-Latn-MX", - "zpb-Latn": "zpb-Latn-MX", - "zpb-MX": "zpb-Latn-MX", - "zpc": "zpc-Latn-MX", - "zpc-Latn": "zpc-Latn-MX", - "zpc-MX": "zpc-Latn-MX", - "zpd": "zpd-Latn-MX", - "zpd-Latn": "zpd-Latn-MX", - "zpd-MX": "zpd-Latn-MX", - "zpe": "zpe-Latn-MX", - "zpe-Latn": "zpe-Latn-MX", - "zpe-MX": "zpe-Latn-MX", - "zpf": "zpf-Latn-MX", - "zpf-Latn": "zpf-Latn-MX", - "zpf-MX": "zpf-Latn-MX", - "zpg": "zpg-Latn-MX", - "zpg-Latn": "zpg-Latn-MX", - "zpg-MX": "zpg-Latn-MX", - "zph": "zph-Latn-MX", - "zph-Latn": "zph-Latn-MX", - "zph-MX": "zph-Latn-MX", - "zpi": "zpi-Latn-MX", - "zpi-Latn": "zpi-Latn-MX", - "zpi-MX": "zpi-Latn-MX", - "zpj": "zpj-Latn-MX", - "zpj-Latn": "zpj-Latn-MX", - "zpj-MX": "zpj-Latn-MX", - "zpk": "zpk-Latn-MX", - "zpk-Latn": "zpk-Latn-MX", - "zpk-MX": "zpk-Latn-MX", - "zpl": "zpl-Latn-MX", - "zpl-Latn": "zpl-Latn-MX", - "zpl-MX": "zpl-Latn-MX", - "zpm": "zpm-Latn-MX", - "zpm-Latn": "zpm-Latn-MX", - "zpm-MX": "zpm-Latn-MX", - "zpn": "zpn-Latn-MX", - "zpn-Latn": "zpn-Latn-MX", - "zpn-MX": "zpn-Latn-MX", - "zpo": "zpo-Latn-MX", - "zpo-Latn": "zpo-Latn-MX", - "zpo-MX": "zpo-Latn-MX", - "zpp": "zpp-Latn-MX", - "zpp-Latn": "zpp-Latn-MX", - "zpp-MX": "zpp-Latn-MX", - "zpq": "zpq-Latn-MX", - "zpq-Latn": "zpq-Latn-MX", - "zpq-MX": "zpq-Latn-MX", - "zpr": "zpr-Latn-MX", - "zpr-Latn": "zpr-Latn-MX", - "zpr-MX": "zpr-Latn-MX", - "zps": "zps-Latn-MX", - "zps-Latn": "zps-Latn-MX", - "zps-MX": "zps-Latn-MX", - "zpt": "zpt-Latn-MX", - "zpt-Latn": "zpt-Latn-MX", - "zpt-MX": "zpt-Latn-MX", - "zpu": "zpu-Latn-MX", - "zpu-Latn": "zpu-Latn-MX", - "zpu-MX": "zpu-Latn-MX", - "zpv": "zpv-Latn-MX", - "zpv-Latn": "zpv-Latn-MX", - "zpv-MX": "zpv-Latn-MX", - "zpw": "zpw-Latn-MX", - "zpw-Latn": "zpw-Latn-MX", - "zpw-MX": "zpw-Latn-MX", - "zpx": "zpx-Latn-MX", - "zpx-Latn": "zpx-Latn-MX", - "zpx-MX": "zpx-Latn-MX", - "zpy": "zpy-Latn-MX", - "zpy-Latn": "zpy-Latn-MX", - "zpy-MX": "zpy-Latn-MX", - "zpz": "zpz-Latn-MX", - "zpz-Latn": "zpz-Latn-MX", - "zpz-MX": "zpz-Latn-MX", - "zqe": "zqe-Hani-CN", - "zqe-CN": "zqe-Hani-CN", - "zqe-Hani": "zqe-Hani-CN", - "zrg": "zrg-Orya-IN", - "zrg-IN": "zrg-Orya-IN", - "zrg-Orya": "zrg-Orya-IN", - "zrn": "zrn-Latn-TD", - "zrn-Latn": "zrn-Latn-TD", - "zrn-TD": "zrn-Latn-TD", - "zro": "zro-Latn-EC", - "zro-EC": "zro-Latn-EC", - "zro-Latn": "zro-Latn-EC", - "zrp": "zrp-Hebr-FR", - "zrp-FR": "zrp-Hebr-FR", - "zrp-Hebr": "zrp-Hebr-FR", - "zrs": "zrs-Latn-ID", - "zrs-ID": "zrs-Latn-ID", - "zrs-Latn": "zrs-Latn-ID", - "zsa": "zsa-Latn-PG", - "zsa-Latn": "zsa-Latn-PG", - "zsa-PG": "zsa-Latn-PG", - "zsr": "zsr-Latn-MX", - "zsr-Latn": "zsr-Latn-MX", - "zsr-MX": "zsr-Latn-MX", - "zsu": "zsu-Latn-PG", - "zsu-Latn": "zsu-Latn-PG", - "zsu-PG": "zsu-Latn-PG", - "zte": "zte-Latn-MX", - "zte-Latn": "zte-Latn-MX", - "zte-MX": "zte-Latn-MX", - "ztg": "ztg-Latn-MX", - "ztg-Latn": "ztg-Latn-MX", - "ztg-MX": "ztg-Latn-MX", - "ztl": "ztl-Latn-MX", - "ztl-Latn": "ztl-Latn-MX", - "ztl-MX": "ztl-Latn-MX", - "ztm": "ztm-Latn-MX", - "ztm-Latn": "ztm-Latn-MX", - "ztm-MX": "ztm-Latn-MX", - "ztn": "ztn-Latn-MX", - "ztn-Latn": "ztn-Latn-MX", - "ztn-MX": "ztn-Latn-MX", - "ztp": "ztp-Latn-MX", - "ztp-Latn": "ztp-Latn-MX", - "ztp-MX": "ztp-Latn-MX", - "ztq": "ztq-Latn-MX", - "ztq-Latn": "ztq-Latn-MX", - "ztq-MX": "ztq-Latn-MX", - "zts": "zts-Latn-MX", - "zts-Latn": "zts-Latn-MX", - "zts-MX": "zts-Latn-MX", - "ztt": "ztt-Latn-MX", - "ztt-Latn": "ztt-Latn-MX", - "ztt-MX": "ztt-Latn-MX", - "ztu": "ztu-Latn-MX", - "ztu-Latn": "ztu-Latn-MX", - "ztu-MX": "ztu-Latn-MX", - "ztx": "ztx-Latn-MX", - "ztx-Latn": "ztx-Latn-MX", - "ztx-MX": "ztx-Latn-MX", - "zty": "zty-Latn-MX", - "zty-Latn": "zty-Latn-MX", - "zty-MX": "zty-Latn-MX", - "zu": "zu-Latn-ZA", - "zu-Latn": "zu-Latn-ZA", - "zu-ZA": "zu-Latn-ZA", - "zuh": "zuh-Latn-PG", - "zuh-Latn": "zuh-Latn-PG", - "zuh-PG": "zuh-Latn-PG", - "zum": "zum-Arab-OM", - "zum-Arab": "zum-Arab-OM", - "zum-OM": "zum-Arab-OM", - "zun": "zun-Latn-US", - "zun-Latn": "zun-Latn-US", - "zun-US": "zun-Latn-US", - "zuy": "zuy-Latn-CM", - "zuy-CM": "zuy-Latn-CM", - "zuy-Latn": "zuy-Latn-CM", - "zwa": "zwa-Ethi-ET", - "zwa-ET": "zwa-Ethi-ET", - "zwa-Ethi": "zwa-Ethi-ET", - "zxx": "zxx-Latn-XX", - "zxx-Latn": "zxx-Latn-XX", - "zxx-XX": "zxx-Latn-XX", - "zyg": "zyg-Hani-CN", - "zyg-CN": "zyg-Hani-CN", - "zyg-Hani": "zyg-Hani-CN", - "zyj": "zyj-Latn-CN", - "zyj-CN": "zyj-Latn-CN", - "zyj-Latn": "zyj-Latn-CN", - "zyn": "zyn-Hani-CN", - "zyn-CN": "zyn-Hani-CN", - "zyn-Hani": "zyn-Hani-CN", - "zyp": "zyp-Latn-MM", - "zyp-Latn": "zyp-Latn-MM", - "zyp-MM": "zyp-Latn-MM", - "zza": "zza-Latn-TR", - "zza-Latn": "zza-Latn-TR", - "zza-TR": "zza-Latn-TR", - "zzj": "zzj-Hani-CN", - "zzj-CN": "zzj-Hani-CN", - "zzj-Hani": "zzj-Hani-CN" - }, - "macroLanguages": { - "ak": [ - "aka", - "fat", - "tw" - ], - "ar": [ - "aao", - "abh", - "abv", - "acm", - "acq", - "acw", - "acx", - "acy", - "adf", - "aeb", - "aec", - "afb", - "ajp", - "apc", - "apd", - "ara", - "arb", - "arq", - "ars", - "ary", - "arz", - "auz", - "avl", - "ayh", - "ayl", - "ayn", - "ayp", - "bbz", - "pga", - "shu", - "ssh" - ], - "ay": [ - "ayc", - "aym", - "ayr" - ], - "az": [ - "azb", - "aze", - "azj" - ], - "cr": [ - "cre", - "crj", - "crk", - "crl", - "crm", - "csw", - "cwd" - ], - "et": [ - "ekk", - "est", - "vro" - ], - "fa": [ - "fas", - "pes", - "prs" - ], - "ff": [ - "ffm", - "fub", - "fuc", - "fue", - "fuf", - "fuh", - "fui", - "ful", - "fuq", - "fuv" - ], - "gn": [ - "ggo", - "gno", - "gon" - ], - "ik": [ - "esi", - "esk", - "ipk" - ], - "iu": [ - "ike", - "ikt", - "iku" - ], - "kg": [ - "kng", - "kon", - "kwy", - "ldi" - ], - "kr": [ - "kau", - "kby", - "knc", - "krt" - ], - "ku": [ - "ckb", - "kmr", - "kur", - "sdh" - ], - "kv": [ - "koi", - "kom", - "kpv" - ], - "lv": [ - "lav", - "ltg", - "lvs" - ], - "mg": [ - "bhr", - "bjq", - "bmm", - "bzc", - "mlg", - "msh", - "plt", - "skg", - "tdx", - "tkg", - "txy", - "xmv", - "xmw" - ], - "mn": [ - "khk", - "mon", - "mvf" - ], - "ms": [ - "btj", - "bve", - "bvu", - "coa", - "id", - "jax", - "max", - "meo", - "mfa", - "mly", - "mqg", - "msi", - "vkt", - "xmm" - ], - "no": [ - "nb", - "nn", - "nno", - "nob" - ], - "oj": [ - "ciw", - "ojb", - "ojc", - "ojg", - "oji", - "ojs", - "ojw", - "otw" - ], - "om": [ - "gax", - "gaz", - "hae", - "orc", - "orm" - ], - "qu": [ - "cqu", - "qub", - "qud", - "que", - "quf", - "qug", - "quh", - "quk", - "qul", - "qup", - "qur", - "qus", - "quw", - "qux", - "quy", - "quz", - "qva", - "qvc", - "qve", - "qvh", - "qvi", - "qvj", - "qvl", - "qvm", - "qvn", - "qvo", - "qvp", - "qvs", - "qvw", - "qvz", - "qwa", - "qwc", - "qwh", - "qws", - "qxa", - "qxc", - "qxh", - "qxl", - "qxn", - "qxo", - "qxp", - "qxr", - "qxt", - "qxu", - "qxw" - ], - "sc": [ - "sdc", - "sdn", - "src", - "srd", - "sro" - ], - "sq": [ - "aae", - "aat", - "aln", - "als", - "sqi" - ], - "sw": [ - "swa", - "swc", - "swh" - ], - "uz": [ - "uzb", - "uzn", - "uzn" - ], - "yi": [ - "ydd", - "yid", - "yih" - ], - "za": [ - "zch", - "zeh", - "zgb", - "zgm", - "zgn", - "zha", - "zhd", - "zhn", - "zlj", - "zln", - "zlq", - "zqe", - "zyb", - "zyg", - "zyj", - "zyn", - "zzj" - ], - "zh": [ - "cdo", - "cjy", - "cmn", - "cpx", - "czh", - "czo", - "gan", - "hak", - "hsn", - "mnp", - "nan", - "wuu", - "yue", - "zho" - ] - }, - "macroLanguagesReverse": { - "aae": "sq", - "aao": "ar", - "aat": "sq", - "abh": "ar", - "abv": "ar", - "acm": "ar", - "acq": "ar", - "acw": "ar", - "acx": "ar", - "acy": "ar", - "adf": "ar", - "aeb": "ar", - "aec": "ar", - "afb": "ar", - "ajp": "ar", - "aka": "ak", - "aln": "sq", - "als": "sq", - "apc": "ar", - "apd": "ar", - "ara": "ar", - "arb": "ar", - "arq": "ar", - "ars": "ar", - "ary": "ar", - "arz": "ar", - "auz": "ar", - "avl": "ar", - "ayc": "ay", - "ayh": "ar", - "ayl": "ar", - "aym": "ay", - "ayn": "ar", - "ayp": "ar", - "ayr": "ay", - "azb": "az", - "aze": "az", - "azj": "az", - "bbz": "ar", - "bhr": "mg", - "bjq": "mg", - "bmm": "mg", - "btj": "ms", - "bve": "ms", - "bvu": "ms", - "bzc": "mg", - "cdo": "zh", - "ciw": "oj", - "cjy": "zh", - "ckb": "ku", - "cmn": "zh", - "coa": "ms", - "cpx": "zh", - "cqu": "qu", - "cre": "cr", - "crj": "cr", - "crk": "cr", - "crl": "cr", - "crm": "cr", - "csw": "cr", - "cwd": "cr", - "czh": "zh", - "czo": "zh", - "ekk": "et", - "esi": "ik", - "esk": "ik", - "est": "et", - "fas": "fa", - "fat": "ak", - "ffm": "ff", - "fub": "ff", - "fuc": "ff", - "fue": "ff", - "fuf": "ff", - "fuh": "ff", - "fui": "ff", - "ful": "ff", - "fuq": "ff", - "fuv": "ff", - "gan": "zh", - "gax": "om", - "gaz": "om", - "ggo": "gn", - "gno": "gn", - "gon": "gn", - "hae": "om", - "hak": "zh", - "hsn": "zh", - "id": "ms", - "ike": "iu", - "ikt": "iu", - "iku": "iu", - "ipk": "ik", - "jax": "ms", - "kau": "kr", - "kby": "kr", - "khk": "mn", - "kmr": "ku", - "knc": "kr", - "kng": "kg", - "koi": "kv", - "kom": "kv", - "kon": "kg", - "kpv": "kv", - "krt": "kr", - "kur": "ku", - "kwy": "kg", - "lav": "lv", - "ldi": "kg", - "ltg": "lv", - "lvs": "lv", - "max": "ms", - "meo": "ms", - "mfa": "ms", - "mlg": "mg", - "mly": "ms", - "mnp": "zh", - "mon": "mn", - "mqg": "ms", - "msh": "mg", - "msi": "ms", - "mvf": "mn", - "nan": "zh", - "nb": "no", - "nn": "no", - "nno": "no", - "nob": "no", - "ojb": "oj", - "ojc": "oj", - "ojg": "oj", - "oji": "oj", - "ojs": "oj", - "ojw": "oj", - "orc": "om", - "orm": "om", - "otw": "oj", - "pes": "fa", - "pga": "ar", - "plt": "mg", - "prs": "fa", - "qub": "qu", - "qud": "qu", - "que": "qu", - "quf": "qu", - "qug": "qu", - "quh": "qu", - "quk": "qu", - "qul": "qu", - "qup": "qu", - "qur": "qu", - "qus": "qu", - "quw": "qu", - "qux": "qu", - "quy": "qu", - "quz": "qu", - "qva": "qu", - "qvc": "qu", - "qve": "qu", - "qvh": "qu", - "qvi": "qu", - "qvj": "qu", - "qvl": "qu", - "qvm": "qu", - "qvn": "qu", - "qvo": "qu", - "qvp": "qu", - "qvs": "qu", - "qvw": "qu", - "qvz": "qu", - "qwa": "qu", - "qwc": "qu", - "qwh": "qu", - "qws": "qu", - "qxa": "qu", - "qxc": "qu", - "qxh": "qu", - "qxl": "qu", - "qxn": "qu", - "qxo": "qu", - "qxp": "qu", - "qxr": "qu", - "qxt": "qu", - "qxu": "qu", - "qxw": "qu", - "sdc": "sc", - "sdh": "ku", - "sdn": "sc", - "shu": "ar", - "skg": "mg", - "sqi": "sq", - "src": "sc", - "srd": "sc", - "sro": "sc", - "ssh": "ar", - "swa": "sw", - "swc": "sw", - "swh": "sw", - "tdx": "mg", - "tkg": "mg", - "tw": "ak", - "txy": "mg", - "uzb": "uz", - "uzn": "uz", - "vkt": "ms", - "vro": "et", - "wuu": "zh", - "xmm": "ms", - "xmv": "mg", - "xmw": "mg", - "ydd": "yi", - "yid": "yi", - "yih": "yi", - "yue": "zh", - "zch": "za", - "zeh": "za", - "zgb": "za", - "zgm": "za", - "zgn": "za", - "zha": "za", - "zhd": "za", - "zhn": "za", - "zho": "zh", - "zlj": "za", - "zln": "za", - "zlq": "za", - "zqe": "za", - "zyb": "za", - "zyg": "za", - "zyj": "za", - "zyn": "za", - "zzj": "za" - }, - "mutualIntelligibility": { - "af-fy": 20, - "af-nl": 33, - "aii-cld": 30, - "aii-tru": 30, - "az-crh": 30, - "az-gag": 30, - "az-tr": 50, - "az-uum": 30, - "be-pl": 30, - "be-ru": 50, - "be-uk": 75, - "bg-mk": 75, - "ca-es": 75, - "ca-fr": 50, - "ca-it": 50, - "ca-pt": 35, - "cld-aii": 40, - "cld-tru": 30, - "crh-az": 30, - "crh-gag": 30, - "crh-tr": 50, - "crh-uum": 30, - "cs-sk": 85, - "da-fo": 30, - "da-is": 30, - "da-no": 45, - "da-sv": 37, - "en-sco": 75, - "et-fi": 50, - "et-fit": 45, - "et-fkv": 45, - "et-krl": 40, - "fi-et": 50, - "fi-fit": 90, - "fi-fkv": 90, - "fi-krl": 80, - "fit-et": 45, - "fit-fi": 95, - "fit-fkv": 90, - "fit-krl": 80, - "fkv-et": 45, - "fkv-fi": 95, - "fkv-fit": 90, - "fkv-krl": 80, - "fo-da": 83, - "fo-is": 60, - "fo-no": 70, - "fo-sv": 58, - "fr-ca": 50, - "fr-es": 50, - "fr-it": 50, - "fr-pt": 35, - "fy-af": 40, - "fy-nl": 50, - "gag-az": 30, - "gag-crh": 30, - "gag-tr": 50, - "gag-uum": 30, - "is-da": 54, - "is-fo": 60, - "is-no": 34, - "is-sv": 33, - "it-ca": 50, - "it-es": 40, - "it-fr": 50, - "it-pt": 25, - "krl-et": 45, - "krl-fi": 95, - "krl-fit": 90, - "krl-fkv": 80, - "mk-bg": 75, - "nl-af": 50, - "nl-fy": 50, - "no-da": 65, - "no-fo": 40, - "no-is": 40, - "no-sv": 66, - "ovd-sv": 33, - "ru-be": 30, - "ru-pl": 25, - "ru-uk": 50, - "sco-en": 85, - "sk-cs": 85, - "sv-da": 44, - "sv-fo": 33, - "sv-is": 33, - "sv-no": 53, - "sv-ovd": 33, - "tr-az": 30, - "tr-crh": 30, - "tr-gag": 30, - "tr-uum": 30, - "tru-aii": 40, - "tru-cld": 30, - "uk-be": 75, - "uk-pl": 30, - "uk-ru": 75, - "uum-az": 30, - "uum-crh": 30, - "uum-gag": 30, - "uum-tr": 50 - }, - "territoryContainment": { - "001": [ - "EU", - "EZ", - "UN", - "019", - "002", - "150", - "142", - "009" - ], - "002": [ - "202", - "015", - "011", - "017", - "014", - "018" - ], - "003": [ - "021", - "013", - "029" - ], - "005": [ - "AR", - "BO", - "BR", - "BV", - "CL", - "CO", - "EC", - "FK", - "GF", - "GS", - "GY", - "PE", - "PY", - "SR", - "UY", - "VE" - ], - "009": [ - "053", - "054", - "057", - "061", - "QO" - ], - "011": [ - "BF", - "BJ", - "CI", - "CV", - "GH", - "GM", - "GN", - "GW", - "LR", - "ML", - "MR", - "NE", - "NG", - "SH", - "SL", - "SN", - "TG" - ], - "013": [ - "BZ", - "CR", - "GT", - "HN", - "MX", - "NI", - "PA", - "SV" - ], - "014": [ - "BI", - "DJ", - "ER", - "ET", - "IO", - "KE", - "KM", - "MG", - "MU", - "MW", - "MZ", - "RE", - "RW", - "SC", - "SO", - "SS", - "TF", - "TZ", - "UG", - "YT", - "ZM", - "ZW" - ], - "015": [ - "DZ", - "EG", - "EH", - "LY", - "MA", - "SD", - "TN", - "EA", - "IC" - ], - "017": [ - "AO", - "CD", - "CF", - "CG", - "CM", - "GA", - "GQ", - "ST", - "TD" - ], - "018": [ - "BW", - "LS", - "NA", - "SZ", - "ZA" - ], - "019": [ - "003", - "419", - "021", - "013", - "029", - "005" - ], - "021": [ - "BM", - "CA", - "GL", - "PM", - "US" - ], - "029": [ - "AG", - "AI", - "AW", - "BB", - "BL", - "BQ", - "BS", - "CU", - "CW", - "DM", - "DO", - "GD", - "GP", - "HT", - "JM", - "KN", - "KY", - "LC", - "MF", - "MQ", - "MS", - "PR", - "SX", - "TC", - "TT", - "VC", - "VG", - "VI" - ], - "030": [ - "CN", - "HK", - "JP", - "KP", - "KR", - "MN", - "MO", - "TW" - ], - "034": [ - "AF", - "BD", - "BT", - "IN", - "IR", - "LK", - "MV", - "NP", - "PK" - ], - "035": [ - "BN", - "ID", - "KH", - "LA", - "MM", - "MY", - "PH", - "SG", - "TH", - "TL", - "VN" - ], - "039": [ - "AD", - "AL", - "BA", - "ES", - "GI", - "GR", - "HR", - "IT", - "ME", - "MK", - "MT", - "RS", - "PT", - "SI", - "SM", - "VA", - "XK" - ], - "053": [ - "AU", - "CC", - "CX", - "HM", - "NF", - "NZ" - ], - "054": [ - "FJ", - "NC", - "PG", - "SB", - "VU" - ], - "057": [ - "FM", - "GU", - "KI", - "MH", - "MP", - "NR", - "PW", - "UM" - ], - "061": [ - "AS", - "CK", - "NU", - "PF", - "PN", - "TK", - "TO", - "TV", - "WF", - "WS" - ], - "142": [ - "145", - "143", - "030", - "034", - "035" - ], - "143": [ - "TM", - "TJ", - "KG", - "KZ", - "UZ" - ], - "145": [ - "AE", - "AM", - "AZ", - "BH", - "CY", - "GE", - "IL", - "IQ", - "JO", - "KW", - "LB", - "OM", - "PS", - "QA", - "SA", - "SY", - "TR", - "YE" - ], - "150": [ - "154", - "155", - "151", - "039" - ], - "151": [ - "BG", - "BY", - "CZ", - "HU", - "MD", - "PL", - "RO", - "RU", - "SK", - "UA" - ], - "154": [ - "GG", - "IM", - "JE", - "AX", - "DK", - "EE", - "FI", - "FO", - "GB", - "IE", - "IS", - "LT", - "LV", - "NO", - "SE", - "SJ", - "CQ" - ], - "155": [ - "AT", - "BE", - "CH", - "DE", - "FR", - "LI", - "LU", - "MC", - "NL" - ], - "202": [ - "011", - "017", - "014", - "018" - ], - "419": [ - "013", - "029", - "005" - ], - "EU": [ - "AT", - "BE", - "CY", - "CZ", - "DE", - "DK", - "EE", - "ES", - "FI", - "FR", - "GR", - "HR", - "HU", - "IE", - "IT", - "LT", - "LU", - "LV", - "MT", - "NL", - "PL", - "PT", - "SE", - "SI", - "SK", - "BG", - "RO" - ], - "EZ": [ - "AT", - "BE", - "CY", - "DE", - "EE", - "ES", - "FI", - "FR", - "GR", - "IE", - "IT", - "LT", - "LU", - "LV", - "MT", - "NL", - "PT", - "SI", - "SK" - ], - "QO": [ - "AQ", - "AC", - "CP", - "DG", - "TA" - ], - "UN": [ - "AD", - "AE", - "AF", - "AG", - "AL", - "AM", - "AO", - "AR", - "AT", - "AU", - "AZ", - "BA", - "BB", - "BD", - "BE", - "BF", - "BG", - "BH", - "BI", - "BJ", - "BN", - "BO", - "BR", - "BS", - "BT", - "BW", - "BY", - "BZ", - "CA", - "CD", - "CF", - "CG", - "CH", - "CI", - "CL", - "CM", - "CN", - "CO", - "CR", - "CU", - "CV", - "CY", - "CZ", - "DE", - "DJ", - "DK", - "DM", - "DO", - "DZ", - "EC", - "EE", - "EG", - "ER", - "ES", - "ET", - "FI", - "FJ", - "FM", - "FR", - "GA", - "GB", - "GD", - "GE", - "GH", - "GM", - "GN", - "GQ", - "GR", - "GT", - "GW", - "GY", - "HN", - "HR", - "HT", - "HU", - "ID", - "IE", - "IL", - "IN", - "IQ", - "IR", - "IS", - "IT", - "JM", - "JO", - "JP", - "KE", - "KG", - "KH", - "KI", - "KM", - "KN", - "KP", - "KR", - "KW", - "KZ", - "LA", - "LB", - "LC", - "LI", - "LK", - "LR", - "LS", - "LT", - "LU", - "LV", - "LY", - "MA", - "MC", - "MD", - "ME", - "MG", - "MH", - "MK", - "ML", - "MM", - "MN", - "MR", - "MT", - "MU", - "MV", - "MX", - "MW", - "MY", - "MZ", - "NA", - "NE", - "NG", - "NI", - "NL", - "NO", - "NR", - "NP", - "NZ", - "OM", - "PA", - "PE", - "PG", - "PH", - "PK", - "PL", - "PT", - "PW", - "PY", - "QA", - "RO", - "RS", - "RU", - "RW", - "SA", - "SB", - "SC", - "SD", - "SE", - "SG", - "SI", - "SK", - "SL", - "SM", - "SN", - "SO", - "SR", - "SS", - "ST", - "SV", - "SY", - "SZ", - "TD", - "TG", - "TH", - "TJ", - "TL", - "TM", - "TN", - "TO", - "TR", - "TT", - "TV", - "TZ", - "UA", - "UG", - "US", - "UY", - "UZ", - "VC", - "VE", - "VN", - "VU", - "WS", - "YE", - "ZA", - "ZM", - "ZW" - ] - }, - "territoryContainmentReverse": { - "002": [ - "001" - ], - "003": [ - "001", - "019" - ], - "005": [ - "001", - "019", - "419" - ], - "009": [ - "001" - ], - "011": [ - "001", - "002", - "202" - ], - "013": [ - "001", - "019", - "419", - "003" - ], - "014": [ - "001", - "002", - "202" - ], - "015": [ - "001", - "002" - ], - "017": [ - "001", - "002", - "202" - ], - "018": [ - "001", - "002", - "202" - ], - "019": [ - "001" - ], - "021": [ - "001", - "019", - "003" - ], - "029": [ - "001", - "019", - "419", - "003" - ], - "030": [ - "001", - "142" - ], - "034": [ - "001", - "142" - ], - "035": [ - "001", - "142" - ], - "039": [ - "001", - "150" - ], - "053": [ - "001", - "009" - ], - "054": [ - "001", - "009" - ], - "057": [ - "001", - "009" - ], - "061": [ - "001", - "009" - ], - "142": [ - "001" - ], - "143": [ - "001", - "142" - ], - "145": [ - "001", - "142" - ], - "150": [ - "001" - ], - "151": [ - "001", - "150" - ], - "154": [ - "001", - "150" - ], - "155": [ - "001", - "150" - ], - "202": [ - "001", - "002" - ], - "419": [ - "001", - "019" - ], - "AC": [ - "001", - "009", - "QO" - ], - "AD": [ - "001", - "UN", - "150", - "039" - ], - "AE": [ - "001", - "UN", - "142", - "145" - ], - "AF": [ - "001", - "UN", - "142", - "034" - ], - "AG": [ - "001", - "UN", - "019", - "419", - "003", - "029" - ], - "AI": [ - "001", - "019", - "419", - "003", - "029" - ], - "AL": [ - "001", - "UN", - "150", - "039" - ], - "AM": [ - "001", - "UN", - "142", - "145" - ], - "AO": [ - "001", - "UN", - "002", - "202", - "017" - ], - "AQ": [ - "001", - "009", - "QO" - ], - "AR": [ - "001", - "UN", - "019", - "419", - "005" - ], - "AS": [ - "001", - "009", - "061" - ], - "AT": [ - "001", - "EU", - "EZ", - "UN", - "150", - "155" - ], - "AU": [ - "001", - "UN", - "009", - "053" - ], - "AW": [ - "001", - "019", - "419", - "003", - "029" - ], - "AX": [ - "001", - "150", - "154" - ], - "AZ": [ - "001", - "UN", - "142", - "145" - ], - "BA": [ - "001", - "UN", - "150", - "039" - ], - "BB": [ - "001", - "UN", - "019", - "419", - "003", - "029" - ], - "BD": [ - "001", - "UN", - "142", - "034" - ], - "BE": [ - "001", - "EU", - "EZ", - "UN", - "150", - "155" - ], - "BF": [ - "001", - "UN", - "002", - "202", - "011" - ], - "BG": [ - "001", - "EU", - "UN", - "150", - "151" - ], - "BH": [ - "001", - "UN", - "142", - "145" - ], - "BI": [ - "001", - "UN", - "002", - "202", - "014" - ], - "BJ": [ - "001", - "UN", - "002", - "202", - "011" - ], - "BL": [ - "001", - "019", - "419", - "003", - "029" - ], - "BM": [ - "001", - "019", - "003", - "021" - ], - "BN": [ - "001", - "UN", - "142", - "035" - ], - "BO": [ - "001", - "UN", - "019", - "419", - "005" - ], - "BQ": [ - "001", - "019", - "419", - "003", - "029" - ], - "BR": [ - "001", - "UN", - "019", - "419", - "005" - ], - "BS": [ - "001", - "UN", - "019", - "419", - "003", - "029" - ], - "BT": [ - "001", - "UN", - "142", - "034" - ], - "BV": [ - "001", - "019", - "419", - "005" - ], - "BW": [ - "001", - "UN", - "002", - "202", - "018" - ], - "BY": [ - "001", - "UN", - "150", - "151" - ], - "BZ": [ - "001", - "UN", - "019", - "419", - "003", - "013" - ], - "CA": [ - "001", - "UN", - "019", - "003", - "021" - ], - "CC": [ - "001", - "009", - "053" - ], - "CD": [ - "001", - "UN", - "002", - "202", - "017" - ], - "CF": [ - "001", - "UN", - "002", - "202", - "017" - ], - "CG": [ - "001", - "UN", - "002", - "202", - "017" - ], - "CH": [ - "001", - "UN", - "150", - "155" - ], - "CI": [ - "001", - "UN", - "002", - "202", - "011" - ], - "CK": [ - "001", - "009", - "061" - ], - "CL": [ - "001", - "UN", - "019", - "419", - "005" - ], - "CM": [ - "001", - "UN", - "002", - "202", - "017" - ], - "CN": [ - "001", - "UN", - "142", - "030" - ], - "CO": [ - "001", - "UN", - "019", - "419", - "005" - ], - "CP": [ - "001", - "009", - "QO" - ], - "CQ": [ - "001", - "150", - "154" - ], - "CR": [ - "001", - "UN", - "019", - "419", - "003", - "013" - ], - "CU": [ - "001", - "UN", - "019", - "419", - "003", - "029" - ], - "CV": [ - "001", - "UN", - "002", - "202", - "011" - ], - "CW": [ - "001", - "019", - "419", - "003", - "029" - ], - "CX": [ - "001", - "009", - "053" - ], - "CY": [ - "001", - "EU", - "EZ", - "UN", - "142", - "145" - ], - "CZ": [ - "001", - "EU", - "UN", - "150", - "151" - ], - "DE": [ - "001", - "EU", - "EZ", - "UN", - "150", - "155" - ], - "DG": [ - "001", - "009", - "QO" - ], - "DJ": [ - "001", - "UN", - "002", - "202", - "014" - ], - "DK": [ - "001", - "EU", - "UN", - "150", - "154" - ], - "DM": [ - "001", - "UN", - "019", - "419", - "003", - "029" - ], - "DO": [ - "001", - "UN", - "019", - "419", - "003", - "029" - ], - "DZ": [ - "001", - "UN", - "002", - "015" - ], - "EA": [ - "001", - "002", - "015" - ], - "EC": [ - "001", - "UN", - "019", - "419", - "005" - ], - "EE": [ - "001", - "EU", - "EZ", - "UN", - "150", - "154" - ], - "EG": [ - "001", - "UN", - "002", - "015" - ], - "EH": [ - "001", - "002", - "015" - ], - "ER": [ - "001", - "UN", - "002", - "202", - "014" - ], - "ES": [ - "001", - "EU", - "EZ", - "UN", - "150", - "039" - ], - "ET": [ - "001", - "UN", - "002", - "202", - "014" - ], - "EU": [ - "001" - ], - "EZ": [ - "001" - ], - "FI": [ - "001", - "EU", - "EZ", - "UN", - "150", - "154" - ], - "FJ": [ - "001", - "UN", - "009", - "054" - ], - "FK": [ - "001", - "019", - "419", - "005" - ], - "FM": [ - "001", - "UN", - "009", - "057" - ], - "FO": [ - "001", - "150", - "154" - ], - "FR": [ - "001", - "EU", - "EZ", - "UN", - "150", - "155" - ], - "GA": [ - "001", - "UN", - "002", - "202", - "017" - ], - "GB": [ - "001", - "UN", - "150", - "154" - ], - "GD": [ - "001", - "UN", - "019", - "419", - "003", - "029" - ], - "GE": [ - "001", - "UN", - "142", - "145" - ], - "GF": [ - "001", - "019", - "419", - "005" - ], - "GG": [ - "001", - "150", - "154" - ], - "GH": [ - "001", - "UN", - "002", - "202", - "011" - ], - "GI": [ - "001", - "150", - "039" - ], - "GL": [ - "001", - "019", - "003", - "021" - ], - "GM": [ - "001", - "UN", - "002", - "202", - "011" - ], - "GN": [ - "001", - "UN", - "002", - "202", - "011" - ], - "GP": [ - "001", - "019", - "419", - "003", - "029" - ], - "GQ": [ - "001", - "UN", - "002", - "202", - "017" - ], - "GR": [ - "001", - "EU", - "EZ", - "UN", - "150", - "039" - ], - "GS": [ - "001", - "019", - "419", - "005" - ], - "GT": [ - "001", - "UN", - "019", - "419", - "003", - "013" - ], - "GU": [ - "001", - "009", - "057" - ], - "GW": [ - "001", - "UN", - "002", - "202", - "011" - ], - "GY": [ - "001", - "UN", - "019", - "419", - "005" - ], - "HK": [ - "001", - "142", - "030" - ], - "HM": [ - "001", - "009", - "053" - ], - "HN": [ - "001", - "UN", - "019", - "419", - "003", - "013" - ], - "HR": [ - "001", - "EU", - "UN", - "150", - "039" - ], - "HT": [ - "001", - "UN", - "019", - "419", - "003", - "029" - ], - "HU": [ - "001", - "EU", - "UN", - "150", - "151" - ], - "IC": [ - "001", - "002", - "015" - ], - "ID": [ - "001", - "UN", - "142", - "035" - ], - "IE": [ - "001", - "EU", - "EZ", - "UN", - "150", - "154" - ], - "IL": [ - "001", - "UN", - "142", - "145" - ], - "IM": [ - "001", - "150", - "154" - ], - "IN": [ - "001", - "UN", - "142", - "034" - ], - "IO": [ - "001", - "002", - "202", - "014" - ], - "IQ": [ - "001", - "UN", - "142", - "145" - ], - "IR": [ - "001", - "UN", - "142", - "034" - ], - "IS": [ - "001", - "UN", - "150", - "154" - ], - "IT": [ - "001", - "EU", - "EZ", - "UN", - "150", - "039" - ], - "JE": [ - "001", - "150", - "154" - ], - "JM": [ - "001", - "UN", - "019", - "419", - "003", - "029" - ], - "JO": [ - "001", - "UN", - "142", - "145" - ], - "JP": [ - "001", - "UN", - "142", - "030" - ], - "KE": [ - "001", - "UN", - "002", - "202", - "014" - ], - "KG": [ - "001", - "UN", - "142", - "143" - ], - "KH": [ - "001", - "UN", - "142", - "035" - ], - "KI": [ - "001", - "UN", - "009", - "057" - ], - "KM": [ - "001", - "UN", - "002", - "202", - "014" - ], - "KN": [ - "001", - "UN", - "019", - "419", - "003", - "029" - ], - "KP": [ - "001", - "UN", - "142", - "030" - ], - "KR": [ - "001", - "UN", - "142", - "030" - ], - "KW": [ - "001", - "UN", - "142", - "145" - ], - "KY": [ - "001", - "019", - "419", - "003", - "029" - ], - "KZ": [ - "001", - "UN", - "142", - "143" - ], - "LA": [ - "001", - "UN", - "142", - "035" - ], - "LB": [ - "001", - "UN", - "142", - "145" - ], - "LC": [ - "001", - "UN", - "019", - "419", - "003", - "029" - ], - "LI": [ - "001", - "UN", - "150", - "155" - ], - "LK": [ - "001", - "UN", - "142", - "034" - ], - "LR": [ - "001", - "UN", - "002", - "202", - "011" - ], - "LS": [ - "001", - "UN", - "002", - "202", - "018" - ], - "LT": [ - "001", - "EU", - "EZ", - "UN", - "150", - "154" - ], - "LU": [ - "001", - "EU", - "EZ", - "UN", - "150", - "155" - ], - "LV": [ - "001", - "EU", - "EZ", - "UN", - "150", - "154" - ], - "LY": [ - "001", - "UN", - "002", - "015" - ], - "MA": [ - "001", - "UN", - "002", - "015" - ], - "MC": [ - "001", - "UN", - "150", - "155" - ], - "MD": [ - "001", - "UN", - "150", - "151" - ], - "ME": [ - "001", - "UN", - "150", - "039" - ], - "MF": [ - "001", - "019", - "419", - "003", - "029" - ], - "MG": [ - "001", - "UN", - "002", - "202", - "014" - ], - "MH": [ - "001", - "UN", - "009", - "057" - ], - "MK": [ - "001", - "UN", - "150", - "039" - ], - "ML": [ - "001", - "UN", - "002", - "202", - "011" - ], - "MM": [ - "001", - "UN", - "142", - "035" - ], - "MN": [ - "001", - "UN", - "142", - "030" - ], - "MO": [ - "001", - "142", - "030" - ], - "MP": [ - "001", - "009", - "057" - ], - "MQ": [ - "001", - "019", - "419", - "003", - "029" - ], - "MR": [ - "001", - "UN", - "002", - "202", - "011" - ], - "MS": [ - "001", - "019", - "419", - "003", - "029" - ], - "MT": [ - "001", - "EU", - "EZ", - "UN", - "150", - "039" - ], - "MU": [ - "001", - "UN", - "002", - "202", - "014" - ], - "MV": [ - "001", - "UN", - "142", - "034" - ], - "MW": [ - "001", - "UN", - "002", - "202", - "014" - ], - "MX": [ - "001", - "UN", - "019", - "419", - "003", - "013" - ], - "MY": [ - "001", - "UN", - "142", - "035" - ], - "MZ": [ - "001", - "UN", - "002", - "202", - "014" - ], - "NA": [ - "001", - "UN", - "002", - "202", - "018" - ], - "NC": [ - "001", - "009", - "054" - ], - "NE": [ - "001", - "UN", - "002", - "202", - "011" - ], - "NF": [ - "001", - "009", - "053" - ], - "NG": [ - "001", - "UN", - "002", - "202", - "011" - ], - "NI": [ - "001", - "UN", - "019", - "419", - "003", - "013" - ], - "NL": [ - "001", - "EU", - "EZ", - "UN", - "150", - "155" - ], - "NO": [ - "001", - "UN", - "150", - "154" - ], - "NP": [ - "001", - "UN", - "142", - "034" - ], - "NR": [ - "001", - "UN", - "009", - "057" - ], - "NU": [ - "001", - "009", - "061" - ], - "NZ": [ - "001", - "UN", - "009", - "053" - ], - "OM": [ - "001", - "UN", - "142", - "145" - ], - "PA": [ - "001", - "UN", - "019", - "419", - "003", - "013" - ], - "PE": [ - "001", - "UN", - "019", - "419", - "005" - ], - "PF": [ - "001", - "009", - "061" - ], - "PG": [ - "001", - "UN", - "009", - "054" - ], - "PH": [ - "001", - "UN", - "142", - "035" - ], - "PK": [ - "001", - "UN", - "142", - "034" - ], - "PL": [ - "001", - "EU", - "UN", - "150", - "151" - ], - "PM": [ - "001", - "019", - "003", - "021" - ], - "PN": [ - "001", - "009", - "061" - ], - "PR": [ - "001", - "019", - "419", - "003", - "029" - ], - "PS": [ - "001", - "142", - "145" - ], - "PT": [ - "001", - "EU", - "EZ", - "UN", - "150", - "039" - ], - "PW": [ - "001", - "UN", - "009", - "057" - ], - "PY": [ - "001", - "UN", - "019", - "419", - "005" - ], - "QA": [ - "001", - "UN", - "142", - "145" - ], - "QO": [ - "001", - "009" - ], - "RE": [ - "001", - "002", - "202", - "014" - ], - "RO": [ - "001", - "EU", - "UN", - "150", - "151" - ], - "RS": [ - "001", - "UN", - "150", - "039" - ], - "RU": [ - "001", - "UN", - "150", - "151" - ], - "RW": [ - "001", - "UN", - "002", - "202", - "014" - ], - "SA": [ - "001", - "UN", - "142", - "145" - ], - "SB": [ - "001", - "UN", - "009", - "054" - ], - "SC": [ - "001", - "UN", - "002", - "202", - "014" - ], - "SD": [ - "001", - "UN", - "002", - "015" - ], - "SE": [ - "001", - "EU", - "UN", - "150", - "154" - ], - "SG": [ - "001", - "UN", - "142", - "035" - ], - "SH": [ - "001", - "002", - "202", - "011" - ], - "SI": [ - "001", - "EU", - "EZ", - "UN", - "150", - "039" - ], - "SJ": [ - "001", - "150", - "154" - ], - "SK": [ - "001", - "EU", - "EZ", - "UN", - "150", - "151" - ], - "SL": [ - "001", - "UN", - "002", - "202", - "011" - ], - "SM": [ - "001", - "UN", - "150", - "039" - ], - "SN": [ - "001", - "UN", - "002", - "202", - "011" - ], - "SO": [ - "001", - "UN", - "002", - "202", - "014" - ], - "SR": [ - "001", - "UN", - "019", - "419", - "005" - ], - "SS": [ - "001", - "UN", - "002", - "202", - "014" - ], - "ST": [ - "001", - "UN", - "002", - "202", - "017" - ], - "SV": [ - "001", - "UN", - "019", - "419", - "003", - "013" - ], - "SX": [ - "001", - "019", - "419", - "003", - "029" - ], - "SY": [ - "001", - "UN", - "142", - "145" - ], - "SZ": [ - "001", - "UN", - "002", - "202", - "018" - ], - "TA": [ - "001", - "009", - "QO" - ], - "TC": [ - "001", - "019", - "419", - "003", - "029" - ], - "TD": [ - "001", - "UN", - "002", - "202", - "017" - ], - "TF": [ - "001", - "002", - "202", - "014" - ], - "TG": [ - "001", - "UN", - "002", - "202", - "011" - ], - "TH": [ - "001", - "UN", - "142", - "035" - ], - "TJ": [ - "001", - "UN", - "142", - "143" - ], - "TK": [ - "001", - "009", - "061" - ], - "TL": [ - "001", - "UN", - "142", - "035" - ], - "TM": [ - "001", - "UN", - "142", - "143" - ], - "TN": [ - "001", - "UN", - "002", - "015" - ], - "TO": [ - "001", - "UN", - "009", - "061" - ], - "TR": [ - "001", - "UN", - "142", - "145" - ], - "TT": [ - "001", - "UN", - "019", - "419", - "003", - "029" - ], - "TV": [ - "001", - "UN", - "009", - "061" - ], - "TW": [ - "001", - "142", - "030" - ], - "TZ": [ - "001", - "UN", - "002", - "202", - "014" - ], - "UA": [ - "001", - "UN", - "150", - "151" - ], - "UG": [ - "001", - "UN", - "002", - "202", - "014" - ], - "UM": [ - "001", - "009", - "057" - ], - "UN": [ - "001" - ], - "US": [ - "001", - "UN", - "019", - "003", - "021" - ], - "UY": [ - "001", - "UN", - "019", - "419", - "005" - ], - "UZ": [ - "001", - "UN", - "142", - "143" - ], - "VA": [ - "001", - "150", - "039" - ], - "VC": [ - "001", - "UN", - "019", - "419", - "003", - "029" - ], - "VE": [ - "001", - "UN", - "019", - "419", - "005" - ], - "VG": [ - "001", - "019", - "419", - "003", - "029" - ], - "VI": [ - "001", - "019", - "419", - "003", - "029" - ], - "VN": [ - "001", - "UN", - "142", - "035" - ], - "VU": [ - "001", - "UN", - "009", - "054" - ], - "WF": [ - "001", - "009", - "061" - ], - "WS": [ - "001", - "UN", - "009", - "061" - ], - "XK": [ - "001", - "150", - "039" - ], - "YE": [ - "001", - "UN", - "142", - "145" - ], - "YT": [ - "001", - "002", - "202", - "014" - ], - "ZA": [ - "001", - "UN", - "002", - "202", - "018" - ], - "ZM": [ - "001", - "UN", - "002", - "202", - "014" - ], - "ZW": [ - "001", - "UN", - "002", - "202", - "014" - ] - } -}; -ilib.data.ctype_l = { - "Ll": [ - [ - 97, - 122 - ], - [ - 181 - ], - [ - 223, - 246 - ], - [ - 248, - 255 - ], - [ - 257 - ], - [ - 259 - ], - [ - 261 - ], - [ - 263 - ], - [ - 265 - ], - [ - 267 - ], - [ - 269 - ], - [ - 271 - ], - [ - 273 - ], - [ - 275 - ], - [ - 277 - ], - [ - 279 - ], - [ - 281 - ], - [ - 283 - ], - [ - 285 - ], - [ - 287 - ], - [ - 289 - ], - [ - 291 - ], - [ - 293 - ], - [ - 295 - ], - [ - 297 - ], - [ - 299 - ], - [ - 301 - ], - [ - 303 - ], - [ - 305 - ], - [ - 307 - ], - [ - 309 - ], - [ - 311, - 312 - ], - [ - 314 - ], - [ - 316 - ], - [ - 318 - ], - [ - 320 - ], - [ - 322 - ], - [ - 324 - ], - [ - 326 - ], - [ - 328, - 329 - ], - [ - 331 - ], - [ - 333 - ], - [ - 335 - ], - [ - 337 - ], - [ - 339 - ], - [ - 341 - ], - [ - 343 - ], - [ - 345 - ], - [ - 347 - ], - [ - 349 - ], - [ - 351 - ], - [ - 353 - ], - [ - 355 - ], - [ - 357 - ], - [ - 359 - ], - [ - 361 - ], - [ - 363 - ], - [ - 365 - ], - [ - 367 - ], - [ - 369 - ], - [ - 371 - ], - [ - 373 - ], - [ - 375 - ], - [ - 378 - ], - [ - 380 - ], - [ - 382, - 384 - ], - [ - 387 - ], - [ - 389 - ], - [ - 392 - ], - [ - 396, - 397 - ], - [ - 402 - ], - [ - 405 - ], - [ - 409, - 411 - ], - [ - 414 - ], - [ - 417 - ], - [ - 419 - ], - [ - 421 - ], - [ - 424 - ], - [ - 426, - 427 - ], - [ - 429 - ], - [ - 432 - ], - [ - 436 - ], - [ - 438 - ], - [ - 441, - 442 - ], - [ - 445, - 447 - ], - [ - 454 - ], - [ - 457 - ], - [ - 460 - ], - [ - 462 - ], - [ - 464 - ], - [ - 466 - ], - [ - 468 - ], - [ - 470 - ], - [ - 472 - ], - [ - 474 - ], - [ - 476, - 477 - ], - [ - 479 - ], - [ - 481 - ], - [ - 483 - ], - [ - 485 - ], - [ - 487 - ], - [ - 489 - ], - [ - 491 - ], - [ - 493 - ], - [ - 495, - 496 - ], - [ - 499 - ], - [ - 501 - ], - [ - 505 - ], - [ - 507 - ], - [ - 509 - ], - [ - 511 - ], - [ - 513 - ], - [ - 515 - ], - [ - 517 - ], - [ - 519 - ], - [ - 521 - ], - [ - 523 - ], - [ - 525 - ], - [ - 527 - ], - [ - 529 - ], - [ - 531 - ], - [ - 533 - ], - [ - 535 - ], - [ - 537 - ], - [ - 539 - ], - [ - 541 - ], - [ - 543 - ], - [ - 545 - ], - [ - 547 - ], - [ - 549 - ], - [ - 551 - ], - [ - 553 - ], - [ - 555 - ], - [ - 557 - ], - [ - 559 - ], - [ - 561 - ], - [ - 563, - 569 - ], - [ - 572 - ], - [ - 575, - 576 - ], - [ - 578 - ], - [ - 583 - ], - [ - 585 - ], - [ - 587 - ], - [ - 589 - ], - [ - 591, - 659 - ], - [ - 661, - 687 - ], - [ - 881 - ], - [ - 883 - ], - [ - 887 - ], - [ - 891, - 893 - ], - [ - 912 - ], - [ - 940, - 974 - ], - [ - 976, - 977 - ], - [ - 981, - 983 - ], - [ - 985 - ], - [ - 987 - ], - [ - 989 - ], - [ - 991 - ], - [ - 993 - ], - [ - 995 - ], - [ - 997 - ], - [ - 999 - ], - [ - 1001 - ], - [ - 1003 - ], - [ - 1005 - ], - [ - 1007, - 1011 - ], - [ - 1013 - ], - [ - 1016 - ], - [ - 1019, - 1020 - ], - [ - 1072, - 1119 - ], - [ - 1121 - ], - [ - 1123 - ], - [ - 1125 - ], - [ - 1127 - ], - [ - 1129 - ], - [ - 1131 - ], - [ - 1133 - ], - [ - 1135 - ], - [ - 1137 - ], - [ - 1139 - ], - [ - 1141 - ], - [ - 1143 - ], - [ - 1145 - ], - [ - 1147 - ], - [ - 1149 - ], - [ - 1151 - ], - [ - 1153 - ], - [ - 1163 - ], - [ - 1165 - ], - [ - 1167 - ], - [ - 1169 - ], - [ - 1171 - ], - [ - 1173 - ], - [ - 1175 - ], - [ - 1177 - ], - [ - 1179 - ], - [ - 1181 - ], - [ - 1183 - ], - [ - 1185 - ], - [ - 1187 - ], - [ - 1189 - ], - [ - 1191 - ], - [ - 1193 - ], - [ - 1195 - ], - [ - 1197 - ], - [ - 1199 - ], - [ - 1201 - ], - [ - 1203 - ], - [ - 1205 - ], - [ - 1207 - ], - [ - 1209 - ], - [ - 1211 - ], - [ - 1213 - ], - [ - 1215 - ], - [ - 1218 - ], - [ - 1220 - ], - [ - 1222 - ], - [ - 1224 - ], - [ - 1226 - ], - [ - 1228 - ], - [ - 1230, - 1231 - ], - [ - 1233 - ], - [ - 1235 - ], - [ - 1237 - ], - [ - 1239 - ], - [ - 1241 - ], - [ - 1243 - ], - [ - 1245 - ], - [ - 1247 - ], - [ - 1249 - ], - [ - 1251 - ], - [ - 1253 - ], - [ - 1255 - ], - [ - 1257 - ], - [ - 1259 - ], - [ - 1261 - ], - [ - 1263 - ], - [ - 1265 - ], - [ - 1267 - ], - [ - 1269 - ], - [ - 1271 - ], - [ - 1273 - ], - [ - 1275 - ], - [ - 1277 - ], - [ - 1279 - ], - [ - 1281 - ], - [ - 1283 - ], - [ - 1285 - ], - [ - 1287 - ], - [ - 1289 - ], - [ - 1291 - ], - [ - 1293 - ], - [ - 1295 - ], - [ - 1297 - ], - [ - 1299 - ], - [ - 1301 - ], - [ - 1303 - ], - [ - 1305 - ], - [ - 1307 - ], - [ - 1309 - ], - [ - 1311 - ], - [ - 1313 - ], - [ - 1315 - ], - [ - 1317 - ], - [ - 1319 - ], - [ - 1321 - ], - [ - 1323 - ], - [ - 1325 - ], - [ - 1327 - ], - [ - 1376, - 1416 - ], - [ - 4304, - 4346 - ], - [ - 4349, - 4351 - ], - [ - 5112, - 5117 - ], - [ - 7296, - 7304 - ], - [ - 7306 - ], - [ - 7424, - 7467 - ], - [ - 7531, - 7543 - ], - [ - 7545, - 7578 - ], - [ - 7681 - ], - [ - 7683 - ], - [ - 7685 - ], - [ - 7687 - ], - [ - 7689 - ], - [ - 7691 - ], - [ - 7693 - ], - [ - 7695 - ], - [ - 7697 - ], - [ - 7699 - ], - [ - 7701 - ], - [ - 7703 - ], - [ - 7705 - ], - [ - 7707 - ], - [ - 7709 - ], - [ - 7711 - ], - [ - 7713 - ], - [ - 7715 - ], - [ - 7717 - ], - [ - 7719 - ], - [ - 7721 - ], - [ - 7723 - ], - [ - 7725 - ], - [ - 7727 - ], - [ - 7729 - ], - [ - 7731 - ], - [ - 7733 - ], - [ - 7735 - ], - [ - 7737 - ], - [ - 7739 - ], - [ - 7741 - ], - [ - 7743 - ], - [ - 7745 - ], - [ - 7747 - ], - [ - 7749 - ], - [ - 7751 - ], - [ - 7753 - ], - [ - 7755 - ], - [ - 7757 - ], - [ - 7759 - ], - [ - 7761 - ], - [ - 7763 - ], - [ - 7765 - ], - [ - 7767 - ], - [ - 7769 - ], - [ - 7771 - ], - [ - 7773 - ], - [ - 7775 - ], - [ - 7777 - ], - [ - 7779 - ], - [ - 7781 - ], - [ - 7783 - ], - [ - 7785 - ], - [ - 7787 - ], - [ - 7789 - ], - [ - 7791 - ], - [ - 7793 - ], - [ - 7795 - ], - [ - 7797 - ], - [ - 7799 - ], - [ - 7801 - ], - [ - 7803 - ], - [ - 7805 - ], - [ - 7807 - ], - [ - 7809 - ], - [ - 7811 - ], - [ - 7813 - ], - [ - 7815 - ], - [ - 7817 - ], - [ - 7819 - ], - [ - 7821 - ], - [ - 7823 - ], - [ - 7825 - ], - [ - 7827 - ], - [ - 7829, - 7837 - ], - [ - 7839 - ], - [ - 7841 - ], - [ - 7843 - ], - [ - 7845 - ], - [ - 7847 - ], - [ - 7849 - ], - [ - 7851 - ], - [ - 7853 - ], - [ - 7855 - ], - [ - 7857 - ], - [ - 7859 - ], - [ - 7861 - ], - [ - 7863 - ], - [ - 7865 - ], - [ - 7867 - ], - [ - 7869 - ], - [ - 7871 - ], - [ - 7873 - ], - [ - 7875 - ], - [ - 7877 - ], - [ - 7879 - ], - [ - 7881 - ], - [ - 7883 - ], - [ - 7885 - ], - [ - 7887 - ], - [ - 7889 - ], - [ - 7891 - ], - [ - 7893 - ], - [ - 7895 - ], - [ - 7897 - ], - [ - 7899 - ], - [ - 7901 - ], - [ - 7903 - ], - [ - 7905 - ], - [ - 7907 - ], - [ - 7909 - ], - [ - 7911 - ], - [ - 7913 - ], - [ - 7915 - ], - [ - 7917 - ], - [ - 7919 - ], - [ - 7921 - ], - [ - 7923 - ], - [ - 7925 - ], - [ - 7927 - ], - [ - 7929 - ], - [ - 7931 - ], - [ - 7933 - ], - [ - 7935, - 7943 - ], - [ - 7952, - 7957 - ], - [ - 7968, - 7975 - ], - [ - 7984, - 7991 - ], - [ - 8000, - 8005 - ], - [ - 8016, - 8023 - ], - [ - 8032, - 8039 - ], - [ - 8048, - 8061 - ], - [ - 8064, - 8071 - ], - [ - 8080, - 8087 - ], - [ - 8096, - 8103 - ], - [ - 8112, - 8116 - ], - [ - 8118, - 8119 - ], - [ - 8126 - ], - [ - 8130, - 8132 - ], - [ - 8134, - 8135 - ], - [ - 8144, - 8147 - ], - [ - 8150, - 8151 - ], - [ - 8160, - 8167 - ], - [ - 8178, - 8180 - ], - [ - 8182, - 8183 - ], - [ - 8458 - ], - [ - 8462, - 8463 - ], - [ - 8467 - ], - [ - 8495 - ], - [ - 8500 - ], - [ - 8505 - ], - [ - 8508, - 8509 - ], - [ - 8518, - 8521 - ], - [ - 8526 - ], - [ - 8580 - ], - [ - 11312, - 11359 - ], - [ - 11361 - ], - [ - 11365, - 11366 - ], - [ - 11368 - ], - [ - 11370 - ], - [ - 11372 - ], - [ - 11377 - ], - [ - 11379, - 11380 - ], - [ - 11382, - 11387 - ], - [ - 11393 - ], - [ - 11395 - ], - [ - 11397 - ], - [ - 11399 - ], - [ - 11401 - ], - [ - 11403 - ], - [ - 11405 - ], - [ - 11407 - ], - [ - 11409 - ], - [ - 11411 - ], - [ - 11413 - ], - [ - 11415 - ], - [ - 11417 - ], - [ - 11419 - ], - [ - 11421 - ], - [ - 11423 - ], - [ - 11425 - ], - [ - 11427 - ], - [ - 11429 - ], - [ - 11431 - ], - [ - 11433 - ], - [ - 11435 - ], - [ - 11437 - ], - [ - 11439 - ], - [ - 11441 - ], - [ - 11443 - ], - [ - 11445 - ], - [ - 11447 - ], - [ - 11449 - ], - [ - 11451 - ], - [ - 11453 - ], - [ - 11455 - ], - [ - 11457 - ], - [ - 11459 - ], - [ - 11461 - ], - [ - 11463 - ], - [ - 11465 - ], - [ - 11467 - ], - [ - 11469 - ], - [ - 11471 - ], - [ - 11473 - ], - [ - 11475 - ], - [ - 11477 - ], - [ - 11479 - ], - [ - 11481 - ], - [ - 11483 - ], - [ - 11485 - ], - [ - 11487 - ], - [ - 11489 - ], - [ - 11491, - 11492 - ], - [ - 11500 - ], - [ - 11502 - ], - [ - 11507 - ], - [ - 11520, - 11557 - ], - [ - 11559 - ], - [ - 11565 - ], - [ - 42561 - ], - [ - 42563 - ], - [ - 42565 - ], - [ - 42567 - ], - [ - 42569 - ], - [ - 42571 - ], - [ - 42573 - ], - [ - 42575 - ], - [ - 42577 - ], - [ - 42579 - ], - [ - 42581 - ], - [ - 42583 - ], - [ - 42585 - ], - [ - 42587 - ], - [ - 42589 - ], - [ - 42591 - ], - [ - 42593 - ], - [ - 42595 - ], - [ - 42597 - ], - [ - 42599 - ], - [ - 42601 - ], - [ - 42603 - ], - [ - 42605 - ], - [ - 42625 - ], - [ - 42627 - ], - [ - 42629 - ], - [ - 42631 - ], - [ - 42633 - ], - [ - 42635 - ], - [ - 42637 - ], - [ - 42639 - ], - [ - 42641 - ], - [ - 42643 - ], - [ - 42645 - ], - [ - 42647 - ], - [ - 42649 - ], - [ - 42651 - ], - [ - 42787 - ], - [ - 42789 - ], - [ - 42791 - ], - [ - 42793 - ], - [ - 42795 - ], - [ - 42797 - ], - [ - 42799, - 42801 - ], - [ - 42803 - ], - [ - 42805 - ], - [ - 42807 - ], - [ - 42809 - ], - [ - 42811 - ], - [ - 42813 - ], - [ - 42815 - ], - [ - 42817 - ], - [ - 42819 - ], - [ - 42821 - ], - [ - 42823 - ], - [ - 42825 - ], - [ - 42827 - ], - [ - 42829 - ], - [ - 42831 - ], - [ - 42833 - ], - [ - 42835 - ], - [ - 42837 - ], - [ - 42839 - ], - [ - 42841 - ], - [ - 42843 - ], - [ - 42845 - ], - [ - 42847 - ], - [ - 42849 - ], - [ - 42851 - ], - [ - 42853 - ], - [ - 42855 - ], - [ - 42857 - ], - [ - 42859 - ], - [ - 42861 - ], - [ - 42863 - ], - [ - 42865, - 42872 - ], - [ - 42874 - ], - [ - 42876 - ], - [ - 42879 - ], - [ - 42881 - ], - [ - 42883 - ], - [ - 42885 - ], - [ - 42887 - ], - [ - 42892 - ], - [ - 42894 - ], - [ - 42897 - ], - [ - 42899, - 42901 - ], - [ - 42903 - ], - [ - 42905 - ], - [ - 42907 - ], - [ - 42909 - ], - [ - 42911 - ], - [ - 42913 - ], - [ - 42915 - ], - [ - 42917 - ], - [ - 42919 - ], - [ - 42921 - ], - [ - 42927 - ], - [ - 42933 - ], - [ - 42935 - ], - [ - 42937 - ], - [ - 42939 - ], - [ - 42941 - ], - [ - 42943 - ], - [ - 42945 - ], - [ - 42947 - ], - [ - 42952 - ], - [ - 42954 - ], - [ - 42957 - ], - [ - 42961 - ], - [ - 42963 - ], - [ - 42965 - ], - [ - 42967 - ], - [ - 42969 - ], - [ - 42971 - ], - [ - 42998 - ], - [ - 43002 - ], - [ - 43824, - 43866 - ], - [ - 43872, - 43880 - ], - [ - 43888, - 43967 - ], - [ - 64256, - 64262 - ], - [ - 64275, - 64279 - ], - [ - 65345, - 65370 - ], - [ - 66600, - 66639 - ], - [ - 66776, - 66811 - ], - [ - 66967, - 66977 - ], - [ - 66979, - 66993 - ], - [ - 66995, - 67001 - ], - [ - 67003, - 67004 - ], - [ - 68800, - 68850 - ], - [ - 68976, - 68997 - ], - [ - 71872, - 71903 - ], - [ - 93792, - 93823 - ], - [ - 119834, - 119859 - ], - [ - 119886, - 119892 - ], - [ - 119894, - 119911 - ], - [ - 119938, - 119963 - ], - [ - 119990, - 119993 - ], - [ - 119995 - ], - [ - 119997, - 120003 - ], - [ - 120005, - 120015 - ], - [ - 120042, - 120067 - ], - [ - 120094, - 120119 - ], - [ - 120146, - 120171 - ], - [ - 120198, - 120223 - ], - [ - 120250, - 120275 - ], - [ - 120302, - 120327 - ], - [ - 120354, - 120379 - ], - [ - 120406, - 120431 - ], - [ - 120458, - 120485 - ], - [ - 120514, - 120538 - ], - [ - 120540, - 120545 - ], - [ - 120572, - 120596 - ], - [ - 120598, - 120603 - ], - [ - 120630, - 120654 - ], - [ - 120656, - 120661 - ], - [ - 120688, - 120712 - ], - [ - 120714, - 120719 - ], - [ - 120746, - 120770 - ], - [ - 120772, - 120777 - ], - [ - 120779 - ], - [ - 122624, - 122633 - ], - [ - 122635, - 122654 - ], - [ - 122661, - 122666 - ], - [ - 125218, - 125251 - ] - ], - "Lm": [ - [ - 688, - 705 - ], - [ - 710, - 721 - ], - [ - 736, - 740 - ], - [ - 748 - ], - [ - 750 - ], - [ - 884 - ], - [ - 890 - ], - [ - 1369 - ], - [ - 1600 - ], - [ - 1765, - 1766 - ], - [ - 2036, - 2037 - ], - [ - 2042 - ], - [ - 2074 - ], - [ - 2084 - ], - [ - 2088 - ], - [ - 2249 - ], - [ - 2417 - ], - [ - 3654 - ], - [ - 3782 - ], - [ - 4348 - ], - [ - 6103 - ], - [ - 6211 - ], - [ - 6823 - ], - [ - 7288, - 7293 - ], - [ - 7468, - 7530 - ], - [ - 7544 - ], - [ - 7579, - 7615 - ], - [ - 8305 - ], - [ - 8319 - ], - [ - 8336, - 8348 - ], - [ - 11388, - 11389 - ], - [ - 11631 - ], - [ - 11823 - ], - [ - 12293 - ], - [ - 12337, - 12341 - ], - [ - 12347 - ], - [ - 12445, - 12446 - ], - [ - 12540, - 12542 - ], - [ - 40981 - ], - [ - 42232, - 42237 - ], - [ - 42508 - ], - [ - 42623 - ], - [ - 42652, - 42653 - ], - [ - 42775, - 42783 - ], - [ - 42864 - ], - [ - 42888 - ], - [ - 42994, - 42996 - ], - [ - 43000, - 43001 - ], - [ - 43471 - ], - [ - 43494 - ], - [ - 43632 - ], - [ - 43741 - ], - [ - 43763, - 43764 - ], - [ - 43868, - 43871 - ], - [ - 43881 - ], - [ - 65392 - ], - [ - 65438, - 65439 - ], - [ - 67456, - 67461 - ], - [ - 67463, - 67504 - ], - [ - 67506, - 67514 - ], - [ - 68942 - ], - [ - 68975 - ], - [ - 92992, - 92995 - ], - [ - 93504, - 93506 - ], - [ - 93547, - 93548 - ], - [ - 94099, - 94111 - ], - [ - 94176, - 94177 - ], - [ - 94179 - ], - [ - 110576, - 110579 - ], - [ - 110581, - 110587 - ], - [ - 110589, - 110590 - ], - [ - 122928, - 122989 - ], - [ - 123191, - 123197 - ], - [ - 124139 - ], - [ - 125259 - ] - ], - "Lo": [ - [ - 170 - ], - [ - 186 - ], - [ - 443 - ], - [ - 448, - 451 - ], - [ - 660 - ], - [ - 1488, - 1514 - ], - [ - 1519, - 1522 - ], - [ - 1568, - 1599 - ], - [ - 1601, - 1610 - ], - [ - 1646, - 1647 - ], - [ - 1649, - 1747 - ], - [ - 1749 - ], - [ - 1774, - 1775 - ], - [ - 1786, - 1788 - ], - [ - 1791 - ], - [ - 1808 - ], - [ - 1810, - 1839 - ], - [ - 1869, - 1957 - ], - [ - 1969 - ], - [ - 1994, - 2026 - ], - [ - 2048, - 2069 - ], - [ - 2112, - 2136 - ], - [ - 2144, - 2154 - ], - [ - 2160, - 2183 - ], - [ - 2185, - 2190 - ], - [ - 2208, - 2248 - ], - [ - 2308, - 2361 - ], - [ - 2365 - ], - [ - 2384 - ], - [ - 2392, - 2401 - ], - [ - 2418, - 2432 - ], - [ - 2437, - 2444 - ], - [ - 2447, - 2448 - ], - [ - 2451, - 2472 - ], - [ - 2474, - 2480 - ], - [ - 2482 - ], - [ - 2486, - 2489 - ], - [ - 2493 - ], - [ - 2510 - ], - [ - 2524, - 2525 - ], - [ - 2527, - 2529 - ], - [ - 2544, - 2545 - ], - [ - 2556 - ], - [ - 2565, - 2570 - ], - [ - 2575, - 2576 - ], - [ - 2579, - 2600 - ], - [ - 2602, - 2608 - ], - [ - 2610, - 2611 - ], - [ - 2613, - 2614 - ], - [ - 2616, - 2617 - ], - [ - 2649, - 2652 - ], - [ - 2654 - ], - [ - 2674, - 2676 - ], - [ - 2693, - 2701 - ], - [ - 2703, - 2705 - ], - [ - 2707, - 2728 - ], - [ - 2730, - 2736 - ], - [ - 2738, - 2739 - ], - [ - 2741, - 2745 - ], - [ - 2749 - ], - [ - 2768 - ], - [ - 2784, - 2785 - ], - [ - 2809 - ], - [ - 2821, - 2828 - ], - [ - 2831, - 2832 - ], - [ - 2835, - 2856 - ], - [ - 2858, - 2864 - ], - [ - 2866, - 2867 - ], - [ - 2869, - 2873 - ], - [ - 2877 - ], - [ - 2908, - 2909 - ], - [ - 2911, - 2913 - ], - [ - 2929 - ], - [ - 2947 - ], - [ - 2949, - 2954 - ], - [ - 2958, - 2960 - ], - [ - 2962, - 2965 - ], - [ - 2969, - 2970 - ], - [ - 2972 - ], - [ - 2974, - 2975 - ], - [ - 2979, - 2980 - ], - [ - 2984, - 2986 - ], - [ - 2990, - 3001 - ], - [ - 3024 - ], - [ - 3077, - 3084 - ], - [ - 3086, - 3088 - ], - [ - 3090, - 3112 - ], - [ - 3114, - 3129 - ], - [ - 3133 - ], - [ - 3160, - 3162 - ], - [ - 3165 - ], - [ - 3168, - 3169 - ], - [ - 3200 - ], - [ - 3205, - 3212 - ], - [ - 3214, - 3216 - ], - [ - 3218, - 3240 - ], - [ - 3242, - 3251 - ], - [ - 3253, - 3257 - ], - [ - 3261 - ], - [ - 3293, - 3294 - ], - [ - 3296, - 3297 - ], - [ - 3313, - 3314 - ], - [ - 3332, - 3340 - ], - [ - 3342, - 3344 - ], - [ - 3346, - 3386 - ], - [ - 3389 - ], - [ - 3406 - ], - [ - 3412, - 3414 - ], - [ - 3423, - 3425 - ], - [ - 3450, - 3455 - ], - [ - 3461, - 3478 - ], - [ - 3482, - 3505 - ], - [ - 3507, - 3515 - ], - [ - 3517 - ], - [ - 3520, - 3526 - ], - [ - 3585, - 3632 - ], - [ - 3634, - 3635 - ], - [ - 3648, - 3653 - ], - [ - 3713, - 3714 - ], - [ - 3716 - ], - [ - 3718, - 3722 - ], - [ - 3724, - 3747 - ], - [ - 3749 - ], - [ - 3751, - 3760 - ], - [ - 3762, - 3763 - ], - [ - 3773 - ], - [ - 3776, - 3780 - ], - [ - 3804, - 3807 - ], - [ - 3840 - ], - [ - 3904, - 3911 - ], - [ - 3913, - 3948 - ], - [ - 3976, - 3980 - ], - [ - 4096, - 4138 - ], - [ - 4159 - ], - [ - 4176, - 4181 - ], - [ - 4186, - 4189 - ], - [ - 4193 - ], - [ - 4197, - 4198 - ], - [ - 4206, - 4208 - ], - [ - 4213, - 4225 - ], - [ - 4238 - ], - [ - 4352, - 4680 - ], - [ - 4682, - 4685 - ], - [ - 4688, - 4694 - ], - [ - 4696 - ], - [ - 4698, - 4701 - ], - [ - 4704, - 4744 - ], - [ - 4746, - 4749 - ], - [ - 4752, - 4784 - ], - [ - 4786, - 4789 - ], - [ - 4792, - 4798 - ], - [ - 4800 - ], - [ - 4802, - 4805 - ], - [ - 4808, - 4822 - ], - [ - 4824, - 4880 - ], - [ - 4882, - 4885 - ], - [ - 4888, - 4954 - ], - [ - 4992, - 5007 - ], - [ - 5121, - 5740 - ], - [ - 5743, - 5759 - ], - [ - 5761, - 5786 - ], - [ - 5792, - 5866 - ], - [ - 5873, - 5880 - ], - [ - 5888, - 5905 - ], - [ - 5919, - 5937 - ], - [ - 5952, - 5969 - ], - [ - 5984, - 5996 - ], - [ - 5998, - 6000 - ], - [ - 6016, - 6067 - ], - [ - 6108 - ], - [ - 6176, - 6210 - ], - [ - 6212, - 6264 - ], - [ - 6272, - 6276 - ], - [ - 6279, - 6312 - ], - [ - 6314 - ], - [ - 6320, - 6389 - ], - [ - 6400, - 6430 - ], - [ - 6480, - 6509 - ], - [ - 6512, - 6516 - ], - [ - 6528, - 6571 - ], - [ - 6576, - 6601 - ], - [ - 6656, - 6678 - ], - [ - 6688, - 6740 - ], - [ - 6917, - 6963 - ], - [ - 6981, - 6988 - ], - [ - 7043, - 7072 - ], - [ - 7086, - 7087 - ], - [ - 7098, - 7141 - ], - [ - 7168, - 7203 - ], - [ - 7245, - 7247 - ], - [ - 7258, - 7287 - ], - [ - 7401, - 7404 - ], - [ - 7406, - 7411 - ], - [ - 7413, - 7414 - ], - [ - 7418 - ], - [ - 8501, - 8504 - ], - [ - 11568, - 11623 - ], - [ - 11648, - 11670 - ], - [ - 11680, - 11686 - ], - [ - 11688, - 11694 - ], - [ - 11696, - 11702 - ], - [ - 11704, - 11710 - ], - [ - 11712, - 11718 - ], - [ - 11720, - 11726 - ], - [ - 11728, - 11734 - ], - [ - 11736, - 11742 - ], - [ - 12294 - ], - [ - 12348 - ], - [ - 12353, - 12438 - ], - [ - 12447 - ], - [ - 12449, - 12538 - ], - [ - 12543 - ], - [ - 12549, - 12591 - ], - [ - 12593, - 12686 - ], - [ - 12704, - 12735 - ], - [ - 12784, - 12799 - ], - [ - 13312, - 19903 - ], - [ - 19968, - 40980 - ], - [ - 40982, - 42124 - ], - [ - 42192, - 42231 - ], - [ - 42240, - 42507 - ], - [ - 42512, - 42527 - ], - [ - 42538, - 42539 - ], - [ - 42606 - ], - [ - 42656, - 42725 - ], - [ - 42895 - ], - [ - 42999 - ], - [ - 43003, - 43009 - ], - [ - 43011, - 43013 - ], - [ - 43015, - 43018 - ], - [ - 43020, - 43042 - ], - [ - 43072, - 43123 - ], - [ - 43138, - 43187 - ], - [ - 43250, - 43255 - ], - [ - 43259 - ], - [ - 43261, - 43262 - ], - [ - 43274, - 43301 - ], - [ - 43312, - 43334 - ], - [ - 43360, - 43388 - ], - [ - 43396, - 43442 - ], - [ - 43488, - 43492 - ], - [ - 43495, - 43503 - ], - [ - 43514, - 43518 - ], - [ - 43520, - 43560 - ], - [ - 43584, - 43586 - ], - [ - 43588, - 43595 - ], - [ - 43616, - 43631 - ], - [ - 43633, - 43638 - ], - [ - 43642 - ], - [ - 43646, - 43695 - ], - [ - 43697 - ], - [ - 43701, - 43702 - ], - [ - 43705, - 43709 - ], - [ - 43712 - ], - [ - 43714 - ], - [ - 43739, - 43740 - ], - [ - 43744, - 43754 - ], - [ - 43762 - ], - [ - 43777, - 43782 - ], - [ - 43785, - 43790 - ], - [ - 43793, - 43798 - ], - [ - 43808, - 43814 - ], - [ - 43816, - 43822 - ], - [ - 43968, - 44002 - ], - [ - 44032, - 55203 - ], - [ - 55216, - 55238 - ], - [ - 55243, - 55291 - ], - [ - 63744, - 64109 - ], - [ - 64112, - 64217 - ], - [ - 64285 - ], - [ - 64287, - 64296 - ], - [ - 64298, - 64310 - ], - [ - 64312, - 64316 - ], - [ - 64318 - ], - [ - 64320, - 64321 - ], - [ - 64323, - 64324 - ], - [ - 64326, - 64433 - ], - [ - 64467, - 64829 - ], - [ - 64848, - 64911 - ], - [ - 64914, - 64967 - ], - [ - 65008, - 65019 - ], - [ - 65136, - 65140 - ], - [ - 65142, - 65276 - ], - [ - 65382, - 65391 - ], - [ - 65393, - 65437 - ], - [ - 65440, - 65470 - ], - [ - 65474, - 65479 - ], - [ - 65482, - 65487 - ], - [ - 65490, - 65495 - ], - [ - 65498, - 65500 - ], - [ - 65536, - 65547 - ], - [ - 65549, - 65574 - ], - [ - 65576, - 65594 - ], - [ - 65596, - 65597 - ], - [ - 65599, - 65613 - ], - [ - 65616, - 65629 - ], - [ - 65664, - 65786 - ], - [ - 66176, - 66204 - ], - [ - 66208, - 66256 - ], - [ - 66304, - 66335 - ], - [ - 66349, - 66368 - ], - [ - 66370, - 66377 - ], - [ - 66384, - 66421 - ], - [ - 66432, - 66461 - ], - [ - 66464, - 66499 - ], - [ - 66504, - 66511 - ], - [ - 66640, - 66717 - ], - [ - 66816, - 66855 - ], - [ - 66864, - 66915 - ], - [ - 67008, - 67059 - ], - [ - 67072, - 67382 - ], - [ - 67392, - 67413 - ], - [ - 67424, - 67431 - ], - [ - 67584, - 67589 - ], - [ - 67592 - ], - [ - 67594, - 67637 - ], - [ - 67639, - 67640 - ], - [ - 67644 - ], - [ - 67647, - 67669 - ], - [ - 67680, - 67702 - ], - [ - 67712, - 67742 - ], - [ - 67808, - 67826 - ], - [ - 67828, - 67829 - ], - [ - 67840, - 67861 - ], - [ - 67872, - 67897 - ], - [ - 67968, - 68023 - ], - [ - 68030, - 68031 - ], - [ - 68096 - ], - [ - 68112, - 68115 - ], - [ - 68117, - 68119 - ], - [ - 68121, - 68149 - ], - [ - 68192, - 68220 - ], - [ - 68224, - 68252 - ], - [ - 68288, - 68295 - ], - [ - 68297, - 68324 - ], - [ - 68352, - 68405 - ], - [ - 68416, - 68437 - ], - [ - 68448, - 68466 - ], - [ - 68480, - 68497 - ], - [ - 68608, - 68680 - ], - [ - 68864, - 68899 - ], - [ - 68938, - 68941 - ], - [ - 68943 - ], - [ - 69248, - 69289 - ], - [ - 69296, - 69297 - ], - [ - 69314, - 69316 - ], - [ - 69376, - 69404 - ], - [ - 69415 - ], - [ - 69424, - 69445 - ], - [ - 69488, - 69505 - ], - [ - 69552, - 69572 - ], - [ - 69600, - 69622 - ], - [ - 69635, - 69687 - ], - [ - 69745, - 69746 - ], - [ - 69749 - ], - [ - 69763, - 69807 - ], - [ - 69840, - 69864 - ], - [ - 69891, - 69926 - ], - [ - 69956 - ], - [ - 69959 - ], - [ - 69968, - 70002 - ], - [ - 70006 - ], - [ - 70019, - 70066 - ], - [ - 70081, - 70084 - ], - [ - 70106 - ], - [ - 70108 - ], - [ - 70144, - 70161 - ], - [ - 70163, - 70187 - ], - [ - 70207, - 70208 - ], - [ - 70272, - 70278 - ], - [ - 70280 - ], - [ - 70282, - 70285 - ], - [ - 70287, - 70301 - ], - [ - 70303, - 70312 - ], - [ - 70320, - 70366 - ], - [ - 70405, - 70412 - ], - [ - 70415, - 70416 - ], - [ - 70419, - 70440 - ], - [ - 70442, - 70448 - ], - [ - 70450, - 70451 - ], - [ - 70453, - 70457 - ], - [ - 70461 - ], - [ - 70480 - ], - [ - 70493, - 70497 - ], - [ - 70528, - 70537 - ], - [ - 70539 - ], - [ - 70542 - ], - [ - 70544, - 70581 - ], - [ - 70583 - ], - [ - 70609 - ], - [ - 70611 - ], - [ - 70656, - 70708 - ], - [ - 70727, - 70730 - ], - [ - 70751, - 70753 - ], - [ - 70784, - 70831 - ], - [ - 70852, - 70853 - ], - [ - 70855 - ], - [ - 71040, - 71086 - ], - [ - 71128, - 71131 - ], - [ - 71168, - 71215 - ], - [ - 71236 - ], - [ - 71296, - 71338 - ], - [ - 71352 - ], - [ - 71424, - 71450 - ], - [ - 71488, - 71494 - ], - [ - 71680, - 71723 - ], - [ - 71935, - 71942 - ], - [ - 71945 - ], - [ - 71948, - 71955 - ], - [ - 71957, - 71958 - ], - [ - 71960, - 71983 - ], - [ - 71999 - ], - [ - 72001 - ], - [ - 72096, - 72103 - ], - [ - 72106, - 72144 - ], - [ - 72161 - ], - [ - 72163 - ], - [ - 72192 - ], - [ - 72203, - 72242 - ], - [ - 72250 - ], - [ - 72272 - ], - [ - 72284, - 72329 - ], - [ - 72349 - ], - [ - 72368, - 72440 - ], - [ - 72640, - 72672 - ], - [ - 72704, - 72712 - ], - [ - 72714, - 72750 - ], - [ - 72768 - ], - [ - 72818, - 72847 - ], - [ - 72960, - 72966 - ], - [ - 72968, - 72969 - ], - [ - 72971, - 73008 - ], - [ - 73030 - ], - [ - 73056, - 73061 - ], - [ - 73063, - 73064 - ], - [ - 73066, - 73097 - ], - [ - 73112 - ], - [ - 73440, - 73458 - ], - [ - 73474 - ], - [ - 73476, - 73488 - ], - [ - 73490, - 73523 - ], - [ - 73648 - ], - [ - 73728, - 74649 - ], - [ - 74880, - 75075 - ], - [ - 77712, - 77808 - ], - [ - 77824, - 78895 - ], - [ - 78913, - 78918 - ], - [ - 78944, - 82938 - ], - [ - 82944, - 83526 - ], - [ - 90368, - 90397 - ], - [ - 92160, - 92728 - ], - [ - 92736, - 92766 - ], - [ - 92784, - 92862 - ], - [ - 92880, - 92909 - ], - [ - 92928, - 92975 - ], - [ - 93027, - 93047 - ], - [ - 93053, - 93071 - ], - [ - 93507, - 93546 - ], - [ - 93952, - 94026 - ], - [ - 94032 - ], - [ - 94208, - 100343 - ], - [ - 100352, - 101589 - ], - [ - 101631, - 101640 - ], - [ - 110592, - 110882 - ], - [ - 110898 - ], - [ - 110928, - 110930 - ], - [ - 110933 - ], - [ - 110948, - 110951 - ], - [ - 110960, - 111355 - ], - [ - 113664, - 113770 - ], - [ - 113776, - 113788 - ], - [ - 113792, - 113800 - ], - [ - 113808, - 113817 - ], - [ - 122634 - ], - [ - 123136, - 123180 - ], - [ - 123214 - ], - [ - 123536, - 123565 - ], - [ - 123584, - 123627 - ], - [ - 124112, - 124138 - ], - [ - 124368, - 124397 - ], - [ - 124400 - ], - [ - 124896, - 124902 - ], - [ - 124904, - 124907 - ], - [ - 124909, - 124910 - ], - [ - 124912, - 124926 - ], - [ - 124928, - 125124 - ], - [ - 126464, - 126467 - ], - [ - 126469, - 126495 - ], - [ - 126497, - 126498 - ], - [ - 126500 - ], - [ - 126503 - ], - [ - 126505, - 126514 - ], - [ - 126516, - 126519 - ], - [ - 126521 - ], - [ - 126523 - ], - [ - 126530 - ], - [ - 126535 - ], - [ - 126537 - ], - [ - 126539 - ], - [ - 126541, - 126543 - ], - [ - 126545, - 126546 - ], - [ - 126548 - ], - [ - 126551 - ], - [ - 126553 - ], - [ - 126555 - ], - [ - 126557 - ], - [ - 126559 - ], - [ - 126561, - 126562 - ], - [ - 126564 - ], - [ - 126567, - 126570 - ], - [ - 126572, - 126578 - ], - [ - 126580, - 126583 - ], - [ - 126585, - 126588 - ], - [ - 126590 - ], - [ - 126592, - 126601 - ], - [ - 126603, - 126619 - ], - [ - 126625, - 126627 - ], - [ - 126629, - 126633 - ], - [ - 126635, - 126651 - ], - [ - 131072, - 173791 - ], - [ - 173824, - 177977 - ], - [ - 177984, - 178205 - ], - [ - 178208, - 183969 - ], - [ - 183984, - 191456 - ], - [ - 191472, - 192093 - ], - [ - 194560, - 195101 - ], - [ - 196608, - 201546 - ], - [ - 201552, - 205743 - ] - ], - "Lt": [ - [ - 453 - ], - [ - 456 - ], - [ - 459 - ], - [ - 498 - ], - [ - 8072, - 8079 - ], - [ - 8088, - 8095 - ], - [ - 8104, - 8111 - ], - [ - 8124 - ], - [ - 8140 - ], - [ - 8188 - ] - ], - "Lu": [ - [ - 65, - 90 - ], - [ - 192, - 214 - ], - [ - 216, - 222 - ], - [ - 256 - ], - [ - 258 - ], - [ - 260 - ], - [ - 262 - ], - [ - 264 - ], - [ - 266 - ], - [ - 268 - ], - [ - 270 - ], - [ - 272 - ], - [ - 274 - ], - [ - 276 - ], - [ - 278 - ], - [ - 280 - ], - [ - 282 - ], - [ - 284 - ], - [ - 286 - ], - [ - 288 - ], - [ - 290 - ], - [ - 292 - ], - [ - 294 - ], - [ - 296 - ], - [ - 298 - ], - [ - 300 - ], - [ - 302 - ], - [ - 304 - ], - [ - 306 - ], - [ - 308 - ], - [ - 310 - ], - [ - 313 - ], - [ - 315 - ], - [ - 317 - ], - [ - 319 - ], - [ - 321 - ], - [ - 323 - ], - [ - 325 - ], - [ - 327 - ], - [ - 330 - ], - [ - 332 - ], - [ - 334 - ], - [ - 336 - ], - [ - 338 - ], - [ - 340 - ], - [ - 342 - ], - [ - 344 - ], - [ - 346 - ], - [ - 348 - ], - [ - 350 - ], - [ - 352 - ], - [ - 354 - ], - [ - 356 - ], - [ - 358 - ], - [ - 360 - ], - [ - 362 - ], - [ - 364 - ], - [ - 366 - ], - [ - 368 - ], - [ - 370 - ], - [ - 372 - ], - [ - 374 - ], - [ - 376, - 377 - ], - [ - 379 - ], - [ - 381 - ], - [ - 385, - 386 - ], - [ - 388 - ], - [ - 390, - 391 - ], - [ - 393, - 395 - ], - [ - 398, - 401 - ], - [ - 403, - 404 - ], - [ - 406, - 408 - ], - [ - 412, - 413 - ], - [ - 415, - 416 - ], - [ - 418 - ], - [ - 420 - ], - [ - 422, - 423 - ], - [ - 425 - ], - [ - 428 - ], - [ - 430, - 431 - ], - [ - 433, - 435 - ], - [ - 437 - ], - [ - 439, - 440 - ], - [ - 444 - ], - [ - 452 - ], - [ - 455 - ], - [ - 458 - ], - [ - 461 - ], - [ - 463 - ], - [ - 465 - ], - [ - 467 - ], - [ - 469 - ], - [ - 471 - ], - [ - 473 - ], - [ - 475 - ], - [ - 478 - ], - [ - 480 - ], - [ - 482 - ], - [ - 484 - ], - [ - 486 - ], - [ - 488 - ], - [ - 490 - ], - [ - 492 - ], - [ - 494 - ], - [ - 497 - ], - [ - 500 - ], - [ - 502, - 504 - ], - [ - 506 - ], - [ - 508 - ], - [ - 510 - ], - [ - 512 - ], - [ - 514 - ], - [ - 516 - ], - [ - 518 - ], - [ - 520 - ], - [ - 522 - ], - [ - 524 - ], - [ - 526 - ], - [ - 528 - ], - [ - 530 - ], - [ - 532 - ], - [ - 534 - ], - [ - 536 - ], - [ - 538 - ], - [ - 540 - ], - [ - 542 - ], - [ - 544 - ], - [ - 546 - ], - [ - 548 - ], - [ - 550 - ], - [ - 552 - ], - [ - 554 - ], - [ - 556 - ], - [ - 558 - ], - [ - 560 - ], - [ - 562 - ], - [ - 570, - 571 - ], - [ - 573, - 574 - ], - [ - 577 - ], - [ - 579, - 582 - ], - [ - 584 - ], - [ - 586 - ], - [ - 588 - ], - [ - 590 - ], - [ - 880 - ], - [ - 882 - ], - [ - 886 - ], - [ - 895 - ], - [ - 902 - ], - [ - 904, - 906 - ], - [ - 908 - ], - [ - 910, - 911 - ], - [ - 913, - 929 - ], - [ - 931, - 939 - ], - [ - 975 - ], - [ - 978, - 980 - ], - [ - 984 - ], - [ - 986 - ], - [ - 988 - ], - [ - 990 - ], - [ - 992 - ], - [ - 994 - ], - [ - 996 - ], - [ - 998 - ], - [ - 1000 - ], - [ - 1002 - ], - [ - 1004 - ], - [ - 1006 - ], - [ - 1012 - ], - [ - 1015 - ], - [ - 1017, - 1018 - ], - [ - 1021, - 1071 - ], - [ - 1120 - ], - [ - 1122 - ], - [ - 1124 - ], - [ - 1126 - ], - [ - 1128 - ], - [ - 1130 - ], - [ - 1132 - ], - [ - 1134 - ], - [ - 1136 - ], - [ - 1138 - ], - [ - 1140 - ], - [ - 1142 - ], - [ - 1144 - ], - [ - 1146 - ], - [ - 1148 - ], - [ - 1150 - ], - [ - 1152 - ], - [ - 1162 - ], - [ - 1164 - ], - [ - 1166 - ], - [ - 1168 - ], - [ - 1170 - ], - [ - 1172 - ], - [ - 1174 - ], - [ - 1176 - ], - [ - 1178 - ], - [ - 1180 - ], - [ - 1182 - ], - [ - 1184 - ], - [ - 1186 - ], - [ - 1188 - ], - [ - 1190 - ], - [ - 1192 - ], - [ - 1194 - ], - [ - 1196 - ], - [ - 1198 - ], - [ - 1200 - ], - [ - 1202 - ], - [ - 1204 - ], - [ - 1206 - ], - [ - 1208 - ], - [ - 1210 - ], - [ - 1212 - ], - [ - 1214 - ], - [ - 1216, - 1217 - ], - [ - 1219 - ], - [ - 1221 - ], - [ - 1223 - ], - [ - 1225 - ], - [ - 1227 - ], - [ - 1229 - ], - [ - 1232 - ], - [ - 1234 - ], - [ - 1236 - ], - [ - 1238 - ], - [ - 1240 - ], - [ - 1242 - ], - [ - 1244 - ], - [ - 1246 - ], - [ - 1248 - ], - [ - 1250 - ], - [ - 1252 - ], - [ - 1254 - ], - [ - 1256 - ], - [ - 1258 - ], - [ - 1260 - ], - [ - 1262 - ], - [ - 1264 - ], - [ - 1266 - ], - [ - 1268 - ], - [ - 1270 - ], - [ - 1272 - ], - [ - 1274 - ], - [ - 1276 - ], - [ - 1278 - ], - [ - 1280 - ], - [ - 1282 - ], - [ - 1284 - ], - [ - 1286 - ], - [ - 1288 - ], - [ - 1290 - ], - [ - 1292 - ], - [ - 1294 - ], - [ - 1296 - ], - [ - 1298 - ], - [ - 1300 - ], - [ - 1302 - ], - [ - 1304 - ], - [ - 1306 - ], - [ - 1308 - ], - [ - 1310 - ], - [ - 1312 - ], - [ - 1314 - ], - [ - 1316 - ], - [ - 1318 - ], - [ - 1320 - ], - [ - 1322 - ], - [ - 1324 - ], - [ - 1326 - ], - [ - 1329, - 1366 - ], - [ - 4256, - 4293 - ], - [ - 4295 - ], - [ - 4301 - ], - [ - 5024, - 5109 - ], - [ - 7305 - ], - [ - 7312, - 7354 - ], - [ - 7357, - 7359 - ], - [ - 7680 - ], - [ - 7682 - ], - [ - 7684 - ], - [ - 7686 - ], - [ - 7688 - ], - [ - 7690 - ], - [ - 7692 - ], - [ - 7694 - ], - [ - 7696 - ], - [ - 7698 - ], - [ - 7700 - ], - [ - 7702 - ], - [ - 7704 - ], - [ - 7706 - ], - [ - 7708 - ], - [ - 7710 - ], - [ - 7712 - ], - [ - 7714 - ], - [ - 7716 - ], - [ - 7718 - ], - [ - 7720 - ], - [ - 7722 - ], - [ - 7724 - ], - [ - 7726 - ], - [ - 7728 - ], - [ - 7730 - ], - [ - 7732 - ], - [ - 7734 - ], - [ - 7736 - ], - [ - 7738 - ], - [ - 7740 - ], - [ - 7742 - ], - [ - 7744 - ], - [ - 7746 - ], - [ - 7748 - ], - [ - 7750 - ], - [ - 7752 - ], - [ - 7754 - ], - [ - 7756 - ], - [ - 7758 - ], - [ - 7760 - ], - [ - 7762 - ], - [ - 7764 - ], - [ - 7766 - ], - [ - 7768 - ], - [ - 7770 - ], - [ - 7772 - ], - [ - 7774 - ], - [ - 7776 - ], - [ - 7778 - ], - [ - 7780 - ], - [ - 7782 - ], - [ - 7784 - ], - [ - 7786 - ], - [ - 7788 - ], - [ - 7790 - ], - [ - 7792 - ], - [ - 7794 - ], - [ - 7796 - ], - [ - 7798 - ], - [ - 7800 - ], - [ - 7802 - ], - [ - 7804 - ], - [ - 7806 - ], - [ - 7808 - ], - [ - 7810 - ], - [ - 7812 - ], - [ - 7814 - ], - [ - 7816 - ], - [ - 7818 - ], - [ - 7820 - ], - [ - 7822 - ], - [ - 7824 - ], - [ - 7826 - ], - [ - 7828 - ], - [ - 7838 - ], - [ - 7840 - ], - [ - 7842 - ], - [ - 7844 - ], - [ - 7846 - ], - [ - 7848 - ], - [ - 7850 - ], - [ - 7852 - ], - [ - 7854 - ], - [ - 7856 - ], - [ - 7858 - ], - [ - 7860 - ], - [ - 7862 - ], - [ - 7864 - ], - [ - 7866 - ], - [ - 7868 - ], - [ - 7870 - ], - [ - 7872 - ], - [ - 7874 - ], - [ - 7876 - ], - [ - 7878 - ], - [ - 7880 - ], - [ - 7882 - ], - [ - 7884 - ], - [ - 7886 - ], - [ - 7888 - ], - [ - 7890 - ], - [ - 7892 - ], - [ - 7894 - ], - [ - 7896 - ], - [ - 7898 - ], - [ - 7900 - ], - [ - 7902 - ], - [ - 7904 - ], - [ - 7906 - ], - [ - 7908 - ], - [ - 7910 - ], - [ - 7912 - ], - [ - 7914 - ], - [ - 7916 - ], - [ - 7918 - ], - [ - 7920 - ], - [ - 7922 - ], - [ - 7924 - ], - [ - 7926 - ], - [ - 7928 - ], - [ - 7930 - ], - [ - 7932 - ], - [ - 7934 - ], - [ - 7944, - 7951 - ], - [ - 7960, - 7965 - ], - [ - 7976, - 7983 - ], - [ - 7992, - 7999 - ], - [ - 8008, - 8013 - ], - [ - 8025 - ], - [ - 8027 - ], - [ - 8029 - ], - [ - 8031 - ], - [ - 8040, - 8047 - ], - [ - 8120, - 8123 - ], - [ - 8136, - 8139 - ], - [ - 8152, - 8155 - ], - [ - 8168, - 8172 - ], - [ - 8184, - 8187 - ], - [ - 8450 - ], - [ - 8455 - ], - [ - 8459, - 8461 - ], - [ - 8464, - 8466 - ], - [ - 8469 - ], - [ - 8473, - 8477 - ], - [ - 8484 - ], - [ - 8486 - ], - [ - 8488 - ], - [ - 8490, - 8493 - ], - [ - 8496, - 8499 - ], - [ - 8510, - 8511 - ], - [ - 8517 - ], - [ - 8579 - ], - [ - 11264, - 11311 - ], - [ - 11360 - ], - [ - 11362, - 11364 - ], - [ - 11367 - ], - [ - 11369 - ], - [ - 11371 - ], - [ - 11373, - 11376 - ], - [ - 11378 - ], - [ - 11381 - ], - [ - 11390, - 11392 - ], - [ - 11394 - ], - [ - 11396 - ], - [ - 11398 - ], - [ - 11400 - ], - [ - 11402 - ], - [ - 11404 - ], - [ - 11406 - ], - [ - 11408 - ], - [ - 11410 - ], - [ - 11412 - ], - [ - 11414 - ], - [ - 11416 - ], - [ - 11418 - ], - [ - 11420 - ], - [ - 11422 - ], - [ - 11424 - ], - [ - 11426 - ], - [ - 11428 - ], - [ - 11430 - ], - [ - 11432 - ], - [ - 11434 - ], - [ - 11436 - ], - [ - 11438 - ], - [ - 11440 - ], - [ - 11442 - ], - [ - 11444 - ], - [ - 11446 - ], - [ - 11448 - ], - [ - 11450 - ], - [ - 11452 - ], - [ - 11454 - ], - [ - 11456 - ], - [ - 11458 - ], - [ - 11460 - ], - [ - 11462 - ], - [ - 11464 - ], - [ - 11466 - ], - [ - 11468 - ], - [ - 11470 - ], - [ - 11472 - ], - [ - 11474 - ], - [ - 11476 - ], - [ - 11478 - ], - [ - 11480 - ], - [ - 11482 - ], - [ - 11484 - ], - [ - 11486 - ], - [ - 11488 - ], - [ - 11490 - ], - [ - 11499 - ], - [ - 11501 - ], - [ - 11506 - ], - [ - 42560 - ], - [ - 42562 - ], - [ - 42564 - ], - [ - 42566 - ], - [ - 42568 - ], - [ - 42570 - ], - [ - 42572 - ], - [ - 42574 - ], - [ - 42576 - ], - [ - 42578 - ], - [ - 42580 - ], - [ - 42582 - ], - [ - 42584 - ], - [ - 42586 - ], - [ - 42588 - ], - [ - 42590 - ], - [ - 42592 - ], - [ - 42594 - ], - [ - 42596 - ], - [ - 42598 - ], - [ - 42600 - ], - [ - 42602 - ], - [ - 42604 - ], - [ - 42624 - ], - [ - 42626 - ], - [ - 42628 - ], - [ - 42630 - ], - [ - 42632 - ], - [ - 42634 - ], - [ - 42636 - ], - [ - 42638 - ], - [ - 42640 - ], - [ - 42642 - ], - [ - 42644 - ], - [ - 42646 - ], - [ - 42648 - ], - [ - 42650 - ], - [ - 42786 - ], - [ - 42788 - ], - [ - 42790 - ], - [ - 42792 - ], - [ - 42794 - ], - [ - 42796 - ], - [ - 42798 - ], - [ - 42802 - ], - [ - 42804 - ], - [ - 42806 - ], - [ - 42808 - ], - [ - 42810 - ], - [ - 42812 - ], - [ - 42814 - ], - [ - 42816 - ], - [ - 42818 - ], - [ - 42820 - ], - [ - 42822 - ], - [ - 42824 - ], - [ - 42826 - ], - [ - 42828 - ], - [ - 42830 - ], - [ - 42832 - ], - [ - 42834 - ], - [ - 42836 - ], - [ - 42838 - ], - [ - 42840 - ], - [ - 42842 - ], - [ - 42844 - ], - [ - 42846 - ], - [ - 42848 - ], - [ - 42850 - ], - [ - 42852 - ], - [ - 42854 - ], - [ - 42856 - ], - [ - 42858 - ], - [ - 42860 - ], - [ - 42862 - ], - [ - 42873 - ], - [ - 42875 - ], - [ - 42877, - 42878 - ], - [ - 42880 - ], - [ - 42882 - ], - [ - 42884 - ], - [ - 42886 - ], - [ - 42891 - ], - [ - 42893 - ], - [ - 42896 - ], - [ - 42898 - ], - [ - 42902 - ], - [ - 42904 - ], - [ - 42906 - ], - [ - 42908 - ], - [ - 42910 - ], - [ - 42912 - ], - [ - 42914 - ], - [ - 42916 - ], - [ - 42918 - ], - [ - 42920 - ], - [ - 42922, - 42926 - ], - [ - 42928, - 42932 - ], - [ - 42934 - ], - [ - 42936 - ], - [ - 42938 - ], - [ - 42940 - ], - [ - 42942 - ], - [ - 42944 - ], - [ - 42946 - ], - [ - 42948, - 42951 - ], - [ - 42953 - ], - [ - 42955, - 42956 - ], - [ - 42960 - ], - [ - 42966 - ], - [ - 42968 - ], - [ - 42970 - ], - [ - 42972 - ], - [ - 42997 - ], - [ - 65313, - 65338 - ], - [ - 66560, - 66599 - ], - [ - 66736, - 66771 - ], - [ - 66928, - 66938 - ], - [ - 66940, - 66954 - ], - [ - 66956, - 66962 - ], - [ - 66964, - 66965 - ], - [ - 68736, - 68786 - ], - [ - 68944, - 68965 - ], - [ - 71840, - 71871 - ], - [ - 93760, - 93791 - ], - [ - 119808, - 119833 - ], - [ - 119860, - 119885 - ], - [ - 119912, - 119937 - ], - [ - 119964 - ], - [ - 119966, - 119967 - ], - [ - 119970 - ], - [ - 119973, - 119974 - ], - [ - 119977, - 119980 - ], - [ - 119982, - 119989 - ], - [ - 120016, - 120041 - ], - [ - 120068, - 120069 - ], - [ - 120071, - 120074 - ], - [ - 120077, - 120084 - ], - [ - 120086, - 120092 - ], - [ - 120120, - 120121 - ], - [ - 120123, - 120126 - ], - [ - 120128, - 120132 - ], - [ - 120134 - ], - [ - 120138, - 120144 - ], - [ - 120172, - 120197 - ], - [ - 120224, - 120249 - ], - [ - 120276, - 120301 - ], - [ - 120328, - 120353 - ], - [ - 120380, - 120405 - ], - [ - 120432, - 120457 - ], - [ - 120488, - 120512 - ], - [ - 120546, - 120570 - ], - [ - 120604, - 120628 - ], - [ - 120662, - 120686 - ], - [ - 120720, - 120744 - ], - [ - 120778 - ], - [ - 125184, - 125217 - ] - ] -}; -ilib.data.ctype = { - "adlam": [ - [ - 125184, - 125279 - ] - ], - "aegean": [ - [ - 65792, - 65855 - ] - ], - "ahom": [ - [ - 71424, - 71503 - ] - ], - "albanian": [ - [ - 66864, - 66927 - ] - ], - "alchemic": [ - [ - 128768, - 128895 - ] - ], - "ancient": [ - [ - 65936, - 65999 - ] - ], - "arabic": [ - [ - 1536, - 1791 - ], - [ - 1872, - 1919 - ], - [ - 2208, - 2303 - ], - [ - 64336, - 65023 - ], - [ - 65136, - 65279 - ], - [ - 126464, - 126719 - ] - ], - "arabic extended-b": [ - [ - 2160, - 2207 - ] - ], - "arabic extended-c": [ - [ - 69312, - 69375 - ] - ], - "aramaic": [ - [ - 67648, - 67679 - ] - ], - "armenian": [ - [ - 1328, - 1423 - ] - ], - "arrows": [ - [ - 8592, - 8703 - ], - [ - 10224, - 10239 - ], - [ - 10496, - 10623 - ], - [ - 11008, - 11263 - ], - [ - 129024, - 129279 - ] - ], - "ascii": [ - [ - 32, - 127 - ] - ], - "avestan": [ - [ - 68352, - 68415 - ] - ], - "balinese": [ - [ - 6912, - 7039 - ] - ], - "bamum": [ - [ - 42656, - 42751 - ], - [ - 92160, - 92735 - ] - ], - "bassavah": [ - [ - 92880, - 92927 - ] - ], - "batak": [ - [ - 7104, - 7167 - ] - ], - "bengali": [ - [ - 2432, - 2559 - ] - ], - "bhaiksuki": [ - [ - 72704, - 72815 - ] - ], - "blank": [ - [ - 9, - 9 - ], - [ - 32, - 32 - ] - ], - "block": [ - [ - 9600, - 9631 - ] - ], - "bopomofo": [ - [ - 12544, - 12591 - ], - [ - 12704, - 12735 - ] - ], - "box": [ - [ - 9472, - 9599 - ] - ], - "brahmi": [ - [ - 69632, - 69759 - ] - ], - "braille": [ - [ - 10240, - 10495 - ] - ], - "buginese": [ - [ - 6656, - 6687 - ] - ], - "buhid": [ - [ - 5952, - 5983 - ] - ], - "byzantinemusic": [ - [ - 118784, - 119039 - ] - ], - "canadian": [ - [ - 5120, - 5759 - ], - [ - 6320, - 6399 - ] - ], - "carian": [ - [ - 66208, - 66271 - ] - ], - "chakma": [ - [ - 69888, - 69967 - ] - ], - "cham": [ - [ - 43520, - 43615 - ] - ], - "cherokee": [ - [ - 5024, - 5119 - ], - [ - 43888, - 43967 - ] - ], - "chess symbols": [ - [ - 129536, - 129647 - ] - ], - "chorasmian": [ - [ - 69552, - 69599 - ] - ], - "cjk": [ - [ - 12272, - 12287 - ], - [ - 13312, - 19903 - ], - [ - 19968, - 40959 - ], - [ - 131072, - 173791 - ], - [ - 173824, - 183983 - ] - ], - "cjk unified ideographs extension f": [ - [ - 183984, - 191471 - ] - ], - "cjk unified ideographs extension g": [ - [ - 196608, - 201551 - ] - ], - "cjk unified ideographs extension h": [ - [ - 201552, - 205743 - ] - ], - "cjk unified ideographs extension i": [ - [ - 191472, - 192095 - ] - ], - "cjkcompatibility": [ - [ - 13056, - 13311 - ], - [ - 63744, - 64255 - ], - [ - 65072, - 65103 - ], - [ - 194560, - 195103 - ] - ], - "cjkpunct": [ - [ - 12288, - 12351 - ] - ], - "cjkradicals": [ - [ - 11904, - 12255 - ] - ], - "cjkstrokes": [ - [ - 12736, - 12783 - ] - ], - "combining": [ - [ - 768, - 879 - ], - [ - 6832, - 6911 - ], - [ - 7616, - 7679 - ], - [ - 8400, - 8447 - ] - ], - "controlpictures": [ - [ - 9216, - 9279 - ] - ], - "coptic": [ - [ - 11392, - 11519 - ] - ], - "copticnumber": [ - [ - 66272, - 66303 - ] - ], - "cuneiform": [ - [ - 73728, - 74751 - ], - [ - 74880, - 75087 - ] - ], - "cuneiformnumbers": [ - [ - 74752, - 74879 - ] - ], - "currency": [ - [ - 8352, - 8399 - ] - ], - "cypriot": [ - [ - 67584, - 67647 - ] - ], - "cypro-minoan": [ - [ - 77712, - 77823 - ] - ], - "cyrillic": [ - [ - 1024, - 1327 - ], - [ - 7296, - 7311 - ], - [ - 11744, - 11775 - ], - [ - 42560, - 42655 - ] - ], - "cyrillic extended-d": [ - [ - 122928, - 123023 - ] - ], - "deseret": [ - [ - 66560, - 66639 - ] - ], - "devanagari": [ - [ - 2304, - 2431 - ], - [ - 43232, - 43263 - ] - ], - "devanagari extended-a": [ - [ - 72448, - 72543 - ] - ], - "digit": [ - [ - 48, - 57 - ] - ], - "dingbats": [ - [ - 9984, - 10175 - ] - ], - "dives akuru": [ - [ - 71936, - 72031 - ] - ], - "dogra": [ - [ - 71680, - 71759 - ] - ], - "domino": [ - [ - 127024, - 127135 - ] - ], - "duployan": [ - [ - 113664, - 113823 - ] - ], - "egyptian hieroglyph format controls": [ - [ - 78896, - 78943 - ] - ], - "egyptian hieroglyphs extended-a": [ - [ - 78944, - 82943 - ] - ], - "elbasan": [ - [ - 66816, - 66863 - ] - ], - "elymaic": [ - [ - 69600, - 69631 - ] - ], - "emoticons": [ - [ - 128512, - 128591 - ] - ], - "enclosedalpha": [ - [ - 9312, - 9471 - ], - [ - 127232, - 127487 - ] - ], - "enclosedcjk": [ - [ - 12800, - 13055 - ], - [ - 127488, - 127743 - ] - ], - "ethiopic": [ - [ - 4608, - 5023 - ], - [ - 11648, - 11743 - ], - [ - 43776, - 43823 - ] - ], - "ethiopic extended-b": [ - [ - 124896, - 124927 - ] - ], - "garay": [ - [ - 68928, - 69007 - ] - ], - "geometric": [ - [ - 9632, - 9727 - ], - [ - 128896, - 129023 - ] - ], - "georgian": [ - [ - 4256, - 4351 - ], - [ - 11520, - 11567 - ] - ], - "georgian extended": [ - [ - 7312, - 7359 - ] - ], - "glagolitic": [ - [ - 11264, - 11359 - ], - [ - 122880, - 122927 - ] - ], - "gothic": [ - [ - 66352, - 66383 - ] - ], - "grantha": [ - [ - 70400, - 70527 - ] - ], - "greek": [ - [ - 880, - 1023 - ], - [ - 7936, - 8191 - ] - ], - "greekmusic": [ - [ - 119296, - 119375 - ] - ], - "greeknumbers": [ - [ - 65856, - 65935 - ] - ], - "gujarati": [ - [ - 2688, - 2815 - ] - ], - "gunjala gondi": [ - [ - 73056, - 73135 - ] - ], - "gurmukhi": [ - [ - 2560, - 2687 - ] - ], - "gurung khema": [ - [ - 90368, - 90431 - ] - ], - "halfmarks": [ - [ - 65056, - 65071 - ] - ], - "hangul": [ - [ - 4352, - 4607 - ], - [ - 12592, - 12687 - ], - [ - 43360, - 43391 - ], - [ - 44032, - 55295 - ] - ], - "hanifi rohingya": [ - [ - 68864, - 68927 - ] - ], - "hanunoo": [ - [ - 5920, - 5951 - ] - ], - "hatran": [ - [ - 67808, - 67839 - ] - ], - "hebrew": [ - [ - 1424, - 1535 - ] - ], - "hieroglyphs": [ - [ - 67968, - 67999 - ], - [ - 77824, - 78895 - ], - [ - 82944, - 83583 - ] - ], - "highsurrogates": [ - [ - 55296, - 56319 - ] - ], - "hiragana": [ - [ - 12352, - 12447 - ] - ], - "ideograph": [ - [ - 4352, - 4607 - ], - [ - 12272, - 12287 - ], - [ - 12448, - 12543 - ], - [ - 12544, - 12591 - ], - [ - 12592, - 12687 - ], - [ - 12704, - 12735 - ], - [ - 12784, - 12799 - ], - [ - 13056, - 13311 - ], - [ - 13312, - 19903 - ], - [ - 19968, - 40959 - ], - [ - 40960, - 42191 - ], - [ - 43360, - 43391 - ], - [ - 44032, - 55295 - ], - [ - 63744, - 64255 - ], - [ - 65072, - 65103 - ], - [ - 110592, - 110847 - ], - [ - 131072, - 173791 - ], - [ - 173824, - 183983 - ], - [ - 194560, - 195103 - ] - ], - "ideoother": [ - [ - 4352, - 4607 - ], - [ - 11904, - 12255 - ], - [ - 12288, - 12351 - ], - [ - 12352, - 12447 - ], - [ - 12448, - 12543 - ], - [ - 12544, - 12591 - ], - [ - 12592, - 12687 - ], - [ - 12704, - 12735 - ], - [ - 12736, - 12783 - ], - [ - 12784, - 12799 - ], - [ - 13056, - 13311 - ], - [ - 43360, - 43391 - ], - [ - 44032, - 55295 - ], - [ - 63744, - 64255 - ], - [ - 65072, - 65103 - ], - [ - 110592, - 110847 - ], - [ - 194560, - 195103 - ] - ], - "indic siyaq numbers": [ - [ - 126064, - 126143 - ] - ], - "indicnumber": [ - [ - 43056, - 43071 - ] - ], - "ipa": [ - [ - 592, - 687 - ], - [ - 7424, - 7615 - ] - ], - "javanese": [ - [ - 43392, - 43487 - ] - ], - "kaithi": [ - [ - 69760, - 69839 - ] - ], - "kaktovik numerals": [ - [ - 119488, - 119519 - ] - ], - "kana extended-a": [ - [ - 110848, - 110895 - ] - ], - "kana extended-b": [ - [ - 110576, - 110591 - ] - ], - "kanbun": [ - [ - 12688, - 12703 - ] - ], - "kannada": [ - [ - 3200, - 3327 - ] - ], - "katakana": [ - [ - 12448, - 12543 - ], - [ - 12784, - 12799 - ], - [ - 110592, - 110847 - ] - ], - "kawi": [ - [ - 73472, - 73567 - ] - ], - "kayahli": [ - [ - 43264, - 43311 - ] - ], - "kharoshthi": [ - [ - 68096, - 68191 - ] - ], - "khitan small script": [ - [ - 101120, - 101631 - ] - ], - "khmer": [ - [ - 6016, - 6143 - ] - ], - "khmersymbols": [ - [ - 6624, - 6655 - ] - ], - "khojki": [ - [ - 70144, - 70223 - ] - ], - "khudawadi": [ - [ - 70320, - 70399 - ] - ], - "kirat rai": [ - [ - 93504, - 93567 - ] - ], - "lao": [ - [ - 3712, - 3839 - ] - ], - "latin": [ - [ - 0, - 591 - ], - [ - 7680, - 7935 - ], - [ - 11360, - 11391 - ], - [ - 42784, - 43007 - ], - [ - 43824, - 43887 - ] - ], - "latin extended-f": [ - [ - 67456, - 67519 - ] - ], - "latin extended-g": [ - [ - 122624, - 122879 - ] - ], - "lepcha": [ - [ - 7168, - 7247 - ] - ], - "letterlike": [ - [ - 8448, - 8527 - ] - ], - "limbu": [ - [ - 6400, - 6479 - ] - ], - "lineara": [ - [ - 67072, - 67455 - ] - ], - "linearb": [ - [ - 65536, - 65791 - ] - ], - "lisu": [ - [ - 42192, - 42239 - ] - ], - "lisu supplement": [ - [ - 73648, - 73663 - ] - ], - "lowsurrogates": [ - [ - 56320, - 57343 - ] - ], - "lycian": [ - [ - 66176, - 66207 - ] - ], - "lydian": [ - [ - 67872, - 67903 - ] - ], - "mahajani": [ - [ - 69968, - 70015 - ] - ], - "mahjong": [ - [ - 126976, - 127023 - ] - ], - "makasar": [ - [ - 73440, - 73471 - ] - ], - "malayalam": [ - [ - 3328, - 3455 - ] - ], - "mandaic": [ - [ - 2112, - 2143 - ] - ], - "manichaean": [ - [ - 68288, - 68351 - ] - ], - "mapsymbols": [ - [ - 128640, - 128767 - ] - ], - "marchen": [ - [ - 72816, - 72895 - ] - ], - "masaram gondi": [ - [ - 72960, - 73055 - ] - ], - "mathematical": [ - [ - 10176, - 10223 - ], - [ - 10624, - 10751 - ], - [ - 119808, - 120831 - ] - ], - "mayan numerals": [ - [ - 119520, - 119551 - ] - ], - "medefaidrin": [ - [ - 93760, - 93855 - ] - ], - "meeteimayek": [ - [ - 43744, - 43775 - ], - [ - 43968, - 44031 - ] - ], - "mende kikakui": [ - [ - 124928, - 125151 - ] - ], - "meroitic": [ - [ - 68000, - 68095 - ] - ], - "miao": [ - [ - 93952, - 94111 - ] - ], - "misc": [ - [ - 8960, - 9215 - ] - ], - "miscsymbols": [ - [ - 9728, - 9983 - ] - ], - "modi": [ - [ - 71168, - 71263 - ] - ], - "modifiertone": [ - [ - 42752, - 42783 - ] - ], - "mongolian": [ - [ - 6144, - 6319 - ], - [ - 71264, - 71295 - ] - ], - "mro": [ - [ - 92736, - 92783 - ] - ], - "multani": [ - [ - 70272, - 70319 - ] - ], - "musical symbols": [ - [ - 119040, - 119295 - ] - ], - "myanmar": [ - [ - 4096, - 4255 - ], - [ - 43488, - 43519 - ], - [ - 43616, - 43647 - ] - ], - "myanmar extended-c": [ - [ - 71376, - 71423 - ] - ], - "nabataean": [ - [ - 67712, - 67759 - ] - ], - "nag mundari": [ - [ - 124112, - 124159 - ] - ], - "nandinagari": [ - [ - 72096, - 72191 - ] - ], - "newa": [ - [ - 70656, - 70783 - ] - ], - "newtailue": [ - [ - 6528, - 6623 - ] - ], - "nko": [ - [ - 1984, - 2047 - ] - ], - "numbers": [ - [ - 8528, - 8591 - ] - ], - "nushu": [ - [ - 110960, - 111359 - ] - ], - "nyiakeng puachue hmong": [ - [ - 123136, - 123215 - ] - ], - "ocr": [ - [ - 9280, - 9311 - ] - ], - "ogham": [ - [ - 5760, - 5791 - ] - ], - "ol onal": [ - [ - 124368, - 124415 - ] - ], - "olchiki": [ - [ - 7248, - 7295 - ] - ], - "old sogdian": [ - [ - 69376, - 69423 - ] - ], - "old uyghur": [ - [ - 69488, - 69551 - ] - ], - "oldhungarian": [ - [ - 68736, - 68863 - ] - ], - "olditalic": [ - [ - 66304, - 66351 - ] - ], - "oldnortharabian": [ - [ - 68224, - 68255 - ] - ], - "oldpermic": [ - [ - 66384, - 66431 - ] - ], - "oldpersian": [ - [ - 66464, - 66527 - ] - ], - "oldsoutharabian": [ - [ - 68192, - 68223 - ] - ], - "oldturkic": [ - [ - 68608, - 68687 - ] - ], - "operators": [ - [ - 8704, - 8959 - ], - [ - 10752, - 11007 - ] - ], - "oriya": [ - [ - 2816, - 2943 - ] - ], - "ornamentaldingbats": [ - [ - 128592, - 128639 - ] - ], - "osage": [ - [ - 66736, - 66815 - ] - ], - "osmanya": [ - [ - 66688, - 66735 - ] - ], - "ottoman siyaq numbers": [ - [ - 126208, - 126287 - ] - ], - "pahawhhmong": [ - [ - 92928, - 93071 - ] - ], - "pahlavi": [ - [ - 68448, - 68527 - ] - ], - "palmyrene": [ - [ - 67680, - 67711 - ] - ], - "parthian": [ - [ - 68416, - 68447 - ] - ], - "paucinhau": [ - [ - 72384, - 72447 - ] - ], - "phagspa": [ - [ - 43072, - 43135 - ] - ], - "phaistosdisc": [ - [ - 66000, - 66047 - ] - ], - "phoenician": [ - [ - 67840, - 67871 - ] - ], - "pictographs": [ - [ - 127744, - 128511 - ], - [ - 129280, - 129535 - ] - ], - "playingcards": [ - [ - 127136, - 127231 - ] - ], - "presentation": [ - [ - 64256, - 64335 - ] - ], - "privateuse": [ - [ - 57344, - 63743 - ], - [ - 983040, - 1114111 - ] - ], - "punctuation": [ - [ - 8192, - 8303 - ], - [ - 11776, - 11903 - ] - ], - "rejang": [ - [ - 43312, - 43359 - ] - ], - "rodnumerals": [ - [ - 119648, - 119679 - ] - ], - "ruminumerals": [ - [ - 69216, - 69247 - ] - ], - "runic": [ - [ - 5792, - 5887 - ] - ], - "samaritan": [ - [ - 2048, - 2111 - ] - ], - "saurashtra": [ - [ - 43136, - 43231 - ] - ], - "sharada": [ - [ - 70016, - 70111 - ] - ], - "shavian": [ - [ - 66640, - 66687 - ] - ], - "shorthandformat": [ - [ - 113824, - 113839 - ] - ], - "siddham": [ - [ - 71040, - 71167 - ] - ], - "sinhala": [ - [ - 3456, - 3583 - ], - [ - 70112, - 70143 - ] - ], - "small": [ - [ - 65104, - 65135 - ] - ], - "small kana extension": [ - [ - 110896, - 110959 - ] - ], - "sogdian": [ - [ - 69424, - 69487 - ] - ], - "sorasompeng": [ - [ - 69840, - 69887 - ] - ], - "soyombo": [ - [ - 72272, - 72367 - ] - ], - "space": [ - [ - 9, - 13 - ], - [ - 32, - 32 - ], - [ - 133 - ], - [ - 8232, - 8233 - ] - ], - "spacing": [ - [ - 688, - 767 - ] - ], - "specials": [ - [ - 65520, - 65535 - ] - ], - "sundanese": [ - [ - 7040, - 7103 - ], - [ - 7360, - 7375 - ] - ], - "sunuwar": [ - [ - 72640, - 72703 - ] - ], - "supersub": [ - [ - 8304, - 8351 - ] - ], - "suttonsignwriting": [ - [ - 120832, - 121519 - ] - ], - "sylotinagri": [ - [ - 43008, - 43055 - ] - ], - "symbols and pictographs extended-a": [ - [ - 129648, - 129791 - ] - ], - "symbols for legacy computing": [ - [ - 129792, - 130047 - ] - ], - "symbols for legacy computing supplement": [ - [ - 117760, - 118463 - ] - ], - "syriac": [ - [ - 1792, - 1871 - ] - ], - "syriac supplement": [ - [ - 2144, - 2159 - ] - ], - "tagalog": [ - [ - 5888, - 5919 - ] - ], - "tagbanwa": [ - [ - 5984, - 6015 - ] - ], - "tags": [ - [ - 917504, - 917631 - ] - ], - "taile": [ - [ - 6480, - 6527 - ] - ], - "taitham": [ - [ - 6688, - 6831 - ] - ], - "taiviet": [ - [ - 43648, - 43743 - ] - ], - "taixuanjing": [ - [ - 119552, - 119647 - ] - ], - "takri": [ - [ - 71296, - 71375 - ] - ], - "tamil": [ - [ - 2944, - 3071 - ] - ], - "tamil supplement": [ - [ - 73664, - 73727 - ] - ], - "tangsa": [ - [ - 92784, - 92879 - ] - ], - "tangut": [ - [ - 94176, - 101119 - ] - ], - "tangut supplement": [ - [ - 101632, - 101759 - ] - ], - "telugu": [ - [ - 3072, - 3199 - ] - ], - "thaana": [ - [ - 1920, - 1983 - ] - ], - "thai": [ - [ - 3584, - 3711 - ] - ], - "tibetan": [ - [ - 3840, - 4095 - ] - ], - "tifinagh": [ - [ - 11568, - 11647 - ] - ], - "tirhuta": [ - [ - 70784, - 70879 - ] - ], - "todhri": [ - [ - 67008, - 67071 - ] - ], - "toto": [ - [ - 123536, - 123583 - ] - ], - "tulu-tigalari": [ - [ - 70528, - 70655 - ] - ], - "ugaritic": [ - [ - 66432, - 66463 - ] - ], - "unified canadian aboriginal syllabics extended-a": [ - [ - 72368, - 72383 - ] - ], - "vai": [ - [ - 42240, - 42559 - ] - ], - "variations": [ - [ - 65024, - 65039 - ], - [ - 917760, - 917999 - ] - ], - "vedic": [ - [ - 7376, - 7423 - ] - ], - "vertical": [ - [ - 65040, - 65055 - ] - ], - "vithkuqi": [ - [ - 66928, - 67007 - ] - ], - "wancho": [ - [ - 123584, - 123647 - ] - ], - "warangciti": [ - [ - 71840, - 71935 - ] - ], - "width": [ - [ - 65280, - 65519 - ] - ], - "xdigit": [ - [ - 48, - 57 - ], - [ - 65, - 70 - ], - [ - 97, - 102 - ] - ], - "yezidi": [ - [ - 69248, - 69311 - ] - ], - "yi": [ - [ - 40960, - 42191 - ] - ], - "yijing": [ - [ - 19904, - 19967 - ] - ], - "zanabazar square": [ - [ - 72192, - 72271 - ] - ], - "znamenny musical notation": [ - [ - 118528, - 118735 - ] - ] -}; -ilib.data.ctype_n = { - "Nd": [ - [ - 48, - 57 - ], - [ - 1632, - 1641 - ], - [ - 1776, - 1785 - ], - [ - 1984, - 1993 - ], - [ - 2406, - 2415 - ], - [ - 2534, - 2543 - ], - [ - 2662, - 2671 - ], - [ - 2790, - 2799 - ], - [ - 2918, - 2927 - ], - [ - 3046, - 3055 - ], - [ - 3174, - 3183 - ], - [ - 3302, - 3311 - ], - [ - 3430, - 3439 - ], - [ - 3558, - 3567 - ], - [ - 3664, - 3673 - ], - [ - 3792, - 3801 - ], - [ - 3872, - 3881 - ], - [ - 4160, - 4169 - ], - [ - 4240, - 4249 - ], - [ - 6112, - 6121 - ], - [ - 6160, - 6169 - ], - [ - 6470, - 6479 - ], - [ - 6608, - 6617 - ], - [ - 6784, - 6793 - ], - [ - 6800, - 6809 - ], - [ - 6992, - 7001 - ], - [ - 7088, - 7097 - ], - [ - 7232, - 7241 - ], - [ - 7248, - 7257 - ], - [ - 42528, - 42537 - ], - [ - 43216, - 43225 - ], - [ - 43264, - 43273 - ], - [ - 43472, - 43481 - ], - [ - 43504, - 43513 - ], - [ - 43600, - 43609 - ], - [ - 44016, - 44025 - ], - [ - 65296, - 65305 - ], - [ - 66720, - 66729 - ], - [ - 68912, - 68921 - ], - [ - 68928, - 68937 - ], - [ - 69734, - 69743 - ], - [ - 69872, - 69881 - ], - [ - 69942, - 69951 - ], - [ - 70096, - 70105 - ], - [ - 70384, - 70393 - ], - [ - 70736, - 70745 - ], - [ - 70864, - 70873 - ], - [ - 71248, - 71257 - ], - [ - 71360, - 71369 - ], - [ - 71376, - 71395 - ], - [ - 71472, - 71481 - ], - [ - 71904, - 71913 - ], - [ - 72016, - 72025 - ], - [ - 72688, - 72697 - ], - [ - 72784, - 72793 - ], - [ - 73040, - 73049 - ], - [ - 73120, - 73129 - ], - [ - 73552, - 73561 - ], - [ - 90416, - 90425 - ], - [ - 92768, - 92777 - ], - [ - 92864, - 92873 - ], - [ - 93008, - 93017 - ], - [ - 93552, - 93561 - ], - [ - 118000, - 118009 - ], - [ - 120782, - 120831 - ], - [ - 123200, - 123209 - ], - [ - 123632, - 123641 - ], - [ - 124144, - 124153 - ], - [ - 124401, - 124410 - ], - [ - 125264, - 125273 - ], - [ - 130032, - 130041 - ] - ], - "Nl": [ - [ - 5870, - 5872 - ], - [ - 8544, - 8578 - ], - [ - 8581, - 8584 - ], - [ - 12295 - ], - [ - 12321, - 12329 - ], - [ - 12344, - 12346 - ], - [ - 42726, - 42735 - ], - [ - 65856, - 65908 - ], - [ - 66369 - ], - [ - 66378 - ], - [ - 66513, - 66517 - ], - [ - 74752, - 74862 - ] - ], - "No": [ - [ - 178, - 179 - ], - [ - 185 - ], - [ - 188, - 190 - ], - [ - 2548, - 2553 - ], - [ - 2930, - 2935 - ], - [ - 3056, - 3058 - ], - [ - 3192, - 3198 - ], - [ - 3416, - 3422 - ], - [ - 3440, - 3448 - ], - [ - 3882, - 3891 - ], - [ - 4969, - 4988 - ], - [ - 6128, - 6137 - ], - [ - 6618 - ], - [ - 8304 - ], - [ - 8308, - 8313 - ], - [ - 8320, - 8329 - ], - [ - 8528, - 8543 - ], - [ - 8585 - ], - [ - 9312, - 9371 - ], - [ - 9450, - 9471 - ], - [ - 10102, - 10131 - ], - [ - 11517 - ], - [ - 12690, - 12693 - ], - [ - 12832, - 12841 - ], - [ - 12872, - 12879 - ], - [ - 12881, - 12895 - ], - [ - 12928, - 12937 - ], - [ - 12977, - 12991 - ], - [ - 43056, - 43061 - ], - [ - 65799, - 65843 - ], - [ - 65909, - 65912 - ], - [ - 65930, - 65931 - ], - [ - 66273, - 66299 - ], - [ - 66336, - 66339 - ], - [ - 67672, - 67679 - ], - [ - 67705, - 67711 - ], - [ - 67751, - 67759 - ], - [ - 67835, - 67839 - ], - [ - 67862, - 67867 - ], - [ - 68028, - 68029 - ], - [ - 68032, - 68047 - ], - [ - 68050, - 68095 - ], - [ - 68160, - 68168 - ], - [ - 68221, - 68222 - ], - [ - 68253, - 68255 - ], - [ - 68331, - 68335 - ], - [ - 68440, - 68447 - ], - [ - 68472, - 68479 - ], - [ - 68521, - 68527 - ], - [ - 68858, - 68863 - ], - [ - 69216, - 69246 - ], - [ - 69405, - 69414 - ], - [ - 69457, - 69460 - ], - [ - 69573, - 69579 - ], - [ - 69714, - 69733 - ], - [ - 70113, - 70132 - ], - [ - 71482, - 71483 - ], - [ - 71914, - 71922 - ], - [ - 72794, - 72812 - ], - [ - 73664, - 73684 - ], - [ - 93019, - 93025 - ], - [ - 93824, - 93846 - ], - [ - 119488, - 119507 - ], - [ - 119520, - 119539 - ], - [ - 119648, - 119672 - ], - [ - 125127, - 125135 - ], - [ - 126065, - 126123 - ], - [ - 126125, - 126127 - ], - [ - 126129, - 126132 - ], - [ - 126209, - 126253 - ], - [ - 126255, - 126269 - ], - [ - 127232, - 127244 - ] - ] -}; -ilib.data.ctype_p = { - "Pc": [ - [ - 95 - ], - [ - 8255, - 8256 - ], - [ - 8276 - ], - [ - 65075, - 65076 - ], - [ - 65101, - 65103 - ], - [ - 65343 - ] - ], - "Pd": [ - [ - 45 - ], - [ - 1418 - ], - [ - 1470 - ], - [ - 5120 - ], - [ - 6150 - ], - [ - 8208, - 8213 - ], - [ - 11799 - ], - [ - 11802 - ], - [ - 11834, - 11835 - ], - [ - 11840 - ], - [ - 11869 - ], - [ - 12316 - ], - [ - 12336 - ], - [ - 12448 - ], - [ - 65073, - 65074 - ], - [ - 65112 - ], - [ - 65123 - ], - [ - 65293 - ], - [ - 68974 - ], - [ - 69293 - ] - ], - "Pe": [ - [ - 41 - ], - [ - 93 - ], - [ - 125 - ], - [ - 3899 - ], - [ - 3901 - ], - [ - 5788 - ], - [ - 8262 - ], - [ - 8318 - ], - [ - 8334 - ], - [ - 8969 - ], - [ - 8971 - ], - [ - 9002 - ], - [ - 10089 - ], - [ - 10091 - ], - [ - 10093 - ], - [ - 10095 - ], - [ - 10097 - ], - [ - 10099 - ], - [ - 10101 - ], - [ - 10182 - ], - [ - 10215 - ], - [ - 10217 - ], - [ - 10219 - ], - [ - 10221 - ], - [ - 10223 - ], - [ - 10628 - ], - [ - 10630 - ], - [ - 10632 - ], - [ - 10634 - ], - [ - 10636 - ], - [ - 10638 - ], - [ - 10640 - ], - [ - 10642 - ], - [ - 10644 - ], - [ - 10646 - ], - [ - 10648 - ], - [ - 10713 - ], - [ - 10715 - ], - [ - 10749 - ], - [ - 11811 - ], - [ - 11813 - ], - [ - 11815 - ], - [ - 11817 - ], - [ - 11862 - ], - [ - 11864 - ], - [ - 11866 - ], - [ - 11868 - ], - [ - 12297 - ], - [ - 12299 - ], - [ - 12301 - ], - [ - 12303 - ], - [ - 12305 - ], - [ - 12309 - ], - [ - 12311 - ], - [ - 12313 - ], - [ - 12315 - ], - [ - 12318, - 12319 - ], - [ - 64830 - ], - [ - 65048 - ], - [ - 65078 - ], - [ - 65080 - ], - [ - 65082 - ], - [ - 65084 - ], - [ - 65086 - ], - [ - 65088 - ], - [ - 65090 - ], - [ - 65092 - ], - [ - 65096 - ], - [ - 65114 - ], - [ - 65116 - ], - [ - 65118 - ], - [ - 65289 - ], - [ - 65341 - ], - [ - 65373 - ], - [ - 65376 - ], - [ - 65379 - ] - ], - "Pf": [ - [ - 187 - ], - [ - 8217 - ], - [ - 8221 - ], - [ - 8250 - ], - [ - 11779 - ], - [ - 11781 - ], - [ - 11786 - ], - [ - 11789 - ], - [ - 11805 - ], - [ - 11809 - ] - ], - "Pi": [ - [ - 171 - ], - [ - 8216 - ], - [ - 8219, - 8220 - ], - [ - 8223 - ], - [ - 8249 - ], - [ - 11778 - ], - [ - 11780 - ], - [ - 11785 - ], - [ - 11788 - ], - [ - 11804 - ], - [ - 11808 - ] - ], - "Po": [ - [ - 33, - 35 - ], - [ - 37, - 39 - ], - [ - 42 - ], - [ - 44 - ], - [ - 46, - 47 - ], - [ - 58, - 59 - ], - [ - 63, - 64 - ], - [ - 92 - ], - [ - 161 - ], - [ - 167 - ], - [ - 182, - 183 - ], - [ - 191 - ], - [ - 894 - ], - [ - 903 - ], - [ - 1370, - 1375 - ], - [ - 1417 - ], - [ - 1472 - ], - [ - 1475 - ], - [ - 1478 - ], - [ - 1523, - 1524 - ], - [ - 1545, - 1546 - ], - [ - 1548, - 1549 - ], - [ - 1563 - ], - [ - 1565, - 1567 - ], - [ - 1642, - 1645 - ], - [ - 1748 - ], - [ - 1792, - 1805 - ], - [ - 2039, - 2041 - ], - [ - 2096, - 2110 - ], - [ - 2142 - ], - [ - 2404, - 2405 - ], - [ - 2416 - ], - [ - 2557 - ], - [ - 2678 - ], - [ - 2800 - ], - [ - 3191 - ], - [ - 3204 - ], - [ - 3572 - ], - [ - 3663 - ], - [ - 3674, - 3675 - ], - [ - 3844, - 3858 - ], - [ - 3860 - ], - [ - 3973 - ], - [ - 4048, - 4052 - ], - [ - 4057, - 4058 - ], - [ - 4170, - 4175 - ], - [ - 4347 - ], - [ - 4960, - 4968 - ], - [ - 5742 - ], - [ - 5867, - 5869 - ], - [ - 5941, - 5942 - ], - [ - 6100, - 6102 - ], - [ - 6104, - 6106 - ], - [ - 6144, - 6149 - ], - [ - 6151, - 6154 - ], - [ - 6468, - 6469 - ], - [ - 6686, - 6687 - ], - [ - 6816, - 6822 - ], - [ - 6824, - 6829 - ], - [ - 6990, - 6991 - ], - [ - 7002, - 7008 - ], - [ - 7037, - 7039 - ], - [ - 7164, - 7167 - ], - [ - 7227, - 7231 - ], - [ - 7294, - 7295 - ], - [ - 7360, - 7367 - ], - [ - 7379 - ], - [ - 8214, - 8215 - ], - [ - 8224, - 8231 - ], - [ - 8240, - 8248 - ], - [ - 8251, - 8254 - ], - [ - 8257, - 8259 - ], - [ - 8263, - 8273 - ], - [ - 8275 - ], - [ - 8277, - 8286 - ], - [ - 11513, - 11516 - ], - [ - 11518, - 11519 - ], - [ - 11632 - ], - [ - 11776, - 11777 - ], - [ - 11782, - 11784 - ], - [ - 11787 - ], - [ - 11790, - 11798 - ], - [ - 11800, - 11801 - ], - [ - 11803 - ], - [ - 11806, - 11807 - ], - [ - 11818, - 11822 - ], - [ - 11824, - 11833 - ], - [ - 11836, - 11839 - ], - [ - 11841 - ], - [ - 11843, - 11855 - ], - [ - 11858, - 11860 - ], - [ - 12289, - 12291 - ], - [ - 12349 - ], - [ - 12539 - ], - [ - 42238, - 42239 - ], - [ - 42509, - 42511 - ], - [ - 42611 - ], - [ - 42622 - ], - [ - 42738, - 42743 - ], - [ - 43124, - 43127 - ], - [ - 43214, - 43215 - ], - [ - 43256, - 43258 - ], - [ - 43260 - ], - [ - 43310, - 43311 - ], - [ - 43359 - ], - [ - 43457, - 43469 - ], - [ - 43486, - 43487 - ], - [ - 43612, - 43615 - ], - [ - 43742, - 43743 - ], - [ - 43760, - 43761 - ], - [ - 44011 - ], - [ - 65040, - 65046 - ], - [ - 65049 - ], - [ - 65072 - ], - [ - 65093, - 65094 - ], - [ - 65097, - 65100 - ], - [ - 65104, - 65106 - ], - [ - 65108, - 65111 - ], - [ - 65119, - 65121 - ], - [ - 65128 - ], - [ - 65130, - 65131 - ], - [ - 65281, - 65283 - ], - [ - 65285, - 65287 - ], - [ - 65290 - ], - [ - 65292 - ], - [ - 65294, - 65295 - ], - [ - 65306, - 65307 - ], - [ - 65311, - 65312 - ], - [ - 65340 - ], - [ - 65377 - ], - [ - 65380, - 65381 - ], - [ - 65792, - 65794 - ], - [ - 66463 - ], - [ - 66512 - ], - [ - 66927 - ], - [ - 67671 - ], - [ - 67871 - ], - [ - 67903 - ], - [ - 68176, - 68184 - ], - [ - 68223 - ], - [ - 68336, - 68342 - ], - [ - 68409, - 68415 - ], - [ - 68505, - 68508 - ], - [ - 69461, - 69465 - ], - [ - 69510, - 69513 - ], - [ - 69703, - 69709 - ], - [ - 69819, - 69820 - ], - [ - 69822, - 69825 - ], - [ - 69952, - 69955 - ], - [ - 70004, - 70005 - ], - [ - 70085, - 70088 - ], - [ - 70093 - ], - [ - 70107 - ], - [ - 70109, - 70111 - ], - [ - 70200, - 70205 - ], - [ - 70313 - ], - [ - 70612, - 70613 - ], - [ - 70615, - 70616 - ], - [ - 70731, - 70735 - ], - [ - 70746, - 70747 - ], - [ - 70749 - ], - [ - 70854 - ], - [ - 71105, - 71127 - ], - [ - 71233, - 71235 - ], - [ - 71264, - 71276 - ], - [ - 71353 - ], - [ - 71484, - 71486 - ], - [ - 71739 - ], - [ - 72004, - 72006 - ], - [ - 72162 - ], - [ - 72255, - 72262 - ], - [ - 72346, - 72348 - ], - [ - 72350, - 72354 - ], - [ - 72448, - 72457 - ], - [ - 72673 - ], - [ - 72769, - 72773 - ], - [ - 72816, - 72817 - ], - [ - 73463, - 73464 - ], - [ - 73539, - 73551 - ], - [ - 73727 - ], - [ - 74864, - 74868 - ], - [ - 77809, - 77810 - ], - [ - 92782, - 92783 - ], - [ - 92917 - ], - [ - 92983, - 92987 - ], - [ - 92996 - ], - [ - 93549, - 93551 - ], - [ - 93847, - 93850 - ], - [ - 94178 - ], - [ - 113823 - ], - [ - 121479, - 121483 - ], - [ - 124415 - ], - [ - 125278, - 125279 - ] - ], - "Ps": [ - [ - 40 - ], - [ - 91 - ], - [ - 123 - ], - [ - 3898 - ], - [ - 3900 - ], - [ - 5787 - ], - [ - 8218 - ], - [ - 8222 - ], - [ - 8261 - ], - [ - 8317 - ], - [ - 8333 - ], - [ - 8968 - ], - [ - 8970 - ], - [ - 9001 - ], - [ - 10088 - ], - [ - 10090 - ], - [ - 10092 - ], - [ - 10094 - ], - [ - 10096 - ], - [ - 10098 - ], - [ - 10100 - ], - [ - 10181 - ], - [ - 10214 - ], - [ - 10216 - ], - [ - 10218 - ], - [ - 10220 - ], - [ - 10222 - ], - [ - 10627 - ], - [ - 10629 - ], - [ - 10631 - ], - [ - 10633 - ], - [ - 10635 - ], - [ - 10637 - ], - [ - 10639 - ], - [ - 10641 - ], - [ - 10643 - ], - [ - 10645 - ], - [ - 10647 - ], - [ - 10712 - ], - [ - 10714 - ], - [ - 10748 - ], - [ - 11810 - ], - [ - 11812 - ], - [ - 11814 - ], - [ - 11816 - ], - [ - 11842 - ], - [ - 11861 - ], - [ - 11863 - ], - [ - 11865 - ], - [ - 11867 - ], - [ - 12296 - ], - [ - 12298 - ], - [ - 12300 - ], - [ - 12302 - ], - [ - 12304 - ], - [ - 12308 - ], - [ - 12310 - ], - [ - 12312 - ], - [ - 12314 - ], - [ - 12317 - ], - [ - 64831 - ], - [ - 65047 - ], - [ - 65077 - ], - [ - 65079 - ], - [ - 65081 - ], - [ - 65083 - ], - [ - 65085 - ], - [ - 65087 - ], - [ - 65089 - ], - [ - 65091 - ], - [ - 65095 - ], - [ - 65113 - ], - [ - 65115 - ], - [ - 65117 - ], - [ - 65288 - ], - [ - 65339 - ], - [ - 65371 - ], - [ - 65375 - ], - [ - 65378 - ] - ] -}; -ilib.data.scriptToRange = { - "Adlm": [ - [ - 125184, - 125259 - ], - [ - 125264, - 125273 - ], - [ - 125278, - 125279 - ] - ], - "Aghb": [ - [ - 66864, - 66915 - ], - [ - 66927 - ] - ], - "Ahom": [ - [ - 71424, - 71450 - ], - [ - 71453, - 71467 - ], - [ - 71472, - 71494 - ] - ], - "Arab": [ - [ - 1536, - 1540 - ], - [ - 1542, - 1547 - ], - [ - 1549, - 1562 - ], - [ - 1564, - 1566 - ], - [ - 1568, - 1599 - ], - [ - 1601, - 1610 - ], - [ - 1622, - 1647 - ], - [ - 1649, - 1756 - ], - [ - 1758, - 1791 - ], - [ - 1872, - 1919 - ], - [ - 2160, - 2190 - ], - [ - 2192, - 2193 - ], - [ - 2199, - 2273 - ], - [ - 2275, - 2303 - ], - [ - 64336, - 64450 - ], - [ - 64467, - 64829 - ], - [ - 64832, - 64911 - ], - [ - 64914, - 64967 - ], - [ - 64975 - ], - [ - 65008, - 65023 - ], - [ - 65136, - 65140 - ], - [ - 65142, - 65276 - ], - [ - 69216, - 69246 - ], - [ - 69314, - 69316 - ], - [ - 69372, - 69375 - ], - [ - 126464, - 126467 - ], - [ - 126469, - 126495 - ], - [ - 126497, - 126498 - ], - [ - 126500 - ], - [ - 126503 - ], - [ - 126505, - 126514 - ], - [ - 126516, - 126519 - ], - [ - 126521 - ], - [ - 126523 - ], - [ - 126530 - ], - [ - 126535 - ], - [ - 126537 - ], - [ - 126539 - ], - [ - 126541, - 126543 - ], - [ - 126545, - 126546 - ], - [ - 126548 - ], - [ - 126551 - ], - [ - 126553 - ], - [ - 126555 - ], - [ - 126557 - ], - [ - 126559 - ], - [ - 126561, - 126562 - ], - [ - 126564 - ], - [ - 126567, - 126570 - ], - [ - 126572, - 126578 - ], - [ - 126580, - 126583 - ], - [ - 126585, - 126588 - ], - [ - 126590 - ], - [ - 126592, - 126601 - ], - [ - 126603, - 126619 - ], - [ - 126625, - 126627 - ], - [ - 126629, - 126633 - ], - [ - 126635, - 126651 - ], - [ - 126704, - 126705 - ] - ], - "Armi": [ - [ - 67648, - 67669 - ], - [ - 67671, - 67679 - ] - ], - "Armn": [ - [ - 1329, - 1366 - ], - [ - 1369, - 1418 - ], - [ - 1421, - 1423 - ], - [ - 64275, - 64279 - ] - ], - "Avst": [ - [ - 68352, - 68405 - ], - [ - 68409, - 68415 - ] - ], - "Bali": [ - [ - 6912, - 6988 - ], - [ - 6990, - 7039 - ] - ], - "Bamu": [ - [ - 42656, - 42743 - ], - [ - 92160, - 92728 - ] - ], - "Bass": [ - [ - 92880, - 92909 - ], - [ - 92912, - 92917 - ] - ], - "Batk": [ - [ - 7104, - 7155 - ], - [ - 7164, - 7167 - ] - ], - "Beng": [ - [ - 2432, - 2435 - ], - [ - 2437, - 2444 - ], - [ - 2447, - 2448 - ], - [ - 2451, - 2472 - ], - [ - 2474, - 2480 - ], - [ - 2482 - ], - [ - 2486, - 2489 - ], - [ - 2492, - 2500 - ], - [ - 2503, - 2504 - ], - [ - 2507, - 2510 - ], - [ - 2519 - ], - [ - 2524, - 2525 - ], - [ - 2527, - 2531 - ], - [ - 2534, - 2558 - ] - ], - "Bhks": [ - [ - 72704, - 72712 - ], - [ - 72714, - 72758 - ], - [ - 72760, - 72773 - ], - [ - 72784, - 72812 - ] - ], - "Bopo": [ - [ - 746, - 747 - ], - [ - 12549, - 12591 - ], - [ - 12704, - 12735 - ] - ], - "Brah": [ - [ - 69632, - 69709 - ], - [ - 69714, - 69749 - ], - [ - 69759 - ] - ], - "Brai": [ - [ - 10240, - 10495 - ] - ], - "Bugi": [ - [ - 6656, - 6683 - ], - [ - 6686, - 6687 - ] - ], - "Buhd": [ - [ - 5952, - 5971 - ] - ], - "Cakm": [ - [ - 69888, - 69940 - ], - [ - 69942, - 69959 - ] - ], - "Cans": [ - [ - 5120, - 5759 - ], - [ - 6320, - 6389 - ], - [ - 72368, - 72383 - ] - ], - "Cari": [ - [ - 66208, - 66256 - ] - ], - "Cham": [ - [ - 43520, - 43574 - ], - [ - 43584, - 43597 - ], - [ - 43600, - 43609 - ], - [ - 43612, - 43615 - ] - ], - "Cher": [ - [ - 5024, - 5109 - ], - [ - 5112, - 5117 - ], - [ - 43888, - 43967 - ] - ], - "Chrs": [ - [ - 69552, - 69579 - ] - ], - "Copt": [ - [ - 994, - 1007 - ], - [ - 11392, - 11507 - ], - [ - 11513, - 11519 - ] - ], - "Cpmn": [ - [ - 77712, - 77810 - ] - ], - "Cprt": [ - [ - 67584, - 67589 - ], - [ - 67592 - ], - [ - 67594, - 67637 - ], - [ - 67639, - 67640 - ], - [ - 67644 - ], - [ - 67647 - ] - ], - "Cyrl": [ - [ - 1024, - 1156 - ], - [ - 1159, - 1327 - ], - [ - 7296, - 7306 - ], - [ - 7467 - ], - [ - 7544 - ], - [ - 11744, - 11775 - ], - [ - 42560, - 42655 - ], - [ - 65070, - 65071 - ], - [ - 122928, - 122989 - ], - [ - 123023 - ] - ], - "Deva": [ - [ - 2304, - 2384 - ], - [ - 2389, - 2403 - ], - [ - 2406, - 2431 - ], - [ - 43232, - 43263 - ], - [ - 72448, - 72457 - ] - ], - "Diak": [ - [ - 71936, - 71942 - ], - [ - 71945 - ], - [ - 71948, - 71955 - ], - [ - 71957, - 71958 - ], - [ - 71960, - 71989 - ], - [ - 71991, - 71992 - ], - [ - 71995, - 72006 - ], - [ - 72016, - 72025 - ] - ], - "Dogr": [ - [ - 71680, - 71739 - ] - ], - "Dsrt": [ - [ - 66560, - 66639 - ] - ], - "Dupl": [ - [ - 113664, - 113770 - ], - [ - 113776, - 113788 - ], - [ - 113792, - 113800 - ], - [ - 113808, - 113817 - ], - [ - 113820, - 113823 - ] - ], - "Egyp": [ - [ - 77824, - 78933 - ], - [ - 78944, - 82938 - ] - ], - "Elba": [ - [ - 66816, - 66855 - ] - ], - "Elym": [ - [ - 69600, - 69622 - ] - ], - "Ethi": [ - [ - 4608, - 4680 - ], - [ - 4682, - 4685 - ], - [ - 4688, - 4694 - ], - [ - 4696 - ], - [ - 4698, - 4701 - ], - [ - 4704, - 4744 - ], - [ - 4746, - 4749 - ], - [ - 4752, - 4784 - ], - [ - 4786, - 4789 - ], - [ - 4792, - 4798 - ], - [ - 4800 - ], - [ - 4802, - 4805 - ], - [ - 4808, - 4822 - ], - [ - 4824, - 4880 - ], - [ - 4882, - 4885 - ], - [ - 4888, - 4954 - ], - [ - 4957, - 4988 - ], - [ - 4992, - 5017 - ], - [ - 11648, - 11670 - ], - [ - 11680, - 11686 - ], - [ - 11688, - 11694 - ], - [ - 11696, - 11702 - ], - [ - 11704, - 11710 - ], - [ - 11712, - 11718 - ], - [ - 11720, - 11726 - ], - [ - 11728, - 11734 - ], - [ - 11736, - 11742 - ], - [ - 43777, - 43782 - ], - [ - 43785, - 43790 - ], - [ - 43793, - 43798 - ], - [ - 43808, - 43814 - ], - [ - 43816, - 43822 - ], - [ - 124896, - 124902 - ], - [ - 124904, - 124907 - ], - [ - 124909, - 124910 - ], - [ - 124912, - 124926 - ] - ], - "Gara": [ - [ - 68928, - 68965 - ], - [ - 68969, - 68997 - ], - [ - 69006, - 69007 - ] - ], - "Geor": [ - [ - 4256, - 4293 - ], - [ - 4295 - ], - [ - 4301 - ], - [ - 4304, - 4346 - ], - [ - 4348, - 4351 - ], - [ - 7312, - 7354 - ], - [ - 7357, - 7359 - ], - [ - 11520, - 11557 - ], - [ - 11559 - ], - [ - 11565 - ] - ], - "Glag": [ - [ - 11264, - 11359 - ], - [ - 122880, - 122886 - ], - [ - 122888, - 122904 - ], - [ - 122907, - 122913 - ], - [ - 122915, - 122916 - ], - [ - 122918, - 122922 - ] - ], - "Gong": [ - [ - 73056, - 73061 - ], - [ - 73063, - 73064 - ], - [ - 73066, - 73102 - ], - [ - 73104, - 73105 - ], - [ - 73107, - 73112 - ], - [ - 73120, - 73129 - ] - ], - "Gonm": [ - [ - 72960, - 72966 - ], - [ - 72968, - 72969 - ], - [ - 72971, - 73014 - ], - [ - 73018 - ], - [ - 73020, - 73021 - ], - [ - 73023, - 73031 - ], - [ - 73040, - 73049 - ] - ], - "Goth": [ - [ - 66352, - 66378 - ] - ], - "Gran": [ - [ - 70400, - 70403 - ], - [ - 70405, - 70412 - ], - [ - 70415, - 70416 - ], - [ - 70419, - 70440 - ], - [ - 70442, - 70448 - ], - [ - 70450, - 70451 - ], - [ - 70453, - 70457 - ], - [ - 70460, - 70468 - ], - [ - 70471, - 70472 - ], - [ - 70475, - 70477 - ], - [ - 70480 - ], - [ - 70487 - ], - [ - 70493, - 70499 - ], - [ - 70502, - 70508 - ], - [ - 70512, - 70516 - ] - ], - "Grek": [ - [ - 880, - 883 - ], - [ - 885, - 887 - ], - [ - 890, - 893 - ], - [ - 895 - ], - [ - 900 - ], - [ - 902 - ], - [ - 904, - 906 - ], - [ - 908 - ], - [ - 910, - 929 - ], - [ - 931, - 993 - ], - [ - 1008, - 1023 - ], - [ - 7462, - 7466 - ], - [ - 7517, - 7521 - ], - [ - 7526, - 7530 - ], - [ - 7615 - ], - [ - 7936, - 7957 - ], - [ - 7960, - 7965 - ], - [ - 7968, - 8005 - ], - [ - 8008, - 8013 - ], - [ - 8016, - 8023 - ], - [ - 8025 - ], - [ - 8027 - ], - [ - 8029 - ], - [ - 8031, - 8061 - ], - [ - 8064, - 8116 - ], - [ - 8118, - 8132 - ], - [ - 8134, - 8147 - ], - [ - 8150, - 8155 - ], - [ - 8157, - 8175 - ], - [ - 8178, - 8180 - ], - [ - 8182, - 8190 - ], - [ - 8486 - ], - [ - 43877 - ], - [ - 65856, - 65934 - ], - [ - 65952 - ], - [ - 119296, - 119365 - ] - ], - "Gujr": [ - [ - 2689, - 2691 - ], - [ - 2693, - 2701 - ], - [ - 2703, - 2705 - ], - [ - 2707, - 2728 - ], - [ - 2730, - 2736 - ], - [ - 2738, - 2739 - ], - [ - 2741, - 2745 - ], - [ - 2748, - 2757 - ], - [ - 2759, - 2761 - ], - [ - 2763, - 2765 - ], - [ - 2768 - ], - [ - 2784, - 2787 - ], - [ - 2790, - 2801 - ], - [ - 2809, - 2815 - ] - ], - "Gukh": [ - [ - 90368, - 90425 - ] - ], - "Guru": [ - [ - 2561, - 2563 - ], - [ - 2565, - 2570 - ], - [ - 2575, - 2576 - ], - [ - 2579, - 2600 - ], - [ - 2602, - 2608 - ], - [ - 2610, - 2611 - ], - [ - 2613, - 2614 - ], - [ - 2616, - 2617 - ], - [ - 2620 - ], - [ - 2622, - 2626 - ], - [ - 2631, - 2632 - ], - [ - 2635, - 2637 - ], - [ - 2641 - ], - [ - 2649, - 2652 - ], - [ - 2654 - ], - [ - 2662, - 2678 - ] - ], - "Hang": [ - [ - 4352, - 4607 - ], - [ - 12334, - 12335 - ], - [ - 12593, - 12686 - ], - [ - 12800, - 12830 - ], - [ - 12896, - 12926 - ], - [ - 43360, - 43388 - ], - [ - 44032, - 55203 - ], - [ - 55216, - 55238 - ], - [ - 55243, - 55291 - ], - [ - 65440, - 65470 - ], - [ - 65474, - 65479 - ], - [ - 65482, - 65487 - ], - [ - 65490, - 65495 - ], - [ - 65498, - 65500 - ] - ], - "Hani": [ - [ - 11904, - 11929 - ], - [ - 11931, - 12019 - ], - [ - 12032, - 12245 - ], - [ - 12293 - ], - [ - 12295 - ], - [ - 12321, - 12329 - ], - [ - 12344, - 12347 - ], - [ - 13312, - 19903 - ], - [ - 19968, - 40959 - ], - [ - 63744, - 64109 - ], - [ - 64112, - 64217 - ], - [ - 94178, - 94179 - ], - [ - 94192, - 94193 - ], - [ - 131072, - 173791 - ], - [ - 173824, - 177977 - ], - [ - 177984, - 178205 - ], - [ - 178208, - 183969 - ], - [ - 183984, - 191456 - ], - [ - 191472, - 192093 - ], - [ - 194560, - 195101 - ], - [ - 196608, - 201546 - ], - [ - 201552, - 205743 - ] - ], - "Hano": [ - [ - 5920, - 5940 - ] - ], - "Hatr": [ - [ - 67808, - 67826 - ], - [ - 67828, - 67829 - ], - [ - 67835, - 67839 - ] - ], - "Hebr": [ - [ - 1425, - 1479 - ], - [ - 1488, - 1514 - ], - [ - 1519, - 1524 - ], - [ - 64285, - 64310 - ], - [ - 64312, - 64316 - ], - [ - 64318 - ], - [ - 64320, - 64321 - ], - [ - 64323, - 64324 - ], - [ - 64326, - 64335 - ] - ], - "Hira": [ - [ - 12353, - 12438 - ], - [ - 12445, - 12447 - ], - [ - 110593, - 110879 - ], - [ - 110898 - ], - [ - 110928, - 110930 - ], - [ - 127488 - ] - ], - "Hluw": [ - [ - 82944, - 83526 - ] - ], - "Hmng": [ - [ - 92928, - 92997 - ], - [ - 93008, - 93017 - ], - [ - 93019, - 93025 - ], - [ - 93027, - 93047 - ], - [ - 93053, - 93071 - ] - ], - "Hmnp": [ - [ - 123136, - 123180 - ], - [ - 123184, - 123197 - ], - [ - 123200, - 123209 - ], - [ - 123214, - 123215 - ] - ], - "Hung": [ - [ - 68736, - 68786 - ], - [ - 68800, - 68850 - ], - [ - 68858, - 68863 - ] - ], - "Ital": [ - [ - 66304, - 66339 - ], - [ - 66349, - 66351 - ] - ], - "Java": [ - [ - 43392, - 43469 - ], - [ - 43472, - 43481 - ], - [ - 43486, - 43487 - ] - ], - "Kali": [ - [ - 43264, - 43309 - ], - [ - 43311 - ] - ], - "Kana": [ - [ - 12449, - 12538 - ], - [ - 12541, - 12543 - ], - [ - 12784, - 12799 - ], - [ - 13008, - 13054 - ], - [ - 13056, - 13143 - ], - [ - 65382, - 65391 - ], - [ - 65393, - 65437 - ], - [ - 110576, - 110579 - ], - [ - 110581, - 110587 - ], - [ - 110589, - 110590 - ], - [ - 110592 - ], - [ - 110880, - 110882 - ], - [ - 110933 - ], - [ - 110948, - 110951 - ] - ], - "Kawi": [ - [ - 73472, - 73488 - ], - [ - 73490, - 73530 - ], - [ - 73534, - 73562 - ] - ], - "Khar": [ - [ - 68096, - 68099 - ], - [ - 68101, - 68102 - ], - [ - 68108, - 68115 - ], - [ - 68117, - 68119 - ], - [ - 68121, - 68149 - ], - [ - 68152, - 68154 - ], - [ - 68159, - 68168 - ], - [ - 68176, - 68184 - ] - ], - "Khmr": [ - [ - 6016, - 6109 - ], - [ - 6112, - 6121 - ], - [ - 6128, - 6137 - ], - [ - 6624, - 6655 - ] - ], - "Khoj": [ - [ - 70144, - 70161 - ], - [ - 70163, - 70209 - ] - ], - "Kits": [ - [ - 94180 - ], - [ - 101120, - 101589 - ], - [ - 101631 - ] - ], - "Knda": [ - [ - 3200, - 3212 - ], - [ - 3214, - 3216 - ], - [ - 3218, - 3240 - ], - [ - 3242, - 3251 - ], - [ - 3253, - 3257 - ], - [ - 3260, - 3268 - ], - [ - 3270, - 3272 - ], - [ - 3274, - 3277 - ], - [ - 3285, - 3286 - ], - [ - 3293, - 3294 - ], - [ - 3296, - 3299 - ], - [ - 3302, - 3311 - ], - [ - 3313, - 3315 - ] - ], - "Krai": [ - [ - 93504, - 93561 - ] - ], - "Kthi": [ - [ - 69760, - 69826 - ], - [ - 69837 - ] - ], - "Lana": [ - [ - 6688, - 6750 - ], - [ - 6752, - 6780 - ], - [ - 6783, - 6793 - ], - [ - 6800, - 6809 - ], - [ - 6816, - 6829 - ] - ], - "Laoo": [ - [ - 3713, - 3714 - ], - [ - 3716 - ], - [ - 3718, - 3722 - ], - [ - 3724, - 3747 - ], - [ - 3749 - ], - [ - 3751, - 3773 - ], - [ - 3776, - 3780 - ], - [ - 3782 - ], - [ - 3784, - 3790 - ], - [ - 3792, - 3801 - ], - [ - 3804, - 3807 - ] - ], - "Latn": [ - [ - 65, - 90 - ], - [ - 97, - 122 - ], - [ - 170 - ], - [ - 186 - ], - [ - 192, - 214 - ], - [ - 216, - 246 - ], - [ - 248, - 696 - ], - [ - 736, - 740 - ], - [ - 7424, - 7461 - ], - [ - 7468, - 7516 - ], - [ - 7522, - 7525 - ], - [ - 7531, - 7543 - ], - [ - 7545, - 7614 - ], - [ - 7680, - 7935 - ], - [ - 8305 - ], - [ - 8319 - ], - [ - 8336, - 8348 - ], - [ - 8490, - 8491 - ], - [ - 8498 - ], - [ - 8526 - ], - [ - 8544, - 8584 - ], - [ - 11360, - 11391 - ], - [ - 42786, - 42887 - ], - [ - 42891, - 42957 - ], - [ - 42960, - 42961 - ], - [ - 42963 - ], - [ - 42965, - 42972 - ], - [ - 42994, - 43007 - ], - [ - 43824, - 43866 - ], - [ - 43868, - 43876 - ], - [ - 43878, - 43881 - ], - [ - 64256, - 64262 - ], - [ - 65313, - 65338 - ], - [ - 65345, - 65370 - ], - [ - 67456, - 67461 - ], - [ - 67463, - 67504 - ], - [ - 67506, - 67514 - ], - [ - 122624, - 122654 - ], - [ - 122661, - 122666 - ] - ], - "Lepc": [ - [ - 7168, - 7223 - ], - [ - 7227, - 7241 - ], - [ - 7245, - 7247 - ] - ], - "Limb": [ - [ - 6400, - 6430 - ], - [ - 6432, - 6443 - ], - [ - 6448, - 6459 - ], - [ - 6464 - ], - [ - 6468, - 6479 - ] - ], - "Lina": [ - [ - 67072, - 67382 - ], - [ - 67392, - 67413 - ], - [ - 67424, - 67431 - ] - ], - "Linb": [ - [ - 65536, - 65547 - ], - [ - 65549, - 65574 - ], - [ - 65576, - 65594 - ], - [ - 65596, - 65597 - ], - [ - 65599, - 65613 - ], - [ - 65616, - 65629 - ], - [ - 65664, - 65786 - ] - ], - "Lisu": [ - [ - 42192, - 42239 - ], - [ - 73648 - ] - ], - "Lyci": [ - [ - 66176, - 66204 - ] - ], - "Lydi": [ - [ - 67872, - 67897 - ], - [ - 67903 - ] - ], - "Mahj": [ - [ - 69968, - 70006 - ] - ], - "Maka": [ - [ - 73440, - 73464 - ] - ], - "Mand": [ - [ - 2112, - 2139 - ], - [ - 2142 - ] - ], - "Mani": [ - [ - 68288, - 68326 - ], - [ - 68331, - 68342 - ] - ], - "Marc": [ - [ - 72816, - 72847 - ], - [ - 72850, - 72871 - ], - [ - 72873, - 72886 - ] - ], - "Medf": [ - [ - 93760, - 93850 - ] - ], - "Mend": [ - [ - 124928, - 125124 - ], - [ - 125127, - 125142 - ] - ], - "Merc": [ - [ - 68000, - 68023 - ], - [ - 68028, - 68047 - ], - [ - 68050, - 68095 - ] - ], - "Mero": [ - [ - 67968, - 67999 - ] - ], - "Mlym": [ - [ - 3328, - 3340 - ], - [ - 3342, - 3344 - ], - [ - 3346, - 3396 - ], - [ - 3398, - 3400 - ], - [ - 3402, - 3407 - ], - [ - 3412, - 3427 - ], - [ - 3430, - 3455 - ] - ], - "Modi": [ - [ - 71168, - 71236 - ], - [ - 71248, - 71257 - ] - ], - "Mong": [ - [ - 6144, - 6145 - ], - [ - 6148 - ], - [ - 6150, - 6169 - ], - [ - 6176, - 6264 - ], - [ - 6272, - 6314 - ], - [ - 71264, - 71276 - ] - ], - "Mroo": [ - [ - 92736, - 92766 - ], - [ - 92768, - 92777 - ], - [ - 92782, - 92783 - ] - ], - "Mtei": [ - [ - 43744, - 43766 - ], - [ - 43968, - 44013 - ], - [ - 44016, - 44025 - ] - ], - "Mult": [ - [ - 70272, - 70278 - ], - [ - 70280 - ], - [ - 70282, - 70285 - ], - [ - 70287, - 70301 - ], - [ - 70303, - 70313 - ] - ], - "Mymr": [ - [ - 4096, - 4255 - ], - [ - 43488, - 43518 - ], - [ - 43616, - 43647 - ], - [ - 71376, - 71395 - ] - ], - "Nagm": [ - [ - 124112, - 124153 - ] - ], - "Nand": [ - [ - 72096, - 72103 - ], - [ - 72106, - 72151 - ], - [ - 72154, - 72164 - ] - ], - "Narb": [ - [ - 68224, - 68255 - ] - ], - "Nbat": [ - [ - 67712, - 67742 - ], - [ - 67751, - 67759 - ] - ], - "Newa": [ - [ - 70656, - 70747 - ], - [ - 70749, - 70753 - ] - ], - "Nkoo": [ - [ - 1984, - 2042 - ], - [ - 2045, - 2047 - ] - ], - "Nshu": [ - [ - 94177 - ], - [ - 110960, - 111355 - ] - ], - "Ogam": [ - [ - 5760, - 5788 - ] - ], - "Olck": [ - [ - 7248, - 7295 - ] - ], - "Onao": [ - [ - 124368, - 124410 - ], - [ - 124415 - ] - ], - "Orkh": [ - [ - 68608, - 68680 - ] - ], - "Orya": [ - [ - 2817, - 2819 - ], - [ - 2821, - 2828 - ], - [ - 2831, - 2832 - ], - [ - 2835, - 2856 - ], - [ - 2858, - 2864 - ], - [ - 2866, - 2867 - ], - [ - 2869, - 2873 - ], - [ - 2876, - 2884 - ], - [ - 2887, - 2888 - ], - [ - 2891, - 2893 - ], - [ - 2901, - 2903 - ], - [ - 2908, - 2909 - ], - [ - 2911, - 2915 - ], - [ - 2918, - 2935 - ] - ], - "Osge": [ - [ - 66736, - 66771 - ], - [ - 66776, - 66811 - ] - ], - "Osma": [ - [ - 66688, - 66717 - ], - [ - 66720, - 66729 - ] - ], - "Ougr": [ - [ - 69488, - 69513 - ] - ], - "Palm": [ - [ - 67680, - 67711 - ] - ], - "Pauc": [ - [ - 72384, - 72440 - ] - ], - "Perm": [ - [ - 66384, - 66426 - ] - ], - "Phag": [ - [ - 43072, - 43127 - ] - ], - "Phli": [ - [ - 68448, - 68466 - ], - [ - 68472, - 68479 - ] - ], - "Phlp": [ - [ - 68480, - 68497 - ], - [ - 68505, - 68508 - ], - [ - 68521, - 68527 - ] - ], - "Phnx": [ - [ - 67840, - 67867 - ], - [ - 67871 - ] - ], - "Plrd": [ - [ - 93952, - 94026 - ], - [ - 94031, - 94087 - ], - [ - 94095, - 94111 - ] - ], - "Prti": [ - [ - 68416, - 68437 - ], - [ - 68440, - 68447 - ] - ], - "Rjng": [ - [ - 43312, - 43347 - ], - [ - 43359 - ] - ], - "Rohg": [ - [ - 68864, - 68903 - ], - [ - 68912, - 68921 - ] - ], - "Runr": [ - [ - 5792, - 5866 - ], - [ - 5870, - 5880 - ] - ], - "Samr": [ - [ - 2048, - 2093 - ], - [ - 2096, - 2110 - ] - ], - "Sarb": [ - [ - 68192, - 68223 - ] - ], - "Saur": [ - [ - 43136, - 43205 - ], - [ - 43214, - 43225 - ] - ], - "Sgnw": [ - [ - 120832, - 121483 - ], - [ - 121499, - 121503 - ], - [ - 121505, - 121519 - ] - ], - "Shaw": [ - [ - 66640, - 66687 - ] - ], - "Shrd": [ - [ - 70016, - 70111 - ] - ], - "Sidd": [ - [ - 71040, - 71093 - ], - [ - 71096, - 71133 - ] - ], - "Sind": [ - [ - 70320, - 70378 - ], - [ - 70384, - 70393 - ] - ], - "Sinh": [ - [ - 3457, - 3459 - ], - [ - 3461, - 3478 - ], - [ - 3482, - 3505 - ], - [ - 3507, - 3515 - ], - [ - 3517 - ], - [ - 3520, - 3526 - ], - [ - 3530 - ], - [ - 3535, - 3540 - ], - [ - 3542 - ], - [ - 3544, - 3551 - ], - [ - 3558, - 3567 - ], - [ - 3570, - 3572 - ], - [ - 70113, - 70132 - ] - ], - "Sogd": [ - [ - 69424, - 69465 - ] - ], - "Sogo": [ - [ - 69376, - 69415 - ] - ], - "Sora": [ - [ - 69840, - 69864 - ], - [ - 69872, - 69881 - ] - ], - "Soyo": [ - [ - 72272, - 72354 - ] - ], - "Sund": [ - [ - 7040, - 7103 - ], - [ - 7360, - 7367 - ] - ], - "Sunu": [ - [ - 72640, - 72673 - ], - [ - 72688, - 72697 - ] - ], - "Sylo": [ - [ - 43008, - 43052 - ] - ], - "Syrc": [ - [ - 1792, - 1805 - ], - [ - 1807, - 1866 - ], - [ - 1869, - 1871 - ], - [ - 2144, - 2154 - ] - ], - "Tagb": [ - [ - 5984, - 5996 - ], - [ - 5998, - 6000 - ], - [ - 6002, - 6003 - ] - ], - "Takr": [ - [ - 71296, - 71353 - ], - [ - 71360, - 71369 - ] - ], - "Tale": [ - [ - 6480, - 6509 - ], - [ - 6512, - 6516 - ] - ], - "Talu": [ - [ - 6528, - 6571 - ], - [ - 6576, - 6601 - ], - [ - 6608, - 6618 - ], - [ - 6622, - 6623 - ] - ], - "Taml": [ - [ - 2946, - 2947 - ], - [ - 2949, - 2954 - ], - [ - 2958, - 2960 - ], - [ - 2962, - 2965 - ], - [ - 2969, - 2970 - ], - [ - 2972 - ], - [ - 2974, - 2975 - ], - [ - 2979, - 2980 - ], - [ - 2984, - 2986 - ], - [ - 2990, - 3001 - ], - [ - 3006, - 3010 - ], - [ - 3014, - 3016 - ], - [ - 3018, - 3021 - ], - [ - 3024 - ], - [ - 3031 - ], - [ - 3046, - 3066 - ], - [ - 73664, - 73713 - ], - [ - 73727 - ] - ], - "Tang": [ - [ - 94176 - ], - [ - 94208, - 100343 - ], - [ - 100352, - 101119 - ], - [ - 101632, - 101640 - ] - ], - "Tavt": [ - [ - 43648, - 43714 - ], - [ - 43739, - 43743 - ] - ], - "Telu": [ - [ - 3072, - 3084 - ], - [ - 3086, - 3088 - ], - [ - 3090, - 3112 - ], - [ - 3114, - 3129 - ], - [ - 3132, - 3140 - ], - [ - 3142, - 3144 - ], - [ - 3146, - 3149 - ], - [ - 3157, - 3158 - ], - [ - 3160, - 3162 - ], - [ - 3165 - ], - [ - 3168, - 3171 - ], - [ - 3174, - 3183 - ], - [ - 3191, - 3199 - ] - ], - "Tfng": [ - [ - 11568, - 11623 - ], - [ - 11631, - 11632 - ], - [ - 11647 - ] - ], - "Tglg": [ - [ - 5888, - 5909 - ], - [ - 5919 - ] - ], - "Thaa": [ - [ - 1920, - 1969 - ] - ], - "Thai": [ - [ - 3585, - 3642 - ], - [ - 3648, - 3675 - ] - ], - "Tibt": [ - [ - 3840, - 3911 - ], - [ - 3913, - 3948 - ], - [ - 3953, - 3991 - ], - [ - 3993, - 4028 - ], - [ - 4030, - 4044 - ], - [ - 4046, - 4052 - ], - [ - 4057, - 4058 - ] - ], - "Tirh": [ - [ - 70784, - 70855 - ], - [ - 70864, - 70873 - ] - ], - "Tnsa": [ - [ - 92784, - 92862 - ], - [ - 92864, - 92873 - ] - ], - "Todr": [ - [ - 67008, - 67059 - ] - ], - "Toto": [ - [ - 123536, - 123566 - ] - ], - "Tulu_Tigalari": [ - [ - 70528, - 70537 - ], - [ - 70539 - ], - [ - 70542 - ], - [ - 70544, - 70581 - ], - [ - 70583, - 70592 - ], - [ - 70594 - ], - [ - 70597 - ], - [ - 70599, - 70602 - ], - [ - 70604, - 70613 - ], - [ - 70615, - 70616 - ], - [ - 70625, - 70626 - ] - ], - "Ugar": [ - [ - 66432, - 66461 - ], - [ - 66463 - ] - ], - "Vaii": [ - [ - 42240, - 42539 - ] - ], - "Vith": [ - [ - 66928, - 66938 - ], - [ - 66940, - 66954 - ], - [ - 66956, - 66962 - ], - [ - 66964, - 66965 - ], - [ - 66967, - 66977 - ], - [ - 66979, - 66993 - ], - [ - 66995, - 67001 - ], - [ - 67003, - 67004 - ] - ], - "Wara": [ - [ - 71840, - 71922 - ], - [ - 71935 - ] - ], - "Wcho": [ - [ - 123584, - 123641 - ], - [ - 123647 - ] - ], - "Xpeo": [ - [ - 66464, - 66499 - ], - [ - 66504, - 66517 - ] - ], - "Xsux": [ - [ - 73728, - 74649 - ], - [ - 74752, - 74862 - ], - [ - 74864, - 74868 - ], - [ - 74880, - 75075 - ] - ], - "Yezi": [ - [ - 69248, - 69289 - ], - [ - 69291, - 69293 - ], - [ - 69296, - 69297 - ] - ], - "Yiii": [ - [ - 40960, - 42124 - ], - [ - 42128, - 42182 - ] - ], - "Zanb": [ - [ - 72192, - 72263 - ] - ], - "Zinh": [ - [ - 768, - 879 - ], - [ - 1157, - 1158 - ], - [ - 1611, - 1621 - ], - [ - 1648 - ], - [ - 2385, - 2388 - ], - [ - 6832, - 6862 - ], - [ - 7376, - 7378 - ], - [ - 7380, - 7392 - ], - [ - 7394, - 7400 - ], - [ - 7405 - ], - [ - 7412 - ], - [ - 7416, - 7417 - ], - [ - 7616, - 7679 - ], - [ - 8204, - 8205 - ], - [ - 8400, - 8432 - ], - [ - 12330, - 12333 - ], - [ - 12441, - 12442 - ], - [ - 65024, - 65039 - ], - [ - 65056, - 65069 - ], - [ - 66045 - ], - [ - 66272 - ], - [ - 70459 - ], - [ - 118528, - 118573 - ], - [ - 118576, - 118598 - ], - [ - 119143, - 119145 - ], - [ - 119163, - 119170 - ], - [ - 119173, - 119179 - ], - [ - 119210, - 119213 - ], - [ - 917760, - 917999 - ] - ], - "Zyyy": [ - [ - 0, - 64 - ], - [ - 91, - 96 - ], - [ - 123, - 169 - ], - [ - 171, - 185 - ], - [ - 187, - 191 - ], - [ - 215 - ], - [ - 247 - ], - [ - 697, - 735 - ], - [ - 741, - 745 - ], - [ - 748, - 767 - ], - [ - 884 - ], - [ - 894 - ], - [ - 901 - ], - [ - 903 - ], - [ - 1541 - ], - [ - 1548 - ], - [ - 1563 - ], - [ - 1567 - ], - [ - 1600 - ], - [ - 1757 - ], - [ - 2274 - ], - [ - 2404, - 2405 - ], - [ - 3647 - ], - [ - 4053, - 4056 - ], - [ - 4347 - ], - [ - 5867, - 5869 - ], - [ - 5941, - 5942 - ], - [ - 6146, - 6147 - ], - [ - 6149 - ], - [ - 7379 - ], - [ - 7393 - ], - [ - 7401, - 7404 - ], - [ - 7406, - 7411 - ], - [ - 7413, - 7415 - ], - [ - 7418 - ], - [ - 8192, - 8203 - ], - [ - 8206, - 8292 - ], - [ - 8294, - 8304 - ], - [ - 8308, - 8318 - ], - [ - 8320, - 8334 - ], - [ - 8352, - 8384 - ], - [ - 8448, - 8485 - ], - [ - 8487, - 8489 - ], - [ - 8492, - 8497 - ], - [ - 8499, - 8525 - ], - [ - 8527, - 8543 - ], - [ - 8585, - 8587 - ], - [ - 8592, - 9257 - ], - [ - 9280, - 9290 - ], - [ - 9312, - 10239 - ], - [ - 10496, - 11123 - ], - [ - 11126, - 11157 - ], - [ - 11159, - 11263 - ], - [ - 11776, - 11869 - ], - [ - 12272, - 12292 - ], - [ - 12294 - ], - [ - 12296, - 12320 - ], - [ - 12336, - 12343 - ], - [ - 12348, - 12351 - ], - [ - 12443, - 12444 - ], - [ - 12448 - ], - [ - 12539, - 12540 - ], - [ - 12688, - 12703 - ], - [ - 12736, - 12773 - ], - [ - 12783 - ], - [ - 12832, - 12895 - ], - [ - 12927, - 13007 - ], - [ - 13055 - ], - [ - 13144, - 13311 - ], - [ - 19904, - 19967 - ], - [ - 42752, - 42785 - ], - [ - 42888, - 42890 - ], - [ - 43056, - 43065 - ], - [ - 43310 - ], - [ - 43471 - ], - [ - 43867 - ], - [ - 43882, - 43883 - ], - [ - 64830, - 64831 - ], - [ - 65040, - 65049 - ], - [ - 65072, - 65106 - ], - [ - 65108, - 65126 - ], - [ - 65128, - 65131 - ], - [ - 65279 - ], - [ - 65281, - 65312 - ], - [ - 65339, - 65344 - ], - [ - 65371, - 65381 - ], - [ - 65392 - ], - [ - 65438, - 65439 - ], - [ - 65504, - 65510 - ], - [ - 65512, - 65518 - ], - [ - 65529, - 65533 - ], - [ - 65792, - 65794 - ], - [ - 65799, - 65843 - ], - [ - 65847, - 65855 - ], - [ - 65936, - 65948 - ], - [ - 66000, - 66044 - ], - [ - 66273, - 66299 - ], - [ - 113824, - 113827 - ], - [ - 117760, - 118009 - ], - [ - 118016, - 118451 - ], - [ - 118608, - 118723 - ], - [ - 118784, - 119029 - ], - [ - 119040, - 119078 - ], - [ - 119081, - 119142 - ], - [ - 119146, - 119162 - ], - [ - 119171, - 119172 - ], - [ - 119180, - 119209 - ], - [ - 119214, - 119274 - ], - [ - 119488, - 119507 - ], - [ - 119520, - 119539 - ], - [ - 119552, - 119638 - ], - [ - 119648, - 119672 - ], - [ - 119808, - 119892 - ], - [ - 119894, - 119964 - ], - [ - 119966, - 119967 - ], - [ - 119970 - ], - [ - 119973, - 119974 - ], - [ - 119977, - 119980 - ], - [ - 119982, - 119993 - ], - [ - 119995 - ], - [ - 119997, - 120003 - ], - [ - 120005, - 120069 - ], - [ - 120071, - 120074 - ], - [ - 120077, - 120084 - ], - [ - 120086, - 120092 - ], - [ - 120094, - 120121 - ], - [ - 120123, - 120126 - ], - [ - 120128, - 120132 - ], - [ - 120134 - ], - [ - 120138, - 120144 - ], - [ - 120146, - 120485 - ], - [ - 120488, - 120779 - ], - [ - 120782, - 120831 - ], - [ - 126065, - 126132 - ], - [ - 126209, - 126269 - ], - [ - 126976, - 127019 - ], - [ - 127024, - 127123 - ], - [ - 127136, - 127150 - ], - [ - 127153, - 127167 - ], - [ - 127169, - 127183 - ], - [ - 127185, - 127221 - ], - [ - 127232, - 127405 - ], - [ - 127462, - 127487 - ], - [ - 127489, - 127490 - ], - [ - 127504, - 127547 - ], - [ - 127552, - 127560 - ], - [ - 127568, - 127569 - ], - [ - 127584, - 127589 - ], - [ - 127744, - 128727 - ], - [ - 128732, - 128748 - ], - [ - 128752, - 128764 - ], - [ - 128768, - 128886 - ], - [ - 128891, - 128985 - ], - [ - 128992, - 129003 - ], - [ - 129008 - ], - [ - 129024, - 129035 - ], - [ - 129040, - 129095 - ], - [ - 129104, - 129113 - ], - [ - 129120, - 129159 - ], - [ - 129168, - 129197 - ], - [ - 129200, - 129211 - ], - [ - 129216, - 129217 - ], - [ - 129280, - 129619 - ], - [ - 129632, - 129645 - ], - [ - 129648, - 129660 - ], - [ - 129664, - 129673 - ], - [ - 129679, - 129734 - ], - [ - 129742, - 129756 - ], - [ - 129759, - 129769 - ], - [ - 129776, - 129784 - ], - [ - 129792, - 129938 - ], - [ - 129940, - 130041 - ], - [ - 917505 - ], - [ - 917536, - 917631 - ] - ] -}; -ilib.data.astro = { - "_EquinoxpTerms": [ - 485, 324.96, 1934.136, 203, 337.23, 32964.467, - 199, 342.08, 20.186, 182, 27.85, 445267.112, 156, 73.14, 45036.886, - 136, 171.52, 22518.443, 77, 222.54, 65928.934, 74, 296.72, 3034.906, - 70, 243.58, 9037.513, 58, 119.81, 33718.147, 52, 297.17, 150.678, 50, - 21.02, 2281.226, 45, 247.54, 29929.562, 44, 325.15, 31555.956, 29, - 60.93, 4443.417, 18, 155.12, 67555.328, 17, 288.79, 4562.452, 16, - 198.04, 62894.029, 14, 199.76, 31436.921, 12, 95.39, 14577.848, 12, - 287.11, 31931.756, 12, 320.81, 34777.259, 9, 227.73, 1222.114, 8, - 15.45, 16859.074 - ], - - "_JDE0tab1000": [ - [ 1721139.29189, 365242.13740, 0.06134, 0.00111, -0.00071 ], - [ 1721233.25401, 365241.72562, -0.05323, 0.00907, 0.00025 ], - [ 1721325.70455, 365242.49558, -0.11677, -0.00297, 0.00074 ], - [ 1721414.39987, 365242.88257, -0.00769, -0.00933, -0.00006 ] - ], - - "_JDE0tab2000": [ - [ 2451623.80984, 365242.37404, 0.05169, -0.00411, -0.00057 ], - [ 2451716.56767, 365241.62603, 0.00325, 0.00888, -0.00030 ], - [ 2451810.21715, 365242.01767, -0.11575, 0.00337, 0.00078 ], - [ 2451900.05952, 365242.74049, -0.06223, -0.00823, 0.00032 ] - ], - - "_deltaTtab": [ - 124, - 119, - 115, - 110, - 106, - 102, - 98, - 95, - 91, - 88, - 85, - 82, - 79, - 77, - 74, - 72, - 70, - 67, - 65, - 63, - 62, - 60, - 58, - 57, - 55, - 54, - 53, - 51, - 50, - 49, - 48, - 47, - 46, - 45, - 44, - 43, - 42, - 41, - 40, - 38, - 37, - 36, - 35, - 34, - 33, - 32, - 31, - 30, - 28, - 27, - 26, - 25, - 24, - 23, - 22, - 21, - 20, - 19, - 18, - 17, - 16, - 15, - 14, - 14, - 13, - 12, - 12, - 11, - 11, - 10, - 10, - 10, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 16, - 16, - 16, - 16, - 15, - 15, - 14, - 14, - 13.7, - 13.4, - 13.1, - 12.9, - 12.7, - 12.6, - 12.5, - 12.5, - 12.5, - 12.5, - 12.5, - 12.5, - 12.5, - 12.5, - 12.5, - 12.5, - 12.5, - 12.4, - 12.3, - 12.2, - 12.0, - 11.7, - 11.4, - 11.1, - 10.6, - 10.2, - 9.6, - 9.1, - 8.6, - 8.0, - 7.5, - 7.0, - 6.6, - 6.3, - 6.0, - 5.8, - 5.7, - 5.6, - 5.6, - 5.6, - 5.7, - 5.8, - 5.9, - 6.1, - 6.2, - 6.3, - 6.5, - 6.6, - 6.8, - 6.9, - 7.1, - 7.2, - 7.3, - 7.4, - 7.5, - 7.6, - 7.7, - 7.7, - 7.8, - 7.8, - 7.88, - 7.82, - 7.54, - 6.97, - 6.40, - 6.02, - 5.41, - 4.10, - 2.92, - 1.82, - 1.61, - 0.10, - -1.02, - -1.28, - -2.69, - -3.24, - -3.64, - -4.54, - -4.71, - -5.11, - -5.40, - -5.42, - -5.20, - -5.46, - -5.46, - -5.79, - -5.63, - -5.64, - -5.80, - -5.66, - -5.87, - -6.01, - -6.19, - -6.64, - -6.44, - -6.47, - -6.09, - -5.76, - -4.66, - -3.74, - -2.72, - -1.54, - -0.02, - 1.24, - 2.64, - 3.86, - 5.37, - 6.14, - 7.75, - 9.13, - 10.46, - 11.53, - 13.36, - 14.65, - 16.01, - 17.20, - 18.24, - 19.06, - 20.25, - 20.95, - 21.16, - 22.25, - 22.41, - 23.03, - 23.49, - 23.62, - 23.86, - 24.49, - 24.34, - 24.08, - 24.02, - 24.00, - 23.87, - 23.95, - 23.86, - 23.93, - 23.73, - 23.92, - 23.96, - 24.02, - 24.33, - 24.83, - 25.30, - 25.70, - 26.24, - 26.77, - 27.28, - 27.78, - 28.25, - 28.71, - 29.15, - 29.57, - 29.97, - 30.36, - 30.72, - 31.07, - 31.35, - 31.68, - 32.18, - 32.68, - 33.15, - 33.59, - 34.00, - 34.47, - 35.03, - 35.73, - 36.54, - 37.43, - 38.29, - 39.20, - 40.18, - 41.17, - 42.23, - 43.37, - 44.49, - 45.48, - 46.46, - 47.52, - 48.53, - 49.59, - 50.54, - 51.38, - 52.17, - 52.96, - 53.79, - 54.34, - 54.87, - 55.32, - 55.82, - 56.30, - 56.86, - 57.57, - 58.31, - 59.12, - 59.99, - 60.78, - 61.63, - 62.30, - 62.97, - 63.47, - 63.83, - 64.09, - 64.30, - 64.47, - 64.57, - 64.69, - 64.85, - 65.15, - 65.46, - 65.78, - 66.07, - 66.3246, - 66.6030, - 66.9069, - 67.2810, - 67.61 - ], - - "_oterms": [ - -4680.93, -1.55, 1999.25, -51.38, -249.67, - -39.05, 7.12, 27.87, 5.79, 2.45 - ], - - - "_nutArgMult": [ - 0, 0, 0, 0, 1, - -2, 0, 0, 2, 2, - 0, 0, 0, 2, 2, - 0, 0, 0, 0, 2, - 0, 1, 0, 0, 0, - 0, 0, 1, 0, 0, - -2, 1, 0, 2, 2, - 0, 0, 0, 2, 1, - 0, 0, 1, 2, 2, - -2, -1, 0, 2, 2, - -2, 0, 1, 0, 0, - -2, 0, 0, 2, 1, - 0, 0, -1, 2, 2, - 2, 0, 0, 0, 0, - 0, 0, 1, 0, 1, - 2, 0, -1, 2, 2, - 0, 0, -1, 0, 1, - 0, 0, 1, 2, 1, - -2, 0, 2, 0, 0, - 0, 0, -2, 2, 1, - 2, 0, 0, 2, 2, - 0, 0, 2, 2, 2, - 0, 0, 2, 0, 0, - -2, 0, 1, 2, 2, - 0, 0, 0, 2, 0, - -2, 0, 0, 2, 0, - 0, 0, -1, 2, 1, - 0, 2, 0, 0, 0, - 2, 0, -1, 0, 1, - -2, 2, 0, 2, 2, - 0, 1, 0, 0, 1, - -2, 0, 1, 0, 1, - 0, -1, 0, 0, 1, - 0, 0, 2, -2, 0, - 2, 0, -1, 2, 1, - 2, 0, 1, 2, 2, - 0, 1, 0, 2, 2, - -2, 1, 1, 0, 0, - 0, -1, 0, 2, 2, - 2, 0, 0, 2, 1, - 2, 0, 1, 0, 0, - -2, 0, 2, 2, 2, - -2, 0, 1, 2, 1, - 2, 0, -2, 0, 1, - 2, 0, 0, 0, 1, - 0, -1, 1, 0, 0, - -2, -1, 0, 2, 1, - -2, 0, 0, 0, 1, - 0, 0, 2, 2, 1, - -2, 0, 2, 0, 1, - -2, 1, 0, 2, 1, - 0, 0, 1, -2, 0, - -1, 0, 1, 0, 0, - -2, 1, 0, 0, 0, - 1, 0, 0, 0, 0, - 0, 0, 1, 2, 0, - -1, -1, 1, 0, 0, - 0, 1, 1, 0, 0, - 0, -1, 1, 2, 2, - 2, -1, -1, 2, 2, - 0, 0, -2, 2, 2, - 0, 0, 3, 2, 2, - 2, -1, 0, 2, 2 - ], - - "_nutArgCoeff": [ - -171996, -1742, 92095, 89, - -13187, -16, 5736, -31, - -2274, -2, 977, -5, - 2062, 2, -895, 5, - 1426, -34, 54, -1, - 712, 1, -7, 0, - -517, 12, 224, -6, - -386, -4, 200, 0, - -301, 0, 129, -1, - 217, -5, -95, 3, - -158, 0, 0, 0, - 129, 1, -70, 0, - 123, 0, -53, 0, - 63, 0, 0, 0, - 63, 1, -33, 0, - -59, 0, 26, 0, - -58, -1, 32, 0, - -51, 0, 27, 0, - 48, 0, 0, 0, - 46, 0, -24, 0, - -38, 0, 16, 0, - -31, 0, 13, 0, - 29, 0, 0, 0, - 29, 0, -12, 0, - 26, 0, 0, 0, - -22, 0, 0, 0, - 21, 0, -10, 0, - 17, -1, 0, 0, - 16, 0, -8, 0, - -16, 1, 7, 0, - -15, 0, 9, 0, - -13, 0, 7, 0, - -12, 0, 6, 0, - 11, 0, 0, 0, - -10, 0, 5, 0, - -8, 0, 3, 0, - 7, 0, -3, 0, - -7, 0, 0, 0, - -7, 0, 3, 0, - -7, 0, 3, 0, - 6, 0, 0, 0, - 6, 0, -3, 0, - 6, 0, -3, 0, - -6, 0, 3, 0, - -6, 0, 3, 0, - 5, 0, 0, 0, - -5, 0, 3, 0, - -5, 0, 3, 0, - -5, 0, 3, 0, - 4, 0, 0, 0, - 4, 0, 0, 0, - 4, 0, 0, 0, - -4, 0, 0, 0, - -4, 0, 0, 0, - -4, 0, 0, 0, - 3, 0, 0, 0, - -3, 0, 0, 0, - -3, 0, 0, 0, - -3, 0, 0, 0, - -3, 0, 0, 0, - -3, 0, 0, 0, - -3, 0, 0, 0, - -3, 0, 0, 0 - ], - - "_nutCoeffA": [124.90, -1934.134, 0.002063], - "_nutCoeffB": [201.11, 72001.5377, 0.00057], - - "_coeff19th": [ - -0.00002, - 0.000297, - 0.025184, - -0.181133, - 0.553040, - -0.861938, - 0.677066, - -0.212591 - ], - - "_coeff18th": [ - -0.000009, - 0.003844, - 0.083563, - 0.865736, - 4.867575, - 15.845535, - 31.332267000000002, - 38.291998999999997, - 28.316289000000001, - 11.636203999999999, - 2.043794 - ], - - "_solarLongCoeff": [ - 403406, 195207, 119433, 112392, 3891, 2819, 1721, - 660, 350, 334, 314, 268, 242, 234, 158, 132, 129, 114, - 99, 93, 86, 78, 72, 68, 64, 46, 38, 37, 32, 29, 28, 27, 27, - 25, 24, 21, 21, 20, 18, 17, 14, 13, 13, 13, 12, 10, 10, 10, - 10 - ], - - "_solarLongMultipliers": [ - 0.9287892, 35999.137695799996, 35999.4089666, - 35998.728738500002, 71998.202609999993, 71998.440300000002, - 36000.357259999997, 71997.481199999995, 32964.467799999999, - -19.440999999999999, 445267.11170000001, 45036.883999999998, 3.1008, - 22518.4434, -19.9739, 65928.934500000003, - 9038.0293000000001, 3034.7683999999999, 33718.148000000001, 3034.4479999999999, - -2280.7730000000001, 29929.991999999998, 31556.492999999999, 149.58799999999999, - 9037.75, 107997.405, -4444.1760000000004, 151.77099999999999, - 67555.316000000006, 31556.080000000002, -4561.54, - 107996.70600000001, 1221.655, 62894.167000000001, - 31437.368999999999, 14578.298000000001, -31931.757000000001, - 34777.243000000002, 1221.999, 62894.510999999999, - -4442.0389999999998, 107997.909, 119.066, 16859.071, - -4.578, 26895.292000000001, -39.127000000000002, 12297.536, - 90073.778000000006 - ], - - "_solarLongAddends": [ - 270.54861, 340.19128000000001, 63.91854, 331.26220000000001, - 317.84300000000002, 86.631, 240.05199999999999, 310.25999999999999, 247.22999999999999, - 260.87, 297.81999999999999, 343.13999999999999, 166.78999999999999, 81.530000000000001, - 3.5, 132.75, 182.94999999999999, 162.03, 29.800000000000001, - 266.39999999999998, 249.19999999999999, 157.59999999999999, 257.80000000000001, 185.09999999999999, - 69.900000000000006, 8.0, 197.09999999999999, 250.40000000000001, 65.299999999999997, 162.69999999999999, - 341.5, 291.60000000000002, 98.5, 146.69999999999999, 110.0, 5.2, 342.60000000000002, - 230.90000000000001, 256.10000000000002, 45.299999999999997, 242.90000000000001, 115.2, 151.80000000000001, - 285.30000000000001, 53.299999999999997, 126.59999999999999, 205.69999999999999, 85.900000000000006, - 146.09999999999999 - ], - - "_meanMoonCoeff": [ - 218.3164591, - 481267.88134235999, - -0.0013268, - 1.855835023689734e-06, - -1.533883486210388e-08 - ], - "_elongationCoeff": [ - 297.85020420000001, - 445267.11151680001, - -0.00163, - 1.831944719236152e-06, - -8.844469995135542e-09 - ], - "_solarAnomalyCoeff": [ - 357.52910919999999, - 35999.050290899999, - -0.0001536, - 4.083299305839118e-08 - ], - "_lunarAnomalyCoeff": [ - 134.96341140000001, - 477198.8676313, - 0.008997, - 1.434740814071938e-05, - -6.797172376291463e-08 - ], - "_moonFromNodeCoeff": [ - 93.272099299999994, - 483202.01752729999, - -0.0034029, - -2.836074872376631e-07, - 1.158332464583985e-09 - ], - "_eCoeff": [ - 1.0, - -0.002516, - -7.4e-06 - ], - "_lunarElongationLongCoeff": [ - 0, - 2, - 2, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 0, - 1, - 0, - 2, - 0, - 0, - 4, - 0, - 4, - 2, - 2, - 1, - 1, - 2, - 2, - 4, - 2, - 0, - 2, - 2, - 1, - 2, - 0, - 0, - 2, - 2, - 2, - 4, - 0, - 3, - 2, - 4, - 0, - 2, - 2, - 2, - 4, - 0, - 4, - 1, - 2, - 0, - 1, - 3, - 4, - 2, - 0, - 1, - 2, - 2 - ], - - "_solarAnomalyLongCoeff": [ - 0, - 0, - 0, - 0, - 1, - 0, - 0, - -1, - 0, - -1, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 1, - -1, - 0, - 0, - 0, - 1, - 0, - -1, - 0, - -2, - 1, - 2, - -2, - 0, - 0, - -1, - 0, - 0, - 1, - -1, - 2, - 2, - 1, - -1, - 0, - 0, - -1, - 0, - 1, - 0, - 1, - 0, - 0, - -1, - 2, - 1, - 0, - 0 - ], - - "_lunarAnomalyLongCoeff": [ - 1, - -1, - 0, - 2, - 0, - 0, - -2, - -1, - 1, - 0, - -1, - 0, - 1, - 0, - 1, - 1, - -1, - 3, - -2, - -1, - 0, - -1, - 0, - 1, - 2, - 0, - -3, - -2, - -1, - -2, - 1, - 0, - 2, - 0, - -1, - 1, - 0, - -1, - 2, - -1, - 1, - -2, - -1, - -1, - -2, - 0, - 1, - 4, - 0, - -2, - 0, - 2, - 1, - -2, - -3, - 2, - 1, - -1, - 3, - -1 - ], - - "_moonFromNodeLongCoeff": [ - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - -2, - 2, - -2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - -2, - 2, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - -2, - 0, - 0, - 0, - 0, - -2, - -2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - -2 - ], - - "_sineCoeff": [ - 6288774, - 1274027, - 658314, - 213618, - -185116, - -114332, - 58793, - 57066, - 53322, - 45758, - -40923, - -34720, - -30383, - 15327, - -12528, - 10980, - 10675, - 10034, - 8548, - -7888, - -6766, - -5163, - 4987, - 4036, - 3994, - 3861, - 3665, - -2689, - -2602, - 2390, - -2348, - 2236, - -2120, - -2069, - 2048, - -1773, - -1595, - 1215, - -1110, - -892, - -810, - 759, - -713, - -700, - 691, - 596, - 549, - 537, - 520, - -487, - -399, - -381, - 351, - -340, - 330, - 327, - -323, - 299, - 294, - 0 - ], - - "_nmApproxCoeff": [ - 730125.59765000001, - 36524.908822833051, - 0.0001337, - -1.5e-07, - 7.3e-10 - ], - "_nmCapECoeff": [ - 1.0, - -0.002516, - -7.4e-06 - ], - "_nmSolarAnomalyCoeff": [ - 2.5534, - 35998.960422026496, - -2.18e-05, - -1.1e-07 - ], - "_nmLunarAnomalyCoeff": [ - 201.5643, - 477197.67640106793, - 0.0107438, - 1.239e-05, - -5.8e-08 - ], - "_nmMoonArgumentCoeff": [ - 160.71080000000001, - 483200.81131396897, - -0.0016341, - -2.27e-06, - 1.1e-08 - ], - "_nmCapOmegaCoeff": [ - 124.77460000000001, - -1934.1313612299998, - 0.0020691, - 2.15e-06 - ], - "_nmEFactor": [ - 0, - 1, - 0, - 0, - 1, - 1, - 2, - 0, - 0, - 1, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "_nmSolarCoeff": [ - 0, - 1, - 0, - 0, - -1, - 1, - 2, - 0, - 0, - 1, - 0, - 1, - 1, - -1, - 2, - 0, - 3, - 1, - 0, - 1, - -1, - -1, - 1, - 0 - ], - "_nmLunarCoeff": [ - 1, - 0, - 2, - 0, - 1, - 1, - 0, - 1, - 1, - 2, - 3, - 0, - 0, - 2, - 1, - 2, - 0, - 1, - 2, - 1, - 1, - 1, - 3, - 4 - ], - "_nmMoonCoeff": [ - 0, - 0, - 0, - 2, - 0, - 0, - 0, - -2, - 2, - 0, - 0, - 2, - -2, - 0, - 0, - -2, - 0, - -2, - 2, - 2, - 2, - -2, - 0, - 0 - ], - "_nmSineCoeff": [ - -0.4072, - 0.17241, - 0.01608, - 0.01039, - 0.00739, - -0.00514, - 0.00208, - -0.00111, - -0.00057, - 0.00056, - -0.00042, - 0.00042, - 0.00038, - -0.00024, - -6.999999999999999e-05, - 4e-05, - 4e-05, - 3e-05, - 3e-05, - -3e-05, - 3e-05, - -2e-05, - -2e-05, - 2e-05 - ], - "_nmAddConst": [ - 251.88, - 251.83000000000001, - 349.42000000000002, - 84.659999999999997, - 141.74000000000001, - 207.13999999999999, - 154.84, - 34.520000000000003, - 207.19, - 291.33999999999997, - 161.72, - 239.56, - 331.55000000000001 - ], - "_nmAddCoeff": [ - 0.016321, - 26.641886, - 36.412478, - 18.206239, - 53.303770999999998, - 2.453732, - 7.30686, - 27.261239, - 0.121824, - 1.844379, - 24.198153999999999, - 25.513099, - 3.592518 - ], - "_nmAddFactor": [ - 0.000165, - 0.000164, - 0.000126, - 0.00011, - 6.2e-05, - 6e-05, - 5.6e-05, - 4.7e-05, - 4.2e-05, - 4e-05, - 3.7e-05, - 3.5e-05, - 2.3e-05 - ], - "_nmExtra": [ - 299.76999999999998, - 132.84758479999999, - -0.009173000000000001 - ] -} -; -ilib.data.dateformats = { - "coptic": "gregorian", - "ethiopic": { - "date": { - "d": "d", - "dm": { - "f": "MMMM d", - "l": "MMMM d", - "m": "MMM d", - "s": "M/d" - }, - "dmw": { - "f": "EEEE, MMMM d", - "l": "EEE, MMMM d", - "m": "EE, MMM d", - "s": "E, M/d" - }, - "dmwy": { - "f": "EEEE, MMMM d, yyyy", - "l": "EEE, MMMM d, yyyy", - "m": "EE, MMM d, yyyy", - "s": "E, M/d/yyyy" - }, - "dmy": { - "f": "MMMM d, yyyy", - "l": "MMMM d, yyyy", - "m": "MMM d, yyyy", - "s": "M/d/yyyy" - }, - "dw": { - "f": "EEEE d", - "l": "EEE d", - "m": "EE d", - "s": "E d" - }, - "m": { - "f": "MMMM", - "l": "MMM", - "m": "MMM", - "s": "MM" - }, - "my": { - "f": "MMMM yyyy", - "l": "MMMM yyyy", - "m": "MMM yyyy", - "s": "M/yyyy" - }, - "n": { - "f": "MMMM", - "l": "MMM", - "m": "NN", - "s": "N" - }, - "w": { - "f": "EEEE", - "l": "EEE", - "m": "EE", - "s": "E" - }, - "y": { - "f": "yyyy", - "l": "yyyy", - "m": "yyyy", - "s": "yyyy" - } - }, - "order": { - "f": "{date} 'at' {time}", - "l": "{date} 'at' {time}", - "m": "{date}, {time}", - "s": "{date}, {time}" - }, - "range": { - "c00": { - "f": "{sm} {sd}, {sy} at {st} – {et}", - "l": "{sm} {sd}, {sy} at {st} – {et}", - "m": "{sm} {sd}, {sy}, {st} – {et}", - "s": "{sm}/{sd}/{sy}, {st} – {et}" - }, - "c01": { - "f": "{sm} {sd}, {sy} at {st} – {em} {ed}, {ey} at {et}", - "l": "{sm} {sd}, {sy} at {st} – {em} {ed}, {ey} at {et}", - "m": "{sm} {sd}, {sy}, {st} – {em} {ed}, {ey}, {et}", - "s": "{sm}/{sd}/{sy}, {st} – {em}/{ed}/{ey}, {et}" - }, - "c02": { - "f": "{sm} {sd}, {sy} at {st} – {em} {ed}, {ey} at {et}", - "l": "{sm} {sd}, {sy} at {st} – {em} {ed}, {ey} at {et}", - "m": "{sm} {sd}, {sy}, {st} – {em} {ed}, {ey}, {et}", - "s": "{sm}/{sd}/{sy}, {st} – {em}/{ed}/{ey}, {et}" - }, - "c03": { - "f": "{sm} {sd}, {sy} at {st} – {em} {ed}, {ey} at {et}", - "l": "{sm} {sd}, {sy} at {st} – {em} {ed}, {ey} at {et}", - "m": "{sm} {sd}, {sy}, {st} – {em} {ed}, {ey}, {et}", - "s": "{sm}/{sd}/{sy}, {st} – {em}/{ed}/{ey}, {et}" - }, - "c10": { - "f": "{sm} {sd} – {ed}, {ey}", - "l": "{sm} {sd} – {ed}, {ey}", - "m": "{sm} {sd} – {ed}, {ey}", - "s": "{sm}/{sd}/{sy} – {em}/{ed}/{ey}" - }, - "c11": { - "f": "{sm} {sd} – {em} {ed}, {ey}", - "l": "{sm} {sd} – {em} {ed}, {ey}", - "m": "{sm} {sd} – {em} {ed}, {ey}", - "s": "{sm}/{sd}/{sy} – {em}/{ed}/{ey}" - }, - "c12": { - "f": "{sm} {sd}, {sy} – {em} {ed}, {ey}", - "l": "{sm} {sd}, {sy} – {em} {ed}, {ey}", - "m": "{sm} {sd}, {sy} – {em} {ed}, {ey}", - "s": "{sm}/{sd}/{sy} – {em}/{ed}/{ey}" - }, - "c20": { - "f": "{sm}, {sy} – {em}, {ey}", - "l": "{sm}, {sy} – {em}, {ey}", - "m": "{sm}, {sy} – {em}, {ey}", - "s": "{sm}/{sy} – {em}/{ey}" - }, - "c30": { - "f": "{sy} – {ey}", - "l": "{sy} – {ey}", - "m": "{sy} – {ey}", - "s": "{sy} – {ey}" - } - }, - "time": { - "12": { - "ah": "h a", - "ahm": "h:mm a", - "ahms": "h:mm:ss a", - "ahmsz": "h:mm:ss a z", - "ahmz": "h:mm a z", - "h": "h", - "hm": "h:mm", - "hms": "h:mm:ss", - "hmsz": "h:mm:ss z", - "hmz": "h:mm z", - "m": "mm", - "ms": "mm:ss", - "s": "ss" - }, - "24": { - "ah": "H", - "ahm": "H:mm", - "ahms": "H:mm:ss", - "ahmsz": "H:mm:ss z", - "ahmz": "H:mm z", - "h": "H", - "hm": "H:mm", - "hms": "H:mm:ss", - "hmsz": "H:mm:ss z", - "hmz": "H:mm z", - "m": "mm", - "ms": "mm:ss", - "s": "ss" - } - } - }, - "gregorian": { - "date": { - "d": "dd", - "dm": { - "f": "d MMMM", - "l": "d MMM", - "m": "d/MM", - "s": "d/M" - }, - "dmw": { - "f": "EEEE d MMMM", - "l": "EEE d MMM", - "m": "EE d/MM", - "s": "EE d/M" - }, - "dmwy": { - "f": "EEEE d MMMM yyyy", - "l": "EEE d MMM yyyy", - "m": "EEE d/MM/yyyy", - "s": "EE d/M/yy" - }, - "dmy": { - "f": "d MMMM yyyy", - "l": "d MMM yyyy", - "m": "d/MM/yyyy", - "s": "d/M/yy" - }, - "dw": { - "f": "EEEE d", - "l": "EEE d", - "m": "EE d", - "s": "EE d" - }, - "m": { - "f": "MMMM", - "l": "MMM", - "m": "MM", - "s": "M" - }, - "my": { - "f": "MMMM yyyy", - "l": "MMM yyyy", - "m": "MM/yyyy", - "s": "M/yy" - }, - "n": { - "f": "MMMM", - "l": "MMM", - "m": "NN", - "s": "N" - }, - "w": { - "f": "EEEE", - "l": "EEE", - "m": "EE", - "s": "E" - }, - "y": { - "f": "yyyy", - "l": "yyyy", - "m": "yyyy", - "s": "yy" - } - }, - "order": "{date} {time}", - "range": { - "c00": { - "f": "{sd} {sm} {sy} {st} – {et}", - "l": "{sd} {sm} {sy} {st} – {et}", - "m": "{sd}/{sm}/{sy} {st} – {et}", - "s": "{sd}/{sm}/{sy} {st} – {et}" - }, - "c01": { - "f": "{sd} {sm} {st} – {ed} {em} {ey} {et}", - "l": "{sd} {sm} {st} – {ed} {em} {ey} {et}", - "m": "{sd}/{sm}/{sy} {st} – {ed}/{em}/{ey} {et}", - "s": "{sd}/{sm}/{sy} {st} – {ed}/{em}/{ey} {et}" - }, - "c02": { - "f": "{sd} {sm} {st} – {ed} {em} {ey} {et}", - "l": "{sd} {sm} {st} – {ed} {em} {ey} {et}", - "m": "{sd}/{sm}/{sy} {st} – {ed}/{em}/{ey} {et}", - "s": "{sd}/{sm}/{sy} {st} – {ed}/{em}/{ey} {et}" - }, - "c03": { - "f": "{sd} {sm} {sy} {st} – {ed} {em} {ey} {et}", - "l": "{sd} {sm} {sy} {st} – {ed} {em} {ey} {et}", - "m": "{sd}/{sm}/{sy} {st} – {ed}/{em}/{ey} {et}", - "s": "{sd}/{sm}/{sy} {st} – {ed}/{em}/{ey} {et}" - }, - "c10": { - "f": "{sd} – {ed} {sm} {sy}", - "l": "{sd} – {ed} {sm} {sy}", - "m": "{sd} – {ed}/{sm}/{sy}", - "s": "{sd} – {ed}/{sm}/{sy}" - }, - "c11": { - "f": "{sd} {sm} – {ed} {em} {sy}", - "l": "{sd} {sm} – {ed} {em} {sy}", - "m": "{sd}/{sm} – {ed}/{em}/{sy}", - "s": "{sd}/{sm} – {ed}/{em}/{sy}" - }, - "c12": { - "f": "{sd} {sm} {sy} – {ed} {em} {ey}", - "l": "{sd} {sm} {sy} – {ed} {em} {ey}", - "m": "{sd}/{sm}/{sy} – {ed}/{em}/{ey}", - "s": "{sd}/{sm}/{sy} – {ed}/{em}/{ey}" - }, - "c20": { - "f": "{sm} {sy} – {em} {ey}", - "l": "{sm} {sy} – {em} {ey}", - "m": "{sm}/{sy} – {em}/{ey}", - "s": "{sm}/{sy} – {em}/{ey}" - }, - "c30": "{sy} – {ey}" - }, - "time": { - "12": { - "ah": "ha", - "ahm": "h:mma", - "ahms": "h:mm:ssa", - "ahmsz": "h:mm:ssa z", - "ahmz": "h:mma z", - "h": "h", - "hm": "h:mm", - "hms": "h:mm:ss", - "hmsz": "h:mm:ss z", - "hmz": "h:mm z", - "m": "mm", - "ms": "mm:ss", - "s": "ss" - }, - "24": { - "ah": "H", - "ahm": "H:mm", - "ahms": "H:mm:ss", - "ahmsz": "H:mm:ss z", - "ahmz": "H:mm z", - "h": "H", - "hm": "H:mm", - "hms": "H:mm:ss", - "hmsz": "H:mm:ss z", - "hmz": "H:mm z", - "m": "mm", - "ms": "mm:ss", - "s": "ss" - } - } - }, - "han": "gregorian", - "hebrew": "gregorian", - "islamic": "gregorian", - "julian": "gregorian", - "persian": "gregorian", - "persian-algo": "gregorian", - "thaisolar": "gregorian" -}; -ilib.data.sysres = { - "E0": "S", - "E0-coptic": "T", - "E0-ethiopic": "I", - "E0-hebrew": "R", - "E0-islamic": "A", - "E0-persian": "Y", - "E0-persian-algo": "Y", - "E0-thaisolar": "A", - "E1": "M", - "E1-coptic": "P", - "E1-ethiopic": "S", - "E1-hebrew": "S", - "E1-islamic": "I", - "E1-persian": "D", - "E1-persian-algo": "D", - "E1-thaisolar": "C", - "E2": "T", - "E2-coptic": "P", - "E2-ethiopic": "M", - "E2-hebrew": "S", - "E2-islamic": "T", - "E2-persian": "S", - "E2-persian-algo": "S", - "E2-thaisolar": "A", - "E3": "W", - "E3-coptic": "P", - "E3-ethiopic": "R", - "E3-hebrew": "R", - "E3-islamic": "A", - "E3-persian": "C", - "E3-persian-algo": "C", - "E3-thaisolar": "P", - "E4": "T", - "E4-coptic": "P", - "E4-ethiopic": "H", - "E4-hebrew": "Ḥ", - "E4-islamic": "K", - "E4-persian": "P", - "E4-persian-algo": "P", - "E4-thaisolar": "P", - "E5": "F", - "E5-coptic": "P", - "E5-ethiopic": "A", - "E5-hebrew": "S", - "E5-islamic": "J", - "E5-persian": "J", - "E5-persian-algo": "J", - "E5-thaisolar": "S", - "E6": "S", - "E6-coptic": "P", - "E6-ethiopic": "K", - "E6-hebrew": "S", - "E6-islamic": "S", - "E6-persian": "S", - "E6-persian-algo": "S", - "E6-thaisolar": "S", - "EE0": "Su", - "EE0-coptic": "Tk", - "EE0-ethiopic": "Ih", - "EE0-hebrew": "ri", - "EE0-islamic": "ah", - "EE0-persian": "Ye", - "EE0-persian-algo": "Ye", - "EE0-thaisolar": "at", - "EE1": "Mo", - "EE1-coptic": "Pe", - "EE1-ethiopic": "Sa", - "EE1-hebrew": "se", - "EE1-islamic": "it", - "EE1-persian": "Do", - "EE1-persian-algo": "Do", - "EE1-thaisolar": "ch", - "EE2": "Tu", - "EE2-coptic": "Ps", - "EE2-ethiopic": "Ma", - "EE2-hebrew": "sl", - "EE2-islamic": "th", - "EE2-persian": "Se", - "EE2-persian-algo": "Se", - "EE2-thaisolar": "an", - "EE3": "We", - "EE3-coptic": "Pe", - "EE3-ethiopic": "Ro", - "EE3-hebrew": "rv", - "EE3-islamic": "ar", - "EE3-persian": "Ch", - "EE3-persian-algo": "Ch", - "EE3-thaisolar": "pu", - "EE4": "Th", - "EE4-coptic": "Pt", - "EE4-ethiopic": "Ha", - "EE4-hebrew": "ḥa", - "EE4-islamic": "kh", - "EE4-persian": "Pa", - "EE4-persian-algo": "Pa", - "EE4-thaisolar": "pr", - "EE5": "Fr", - "EE5-coptic": "Ps", - "EE5-ethiopic": "Ar", - "EE5-hebrew": "si", - "EE5-islamic": "ju", - "EE5-persian": "Jo", - "EE5-persian-algo": "Jo", - "EE5-thaisolar": "su", - "EE6": "Sa", - "EE6-coptic": "Ps", - "EE6-ethiopic": "Ki", - "EE6-hebrew": "sa", - "EE6-islamic": "sa", - "EE6-persian": "Sh", - "EE6-persian-algo": "Sh", - "EE6-thaisolar": "sa", - "EEE0": "Sun", - "EEE0-coptic": "Tky", - "EEE0-ethiopic": "Ihu", - "EEE0-hebrew": "ris", - "EEE0-islamic": "aha", - "EEE0-persian": "Yek", - "EEE0-persian-algo": "Yek", - "EEE0-thaisolar": "ath", - "EEE1": "Mon", - "EEE1-coptic": "Pes", - "EEE1-ethiopic": "San", - "EEE1-hebrew": "she", - "EEE1-islamic": "ith", - "EEE1-persian": "Dos", - "EEE1-persian-algo": "Dos", - "EEE1-thaisolar": "cha", - "EEE2": "Tue", - "EEE2-coptic": "Psh", - "EEE2-ethiopic": "Mak", - "EEE2-hebrew": "shl", - "EEE2-islamic": "tha", - "EEE2-persian": "Ses", - "EEE2-persian-algo": "Ses", - "EEE2-thaisolar": "ang", - "EEE3": "Wed", - "EEE3-coptic": "Pef", - "EEE3-ethiopic": "Rob", - "EEE3-hebrew": "rvi", - "EEE3-islamic": "arb", - "EEE3-persian": "Cha", - "EEE3-persian-algo": "Cha", - "EEE3-thaisolar": "phu", - "EEE4": "Thu", - "EEE4-coptic": "Pti", - "EEE4-ethiopic": "Ham", - "EEE4-hebrew": "ḥam", - "EEE4-islamic": "kha", - "EEE4-persian": "Pan", - "EEE4-persian-algo": "Pan", - "EEE4-thaisolar": "phr", - "EEE5": "Fri", - "EEE5-coptic": "Pso", - "EEE5-ethiopic": "Arb", - "EEE5-hebrew": "shi", - "EEE5-islamic": "jum", - "EEE5-persian": "Jom", - "EEE5-persian-algo": "Jom", - "EEE5-thaisolar": "suk", - "EEE6": "Sat", - "EEE6-coptic": "Psa", - "EEE6-ethiopic": "Kid", - "EEE6-hebrew": "sha", - "EEE6-islamic": "sab", - "EEE6-persian": "Sha", - "EEE6-persian-algo": "Sha", - "EEE6-thaisolar": "sao", - "EEEE0": "Sunday", - "EEEE0-coptic": "Tkyriake", - "EEEE0-ethiopic": "Ihud", - "EEEE0-hebrew": "yom rishon", - "EEEE0-islamic": "yawn al-ahad", - "EEEE0-persian": "Yekshanbeh", - "EEEE0-persian-algo": "Yekshanbeh", - "EEEE0-thaisolar": "wan athit", - "EEEE1": "Monday", - "EEEE1-coptic": "Pesnau", - "EEEE1-ethiopic": "Sanyo", - "EEEE1-hebrew": "yom sheni", - "EEEE1-islamic": "yawn al-ithnaya", - "EEEE1-persian": "Doshanbeh", - "EEEE1-persian-algo": "Doshanbeh", - "EEEE1-thaisolar": "wan chan", - "EEEE2": "Tuesday", - "EEEE2-coptic": "Pshoment", - "EEEE2-ethiopic": "Maksanyo", - "EEEE2-hebrew": "yom shlishi", - "EEEE2-islamic": "yawn uth-thalathaa", - "EEEE2-persian": "Seshhanbeh", - "EEEE2-persian-algo": "Seshhanbeh", - "EEEE2-thaisolar": "wan angkhan", - "EEEE3": "Wednesday", - "EEEE3-coptic": "Peftoou", - "EEEE3-ethiopic": "Rob/Rabu'e", - "EEEE3-hebrew": "yom r'vi‘i", - "EEEE3-islamic": "yawn al-arba‘a", - "EEEE3-persian": "Chaharshanbeh", - "EEEE3-persian-algo": "Chaharshanbeh", - "EEEE3-thaisolar": "wan phut", - "EEEE4": "Thursday", - "EEEE4-coptic": "Ptiou", - "EEEE4-ethiopic": "Hamus", - "EEEE4-hebrew": "yom ḥamishi", - "EEEE4-islamic": "yawn al-khamis", - "EEEE4-persian": "Panjshanbeh", - "EEEE4-persian-algo": "Panjshanbeh", - "EEEE4-thaisolar": "wan phruehatsabodi", - "EEEE5": "Friday", - "EEEE5-coptic": "Psoou", - "EEEE5-ethiopic": "Arb", - "EEEE5-hebrew": "yom shishi", - "EEEE5-islamic": "yawn al-jum‘a", - "EEEE5-persian": "Jomeh", - "EEEE5-persian-algo": "Jomeh", - "EEEE5-thaisolar": "wan suk", - "EEEE6": "Saturday", - "EEEE6-coptic": "Psabbaton", - "EEEE6-ethiopic": "Kidamme", - "EEEE6-hebrew": "yom shabbat", - "EEEE6-islamic": "yawn as-sabt", - "EEEE6-persian": "Shanbeh", - "EEEE6-persian-algo": "Shanbeh", - "EEEE6-thaisolar": "wan sao", - "G-1": "BCE", - "G1": "CE", - "M1-thaisolar": "M", - "M10-thaisolar": "T", - "M11-thaisolar": "P", - "M12-thaisolar": "T", - "M2-thaisolar": "K", - "M3-thaisolar": "M", - "M4-thaisolar": "M", - "M5-thaisolar": "P", - "M6-thaisolar": "M", - "M7-thaisolar": "K", - "M8-thaisolar": "S", - "M9-thaisolar": "K", - "MM1-thaisolar": "MaK", - "MM10-thaisolar": "TuK", - "MM11-thaisolar": "PY", - "MM12-thaisolar": "ThK", - "MM2-thaisolar": "KP", - "MM3-thaisolar": "MiK", - "MM4-thaisolar": "MY", - "MM5-thaisolar": "PK", - "MM6-thaisolar": "MY", - "MM7-thaisolar": "KK", - "MM8-thaisolar": "SK", - "MM9-thaisolar": "KY", - "MMM1": "Jan", - "MMM1-coptic": "Tho", - "MMM1-ethiopic": "Meskerem", - "MMM1-hebrew": "Nis", - "MMM1-islamic": "Muḥ", - "MMM1-persian": "Far", - "MMM1-persian-algo": "Far", - "MMM1-thaisolar": "Ma.K.", - "MMM10": "Oct", - "MMM10-coptic": "Pao", - "MMM10-ethiopic": "Sene", - "MMM10-hebrew": "Tev", - "MMM10-islamic": "Šaw", - "MMM10-persian": "Dey", - "MMM10-persian-algo": "Dey", - "MMM10-thaisolar": "Tu.K.", - "MMM11": "Nov", - "MMM11-coptic": "Epe", - "MMM11-ethiopic": "Hamle", - "MMM11-hebrew": "She", - "MMM11-islamic": "Qad", - "MMM11-persian": "Bah", - "MMM11-persian-algo": "Bah", - "MMM11-thaisolar": "Ph.Y.", - "MMM12": "Dec", - "MMM12-coptic": "Mes", - "MMM12-ethiopic": "Nehasse", - "MMM12-hebrew": "Ada", - "MMM12-islamic": "Ḥij", - "MMM12-persian": "Esf", - "MMM12-persian-algo": "Esf", - "MMM12-thaisolar": "Th.K.", - "MMM13-coptic": "Epa", - "MMM13-ethiopic": "Pagumen", - "MMM13-hebrew": "Ad2", - "MMM2": "Feb", - "MMM2-coptic": "Pao", - "MMM2-ethiopic": "Tekemt", - "MMM2-hebrew": "Iyy", - "MMM2-islamic": "Ṣaf", - "MMM2-persian": "Ord", - "MMM2-persian-algo": "Ord", - "MMM2-thaisolar": "Ku.P.", - "MMM3": "Mar", - "MMM3-coptic": "Ath", - "MMM3-ethiopic": "Hedar", - "MMM3-hebrew": "Siv", - "MMM3-islamic": "Rab", - "MMM3-persian": "Kho", - "MMM3-persian-algo": "Kho", - "MMM3-thaisolar": "Mi.K.", - "MMM4": "Apr", - "MMM4-coptic": "Koi", - "MMM4-ethiopic": "Tahsas", - "MMM4-hebrew": "Tam", - "MMM4-islamic": "Ra2", - "MMM4-persian": "Tir", - "MMM4-persian-algo": "Tir", - "MMM4-thaisolar": "Me.Y.", - "MMM5": "May", - "MMM5-coptic": "Tob", - "MMM5-ethiopic": "Ter", - "MMM5-hebrew": "Av", - "MMM5-islamic": "Jum", - "MMM5-persian": "Mor", - "MMM5-persian-algo": "Mor", - "MMM5-thaisolar": "Ph.K.", - "MMM6": "Jun", - "MMM6-coptic": "Mes", - "MMM6-ethiopic": "Yekatit", - "MMM6-hebrew": "Elu", - "MMM6-islamic": "Ju2", - "MMM6-persian": "Sha", - "MMM6-persian-algo": "Sha", - "MMM6-thaisolar": "Mi.Y.", - "MMM7": "Jul", - "MMM7-coptic": "Par", - "MMM7-ethiopic": "Megabit", - "MMM7-hebrew": "Tis", - "MMM7-islamic": "Raj", - "MMM7-persian": "Meh", - "MMM7-persian-algo": "Meh", - "MMM7-thaisolar": "Ka.K.", - "MMM8": "Aug", - "MMM8-coptic": "Par", - "MMM8-ethiopic": "Miazia", - "MMM8-hebrew": "Ḥes", - "MMM8-islamic": "Šha", - "MMM8-persian": "Aba", - "MMM8-persian-algo": "Aba", - "MMM8-thaisolar": "Si.K.", - "MMM9": "Sep", - "MMM9-coptic": "Pas", - "MMM9-ethiopic": "Genbot", - "MMM9-hebrew": "Kis", - "MMM9-islamic": "Ram", - "MMM9-persian": "Aza", - "MMM9-persian-algo": "Aza", - "MMM9-thaisolar": "Ka.Y.", - "MMMM1": "January", - "MMMM1-coptic": "Thoout", - "MMMM1-ethiopic": "Meskerem", - "MMMM1-hebrew": "Nisan", - "MMMM1-islamic": "Muḥarram", - "MMMM1-persian": "Farvardin", - "MMMM1-persian-algo": "Farvardin", - "MMMM1-thaisolar": "Makarakhom", - "MMMM10": "October", - "MMMM10-coptic": "Paoone", - "MMMM10-ethiopic": "Sene", - "MMMM10-hebrew": "Teveth", - "MMMM10-islamic": "Šawwāl", - "MMMM10-persian": "Dey", - "MMMM10-persian-algo": "Dey", - "MMMM10-thaisolar": "Tulakhom", - "MMMM11": "November", - "MMMM11-coptic": "Epeep", - "MMMM11-ethiopic": "Hamle", - "MMMM11-hebrew": "Shevat", - "MMMM11-islamic": "Ḏu al-Qa‘da", - "MMMM11-persian": "Bahman", - "MMMM11-persian-algo": "Bahman", - "MMMM11-thaisolar": "Phruetsachikayon", - "MMMM12": "December", - "MMMM12-coptic": "Mesore", - "MMMM12-ethiopic": "Nehasse", - "MMMM12-hebrew": "Adar", - "MMMM12-islamic": "Ḏu al-Ḥijja", - "MMMM12-persian": "Esfand", - "MMMM12-persian-algo": "Esfand", - "MMMM12-thaisolar": "Thanwakhom", - "MMMM13-coptic": "Epagomene", - "MMMM13-ethiopic": "Pagumen", - "MMMM13-hebrew": "Adar II", - "MMMM2": "February", - "MMMM2-coptic": "Paope", - "MMMM2-ethiopic": "Tekemt", - "MMMM2-hebrew": "Iyyar", - "MMMM2-islamic": "Ṣafar", - "MMMM2-persian": "Ordibehesht", - "MMMM2-persian-algo": "Ordibehesht", - "MMMM2-thaisolar": "Kumphaphan", - "MMMM3": "March", - "MMMM3-coptic": "Athor", - "MMMM3-ethiopic": "Hedar", - "MMMM3-hebrew": "Sivan", - "MMMM3-islamic": "Rabī‘ I", - "MMMM3-persian": "Khordad", - "MMMM3-persian-algo": "Khordad", - "MMMM3-thaisolar": "Minakhom", - "MMMM4": "April", - "MMMM4-coptic": "Koiak", - "MMMM4-ethiopic": "Tahsas", - "MMMM4-hebrew": "Tammuz", - "MMMM4-islamic": "Rabī‘ II", - "MMMM4-persian": "Tir", - "MMMM4-persian-algo": "Tir", - "MMMM4-thaisolar": "Mesayon", - "MMMM5": "May", - "MMMM5-coptic": "Tobe", - "MMMM5-ethiopic": "Ter", - "MMMM5-hebrew": "Av", - "MMMM5-islamic": "Jumādā I", - "MMMM5-persian": "Mordad", - "MMMM5-persian-algo": "Mordad", - "MMMM5-thaisolar": "Phruetsaphakhom", - "MMMM6": "June", - "MMMM6-coptic": "Meshir", - "MMMM6-ethiopic": "Yekatit", - "MMMM6-hebrew": "Elul", - "MMMM6-islamic": "Jumādā II", - "MMMM6-persian": "Shahrivar", - "MMMM6-persian-algo": "Shahrivar", - "MMMM6-thaisolar": "Mithunayon", - "MMMM7": "July", - "MMMM7-coptic": "Paremotep", - "MMMM7-ethiopic": "Megabit", - "MMMM7-hebrew": "Tishri", - "MMMM7-islamic": "Rajab", - "MMMM7-persian": "Mehr", - "MMMM7-persian-algo": "Mehr", - "MMMM7-thaisolar": "Karakadakhom", - "MMMM8": "August", - "MMMM8-coptic": "Parmoute", - "MMMM8-ethiopic": "Miazia", - "MMMM8-hebrew": "Ḥeshvan", - "MMMM8-islamic": "Šha'bān", - "MMMM8-persian": "Aban", - "MMMM8-persian-algo": "Aban", - "MMMM8-thaisolar": "Singhakhom", - "MMMM9": "September", - "MMMM9-coptic": "Pashons", - "MMMM9-ethiopic": "Genbot", - "MMMM9-hebrew": "Kislev", - "MMMM9-islamic": "Ramaḍān", - "MMMM9-persian": "Azar", - "MMMM9-persian-algo": "Azar", - "MMMM9-thaisolar": "Kanyayon", - "N1": "J", - "N1-coptic": "T", - "N1-ethiopic": "M", - "N1-hebrew": "N", - "N1-islamic": "M", - "N1-persian": "F", - "N1-persian-algo": "F", - "N10": "O", - "N10-coptic": "P", - "N10-ethiopic": "S", - "N10-hebrew": "T", - "N10-islamic": "Š", - "N10-persian": "D", - "N10-persian-algo": "D", - "N11": "N", - "N11-coptic": "E", - "N11-ethiopic": "H", - "N11-hebrew": "S", - "N11-islamic": "Q", - "N11-persian": "B", - "N11-persian-algo": "B", - "N12": "D", - "N12-coptic": "M", - "N12-ethiopic": "N", - "N12-hebrew": "A", - "N12-islamic": "Ḥ", - "N12-persian": "E", - "N12-persian-algo": "E", - "N13-coptic": "E", - "N13-ethiopic": "P", - "N13-hebrew": "A", - "N2": "F", - "N2-coptic": "P", - "N2-ethiopic": "T", - "N2-hebrew": "I", - "N2-islamic": "Ṣ", - "N2-persian": "O", - "N2-persian-algo": "O", - "N3": "M", - "N3-coptic": "A", - "N3-ethiopic": "H", - "N3-hebrew": "S", - "N3-islamic": "R", - "N3-persian": "K", - "N3-persian-algo": "K", - "N4": "A", - "N4-coptic": "K", - "N4-ethiopic": "T", - "N4-hebrew": "T", - "N4-islamic": "R", - "N4-persian": "T", - "N4-persian-algo": "T", - "N5": "M", - "N5-coptic": "T", - "N5-ethiopic": "T", - "N5-hebrew": "A", - "N5-islamic": "J", - "N5-persian": "M", - "N5-persian-algo": "M", - "N6": "J", - "N6-coptic": "M", - "N6-ethiopic": "Y", - "N6-hebrew": "E", - "N6-islamic": "J", - "N6-persian": "S", - "N6-persian-algo": "S", - "N7": "J", - "N7-coptic": "P", - "N7-ethiopic": "M", - "N7-hebrew": "T", - "N7-islamic": "R", - "N7-persian": "M", - "N7-persian-algo": "M", - "N8": "A", - "N8-coptic": "P", - "N8-ethiopic": "M", - "N8-hebrew": "Ḥ", - "N8-islamic": "Š", - "N8-persian": "A", - "N8-persian-algo": "A", - "N9": "S", - "N9-coptic": "P", - "N9-ethiopic": "G", - "N9-hebrew": "K", - "N9-islamic": "R", - "N9-persian": "A", - "N9-persian-algo": "A", - "NN1": "Ja", - "NN1-coptic": "Th", - "NN1-ethiopic": "Ma", - "NN1-hebrew": "Ni", - "NN1-islamic": "Mu", - "NN1-persian": "Fa", - "NN1-persian-algo": "Fa", - "NN10": "Oc", - "NN10-coptic": "Pa", - "NN10-ethiopic": "Sa", - "NN10-hebrew": "Te", - "NN10-islamic": "Ša", - "NN10-persian": "De", - "NN10-persian-algo": "De", - "NN11": "No", - "NN11-coptic": "Ep", - "NN11-ethiopic": "Ha", - "NN11-hebrew": "Sh", - "NN11-islamic": "Qa", - "NN11-persian": "Ba", - "NN11-persian-algo": "Ba", - "NN12": "De", - "NN12-coptic": "Me", - "NN12-ethiopic": "Na", - "NN12-hebrew": "Ad", - "NN12-islamic": "Ḥi", - "NN12-persian": "Es", - "NN12-persian-algo": "Es", - "NN13-coptic": "Ep", - "NN13-ethiopic": "Pa", - "NN13-hebrew": "A2", - "NN2": "Fe", - "NN2-coptic": "Pa", - "NN2-ethiopic": "Te", - "NN2-hebrew": "Iy", - "NN2-islamic": "Ṣa", - "NN2-persian": "Or", - "NN2-persian-algo": "Or", - "NN3": "Ma", - "NN3-coptic": "At", - "NN3-ethiopic": "He", - "NN3-hebrew": "Si", - "NN3-islamic": "Rb", - "NN3-persian": "Kh", - "NN3-persian-algo": "Kh", - "NN4": "Ap", - "NN4-coptic": "Ko", - "NN4-ethiopic": "Ta", - "NN4-hebrew": "Ta", - "NN4-islamic": "R2", - "NN4-persian": "Ti", - "NN4-persian-algo": "Ti", - "NN5": "Ma", - "NN5-coptic": "To", - "NN5-ethiopic": "Te", - "NN5-hebrew": "Av", - "NN5-islamic": "Ju", - "NN5-persian": "Mo", - "NN5-persian-algo": "Mo", - "NN6": "Ju", - "NN6-coptic": "Me", - "NN6-ethiopic": "Ya", - "NN6-hebrew": "El", - "NN6-islamic": "J2", - "NN6-persian": "Sh", - "NN6-persian-algo": "Sh", - "NN7": "Ju", - "NN7-coptic": "Pa", - "NN7-ethiopic": "Ma", - "NN7-hebrew": "Ti", - "NN7-islamic": "Ra", - "NN7-persian": "Me", - "NN7-persian-algo": "Me", - "NN8": "Au", - "NN8-coptic": "Pa", - "NN8-ethiopic": "Mi", - "NN8-hebrew": "Ḥe", - "NN8-islamic": "Šh", - "NN8-persian": "Ab", - "NN8-persian-algo": "Ab", - "NN9": "Se", - "NN9-coptic": "Pa", - "NN9-ethiopic": "Ge", - "NN9-hebrew": "Ki", - "NN9-islamic": "Ra", - "NN9-persian": "Az", - "NN9-persian-algo": "Az", - "a0": "AM", - "a0-ethiopic": "AM", - "a1": "PM", - "a1-ethiopic": "PM", - "a2-ethiopic": "PM", - "a3-ethiopic": "PM", - "a4-ethiopic": "PM", - "azh0": "AM", - "azh1": "AM", - "azh2": "AM", - "azh3": "PM", - "azh4": "PM", - "azh5": "PM", - "azh6": "PM", - "finalSeparatorFull": ", and ", - "ordinalChoice": "1#1st|2#2nd|3#3rd|21#21st|22#22nd|23#23rd|31#31st|#{num}th", - "separatorFull": ", ", - "separatorLong": ", ", - "separatorMedium": " ", - "separatorShort": " " -}; -ilib.data.pseudomap = { - "a": "à", - "c": "ç", - "d": "ð", - "e": "ë", - "g": "ğ", - "h": "ĥ", - "i": "í", - "j": "ĵ", - "k": "ķ", - "l": "ľ", - "n": "ñ", - "o": "õ", - "p": "þ", - "r": "ŕ", - "s": "š", - "t": "ţ", - "u": "ü", - "w": "ŵ", - "y": "ÿ", - "z": "ž", - "A": "Ã", - "B": "ß", - "C": "Ç", - "D": "Ð", - "E": "Ë", - "G": "Ĝ", - "H": "Ħ", - "I": "Ï", - "J": "Ĵ", - "K": "ĸ", - "L": "Ľ", - "N": "Ň", - "O": "Ø", - "R": "Ŗ", - "S": "Š", - "T": "Ť", - "U": "Ú", - "W": "Ŵ", - "Y": "Ŷ", - "Z": "Ż" -}; -ilib.data.scripts = { - "Adlm": { - "casing": true, - "ime": false, - "lid": "Adlam", - "nb": 166, - "nm": "Adlam", - "rtl": true - }, - "Afak": { - "lid": "Afaka", - "nb": 439, - "nm": "Afaka" - }, - "Aghb": { - "casing": false, - "ime": false, - "lid": "Caucasian_Albanian", - "nb": 239, - "nm": "Caucasian Albanian", - "rtl": false - }, - "Ahom": { - "casing": false, - "ime": false, - "lid": "Ahom", - "nb": 338, - "nm": "Ahom, Tai Ahom", - "rtl": false - }, - "Arab": { - "casing": false, - "ime": false, - "lid": "Arabic", - "nb": 160, - "nm": "Arabic", - "rtl": true - }, - "Aran": { - "lid": "Arabic_(Nastaliq_variant)", - "nb": 161, - "nm": "Arabic (Nastaliq variant)" - }, - "Armi": { - "casing": false, - "ime": false, - "lid": "Imperial_Aramaic", - "nb": 124, - "nm": "Imperial Aramaic", - "rtl": true - }, - "Armn": { - "casing": true, - "ime": false, - "lid": "Armenian", - "nb": 230, - "nm": "Armenian", - "rtl": false - }, - "Avst": { - "casing": false, - "ime": false, - "lid": "Avestan", - "nb": 134, - "nm": "Avestan", - "rtl": true - }, - "Bali": { - "casing": false, - "ime": false, - "lid": "Balinese", - "nb": 360, - "nm": "Balinese", - "rtl": false - }, - "Bamu": { - "casing": false, - "ime": true, - "lid": "Bamum", - "nb": 435, - "nm": "Bamum", - "rtl": false - }, - "Bass": { - "casing": false, - "ime": false, - "lid": "Bassa_Vah", - "nb": 259, - "nm": "Bassa Vah", - "rtl": false - }, - "Batk": { - "casing": false, - "ime": false, - "lid": "Batak", - "nb": 365, - "nm": "Batak", - "rtl": false - }, - "Beng": { - "casing": false, - "ime": false, - "lid": "Bengali", - "nb": 325, - "nm": "Bengali (Bangla)", - "rtl": false - }, - "Bhks": { - "casing": false, - "ime": false, - "lid": "Bhaiksuki", - "nb": 334, - "nm": "Bhaiksuki", - "rtl": false - }, - "Blis": { - "lid": "Blissymbols", - "nb": 550, - "nm": "Blissymbols" - }, - "Bopo": { - "casing": false, - "ime": false, - "lid": "Bopomofo", - "nb": 285, - "nm": "Bopomofo", - "rtl": false - }, - "Brah": { - "casing": false, - "ime": false, - "lid": "Brahmi", - "nb": 300, - "nm": "Brahmi", - "rtl": false - }, - "Brai": { - "casing": false, - "ime": false, - "lid": "Braille", - "nb": 570, - "nm": "Braille", - "rtl": false - }, - "Bugi": { - "casing": false, - "ime": false, - "lid": "Buginese", - "nb": 367, - "nm": "Buginese", - "rtl": false - }, - "Buhd": { - "casing": false, - "ime": false, - "lid": "Buhid", - "nb": 372, - "nm": "Buhid", - "rtl": false - }, - "Cakm": { - "casing": false, - "ime": false, - "lid": "Chakma", - "nb": 349, - "nm": "Chakma", - "rtl": false - }, - "Cans": { - "casing": false, - "ime": true, - "lid": "Canadian_Aboriginal", - "nb": 440, - "nm": "Unified Canadian Aboriginal Syllabics", - "rtl": false - }, - "Cari": { - "casing": false, - "ime": false, - "lid": "Carian", - "nb": 201, - "nm": "Carian", - "rtl": false - }, - "Cham": { - "casing": false, - "ime": false, - "lid": "Cham", - "nb": 358, - "nm": "Cham", - "rtl": false - }, - "Cher": { - "casing": true, - "ime": false, - "lid": "Cherokee", - "nb": 445, - "nm": "Cherokee", - "rtl": false - }, - "Chis": { - "lid": "Chisoi", - "nb": 298, - "nm": "Chisoi" - }, - "Chrs": { - "casing": false, - "ime": false, - "lid": "Chorasmian", - "nb": 109, - "nm": "Chorasmian", - "rtl": true - }, - "Cirt": { - "lid": "Cirth", - "nb": 291, - "nm": "Cirth" - }, - "Copt": { - "casing": true, - "ime": false, - "lid": "Coptic", - "nb": 204, - "nm": "Coptic", - "rtl": false - }, - "Cpmn": { - "casing": false, - "ime": true, - "lid": "Cypro_Minoan", - "nb": 402, - "nm": "Cypro-Minoan", - "rtl": false - }, - "Cprt": { - "casing": false, - "ime": false, - "lid": "Cypriot", - "nb": 403, - "nm": "Cypriot syllabary", - "rtl": true - }, - "Cyrl": { - "casing": true, - "ime": false, - "lid": "Cyrillic", - "nb": 220, - "nm": "Cyrillic", - "rtl": false - }, - "Cyrs": { - "lid": "Cyrillic_(Old_Church_Slavonic_variant)", - "nb": 221, - "nm": "Cyrillic (Old Church Slavonic variant)" - }, - "Deva": { - "casing": false, - "ime": false, - "lid": "Devanagari", - "nb": 315, - "nm": "Devanagari (Nagari)", - "rtl": false - }, - "Diak": { - "casing": false, - "ime": true, - "lid": "Dives_Akuru", - "nb": 342, - "nm": "Dives Akuru", - "rtl": false - }, - "Dogr": { - "casing": false, - "ime": false, - "lid": "Dogra", - "nb": 328, - "nm": "Dogra", - "rtl": false - }, - "Dsrt": { - "casing": true, - "ime": false, - "lid": "Deseret", - "nb": 250, - "nm": "Deseret (Mormon)", - "rtl": false - }, - "Dupl": { - "casing": false, - "ime": true, - "lid": "Duployan", - "nb": 755, - "nm": "Duployan shorthand, Duployan stenography", - "rtl": false - }, - "Egyd": { - "lid": "Egyptian_demotic", - "nb": 70, - "nm": "Egyptian demotic" - }, - "Egyh": { - "lid": "Egyptian_hieratic", - "nb": 60, - "nm": "Egyptian hieratic" - }, - "Egyp": { - "casing": false, - "ime": true, - "lid": "Egyptian_Hieroglyphs", - "nb": 50, - "nm": "Egyptian hieroglyphs", - "rtl": false - }, - "Elba": { - "casing": false, - "ime": false, - "lid": "Elbasan", - "nb": 226, - "nm": "Elbasan", - "rtl": false - }, - "Elym": { - "casing": false, - "ime": false, - "lid": "Elymaic", - "nb": 128, - "nm": "Elymaic", - "rtl": true - }, - "Ethi": { - "casing": false, - "ime": true, - "lid": "Ethiopic", - "nb": 430, - "nm": "Ethiopic (Geʻez)", - "rtl": false - }, - "Gara": { - "casing": true, - "ime": false, - "lid": "Garay", - "nb": 164, - "nm": "Garay", - "rtl": true - }, - "Geok": { - "lid": "Georgian", - "nb": 241, - "nm": "Khutsuri (Asomtavruli and Nuskhuri)" - }, - "Geor": { - "casing": false, - "ime": false, - "lid": "Georgian", - "nb": 240, - "nm": "Georgian (Mkhedruli and Mtavruli)", - "rtl": false - }, - "Glag": { - "casing": true, - "ime": false, - "lid": "Glagolitic", - "nb": 225, - "nm": "Glagolitic", - "rtl": false - }, - "Gong": { - "casing": false, - "ime": false, - "lid": "Gunjala_Gondi", - "nb": 312, - "nm": "Gunjala Gondi", - "rtl": false - }, - "Gonm": { - "casing": false, - "ime": false, - "lid": "Masaram_Gondi", - "nb": 313, - "nm": "Masaram Gondi", - "rtl": false - }, - "Goth": { - "casing": false, - "ime": false, - "lid": "Gothic", - "nb": 206, - "nm": "Gothic", - "rtl": false - }, - "Gran": { - "casing": false, - "ime": false, - "lid": "Grantha", - "nb": 343, - "nm": "Grantha", - "rtl": false - }, - "Grek": { - "casing": true, - "ime": false, - "lid": "Greek", - "nb": 200, - "nm": "Greek", - "rtl": false - }, - "Gujr": { - "casing": false, - "ime": false, - "lid": "Gujarati", - "nb": 320, - "nm": "Gujarati", - "rtl": false - }, - "Gukh": { - "casing": false, - "ime": false, - "lid": "Gurung_Khema", - "nb": 397, - "nm": "Gurung Khema", - "rtl": false - }, - "Guru": { - "casing": false, - "ime": false, - "lid": "Gurmukhi", - "nb": 310, - "nm": "Gurmukhi", - "rtl": false - }, - "Hanb": { - "casing": false, - "ime": true, - "lid": "Han_with_Bopomofo_(alias_for_Han_+_Bopomofo)", - "nb": 503, - "nm": "Han with Bopomofo (alias for Han + Bopomofo)", - "rtl": false - }, - "Hang": { - "casing": false, - "ime": true, - "lid": "Hangul", - "nb": 286, - "nm": "Hangul (Hangŭl, Hangeul)", - "rtl": false - }, - "Hani": { - "casing": false, - "ime": true, - "lid": "Han", - "nb": 500, - "nm": "Han (Hanzi, Kanji, Hanja)", - "rtl": false - }, - "Hano": { - "casing": false, - "ime": false, - "lid": "Hanunoo", - "nb": 371, - "nm": "Hanunoo (Hanunóo)", - "rtl": false - }, - "Hans": { - "casing": false, - "ime": true, - "lid": "Han_(Simplified_variant)", - "nb": 501, - "nm": "Han (Simplified variant)", - "rtl": false - }, - "Hant": { - "casing": false, - "ime": true, - "lid": "Han_(Traditional_variant)", - "nb": 502, - "nm": "Han (Traditional variant)", - "rtl": false - }, - "Hatr": { - "casing": false, - "ime": false, - "lid": "Hatran", - "nb": 127, - "nm": "Hatran", - "rtl": true - }, - "Hebr": { - "casing": false, - "ime": false, - "lid": "Hebrew", - "nb": 125, - "nm": "Hebrew", - "rtl": true - }, - "Hira": { - "casing": false, - "ime": false, - "lid": "Hiragana", - "nb": 410, - "nm": "Hiragana", - "rtl": false - }, - "Hluw": { - "casing": false, - "ime": true, - "lid": "Anatolian_Hieroglyphs", - "nb": 80, - "nm": "Anatolian Hieroglyphs (Luwian Hieroglyphs, Hittite Hieroglyphs)", - "rtl": false - }, - "Hmng": { - "casing": false, - "ime": false, - "lid": "Pahawh_Hmong", - "nb": 450, - "nm": "Pahawh Hmong", - "rtl": false - }, - "Hmnp": { - "casing": false, - "ime": false, - "lid": "Nyiakeng_Puachue_Hmong", - "nb": 451, - "nm": "Nyiakeng Puachue Hmong", - "rtl": false - }, - "Hrkt": { - "lid": "Katakana_Or_Hiragana", - "nb": 412, - "nm": "Japanese syllabaries (alias for Hiragana + Katakana)" - }, - "Hung": { - "casing": true, - "ime": false, - "lid": "Old_Hungarian", - "nb": 176, - "nm": "Old Hungarian (Hungarian Runic)", - "rtl": true - }, - "Inds": { - "lid": "Indus_(Harappan)", - "nb": 610, - "nm": "Indus (Harappan)" - }, - "Ital": { - "casing": false, - "ime": false, - "lid": "Old_Italic", - "nb": 210, - "nm": "Old Italic (Etruscan, Oscan, etc.)", - "rtl": false - }, - "Jamo": { - "casing": false, - "ime": true, - "lid": "Jamo_(alias_for_Jamo_subset_of_Hangul)", - "nb": 284, - "nm": "Jamo (alias for Jamo subset of Hangul)", - "rtl": false - }, - "Java": { - "casing": false, - "ime": false, - "lid": "Javanese", - "nb": 361, - "nm": "Javanese", - "rtl": false - }, - "Jpan": { - "casing": false, - "ime": true, - "lid": "Japanese_(alias_for_Han_+_Hiragana_+_Katakana)", - "nb": 413, - "nm": "Japanese (alias for Han + Hiragana + Katakana)", - "rtl": false - }, - "Jurc": { - "lid": "Jurchen", - "nb": 510, - "nm": "Jurchen" - }, - "Kali": { - "casing": false, - "ime": false, - "lid": "Kayah_Li", - "nb": 357, - "nm": "Kayah Li", - "rtl": false - }, - "Kana": { - "casing": false, - "ime": false, - "lid": "Katakana", - "nb": 411, - "nm": "Katakana", - "rtl": false - }, - "Kawi": { - "casing": false, - "ime": false, - "lid": "Kawi", - "nb": 368, - "nm": "Kawi", - "rtl": false - }, - "Khar": { - "casing": false, - "ime": false, - "lid": "Kharoshthi", - "nb": 305, - "nm": "Kharoshthi", - "rtl": true - }, - "Khmr": { - "casing": false, - "ime": false, - "lid": "Khmer", - "nb": 355, - "nm": "Khmer", - "rtl": false - }, - "Khoj": { - "casing": false, - "ime": false, - "lid": "Khojki", - "nb": 322, - "nm": "Khojki", - "rtl": false - }, - "Kitl": { - "lid": "Khitan_large_script", - "nb": 505, - "nm": "Khitan large script" - }, - "Kits": { - "casing": false, - "ime": true, - "lid": "Khitan_Small_Script", - "nb": 288, - "nm": "Khitan small script", - "rtl": false - }, - "Knda": { - "casing": false, - "ime": false, - "lid": "Kannada", - "nb": 345, - "nm": "Kannada", - "rtl": false - }, - "Kore": { - "casing": false, - "ime": true, - "lid": "Korean_(alias_for_Hangul_+_Han)", - "nb": 287, - "nm": "Korean (alias for Hangul + Han)", - "rtl": false - }, - "Kpel": { - "lid": "Kpelle", - "nb": 436, - "nm": "Kpelle" - }, - "Krai": { - "casing": false, - "ime": false, - "lid": "Kirat_Rai", - "nb": 396, - "nm": "Kirat Rai", - "rtl": false - }, - "Kthi": { - "casing": false, - "ime": false, - "lid": "Kaithi", - "nb": 317, - "nm": "Kaithi", - "rtl": false - }, - "Lana": { - "casing": false, - "ime": false, - "lid": "Tai_Tham", - "nb": 351, - "nm": "Tai Tham (Lanna)", - "rtl": false - }, - "Laoo": { - "casing": false, - "ime": false, - "lid": "Lao", - "nb": 356, - "nm": "Lao", - "rtl": false - }, - "Latf": { - "lid": "Latin_(Fraktur_variant)", - "nb": 217, - "nm": "Latin (Fraktur variant)" - }, - "Latg": { - "lid": "Latin_(Gaelic_variant)", - "nb": 216, - "nm": "Latin (Gaelic variant)" - }, - "Latn": { - "casing": true, - "ime": false, - "lid": "Latin", - "nb": 215, - "nm": "Latin", - "rtl": false - }, - "Leke": { - "lid": "Leke", - "nb": 364, - "nm": "Leke" - }, - "Lepc": { - "casing": false, - "ime": false, - "lid": "Lepcha", - "nb": 335, - "nm": "Lepcha (Róng)", - "rtl": false - }, - "Limb": { - "casing": false, - "ime": false, - "lid": "Limbu", - "nb": 336, - "nm": "Limbu", - "rtl": false - }, - "Lina": { - "casing": false, - "ime": true, - "lid": "Linear_A", - "nb": 400, - "nm": "Linear A", - "rtl": false - }, - "Linb": { - "casing": false, - "ime": true, - "lid": "Linear_B", - "nb": 401, - "nm": "Linear B", - "rtl": false - }, - "Lisu": { - "casing": false, - "ime": true, - "lid": "Lisu", - "nb": 399, - "nm": "Lisu (Fraser)", - "rtl": false - }, - "Loma": { - "lid": "Loma", - "nb": 437, - "nm": "Loma" - }, - "Lyci": { - "casing": false, - "ime": false, - "lid": "Lycian", - "nb": 202, - "nm": "Lycian", - "rtl": false - }, - "Lydi": { - "casing": false, - "ime": false, - "lid": "Lydian", - "nb": 116, - "nm": "Lydian", - "rtl": true - }, - "Mahj": { - "casing": false, - "ime": false, - "lid": "Mahajani", - "nb": 314, - "nm": "Mahajani", - "rtl": false - }, - "Maka": { - "casing": false, - "ime": false, - "lid": "Makasar", - "nb": 366, - "nm": "Makasar", - "rtl": false - }, - "Mand": { - "casing": false, - "ime": false, - "lid": "Mandaic", - "nb": 140, - "nm": "Mandaic, Mandaean", - "rtl": true - }, - "Mani": { - "casing": false, - "ime": false, - "lid": "Manichaean", - "nb": 139, - "nm": "Manichaean", - "rtl": true - }, - "Marc": { - "casing": false, - "ime": false, - "lid": "Marchen", - "nb": 332, - "nm": "Marchen", - "rtl": false - }, - "Maya": { - "lid": "Mayan_hieroglyphs", - "nb": 90, - "nm": "Mayan hieroglyphs" - }, - "Medf": { - "casing": true, - "ime": false, - "lid": "Medefaidrin", - "nb": 265, - "nm": "Medefaidrin (Oberi Okaime, Oberi Ɔkaimɛ)", - "rtl": false - }, - "Mend": { - "casing": false, - "ime": true, - "lid": "Mende_Kikakui", - "nb": 438, - "nm": "Mende Kikakui", - "rtl": true - }, - "Merc": { - "casing": false, - "ime": false, - "lid": "Meroitic_Cursive", - "nb": 101, - "nm": "Meroitic Cursive", - "rtl": true - }, - "Mero": { - "casing": false, - "ime": false, - "lid": "Meroitic_Hieroglyphs", - "nb": 100, - "nm": "Meroitic Hieroglyphs", - "rtl": true - }, - "Mlym": { - "casing": false, - "ime": false, - "lid": "Malayalam", - "nb": 347, - "nm": "Malayalam", - "rtl": false - }, - "Modi": { - "casing": false, - "ime": false, - "lid": "Modi", - "nb": 324, - "nm": "Modi, Moḍī", - "rtl": false - }, - "Mong": { - "casing": false, - "ime": false, - "lid": "Mongolian", - "nb": 145, - "nm": "Mongolian", - "rtl": false - }, - "Moon": { - "lid": "Moon_(Moon_code,_Moon_script,_Moon_type)", - "nb": 218, - "nm": "Moon (Moon code, Moon script, Moon type)" - }, - "Mroo": { - "casing": false, - "ime": false, - "lid": "Mro", - "nb": 264, - "nm": "Mro, Mru", - "rtl": false - }, - "Mtei": { - "casing": false, - "ime": false, - "lid": "Meetei_Mayek", - "nb": 337, - "nm": "Meitei Mayek (Meithei, Meetei)", - "rtl": false - }, - "Mult": { - "casing": false, - "ime": false, - "lid": "Multani", - "nb": 323, - "nm": "Multani", - "rtl": false - }, - "Mymr": { - "casing": false, - "ime": false, - "lid": "Myanmar", - "nb": 350, - "nm": "Myanmar (Burmese)", - "rtl": false - }, - "Nagm": { - "casing": false, - "ime": false, - "lid": "Nag_Mundari", - "nb": 295, - "nm": "Nag Mundari", - "rtl": false - }, - "Nand": { - "casing": false, - "ime": false, - "lid": "Nandinagari", - "nb": 311, - "nm": "Nandinagari", - "rtl": false - }, - "Narb": { - "casing": false, - "ime": false, - "lid": "Old_North_Arabian", - "nb": 106, - "nm": "Old North Arabian (Ancient North Arabian)", - "rtl": true - }, - "Nbat": { - "casing": false, - "ime": false, - "lid": "Nabataean", - "nb": 159, - "nm": "Nabataean", - "rtl": true - }, - "Newa": { - "casing": false, - "ime": false, - "lid": "Newa", - "nb": 333, - "nm": "Newa, Newar, Newari, Nepāla lipi", - "rtl": false - }, - "Nkdb": { - "lid": "Naxi_Dongba_(na²¹ɕi³³_to³³ba²¹,_Nakhi_Tomba)", - "nb": 85, - "nm": "Naxi Dongba (na²¹ɕi³³ to³³ba²¹, Nakhi Tomba)" - }, - "Nkgb": { - "lid": "Naxi_Geba_(na²¹ɕi³³_gʌ²¹ba²¹,_'Na-'Khi_²Ggŏ-¹baw,_Nakhi_Geba)", - "nb": 420, - "nm": "Naxi Geba (na²¹ɕi³³ gʌ²¹ba²¹, 'Na-'Khi ²Ggŏ-¹baw, Nakhi Geba)" - }, - "Nkoo": { - "casing": false, - "ime": false, - "lid": "Nko", - "nb": 165, - "nm": "N’Ko", - "rtl": true - }, - "Nshu": { - "casing": false, - "ime": true, - "lid": "Nushu", - "nb": 499, - "nm": "Nüshu", - "rtl": false - }, - "Ogam": { - "casing": false, - "ime": false, - "lid": "Ogham", - "nb": 212, - "nm": "Ogham", - "rtl": false - }, - "Olck": { - "casing": false, - "ime": false, - "lid": "Ol_Chiki", - "nb": 261, - "nm": "Ol Chiki (Ol Cemet’, Ol, Santali)", - "rtl": false - }, - "Onao": { - "casing": false, - "ime": false, - "lid": "Ol_Onal", - "nb": 296, - "nm": "Ol Onal", - "rtl": false - }, - "Orkh": { - "casing": false, - "ime": false, - "lid": "Old_Turkic", - "nb": 175, - "nm": "Old Turkic, Orkhon Runic", - "rtl": true - }, - "Orya": { - "casing": false, - "ime": false, - "lid": "Oriya", - "nb": 327, - "nm": "Oriya (Odia)", - "rtl": false - }, - "Osge": { - "casing": true, - "ime": false, - "lid": "Osage", - "nb": 219, - "nm": "Osage", - "rtl": false - }, - "Osma": { - "casing": false, - "ime": false, - "lid": "Osmanya", - "nb": 260, - "nm": "Osmanya", - "rtl": false - }, - "Ougr": { - "casing": false, - "ime": false, - "lid": "Old_Uyghur", - "nb": 143, - "nm": "Old Uyghur", - "rtl": true - }, - "Palm": { - "casing": false, - "ime": false, - "lid": "Palmyrene", - "nb": 126, - "nm": "Palmyrene", - "rtl": true - }, - "Pauc": { - "casing": false, - "ime": false, - "lid": "Pau_Cin_Hau", - "nb": 263, - "nm": "Pau Cin Hau", - "rtl": false - }, - "Pcun": { - "lid": "Proto-Cuneiform", - "nb": 15, - "nm": "Proto-Cuneiform" - }, - "Pelm": { - "lid": "Proto-Elamite", - "nb": 16, - "nm": "Proto-Elamite" - }, - "Perm": { - "casing": false, - "ime": false, - "lid": "Old_Permic", - "nb": 227, - "nm": "Old Permic", - "rtl": false - }, - "Phag": { - "casing": false, - "ime": false, - "lid": "Phags_Pa", - "nb": 331, - "nm": "Phags-pa", - "rtl": false - }, - "Phli": { - "casing": false, - "ime": false, - "lid": "Inscriptional_Pahlavi", - "nb": 131, - "nm": "Inscriptional Pahlavi", - "rtl": true - }, - "Phlp": { - "casing": false, - "ime": false, - "lid": "Psalter_Pahlavi", - "nb": 132, - "nm": "Psalter Pahlavi", - "rtl": true - }, - "Phlv": { - "lid": "Book_Pahlavi", - "nb": 133, - "nm": "Book Pahlavi" - }, - "Phnx": { - "casing": false, - "ime": false, - "lid": "Phoenician", - "nb": 115, - "nm": "Phoenician", - "rtl": true - }, - "Piqd": { - "lid": "Klingon_(KLI_pIqaD)", - "nb": 293, - "nm": "Klingon (KLI pIqaD)" - }, - "Plrd": { - "casing": false, - "ime": false, - "lid": "Miao", - "nb": 282, - "nm": "Miao (Pollard)", - "rtl": false - }, - "Prti": { - "casing": false, - "ime": false, - "lid": "Inscriptional_Parthian", - "nb": 130, - "nm": "Inscriptional Parthian", - "rtl": true - }, - "Psin": { - "lid": "Proto-Sinaitic", - "nb": 103, - "nm": "Proto-Sinaitic" - }, - "Qaaa": { - "lid": "Reserved_for_private_use_(start)", - "nb": 900, - "nm": "Reserved for private use (start)" - }, - "Qabx": { - "lid": "Reserved_for_private_use_(end)", - "nb": 949, - "nm": "Reserved for private use (end)" - }, - "Ranj": { - "lid": "Ranjana", - "nb": 303, - "nm": "Ranjana" - }, - "Rjng": { - "casing": false, - "ime": false, - "lid": "Rejang", - "nb": 363, - "nm": "Rejang (Redjang, Kaganga)", - "rtl": false - }, - "Rohg": { - "casing": false, - "ime": false, - "lid": "Hanifi_Rohingya", - "nb": 167, - "nm": "Hanifi Rohingya", - "rtl": true - }, - "Roro": { - "lid": "Rongorongo", - "nb": 620, - "nm": "Rongorongo" - }, - "Runr": { - "casing": false, - "ime": false, - "lid": "Runic", - "nb": 211, - "nm": "Runic", - "rtl": false - }, - "Samr": { - "casing": false, - "ime": false, - "lid": "Samaritan", - "nb": 123, - "nm": "Samaritan", - "rtl": true - }, - "Sara": { - "lid": "Sarati", - "nb": 292, - "nm": "Sarati" - }, - "Sarb": { - "casing": false, - "ime": false, - "lid": "Old_South_Arabian", - "nb": 105, - "nm": "Old South Arabian", - "rtl": true - }, - "Saur": { - "casing": false, - "ime": false, - "lid": "Saurashtra", - "nb": 344, - "nm": "Saurashtra", - "rtl": false - }, - "Sgnw": { - "casing": false, - "ime": true, - "lid": "SignWriting", - "nb": 95, - "nm": "SignWriting", - "rtl": false - }, - "Shaw": { - "casing": false, - "ime": false, - "lid": "Shavian", - "nb": 281, - "nm": "Shavian (Shaw)", - "rtl": false - }, - "Shrd": { - "casing": false, - "ime": false, - "lid": "Sharada", - "nb": 319, - "nm": "Sharada, Śāradā", - "rtl": false - }, - "Shui": { - "lid": "Shuishu", - "nb": 530, - "nm": "Shuishu" - }, - "Sidd": { - "casing": false, - "ime": false, - "lid": "Siddham", - "nb": 302, - "nm": "Siddham, Siddhaṃ, Siddhamātṛkā", - "rtl": false - }, - "Sidt": { - "lid": "Sidetic", - "nb": 180, - "nm": "Sidetic" - }, - "Sind": { - "casing": false, - "ime": false, - "lid": "Khudawadi", - "nb": 318, - "nm": "Khudawadi, Sindhi", - "rtl": false - }, - "Sinh": { - "casing": false, - "ime": false, - "lid": "Sinhala", - "nb": 348, - "nm": "Sinhala", - "rtl": false - }, - "Sogd": { - "casing": false, - "ime": false, - "lid": "Sogdian", - "nb": 141, - "nm": "Sogdian", - "rtl": true - }, - "Sogo": { - "casing": false, - "ime": false, - "lid": "Old_Sogdian", - "nb": 142, - "nm": "Old Sogdian", - "rtl": true - }, - "Sora": { - "casing": false, - "ime": false, - "lid": "Sora_Sompeng", - "nb": 398, - "nm": "Sora Sompeng", - "rtl": false - }, - "Soyo": { - "casing": false, - "ime": false, - "lid": "Soyombo", - "nb": 329, - "nm": "Soyombo", - "rtl": false - }, - "Sund": { - "casing": false, - "ime": false, - "lid": "Sundanese", - "nb": 362, - "nm": "Sundanese", - "rtl": false - }, - "Sunu": { - "casing": false, - "ime": false, - "lid": "Sunuwar", - "nb": 274, - "nm": "Sunuwar", - "rtl": false - }, - "Sylo": { - "casing": false, - "ime": false, - "lid": "Syloti_Nagri", - "nb": 316, - "nm": "Syloti Nagri", - "rtl": false - }, - "Syrc": { - "casing": false, - "ime": false, - "lid": "Syriac", - "nb": 135, - "nm": "Syriac", - "rtl": true - }, - "Syre": { - "lid": "Syriac_(Estrangelo_variant)", - "nb": 138, - "nm": "Syriac (Estrangelo variant)" - }, - "Syrj": { - "lid": "Syriac_(Western_variant)", - "nb": 137, - "nm": "Syriac (Western variant)" - }, - "Syrn": { - "lid": "Syriac_(Eastern_variant)", - "nb": 136, - "nm": "Syriac (Eastern variant)" - }, - "Tagb": { - "casing": false, - "ime": false, - "lid": "Tagbanwa", - "nb": 373, - "nm": "Tagbanwa", - "rtl": false - }, - "Takr": { - "casing": false, - "ime": false, - "lid": "Takri", - "nb": 321, - "nm": "Takri, Ṭākrī, Ṭāṅkrī", - "rtl": false - }, - "Tale": { - "casing": false, - "ime": false, - "lid": "Tai_Le", - "nb": 353, - "nm": "Tai Le", - "rtl": false - }, - "Talu": { - "casing": false, - "ime": false, - "lid": "New_Tai_Lue", - "nb": 354, - "nm": "New Tai Lue", - "rtl": false - }, - "Taml": { - "casing": false, - "ime": false, - "lid": "Tamil", - "nb": 346, - "nm": "Tamil", - "rtl": false - }, - "Tang": { - "casing": false, - "ime": true, - "lid": "Tangut", - "nb": 520, - "nm": "Tangut", - "rtl": false - }, - "Tavt": { - "casing": false, - "ime": false, - "lid": "Tai_Viet", - "nb": 359, - "nm": "Tai Viet", - "rtl": false - }, - "Tayo": { - "lid": "Tai_Yo", - "nb": 380, - "nm": "Tai Yo" - }, - "Telu": { - "casing": false, - "ime": false, - "lid": "Telugu", - "nb": 340, - "nm": "Telugu", - "rtl": false - }, - "Teng": { - "lid": "Tengwar", - "nb": 290, - "nm": "Tengwar" - }, - "Tfng": { - "casing": false, - "ime": false, - "lid": "Tifinagh", - "nb": 120, - "nm": "Tifinagh (Berber)", - "rtl": false - }, - "Tglg": { - "casing": false, - "ime": false, - "lid": "Tagalog", - "nb": 370, - "nm": "Tagalog (Baybayin, Alibata)", - "rtl": false - }, - "Thaa": { - "casing": false, - "ime": false, - "lid": "Thaana", - "nb": 170, - "nm": "Thaana", - "rtl": true - }, - "Thai": { - "casing": false, - "ime": false, - "lid": "Thai", - "nb": 352, - "nm": "Thai", - "rtl": false - }, - "Tibt": { - "casing": false, - "ime": false, - "lid": "Tibetan", - "nb": 330, - "nm": "Tibetan", - "rtl": false - }, - "Tirh": { - "casing": false, - "ime": false, - "lid": "Tirhuta", - "nb": 326, - "nm": "Tirhuta", - "rtl": false - }, - "Tnsa": { - "casing": false, - "ime": false, - "lid": "Tangsa", - "nb": 275, - "nm": "Tangsa", - "rtl": false - }, - "Todr": { - "casing": false, - "ime": false, - "lid": "Todhri", - "nb": 229, - "nm": "Todhri", - "rtl": false - }, - "Tols": { - "lid": "Tolong_Siki", - "nb": 299, - "nm": "Tolong Siki" - }, - "Toto": { - "casing": false, - "ime": false, - "lid": "Toto", - "nb": 294, - "nm": "Toto", - "rtl": false - }, - "Tutg": { - "casing": false, - "ime": false, - "lid": "Tulu-Tigalari", - "nb": 341, - "nm": "Tulu-Tigalari", - "rtl": false - }, - "Ugar": { - "casing": false, - "ime": false, - "lid": "Ugaritic", - "nb": 40, - "nm": "Ugaritic", - "rtl": false - }, - "Vaii": { - "casing": false, - "ime": true, - "lid": "Vai", - "nb": 470, - "nm": "Vai", - "rtl": false - }, - "Visp": { - "lid": "Visible_Speech", - "nb": 280, - "nm": "Visible Speech" - }, - "Vith": { - "casing": true, - "ime": false, - "lid": "Vithkuqi", - "nb": 228, - "nm": "Vithkuqi", - "rtl": false - }, - "Wara": { - "casing": true, - "ime": false, - "lid": "Warang_Citi", - "nb": 262, - "nm": "Warang Citi (Varang Kshiti)", - "rtl": false - }, - "Wcho": { - "casing": false, - "ime": false, - "lid": "Wancho", - "nb": 283, - "nm": "Wancho", - "rtl": false - }, - "Wole": { - "lid": "Woleai", - "nb": 480, - "nm": "Woleai" - }, - "Xpeo": { - "casing": false, - "ime": false, - "lid": "Old_Persian", - "nb": 30, - "nm": "Old Persian", - "rtl": false - }, - "Xsux": { - "casing": false, - "ime": true, - "lid": "Cuneiform", - "nb": 20, - "nm": "Cuneiform, Sumero-Akkadian", - "rtl": false - }, - "Yezi": { - "casing": false, - "ime": false, - "lid": "Yezidi", - "nb": 192, - "nm": "Yezidi", - "rtl": true - }, - "Yiii": { - "casing": false, - "ime": true, - "lid": "Yi", - "nb": 460, - "nm": "Yi", - "rtl": false - }, - "Zanb": { - "casing": false, - "ime": false, - "lid": "Zanabazar_Square", - "nb": 339, - "nm": "Zanabazar Square (Zanabazarin Dörböljin Useg, Xewtee Dörböljin Bicig, Horizontal Square Script)", - "rtl": false - }, - "Zinh": { - "casing": false, - "ime": false, - "lid": "Inherited", - "nb": 994, - "nm": "Code for inherited script", - "rtl": false - }, - "Zmth": { - "lid": "Mathematical_notation", - "nb": 995, - "nm": "Mathematical notation" - }, - "Zsye": { - "lid": "Symbols_(Emoji_variant)", - "nb": 993, - "nm": "Symbols (Emoji variant)" - }, - "Zsym": { - "lid": "Symbols", - "nb": 996, - "nm": "Symbols" - }, - "Zxxx": { - "lid": "Code_for_unwritten_documents", - "nb": 997, - "nm": "Code for unwritten documents" - }, - "Zyyy": { - "casing": false, - "ime": false, - "lid": "Common", - "nb": 998, - "nm": "Code for undetermined script", - "rtl": false - }, - "Zzzz": { - "casing": false, - "ime": false, - "lid": "Unknown", - "nb": 999, - "nm": "Code for uncoded script", - "rtl": false - } -}; -ilib.data.scriptToRange = { - "Adlm": [ - [ - 125184, - 125259 - ], - [ - 125264, - 125273 - ], - [ - 125278, - 125279 - ] - ], - "Aghb": [ - [ - 66864, - 66915 - ], - [ - 66927 - ] - ], - "Ahom": [ - [ - 71424, - 71450 - ], - [ - 71453, - 71467 - ], - [ - 71472, - 71494 - ] - ], - "Arab": [ - [ - 1536, - 1540 - ], - [ - 1542, - 1547 - ], - [ - 1549, - 1562 - ], - [ - 1564, - 1566 - ], - [ - 1568, - 1599 - ], - [ - 1601, - 1610 - ], - [ - 1622, - 1647 - ], - [ - 1649, - 1756 - ], - [ - 1758, - 1791 - ], - [ - 1872, - 1919 - ], - [ - 2160, - 2190 - ], - [ - 2192, - 2193 - ], - [ - 2199, - 2273 - ], - [ - 2275, - 2303 - ], - [ - 64336, - 64450 - ], - [ - 64467, - 64829 - ], - [ - 64832, - 64911 - ], - [ - 64914, - 64967 - ], - [ - 64975 - ], - [ - 65008, - 65023 - ], - [ - 65136, - 65140 - ], - [ - 65142, - 65276 - ], - [ - 69216, - 69246 - ], - [ - 69314, - 69316 - ], - [ - 69372, - 69375 - ], - [ - 126464, - 126467 - ], - [ - 126469, - 126495 - ], - [ - 126497, - 126498 - ], - [ - 126500 - ], - [ - 126503 - ], - [ - 126505, - 126514 - ], - [ - 126516, - 126519 - ], - [ - 126521 - ], - [ - 126523 - ], - [ - 126530 - ], - [ - 126535 - ], - [ - 126537 - ], - [ - 126539 - ], - [ - 126541, - 126543 - ], - [ - 126545, - 126546 - ], - [ - 126548 - ], - [ - 126551 - ], - [ - 126553 - ], - [ - 126555 - ], - [ - 126557 - ], - [ - 126559 - ], - [ - 126561, - 126562 - ], - [ - 126564 - ], - [ - 126567, - 126570 - ], - [ - 126572, - 126578 - ], - [ - 126580, - 126583 - ], - [ - 126585, - 126588 - ], - [ - 126590 - ], - [ - 126592, - 126601 - ], - [ - 126603, - 126619 - ], - [ - 126625, - 126627 - ], - [ - 126629, - 126633 - ], - [ - 126635, - 126651 - ], - [ - 126704, - 126705 - ] - ], - "Armi": [ - [ - 67648, - 67669 - ], - [ - 67671, - 67679 - ] - ], - "Armn": [ - [ - 1329, - 1366 - ], - [ - 1369, - 1418 - ], - [ - 1421, - 1423 - ], - [ - 64275, - 64279 - ] - ], - "Avst": [ - [ - 68352, - 68405 - ], - [ - 68409, - 68415 - ] - ], - "Bali": [ - [ - 6912, - 6988 - ], - [ - 6990, - 7039 - ] - ], - "Bamu": [ - [ - 42656, - 42743 - ], - [ - 92160, - 92728 - ] - ], - "Bass": [ - [ - 92880, - 92909 - ], - [ - 92912, - 92917 - ] - ], - "Batk": [ - [ - 7104, - 7155 - ], - [ - 7164, - 7167 - ] - ], - "Beng": [ - [ - 2432, - 2435 - ], - [ - 2437, - 2444 - ], - [ - 2447, - 2448 - ], - [ - 2451, - 2472 - ], - [ - 2474, - 2480 - ], - [ - 2482 - ], - [ - 2486, - 2489 - ], - [ - 2492, - 2500 - ], - [ - 2503, - 2504 - ], - [ - 2507, - 2510 - ], - [ - 2519 - ], - [ - 2524, - 2525 - ], - [ - 2527, - 2531 - ], - [ - 2534, - 2558 - ] - ], - "Bhks": [ - [ - 72704, - 72712 - ], - [ - 72714, - 72758 - ], - [ - 72760, - 72773 - ], - [ - 72784, - 72812 - ] - ], - "Bopo": [ - [ - 746, - 747 - ], - [ - 12549, - 12591 - ], - [ - 12704, - 12735 - ] - ], - "Brah": [ - [ - 69632, - 69709 - ], - [ - 69714, - 69749 - ], - [ - 69759 - ] - ], - "Brai": [ - [ - 10240, - 10495 - ] - ], - "Bugi": [ - [ - 6656, - 6683 - ], - [ - 6686, - 6687 - ] - ], - "Buhd": [ - [ - 5952, - 5971 - ] - ], - "Cakm": [ - [ - 69888, - 69940 - ], - [ - 69942, - 69959 - ] - ], - "Cans": [ - [ - 5120, - 5759 - ], - [ - 6320, - 6389 - ], - [ - 72368, - 72383 - ] - ], - "Cari": [ - [ - 66208, - 66256 - ] - ], - "Cham": [ - [ - 43520, - 43574 - ], - [ - 43584, - 43597 - ], - [ - 43600, - 43609 - ], - [ - 43612, - 43615 - ] - ], - "Cher": [ - [ - 5024, - 5109 - ], - [ - 5112, - 5117 - ], - [ - 43888, - 43967 - ] - ], - "Chrs": [ - [ - 69552, - 69579 - ] - ], - "Copt": [ - [ - 994, - 1007 - ], - [ - 11392, - 11507 - ], - [ - 11513, - 11519 - ] - ], - "Cpmn": [ - [ - 77712, - 77810 - ] - ], - "Cprt": [ - [ - 67584, - 67589 - ], - [ - 67592 - ], - [ - 67594, - 67637 - ], - [ - 67639, - 67640 - ], - [ - 67644 - ], - [ - 67647 - ] - ], - "Cyrl": [ - [ - 1024, - 1156 - ], - [ - 1159, - 1327 - ], - [ - 7296, - 7306 - ], - [ - 7467 - ], - [ - 7544 - ], - [ - 11744, - 11775 - ], - [ - 42560, - 42655 - ], - [ - 65070, - 65071 - ], - [ - 122928, - 122989 - ], - [ - 123023 - ] - ], - "Deva": [ - [ - 2304, - 2384 - ], - [ - 2389, - 2403 - ], - [ - 2406, - 2431 - ], - [ - 43232, - 43263 - ], - [ - 72448, - 72457 - ] - ], - "Diak": [ - [ - 71936, - 71942 - ], - [ - 71945 - ], - [ - 71948, - 71955 - ], - [ - 71957, - 71958 - ], - [ - 71960, - 71989 - ], - [ - 71991, - 71992 - ], - [ - 71995, - 72006 - ], - [ - 72016, - 72025 - ] - ], - "Dogr": [ - [ - 71680, - 71739 - ] - ], - "Dsrt": [ - [ - 66560, - 66639 - ] - ], - "Dupl": [ - [ - 113664, - 113770 - ], - [ - 113776, - 113788 - ], - [ - 113792, - 113800 - ], - [ - 113808, - 113817 - ], - [ - 113820, - 113823 - ] - ], - "Egyp": [ - [ - 77824, - 78933 - ], - [ - 78944, - 82938 - ] - ], - "Elba": [ - [ - 66816, - 66855 - ] - ], - "Elym": [ - [ - 69600, - 69622 - ] - ], - "Ethi": [ - [ - 4608, - 4680 - ], - [ - 4682, - 4685 - ], - [ - 4688, - 4694 - ], - [ - 4696 - ], - [ - 4698, - 4701 - ], - [ - 4704, - 4744 - ], - [ - 4746, - 4749 - ], - [ - 4752, - 4784 - ], - [ - 4786, - 4789 - ], - [ - 4792, - 4798 - ], - [ - 4800 - ], - [ - 4802, - 4805 - ], - [ - 4808, - 4822 - ], - [ - 4824, - 4880 - ], - [ - 4882, - 4885 - ], - [ - 4888, - 4954 - ], - [ - 4957, - 4988 - ], - [ - 4992, - 5017 - ], - [ - 11648, - 11670 - ], - [ - 11680, - 11686 - ], - [ - 11688, - 11694 - ], - [ - 11696, - 11702 - ], - [ - 11704, - 11710 - ], - [ - 11712, - 11718 - ], - [ - 11720, - 11726 - ], - [ - 11728, - 11734 - ], - [ - 11736, - 11742 - ], - [ - 43777, - 43782 - ], - [ - 43785, - 43790 - ], - [ - 43793, - 43798 - ], - [ - 43808, - 43814 - ], - [ - 43816, - 43822 - ], - [ - 124896, - 124902 - ], - [ - 124904, - 124907 - ], - [ - 124909, - 124910 - ], - [ - 124912, - 124926 - ] - ], - "Gara": [ - [ - 68928, - 68965 - ], - [ - 68969, - 68997 - ], - [ - 69006, - 69007 - ] - ], - "Geor": [ - [ - 4256, - 4293 - ], - [ - 4295 - ], - [ - 4301 - ], - [ - 4304, - 4346 - ], - [ - 4348, - 4351 - ], - [ - 7312, - 7354 - ], - [ - 7357, - 7359 - ], - [ - 11520, - 11557 - ], - [ - 11559 - ], - [ - 11565 - ] - ], - "Glag": [ - [ - 11264, - 11359 - ], - [ - 122880, - 122886 - ], - [ - 122888, - 122904 - ], - [ - 122907, - 122913 - ], - [ - 122915, - 122916 - ], - [ - 122918, - 122922 - ] - ], - "Gong": [ - [ - 73056, - 73061 - ], - [ - 73063, - 73064 - ], - [ - 73066, - 73102 - ], - [ - 73104, - 73105 - ], - [ - 73107, - 73112 - ], - [ - 73120, - 73129 - ] - ], - "Gonm": [ - [ - 72960, - 72966 - ], - [ - 72968, - 72969 - ], - [ - 72971, - 73014 - ], - [ - 73018 - ], - [ - 73020, - 73021 - ], - [ - 73023, - 73031 - ], - [ - 73040, - 73049 - ] - ], - "Goth": [ - [ - 66352, - 66378 - ] - ], - "Gran": [ - [ - 70400, - 70403 - ], - [ - 70405, - 70412 - ], - [ - 70415, - 70416 - ], - [ - 70419, - 70440 - ], - [ - 70442, - 70448 - ], - [ - 70450, - 70451 - ], - [ - 70453, - 70457 - ], - [ - 70460, - 70468 - ], - [ - 70471, - 70472 - ], - [ - 70475, - 70477 - ], - [ - 70480 - ], - [ - 70487 - ], - [ - 70493, - 70499 - ], - [ - 70502, - 70508 - ], - [ - 70512, - 70516 - ] - ], - "Grek": [ - [ - 880, - 883 - ], - [ - 885, - 887 - ], - [ - 890, - 893 - ], - [ - 895 - ], - [ - 900 - ], - [ - 902 - ], - [ - 904, - 906 - ], - [ - 908 - ], - [ - 910, - 929 - ], - [ - 931, - 993 - ], - [ - 1008, - 1023 - ], - [ - 7462, - 7466 - ], - [ - 7517, - 7521 - ], - [ - 7526, - 7530 - ], - [ - 7615 - ], - [ - 7936, - 7957 - ], - [ - 7960, - 7965 - ], - [ - 7968, - 8005 - ], - [ - 8008, - 8013 - ], - [ - 8016, - 8023 - ], - [ - 8025 - ], - [ - 8027 - ], - [ - 8029 - ], - [ - 8031, - 8061 - ], - [ - 8064, - 8116 - ], - [ - 8118, - 8132 - ], - [ - 8134, - 8147 - ], - [ - 8150, - 8155 - ], - [ - 8157, - 8175 - ], - [ - 8178, - 8180 - ], - [ - 8182, - 8190 - ], - [ - 8486 - ], - [ - 43877 - ], - [ - 65856, - 65934 - ], - [ - 65952 - ], - [ - 119296, - 119365 - ] - ], - "Gujr": [ - [ - 2689, - 2691 - ], - [ - 2693, - 2701 - ], - [ - 2703, - 2705 - ], - [ - 2707, - 2728 - ], - [ - 2730, - 2736 - ], - [ - 2738, - 2739 - ], - [ - 2741, - 2745 - ], - [ - 2748, - 2757 - ], - [ - 2759, - 2761 - ], - [ - 2763, - 2765 - ], - [ - 2768 - ], - [ - 2784, - 2787 - ], - [ - 2790, - 2801 - ], - [ - 2809, - 2815 - ] - ], - "Gukh": [ - [ - 90368, - 90425 - ] - ], - "Guru": [ - [ - 2561, - 2563 - ], - [ - 2565, - 2570 - ], - [ - 2575, - 2576 - ], - [ - 2579, - 2600 - ], - [ - 2602, - 2608 - ], - [ - 2610, - 2611 - ], - [ - 2613, - 2614 - ], - [ - 2616, - 2617 - ], - [ - 2620 - ], - [ - 2622, - 2626 - ], - [ - 2631, - 2632 - ], - [ - 2635, - 2637 - ], - [ - 2641 - ], - [ - 2649, - 2652 - ], - [ - 2654 - ], - [ - 2662, - 2678 - ] - ], - "Hang": [ - [ - 4352, - 4607 - ], - [ - 12334, - 12335 - ], - [ - 12593, - 12686 - ], - [ - 12800, - 12830 - ], - [ - 12896, - 12926 - ], - [ - 43360, - 43388 - ], - [ - 44032, - 55203 - ], - [ - 55216, - 55238 - ], - [ - 55243, - 55291 - ], - [ - 65440, - 65470 - ], - [ - 65474, - 65479 - ], - [ - 65482, - 65487 - ], - [ - 65490, - 65495 - ], - [ - 65498, - 65500 - ] - ], - "Hani": [ - [ - 11904, - 11929 - ], - [ - 11931, - 12019 - ], - [ - 12032, - 12245 - ], - [ - 12293 - ], - [ - 12295 - ], - [ - 12321, - 12329 - ], - [ - 12344, - 12347 - ], - [ - 13312, - 19903 - ], - [ - 19968, - 40959 - ], - [ - 63744, - 64109 - ], - [ - 64112, - 64217 - ], - [ - 94178, - 94179 - ], - [ - 94192, - 94193 - ], - [ - 131072, - 173791 - ], - [ - 173824, - 177977 - ], - [ - 177984, - 178205 - ], - [ - 178208, - 183969 - ], - [ - 183984, - 191456 - ], - [ - 191472, - 192093 - ], - [ - 194560, - 195101 - ], - [ - 196608, - 201546 - ], - [ - 201552, - 205743 - ] - ], - "Hano": [ - [ - 5920, - 5940 - ] - ], - "Hatr": [ - [ - 67808, - 67826 - ], - [ - 67828, - 67829 - ], - [ - 67835, - 67839 - ] - ], - "Hebr": [ - [ - 1425, - 1479 - ], - [ - 1488, - 1514 - ], - [ - 1519, - 1524 - ], - [ - 64285, - 64310 - ], - [ - 64312, - 64316 - ], - [ - 64318 - ], - [ - 64320, - 64321 - ], - [ - 64323, - 64324 - ], - [ - 64326, - 64335 - ] - ], - "Hira": [ - [ - 12353, - 12438 - ], - [ - 12445, - 12447 - ], - [ - 110593, - 110879 - ], - [ - 110898 - ], - [ - 110928, - 110930 - ], - [ - 127488 - ] - ], - "Hluw": [ - [ - 82944, - 83526 - ] - ], - "Hmng": [ - [ - 92928, - 92997 - ], - [ - 93008, - 93017 - ], - [ - 93019, - 93025 - ], - [ - 93027, - 93047 - ], - [ - 93053, - 93071 - ] - ], - "Hmnp": [ - [ - 123136, - 123180 - ], - [ - 123184, - 123197 - ], - [ - 123200, - 123209 - ], - [ - 123214, - 123215 - ] - ], - "Hung": [ - [ - 68736, - 68786 - ], - [ - 68800, - 68850 - ], - [ - 68858, - 68863 - ] - ], - "Ital": [ - [ - 66304, - 66339 - ], - [ - 66349, - 66351 - ] - ], - "Java": [ - [ - 43392, - 43469 - ], - [ - 43472, - 43481 - ], - [ - 43486, - 43487 - ] - ], - "Kali": [ - [ - 43264, - 43309 - ], - [ - 43311 - ] - ], - "Kana": [ - [ - 12449, - 12538 - ], - [ - 12541, - 12543 - ], - [ - 12784, - 12799 - ], - [ - 13008, - 13054 - ], - [ - 13056, - 13143 - ], - [ - 65382, - 65391 - ], - [ - 65393, - 65437 - ], - [ - 110576, - 110579 - ], - [ - 110581, - 110587 - ], - [ - 110589, - 110590 - ], - [ - 110592 - ], - [ - 110880, - 110882 - ], - [ - 110933 - ], - [ - 110948, - 110951 - ] - ], - "Kawi": [ - [ - 73472, - 73488 - ], - [ - 73490, - 73530 - ], - [ - 73534, - 73562 - ] - ], - "Khar": [ - [ - 68096, - 68099 - ], - [ - 68101, - 68102 - ], - [ - 68108, - 68115 - ], - [ - 68117, - 68119 - ], - [ - 68121, - 68149 - ], - [ - 68152, - 68154 - ], - [ - 68159, - 68168 - ], - [ - 68176, - 68184 - ] - ], - "Khmr": [ - [ - 6016, - 6109 - ], - [ - 6112, - 6121 - ], - [ - 6128, - 6137 - ], - [ - 6624, - 6655 - ] - ], - "Khoj": [ - [ - 70144, - 70161 - ], - [ - 70163, - 70209 - ] - ], - "Kits": [ - [ - 94180 - ], - [ - 101120, - 101589 - ], - [ - 101631 - ] - ], - "Knda": [ - [ - 3200, - 3212 - ], - [ - 3214, - 3216 - ], - [ - 3218, - 3240 - ], - [ - 3242, - 3251 - ], - [ - 3253, - 3257 - ], - [ - 3260, - 3268 - ], - [ - 3270, - 3272 - ], - [ - 3274, - 3277 - ], - [ - 3285, - 3286 - ], - [ - 3293, - 3294 - ], - [ - 3296, - 3299 - ], - [ - 3302, - 3311 - ], - [ - 3313, - 3315 - ] - ], - "Krai": [ - [ - 93504, - 93561 - ] - ], - "Kthi": [ - [ - 69760, - 69826 - ], - [ - 69837 - ] - ], - "Lana": [ - [ - 6688, - 6750 - ], - [ - 6752, - 6780 - ], - [ - 6783, - 6793 - ], - [ - 6800, - 6809 - ], - [ - 6816, - 6829 - ] - ], - "Laoo": [ - [ - 3713, - 3714 - ], - [ - 3716 - ], - [ - 3718, - 3722 - ], - [ - 3724, - 3747 - ], - [ - 3749 - ], - [ - 3751, - 3773 - ], - [ - 3776, - 3780 - ], - [ - 3782 - ], - [ - 3784, - 3790 - ], - [ - 3792, - 3801 - ], - [ - 3804, - 3807 - ] - ], - "Latn": [ - [ - 65, - 90 - ], - [ - 97, - 122 - ], - [ - 170 - ], - [ - 186 - ], - [ - 192, - 214 - ], - [ - 216, - 246 - ], - [ - 248, - 696 - ], - [ - 736, - 740 - ], - [ - 7424, - 7461 - ], - [ - 7468, - 7516 - ], - [ - 7522, - 7525 - ], - [ - 7531, - 7543 - ], - [ - 7545, - 7614 - ], - [ - 7680, - 7935 - ], - [ - 8305 - ], - [ - 8319 - ], - [ - 8336, - 8348 - ], - [ - 8490, - 8491 - ], - [ - 8498 - ], - [ - 8526 - ], - [ - 8544, - 8584 - ], - [ - 11360, - 11391 - ], - [ - 42786, - 42887 - ], - [ - 42891, - 42957 - ], - [ - 42960, - 42961 - ], - [ - 42963 - ], - [ - 42965, - 42972 - ], - [ - 42994, - 43007 - ], - [ - 43824, - 43866 - ], - [ - 43868, - 43876 - ], - [ - 43878, - 43881 - ], - [ - 64256, - 64262 - ], - [ - 65313, - 65338 - ], - [ - 65345, - 65370 - ], - [ - 67456, - 67461 - ], - [ - 67463, - 67504 - ], - [ - 67506, - 67514 - ], - [ - 122624, - 122654 - ], - [ - 122661, - 122666 - ] - ], - "Lepc": [ - [ - 7168, - 7223 - ], - [ - 7227, - 7241 - ], - [ - 7245, - 7247 - ] - ], - "Limb": [ - [ - 6400, - 6430 - ], - [ - 6432, - 6443 - ], - [ - 6448, - 6459 - ], - [ - 6464 - ], - [ - 6468, - 6479 - ] - ], - "Lina": [ - [ - 67072, - 67382 - ], - [ - 67392, - 67413 - ], - [ - 67424, - 67431 - ] - ], - "Linb": [ - [ - 65536, - 65547 - ], - [ - 65549, - 65574 - ], - [ - 65576, - 65594 - ], - [ - 65596, - 65597 - ], - [ - 65599, - 65613 - ], - [ - 65616, - 65629 - ], - [ - 65664, - 65786 - ] - ], - "Lisu": [ - [ - 42192, - 42239 - ], - [ - 73648 - ] - ], - "Lyci": [ - [ - 66176, - 66204 - ] - ], - "Lydi": [ - [ - 67872, - 67897 - ], - [ - 67903 - ] - ], - "Mahj": [ - [ - 69968, - 70006 - ] - ], - "Maka": [ - [ - 73440, - 73464 - ] - ], - "Mand": [ - [ - 2112, - 2139 - ], - [ - 2142 - ] - ], - "Mani": [ - [ - 68288, - 68326 - ], - [ - 68331, - 68342 - ] - ], - "Marc": [ - [ - 72816, - 72847 - ], - [ - 72850, - 72871 - ], - [ - 72873, - 72886 - ] - ], - "Medf": [ - [ - 93760, - 93850 - ] - ], - "Mend": [ - [ - 124928, - 125124 - ], - [ - 125127, - 125142 - ] - ], - "Merc": [ - [ - 68000, - 68023 - ], - [ - 68028, - 68047 - ], - [ - 68050, - 68095 - ] - ], - "Mero": [ - [ - 67968, - 67999 - ] - ], - "Mlym": [ - [ - 3328, - 3340 - ], - [ - 3342, - 3344 - ], - [ - 3346, - 3396 - ], - [ - 3398, - 3400 - ], - [ - 3402, - 3407 - ], - [ - 3412, - 3427 - ], - [ - 3430, - 3455 - ] - ], - "Modi": [ - [ - 71168, - 71236 - ], - [ - 71248, - 71257 - ] - ], - "Mong": [ - [ - 6144, - 6145 - ], - [ - 6148 - ], - [ - 6150, - 6169 - ], - [ - 6176, - 6264 - ], - [ - 6272, - 6314 - ], - [ - 71264, - 71276 - ] - ], - "Mroo": [ - [ - 92736, - 92766 - ], - [ - 92768, - 92777 - ], - [ - 92782, - 92783 - ] - ], - "Mtei": [ - [ - 43744, - 43766 - ], - [ - 43968, - 44013 - ], - [ - 44016, - 44025 - ] - ], - "Mult": [ - [ - 70272, - 70278 - ], - [ - 70280 - ], - [ - 70282, - 70285 - ], - [ - 70287, - 70301 - ], - [ - 70303, - 70313 - ] - ], - "Mymr": [ - [ - 4096, - 4255 - ], - [ - 43488, - 43518 - ], - [ - 43616, - 43647 - ], - [ - 71376, - 71395 - ] - ], - "Nagm": [ - [ - 124112, - 124153 - ] - ], - "Nand": [ - [ - 72096, - 72103 - ], - [ - 72106, - 72151 - ], - [ - 72154, - 72164 - ] - ], - "Narb": [ - [ - 68224, - 68255 - ] - ], - "Nbat": [ - [ - 67712, - 67742 - ], - [ - 67751, - 67759 - ] - ], - "Newa": [ - [ - 70656, - 70747 - ], - [ - 70749, - 70753 - ] - ], - "Nkoo": [ - [ - 1984, - 2042 - ], - [ - 2045, - 2047 - ] - ], - "Nshu": [ - [ - 94177 - ], - [ - 110960, - 111355 - ] - ], - "Ogam": [ - [ - 5760, - 5788 - ] - ], - "Olck": [ - [ - 7248, - 7295 - ] - ], - "Onao": [ - [ - 124368, - 124410 - ], - [ - 124415 - ] - ], - "Orkh": [ - [ - 68608, - 68680 - ] - ], - "Orya": [ - [ - 2817, - 2819 - ], - [ - 2821, - 2828 - ], - [ - 2831, - 2832 - ], - [ - 2835, - 2856 - ], - [ - 2858, - 2864 - ], - [ - 2866, - 2867 - ], - [ - 2869, - 2873 - ], - [ - 2876, - 2884 - ], - [ - 2887, - 2888 - ], - [ - 2891, - 2893 - ], - [ - 2901, - 2903 - ], - [ - 2908, - 2909 - ], - [ - 2911, - 2915 - ], - [ - 2918, - 2935 - ] - ], - "Osge": [ - [ - 66736, - 66771 - ], - [ - 66776, - 66811 - ] - ], - "Osma": [ - [ - 66688, - 66717 - ], - [ - 66720, - 66729 - ] - ], - "Ougr": [ - [ - 69488, - 69513 - ] - ], - "Palm": [ - [ - 67680, - 67711 - ] - ], - "Pauc": [ - [ - 72384, - 72440 - ] - ], - "Perm": [ - [ - 66384, - 66426 - ] - ], - "Phag": [ - [ - 43072, - 43127 - ] - ], - "Phli": [ - [ - 68448, - 68466 - ], - [ - 68472, - 68479 - ] - ], - "Phlp": [ - [ - 68480, - 68497 - ], - [ - 68505, - 68508 - ], - [ - 68521, - 68527 - ] - ], - "Phnx": [ - [ - 67840, - 67867 - ], - [ - 67871 - ] - ], - "Plrd": [ - [ - 93952, - 94026 - ], - [ - 94031, - 94087 - ], - [ - 94095, - 94111 - ] - ], - "Prti": [ - [ - 68416, - 68437 - ], - [ - 68440, - 68447 - ] - ], - "Rjng": [ - [ - 43312, - 43347 - ], - [ - 43359 - ] - ], - "Rohg": [ - [ - 68864, - 68903 - ], - [ - 68912, - 68921 - ] - ], - "Runr": [ - [ - 5792, - 5866 - ], - [ - 5870, - 5880 - ] - ], - "Samr": [ - [ - 2048, - 2093 - ], - [ - 2096, - 2110 - ] - ], - "Sarb": [ - [ - 68192, - 68223 - ] - ], - "Saur": [ - [ - 43136, - 43205 - ], - [ - 43214, - 43225 - ] - ], - "Sgnw": [ - [ - 120832, - 121483 - ], - [ - 121499, - 121503 - ], - [ - 121505, - 121519 - ] - ], - "Shaw": [ - [ - 66640, - 66687 - ] - ], - "Shrd": [ - [ - 70016, - 70111 - ] - ], - "Sidd": [ - [ - 71040, - 71093 - ], - [ - 71096, - 71133 - ] - ], - "Sind": [ - [ - 70320, - 70378 - ], - [ - 70384, - 70393 - ] - ], - "Sinh": [ - [ - 3457, - 3459 - ], - [ - 3461, - 3478 - ], - [ - 3482, - 3505 - ], - [ - 3507, - 3515 - ], - [ - 3517 - ], - [ - 3520, - 3526 - ], - [ - 3530 - ], - [ - 3535, - 3540 - ], - [ - 3542 - ], - [ - 3544, - 3551 - ], - [ - 3558, - 3567 - ], - [ - 3570, - 3572 - ], - [ - 70113, - 70132 - ] - ], - "Sogd": [ - [ - 69424, - 69465 - ] - ], - "Sogo": [ - [ - 69376, - 69415 - ] - ], - "Sora": [ - [ - 69840, - 69864 - ], - [ - 69872, - 69881 - ] - ], - "Soyo": [ - [ - 72272, - 72354 - ] - ], - "Sund": [ - [ - 7040, - 7103 - ], - [ - 7360, - 7367 - ] - ], - "Sunu": [ - [ - 72640, - 72673 - ], - [ - 72688, - 72697 - ] - ], - "Sylo": [ - [ - 43008, - 43052 - ] - ], - "Syrc": [ - [ - 1792, - 1805 - ], - [ - 1807, - 1866 - ], - [ - 1869, - 1871 - ], - [ - 2144, - 2154 - ] - ], - "Tagb": [ - [ - 5984, - 5996 - ], - [ - 5998, - 6000 - ], - [ - 6002, - 6003 - ] - ], - "Takr": [ - [ - 71296, - 71353 - ], - [ - 71360, - 71369 - ] - ], - "Tale": [ - [ - 6480, - 6509 - ], - [ - 6512, - 6516 - ] - ], - "Talu": [ - [ - 6528, - 6571 - ], - [ - 6576, - 6601 - ], - [ - 6608, - 6618 - ], - [ - 6622, - 6623 - ] - ], - "Taml": [ - [ - 2946, - 2947 - ], - [ - 2949, - 2954 - ], - [ - 2958, - 2960 - ], - [ - 2962, - 2965 - ], - [ - 2969, - 2970 - ], - [ - 2972 - ], - [ - 2974, - 2975 - ], - [ - 2979, - 2980 - ], - [ - 2984, - 2986 - ], - [ - 2990, - 3001 - ], - [ - 3006, - 3010 - ], - [ - 3014, - 3016 - ], - [ - 3018, - 3021 - ], - [ - 3024 - ], - [ - 3031 - ], - [ - 3046, - 3066 - ], - [ - 73664, - 73713 - ], - [ - 73727 - ] - ], - "Tang": [ - [ - 94176 - ], - [ - 94208, - 100343 - ], - [ - 100352, - 101119 - ], - [ - 101632, - 101640 - ] - ], - "Tavt": [ - [ - 43648, - 43714 - ], - [ - 43739, - 43743 - ] - ], - "Telu": [ - [ - 3072, - 3084 - ], - [ - 3086, - 3088 - ], - [ - 3090, - 3112 - ], - [ - 3114, - 3129 - ], - [ - 3132, - 3140 - ], - [ - 3142, - 3144 - ], - [ - 3146, - 3149 - ], - [ - 3157, - 3158 - ], - [ - 3160, - 3162 - ], - [ - 3165 - ], - [ - 3168, - 3171 - ], - [ - 3174, - 3183 - ], - [ - 3191, - 3199 - ] - ], - "Tfng": [ - [ - 11568, - 11623 - ], - [ - 11631, - 11632 - ], - [ - 11647 - ] - ], - "Tglg": [ - [ - 5888, - 5909 - ], - [ - 5919 - ] - ], - "Thaa": [ - [ - 1920, - 1969 - ] - ], - "Thai": [ - [ - 3585, - 3642 - ], - [ - 3648, - 3675 - ] - ], - "Tibt": [ - [ - 3840, - 3911 - ], - [ - 3913, - 3948 - ], - [ - 3953, - 3991 - ], - [ - 3993, - 4028 - ], - [ - 4030, - 4044 - ], - [ - 4046, - 4052 - ], - [ - 4057, - 4058 - ] - ], - "Tirh": [ - [ - 70784, - 70855 - ], - [ - 70864, - 70873 - ] - ], - "Tnsa": [ - [ - 92784, - 92862 - ], - [ - 92864, - 92873 - ] - ], - "Todr": [ - [ - 67008, - 67059 - ] - ], - "Toto": [ - [ - 123536, - 123566 - ] - ], - "Tulu_Tigalari": [ - [ - 70528, - 70537 - ], - [ - 70539 - ], - [ - 70542 - ], - [ - 70544, - 70581 - ], - [ - 70583, - 70592 - ], - [ - 70594 - ], - [ - 70597 - ], - [ - 70599, - 70602 - ], - [ - 70604, - 70613 - ], - [ - 70615, - 70616 - ], - [ - 70625, - 70626 - ] - ], - "Ugar": [ - [ - 66432, - 66461 - ], - [ - 66463 - ] - ], - "Vaii": [ - [ - 42240, - 42539 - ] - ], - "Vith": [ - [ - 66928, - 66938 - ], - [ - 66940, - 66954 - ], - [ - 66956, - 66962 - ], - [ - 66964, - 66965 - ], - [ - 66967, - 66977 - ], - [ - 66979, - 66993 - ], - [ - 66995, - 67001 - ], - [ - 67003, - 67004 - ] - ], - "Wara": [ - [ - 71840, - 71922 - ], - [ - 71935 - ] - ], - "Wcho": [ - [ - 123584, - 123641 - ], - [ - 123647 - ] - ], - "Xpeo": [ - [ - 66464, - 66499 - ], - [ - 66504, - 66517 - ] - ], - "Xsux": [ - [ - 73728, - 74649 - ], - [ - 74752, - 74862 - ], - [ - 74864, - 74868 - ], - [ - 74880, - 75075 - ] - ], - "Yezi": [ - [ - 69248, - 69289 - ], - [ - 69291, - 69293 - ], - [ - 69296, - 69297 - ] - ], - "Yiii": [ - [ - 40960, - 42124 - ], - [ - 42128, - 42182 - ] - ], - "Zanb": [ - [ - 72192, - 72263 - ] - ], - "Zinh": [ - [ - 768, - 879 - ], - [ - 1157, - 1158 - ], - [ - 1611, - 1621 - ], - [ - 1648 - ], - [ - 2385, - 2388 - ], - [ - 6832, - 6862 - ], - [ - 7376, - 7378 - ], - [ - 7380, - 7392 - ], - [ - 7394, - 7400 - ], - [ - 7405 - ], - [ - 7412 - ], - [ - 7416, - 7417 - ], - [ - 7616, - 7679 - ], - [ - 8204, - 8205 - ], - [ - 8400, - 8432 - ], - [ - 12330, - 12333 - ], - [ - 12441, - 12442 - ], - [ - 65024, - 65039 - ], - [ - 65056, - 65069 - ], - [ - 66045 - ], - [ - 66272 - ], - [ - 70459 - ], - [ - 118528, - 118573 - ], - [ - 118576, - 118598 - ], - [ - 119143, - 119145 - ], - [ - 119163, - 119170 - ], - [ - 119173, - 119179 - ], - [ - 119210, - 119213 - ], - [ - 917760, - 917999 - ] - ], - "Zyyy": [ - [ - 0, - 64 - ], - [ - 91, - 96 - ], - [ - 123, - 169 - ], - [ - 171, - 185 - ], - [ - 187, - 191 - ], - [ - 215 - ], - [ - 247 - ], - [ - 697, - 735 - ], - [ - 741, - 745 - ], - [ - 748, - 767 - ], - [ - 884 - ], - [ - 894 - ], - [ - 901 - ], - [ - 903 - ], - [ - 1541 - ], - [ - 1548 - ], - [ - 1563 - ], - [ - 1567 - ], - [ - 1600 - ], - [ - 1757 - ], - [ - 2274 - ], - [ - 2404, - 2405 - ], - [ - 3647 - ], - [ - 4053, - 4056 - ], - [ - 4347 - ], - [ - 5867, - 5869 - ], - [ - 5941, - 5942 - ], - [ - 6146, - 6147 - ], - [ - 6149 - ], - [ - 7379 - ], - [ - 7393 - ], - [ - 7401, - 7404 - ], - [ - 7406, - 7411 - ], - [ - 7413, - 7415 - ], - [ - 7418 - ], - [ - 8192, - 8203 - ], - [ - 8206, - 8292 - ], - [ - 8294, - 8304 - ], - [ - 8308, - 8318 - ], - [ - 8320, - 8334 - ], - [ - 8352, - 8384 - ], - [ - 8448, - 8485 - ], - [ - 8487, - 8489 - ], - [ - 8492, - 8497 - ], - [ - 8499, - 8525 - ], - [ - 8527, - 8543 - ], - [ - 8585, - 8587 - ], - [ - 8592, - 9257 - ], - [ - 9280, - 9290 - ], - [ - 9312, - 10239 - ], - [ - 10496, - 11123 - ], - [ - 11126, - 11157 - ], - [ - 11159, - 11263 - ], - [ - 11776, - 11869 - ], - [ - 12272, - 12292 - ], - [ - 12294 - ], - [ - 12296, - 12320 - ], - [ - 12336, - 12343 - ], - [ - 12348, - 12351 - ], - [ - 12443, - 12444 - ], - [ - 12448 - ], - [ - 12539, - 12540 - ], - [ - 12688, - 12703 - ], - [ - 12736, - 12773 - ], - [ - 12783 - ], - [ - 12832, - 12895 - ], - [ - 12927, - 13007 - ], - [ - 13055 - ], - [ - 13144, - 13311 - ], - [ - 19904, - 19967 - ], - [ - 42752, - 42785 - ], - [ - 42888, - 42890 - ], - [ - 43056, - 43065 - ], - [ - 43310 - ], - [ - 43471 - ], - [ - 43867 - ], - [ - 43882, - 43883 - ], - [ - 64830, - 64831 - ], - [ - 65040, - 65049 - ], - [ - 65072, - 65106 - ], - [ - 65108, - 65126 - ], - [ - 65128, - 65131 - ], - [ - 65279 - ], - [ - 65281, - 65312 - ], - [ - 65339, - 65344 - ], - [ - 65371, - 65381 - ], - [ - 65392 - ], - [ - 65438, - 65439 - ], - [ - 65504, - 65510 - ], - [ - 65512, - 65518 - ], - [ - 65529, - 65533 - ], - [ - 65792, - 65794 - ], - [ - 65799, - 65843 - ], - [ - 65847, - 65855 - ], - [ - 65936, - 65948 - ], - [ - 66000, - 66044 - ], - [ - 66273, - 66299 - ], - [ - 113824, - 113827 - ], - [ - 117760, - 118009 - ], - [ - 118016, - 118451 - ], - [ - 118608, - 118723 - ], - [ - 118784, - 119029 - ], - [ - 119040, - 119078 - ], - [ - 119081, - 119142 - ], - [ - 119146, - 119162 - ], - [ - 119171, - 119172 - ], - [ - 119180, - 119209 - ], - [ - 119214, - 119274 - ], - [ - 119488, - 119507 - ], - [ - 119520, - 119539 - ], - [ - 119552, - 119638 - ], - [ - 119648, - 119672 - ], - [ - 119808, - 119892 - ], - [ - 119894, - 119964 - ], - [ - 119966, - 119967 - ], - [ - 119970 - ], - [ - 119973, - 119974 - ], - [ - 119977, - 119980 - ], - [ - 119982, - 119993 - ], - [ - 119995 - ], - [ - 119997, - 120003 - ], - [ - 120005, - 120069 - ], - [ - 120071, - 120074 - ], - [ - 120077, - 120084 - ], - [ - 120086, - 120092 - ], - [ - 120094, - 120121 - ], - [ - 120123, - 120126 - ], - [ - 120128, - 120132 - ], - [ - 120134 - ], - [ - 120138, - 120144 - ], - [ - 120146, - 120485 - ], - [ - 120488, - 120779 - ], - [ - 120782, - 120831 - ], - [ - 126065, - 126132 - ], - [ - 126209, - 126269 - ], - [ - 126976, - 127019 - ], - [ - 127024, - 127123 - ], - [ - 127136, - 127150 - ], - [ - 127153, - 127167 - ], - [ - 127169, - 127183 - ], - [ - 127185, - 127221 - ], - [ - 127232, - 127405 - ], - [ - 127462, - 127487 - ], - [ - 127489, - 127490 - ], - [ - 127504, - 127547 - ], - [ - 127552, - 127560 - ], - [ - 127568, - 127569 - ], - [ - 127584, - 127589 - ], - [ - 127744, - 128727 - ], - [ - 128732, - 128748 - ], - [ - 128752, - 128764 - ], - [ - 128768, - 128886 - ], - [ - 128891, - 128985 - ], - [ - 128992, - 129003 - ], - [ - 129008 - ], - [ - 129024, - 129035 - ], - [ - 129040, - 129095 - ], - [ - 129104, - 129113 - ], - [ - 129120, - 129159 - ], - [ - 129168, - 129197 - ], - [ - 129200, - 129211 - ], - [ - 129216, - 129217 - ], - [ - 129280, - 129619 - ], - [ - 129632, - 129645 - ], - [ - 129648, - 129660 - ], - [ - 129664, - 129673 - ], - [ - 129679, - 129734 - ], - [ - 129742, - 129756 - ], - [ - 129759, - 129769 - ], - [ - 129776, - 129784 - ], - [ - 129792, - 129938 - ], - [ - 129940, - 130041 - ], - [ - 917505 - ], - [ - 917536, - 917631 - ] - ] -}; -ilib.data.ctype = { - "adlam": [ - [ - 125184, - 125279 - ] - ], - "aegean": [ - [ - 65792, - 65855 - ] - ], - "ahom": [ - [ - 71424, - 71503 - ] - ], - "albanian": [ - [ - 66864, - 66927 - ] - ], - "alchemic": [ - [ - 128768, - 128895 - ] - ], - "ancient": [ - [ - 65936, - 65999 - ] - ], - "arabic": [ - [ - 1536, - 1791 - ], - [ - 1872, - 1919 - ], - [ - 2208, - 2303 - ], - [ - 64336, - 65023 - ], - [ - 65136, - 65279 - ], - [ - 126464, - 126719 - ] - ], - "arabic extended-b": [ - [ - 2160, - 2207 - ] - ], - "arabic extended-c": [ - [ - 69312, - 69375 - ] - ], - "aramaic": [ - [ - 67648, - 67679 - ] - ], - "armenian": [ - [ - 1328, - 1423 - ] - ], - "arrows": [ - [ - 8592, - 8703 - ], - [ - 10224, - 10239 - ], - [ - 10496, - 10623 - ], - [ - 11008, - 11263 - ], - [ - 129024, - 129279 - ] - ], - "ascii": [ - [ - 32, - 127 - ] - ], - "avestan": [ - [ - 68352, - 68415 - ] - ], - "balinese": [ - [ - 6912, - 7039 - ] - ], - "bamum": [ - [ - 42656, - 42751 - ], - [ - 92160, - 92735 - ] - ], - "bassavah": [ - [ - 92880, - 92927 - ] - ], - "batak": [ - [ - 7104, - 7167 - ] - ], - "bengali": [ - [ - 2432, - 2559 - ] - ], - "bhaiksuki": [ - [ - 72704, - 72815 - ] - ], - "blank": [ - [ - 9, - 9 - ], - [ - 32, - 32 - ] - ], - "block": [ - [ - 9600, - 9631 - ] - ], - "bopomofo": [ - [ - 12544, - 12591 - ], - [ - 12704, - 12735 - ] - ], - "box": [ - [ - 9472, - 9599 - ] - ], - "brahmi": [ - [ - 69632, - 69759 - ] - ], - "braille": [ - [ - 10240, - 10495 - ] - ], - "buginese": [ - [ - 6656, - 6687 - ] - ], - "buhid": [ - [ - 5952, - 5983 - ] - ], - "byzantinemusic": [ - [ - 118784, - 119039 - ] - ], - "canadian": [ - [ - 5120, - 5759 - ], - [ - 6320, - 6399 - ] - ], - "carian": [ - [ - 66208, - 66271 - ] - ], - "chakma": [ - [ - 69888, - 69967 - ] - ], - "cham": [ - [ - 43520, - 43615 - ] - ], - "cherokee": [ - [ - 5024, - 5119 - ], - [ - 43888, - 43967 - ] - ], - "chess symbols": [ - [ - 129536, - 129647 - ] - ], - "chorasmian": [ - [ - 69552, - 69599 - ] - ], - "cjk": [ - [ - 12272, - 12287 - ], - [ - 13312, - 19903 - ], - [ - 19968, - 40959 - ], - [ - 131072, - 173791 - ], - [ - 173824, - 183983 - ] - ], - "cjk unified ideographs extension f": [ - [ - 183984, - 191471 - ] - ], - "cjk unified ideographs extension g": [ - [ - 196608, - 201551 - ] - ], - "cjk unified ideographs extension h": [ - [ - 201552, - 205743 - ] - ], - "cjk unified ideographs extension i": [ - [ - 191472, - 192095 - ] - ], - "cjkcompatibility": [ - [ - 13056, - 13311 - ], - [ - 63744, - 64255 - ], - [ - 65072, - 65103 - ], - [ - 194560, - 195103 - ] - ], - "cjkpunct": [ - [ - 12288, - 12351 - ] - ], - "cjkradicals": [ - [ - 11904, - 12255 - ] - ], - "cjkstrokes": [ - [ - 12736, - 12783 - ] - ], - "combining": [ - [ - 768, - 879 - ], - [ - 6832, - 6911 - ], - [ - 7616, - 7679 - ], - [ - 8400, - 8447 - ] - ], - "controlpictures": [ - [ - 9216, - 9279 - ] - ], - "coptic": [ - [ - 11392, - 11519 - ] - ], - "copticnumber": [ - [ - 66272, - 66303 - ] - ], - "cuneiform": [ - [ - 73728, - 74751 - ], - [ - 74880, - 75087 - ] - ], - "cuneiformnumbers": [ - [ - 74752, - 74879 - ] - ], - "currency": [ - [ - 8352, - 8399 - ] - ], - "cypriot": [ - [ - 67584, - 67647 - ] - ], - "cypro-minoan": [ - [ - 77712, - 77823 - ] - ], - "cyrillic": [ - [ - 1024, - 1327 - ], - [ - 7296, - 7311 - ], - [ - 11744, - 11775 - ], - [ - 42560, - 42655 - ] - ], - "cyrillic extended-d": [ - [ - 122928, - 123023 - ] - ], - "deseret": [ - [ - 66560, - 66639 - ] - ], - "devanagari": [ - [ - 2304, - 2431 - ], - [ - 43232, - 43263 - ] - ], - "devanagari extended-a": [ - [ - 72448, - 72543 - ] - ], - "digit": [ - [ - 48, - 57 - ] - ], - "dingbats": [ - [ - 9984, - 10175 - ] - ], - "dives akuru": [ - [ - 71936, - 72031 - ] - ], - "dogra": [ - [ - 71680, - 71759 - ] - ], - "domino": [ - [ - 127024, - 127135 - ] - ], - "duployan": [ - [ - 113664, - 113823 - ] - ], - "egyptian hieroglyph format controls": [ - [ - 78896, - 78943 - ] - ], - "egyptian hieroglyphs extended-a": [ - [ - 78944, - 82943 - ] - ], - "elbasan": [ - [ - 66816, - 66863 - ] - ], - "elymaic": [ - [ - 69600, - 69631 - ] - ], - "emoticons": [ - [ - 128512, - 128591 - ] - ], - "enclosedalpha": [ - [ - 9312, - 9471 - ], - [ - 127232, - 127487 - ] - ], - "enclosedcjk": [ - [ - 12800, - 13055 - ], - [ - 127488, - 127743 - ] - ], - "ethiopic": [ - [ - 4608, - 5023 - ], - [ - 11648, - 11743 - ], - [ - 43776, - 43823 - ] - ], - "ethiopic extended-b": [ - [ - 124896, - 124927 - ] - ], - "garay": [ - [ - 68928, - 69007 - ] - ], - "geometric": [ - [ - 9632, - 9727 - ], - [ - 128896, - 129023 - ] - ], - "georgian": [ - [ - 4256, - 4351 - ], - [ - 11520, - 11567 - ] - ], - "georgian extended": [ - [ - 7312, - 7359 - ] - ], - "glagolitic": [ - [ - 11264, - 11359 - ], - [ - 122880, - 122927 - ] - ], - "gothic": [ - [ - 66352, - 66383 - ] - ], - "grantha": [ - [ - 70400, - 70527 - ] - ], - "greek": [ - [ - 880, - 1023 - ], - [ - 7936, - 8191 - ] - ], - "greekmusic": [ - [ - 119296, - 119375 - ] - ], - "greeknumbers": [ - [ - 65856, - 65935 - ] - ], - "gujarati": [ - [ - 2688, - 2815 - ] - ], - "gunjala gondi": [ - [ - 73056, - 73135 - ] - ], - "gurmukhi": [ - [ - 2560, - 2687 - ] - ], - "gurung khema": [ - [ - 90368, - 90431 - ] - ], - "halfmarks": [ - [ - 65056, - 65071 - ] - ], - "hangul": [ - [ - 4352, - 4607 - ], - [ - 12592, - 12687 - ], - [ - 43360, - 43391 - ], - [ - 44032, - 55295 - ] - ], - "hanifi rohingya": [ - [ - 68864, - 68927 - ] - ], - "hanunoo": [ - [ - 5920, - 5951 - ] - ], - "hatran": [ - [ - 67808, - 67839 - ] - ], - "hebrew": [ - [ - 1424, - 1535 - ] - ], - "hieroglyphs": [ - [ - 67968, - 67999 - ], - [ - 77824, - 78895 - ], - [ - 82944, - 83583 - ] - ], - "highsurrogates": [ - [ - 55296, - 56319 - ] - ], - "hiragana": [ - [ - 12352, - 12447 - ] - ], - "ideograph": [ - [ - 4352, - 4607 - ], - [ - 12272, - 12287 - ], - [ - 12448, - 12543 - ], - [ - 12544, - 12591 - ], - [ - 12592, - 12687 - ], - [ - 12704, - 12735 - ], - [ - 12784, - 12799 - ], - [ - 13056, - 13311 - ], - [ - 13312, - 19903 - ], - [ - 19968, - 40959 - ], - [ - 40960, - 42191 - ], - [ - 43360, - 43391 - ], - [ - 44032, - 55295 - ], - [ - 63744, - 64255 - ], - [ - 65072, - 65103 - ], - [ - 110592, - 110847 - ], - [ - 131072, - 173791 - ], - [ - 173824, - 183983 - ], - [ - 194560, - 195103 - ] - ], - "ideoother": [ - [ - 4352, - 4607 - ], - [ - 11904, - 12255 - ], - [ - 12288, - 12351 - ], - [ - 12352, - 12447 - ], - [ - 12448, - 12543 - ], - [ - 12544, - 12591 - ], - [ - 12592, - 12687 - ], - [ - 12704, - 12735 - ], - [ - 12736, - 12783 - ], - [ - 12784, - 12799 - ], - [ - 13056, - 13311 - ], - [ - 43360, - 43391 - ], - [ - 44032, - 55295 - ], - [ - 63744, - 64255 - ], - [ - 65072, - 65103 - ], - [ - 110592, - 110847 - ], - [ - 194560, - 195103 - ] - ], - "indic siyaq numbers": [ - [ - 126064, - 126143 - ] - ], - "indicnumber": [ - [ - 43056, - 43071 - ] - ], - "ipa": [ - [ - 592, - 687 - ], - [ - 7424, - 7615 - ] - ], - "javanese": [ - [ - 43392, - 43487 - ] - ], - "kaithi": [ - [ - 69760, - 69839 - ] - ], - "kaktovik numerals": [ - [ - 119488, - 119519 - ] - ], - "kana extended-a": [ - [ - 110848, - 110895 - ] - ], - "kana extended-b": [ - [ - 110576, - 110591 - ] - ], - "kanbun": [ - [ - 12688, - 12703 - ] - ], - "kannada": [ - [ - 3200, - 3327 - ] - ], - "katakana": [ - [ - 12448, - 12543 - ], - [ - 12784, - 12799 - ], - [ - 110592, - 110847 - ] - ], - "kawi": [ - [ - 73472, - 73567 - ] - ], - "kayahli": [ - [ - 43264, - 43311 - ] - ], - "kharoshthi": [ - [ - 68096, - 68191 - ] - ], - "khitan small script": [ - [ - 101120, - 101631 - ] - ], - "khmer": [ - [ - 6016, - 6143 - ] - ], - "khmersymbols": [ - [ - 6624, - 6655 - ] - ], - "khojki": [ - [ - 70144, - 70223 - ] - ], - "khudawadi": [ - [ - 70320, - 70399 - ] - ], - "kirat rai": [ - [ - 93504, - 93567 - ] - ], - "lao": [ - [ - 3712, - 3839 - ] - ], - "latin": [ - [ - 0, - 591 - ], - [ - 7680, - 7935 - ], - [ - 11360, - 11391 - ], - [ - 42784, - 43007 - ], - [ - 43824, - 43887 - ] - ], - "latin extended-f": [ - [ - 67456, - 67519 - ] - ], - "latin extended-g": [ - [ - 122624, - 122879 - ] - ], - "lepcha": [ - [ - 7168, - 7247 - ] - ], - "letterlike": [ - [ - 8448, - 8527 - ] - ], - "limbu": [ - [ - 6400, - 6479 - ] - ], - "lineara": [ - [ - 67072, - 67455 - ] - ], - "linearb": [ - [ - 65536, - 65791 - ] - ], - "lisu": [ - [ - 42192, - 42239 - ] - ], - "lisu supplement": [ - [ - 73648, - 73663 - ] - ], - "lowsurrogates": [ - [ - 56320, - 57343 - ] - ], - "lycian": [ - [ - 66176, - 66207 - ] - ], - "lydian": [ - [ - 67872, - 67903 - ] - ], - "mahajani": [ - [ - 69968, - 70015 - ] - ], - "mahjong": [ - [ - 126976, - 127023 - ] - ], - "makasar": [ - [ - 73440, - 73471 - ] - ], - "malayalam": [ - [ - 3328, - 3455 - ] - ], - "mandaic": [ - [ - 2112, - 2143 - ] - ], - "manichaean": [ - [ - 68288, - 68351 - ] - ], - "mapsymbols": [ - [ - 128640, - 128767 - ] - ], - "marchen": [ - [ - 72816, - 72895 - ] - ], - "masaram gondi": [ - [ - 72960, - 73055 - ] - ], - "mathematical": [ - [ - 10176, - 10223 - ], - [ - 10624, - 10751 - ], - [ - 119808, - 120831 - ] - ], - "mayan numerals": [ - [ - 119520, - 119551 - ] - ], - "medefaidrin": [ - [ - 93760, - 93855 - ] - ], - "meeteimayek": [ - [ - 43744, - 43775 - ], - [ - 43968, - 44031 - ] - ], - "mende kikakui": [ - [ - 124928, - 125151 - ] - ], - "meroitic": [ - [ - 68000, - 68095 - ] - ], - "miao": [ - [ - 93952, - 94111 - ] - ], - "misc": [ - [ - 8960, - 9215 - ] - ], - "miscsymbols": [ - [ - 9728, - 9983 - ] - ], - "modi": [ - [ - 71168, - 71263 - ] - ], - "modifiertone": [ - [ - 42752, - 42783 - ] - ], - "mongolian": [ - [ - 6144, - 6319 - ], - [ - 71264, - 71295 - ] - ], - "mro": [ - [ - 92736, - 92783 - ] - ], - "multani": [ - [ - 70272, - 70319 - ] - ], - "musical symbols": [ - [ - 119040, - 119295 - ] - ], - "myanmar": [ - [ - 4096, - 4255 - ], - [ - 43488, - 43519 - ], - [ - 43616, - 43647 - ] - ], - "myanmar extended-c": [ - [ - 71376, - 71423 - ] - ], - "nabataean": [ - [ - 67712, - 67759 - ] - ], - "nag mundari": [ - [ - 124112, - 124159 - ] - ], - "nandinagari": [ - [ - 72096, - 72191 - ] - ], - "newa": [ - [ - 70656, - 70783 - ] - ], - "newtailue": [ - [ - 6528, - 6623 - ] - ], - "nko": [ - [ - 1984, - 2047 - ] - ], - "numbers": [ - [ - 8528, - 8591 - ] - ], - "nushu": [ - [ - 110960, - 111359 - ] - ], - "nyiakeng puachue hmong": [ - [ - 123136, - 123215 - ] - ], - "ocr": [ - [ - 9280, - 9311 - ] - ], - "ogham": [ - [ - 5760, - 5791 - ] - ], - "ol onal": [ - [ - 124368, - 124415 - ] - ], - "olchiki": [ - [ - 7248, - 7295 - ] - ], - "old sogdian": [ - [ - 69376, - 69423 - ] - ], - "old uyghur": [ - [ - 69488, - 69551 - ] - ], - "oldhungarian": [ - [ - 68736, - 68863 - ] - ], - "olditalic": [ - [ - 66304, - 66351 - ] - ], - "oldnortharabian": [ - [ - 68224, - 68255 - ] - ], - "oldpermic": [ - [ - 66384, - 66431 - ] - ], - "oldpersian": [ - [ - 66464, - 66527 - ] - ], - "oldsoutharabian": [ - [ - 68192, - 68223 - ] - ], - "oldturkic": [ - [ - 68608, - 68687 - ] - ], - "operators": [ - [ - 8704, - 8959 - ], - [ - 10752, - 11007 - ] - ], - "oriya": [ - [ - 2816, - 2943 - ] - ], - "ornamentaldingbats": [ - [ - 128592, - 128639 - ] - ], - "osage": [ - [ - 66736, - 66815 - ] - ], - "osmanya": [ - [ - 66688, - 66735 - ] - ], - "ottoman siyaq numbers": [ - [ - 126208, - 126287 - ] - ], - "pahawhhmong": [ - [ - 92928, - 93071 - ] - ], - "pahlavi": [ - [ - 68448, - 68527 - ] - ], - "palmyrene": [ - [ - 67680, - 67711 - ] - ], - "parthian": [ - [ - 68416, - 68447 - ] - ], - "paucinhau": [ - [ - 72384, - 72447 - ] - ], - "phagspa": [ - [ - 43072, - 43135 - ] - ], - "phaistosdisc": [ - [ - 66000, - 66047 - ] - ], - "phoenician": [ - [ - 67840, - 67871 - ] - ], - "pictographs": [ - [ - 127744, - 128511 - ], - [ - 129280, - 129535 - ] - ], - "playingcards": [ - [ - 127136, - 127231 - ] - ], - "presentation": [ - [ - 64256, - 64335 - ] - ], - "privateuse": [ - [ - 57344, - 63743 - ], - [ - 983040, - 1114111 - ] - ], - "punctuation": [ - [ - 8192, - 8303 - ], - [ - 11776, - 11903 - ] - ], - "rejang": [ - [ - 43312, - 43359 - ] - ], - "rodnumerals": [ - [ - 119648, - 119679 - ] - ], - "ruminumerals": [ - [ - 69216, - 69247 - ] - ], - "runic": [ - [ - 5792, - 5887 - ] - ], - "samaritan": [ - [ - 2048, - 2111 - ] - ], - "saurashtra": [ - [ - 43136, - 43231 - ] - ], - "sharada": [ - [ - 70016, - 70111 - ] - ], - "shavian": [ - [ - 66640, - 66687 - ] - ], - "shorthandformat": [ - [ - 113824, - 113839 - ] - ], - "siddham": [ - [ - 71040, - 71167 - ] - ], - "sinhala": [ - [ - 3456, - 3583 - ], - [ - 70112, - 70143 - ] - ], - "small": [ - [ - 65104, - 65135 - ] - ], - "small kana extension": [ - [ - 110896, - 110959 - ] - ], - "sogdian": [ - [ - 69424, - 69487 - ] - ], - "sorasompeng": [ - [ - 69840, - 69887 - ] - ], - "soyombo": [ - [ - 72272, - 72367 - ] - ], - "space": [ - [ - 9, - 13 - ], - [ - 32, - 32 - ], - [ - 133 - ], - [ - 8232, - 8233 - ] - ], - "spacing": [ - [ - 688, - 767 - ] - ], - "specials": [ - [ - 65520, - 65535 - ] - ], - "sundanese": [ - [ - 7040, - 7103 - ], - [ - 7360, - 7375 - ] - ], - "sunuwar": [ - [ - 72640, - 72703 - ] - ], - "supersub": [ - [ - 8304, - 8351 - ] - ], - "suttonsignwriting": [ - [ - 120832, - 121519 - ] - ], - "sylotinagri": [ - [ - 43008, - 43055 - ] - ], - "symbols and pictographs extended-a": [ - [ - 129648, - 129791 - ] - ], - "symbols for legacy computing": [ - [ - 129792, - 130047 - ] - ], - "symbols for legacy computing supplement": [ - [ - 117760, - 118463 - ] - ], - "syriac": [ - [ - 1792, - 1871 - ] - ], - "syriac supplement": [ - [ - 2144, - 2159 - ] - ], - "tagalog": [ - [ - 5888, - 5919 - ] - ], - "tagbanwa": [ - [ - 5984, - 6015 - ] - ], - "tags": [ - [ - 917504, - 917631 - ] - ], - "taile": [ - [ - 6480, - 6527 - ] - ], - "taitham": [ - [ - 6688, - 6831 - ] - ], - "taiviet": [ - [ - 43648, - 43743 - ] - ], - "taixuanjing": [ - [ - 119552, - 119647 - ] - ], - "takri": [ - [ - 71296, - 71375 - ] - ], - "tamil": [ - [ - 2944, - 3071 - ] - ], - "tamil supplement": [ - [ - 73664, - 73727 - ] - ], - "tangsa": [ - [ - 92784, - 92879 - ] - ], - "tangut": [ - [ - 94176, - 101119 - ] - ], - "tangut supplement": [ - [ - 101632, - 101759 - ] - ], - "telugu": [ - [ - 3072, - 3199 - ] - ], - "thaana": [ - [ - 1920, - 1983 - ] - ], - "thai": [ - [ - 3584, - 3711 - ] - ], - "tibetan": [ - [ - 3840, - 4095 - ] - ], - "tifinagh": [ - [ - 11568, - 11647 - ] - ], - "tirhuta": [ - [ - 70784, - 70879 - ] - ], - "todhri": [ - [ - 67008, - 67071 - ] - ], - "toto": [ - [ - 123536, - 123583 - ] - ], - "tulu-tigalari": [ - [ - 70528, - 70655 - ] - ], - "ugaritic": [ - [ - 66432, - 66463 - ] - ], - "unified canadian aboriginal syllabics extended-a": [ - [ - 72368, - 72383 - ] - ], - "vai": [ - [ - 42240, - 42559 - ] - ], - "variations": [ - [ - 65024, - 65039 - ], - [ - 917760, - 917999 - ] - ], - "vedic": [ - [ - 7376, - 7423 - ] - ], - "vertical": [ - [ - 65040, - 65055 - ] - ], - "vithkuqi": [ - [ - 66928, - 67007 - ] - ], - "wancho": [ - [ - 123584, - 123647 - ] - ], - "warangciti": [ - [ - 71840, - 71935 - ] - ], - "width": [ - [ - 65280, - 65519 - ] - ], - "xdigit": [ - [ - 48, - 57 - ], - [ - 65, - 70 - ], - [ - 97, - 102 - ] - ], - "yezidi": [ - [ - 69248, - 69311 - ] - ], - "yi": [ - [ - 40960, - 42191 - ] - ], - "yijing": [ - [ - 19904, - 19967 - ] - ], - "zanabazar square": [ - [ - 72192, - 72271 - ] - ], - "znamenny musical notation": [ - [ - 118528, - 118735 - ] - ] -}; -ilib.data.ctype_c = { - "Cc": [ - [ - 0, - 31 - ], - [ - 127, - 159 - ] - ], - "Cf": [ - [ - 173 - ], - [ - 1536, - 1541 - ], - [ - 1564 - ], - [ - 1757 - ], - [ - 1807 - ], - [ - 2192, - 2193 - ], - [ - 2274 - ], - [ - 6158 - ], - [ - 8203, - 8207 - ], - [ - 8234, - 8238 - ], - [ - 8288, - 8292 - ], - [ - 8294, - 8303 - ], - [ - 65279 - ], - [ - 65529, - 65531 - ], - [ - 69821 - ], - [ - 69837 - ], - [ - 78896, - 78911 - ], - [ - 113824, - 113827 - ], - [ - 119155, - 119162 - ], - [ - 917505 - ], - [ - 917536, - 917631 - ] - ], - "Cn": [ - [ - 888, - 889 - ], - [ - 896, - 899 - ], - [ - 907 - ], - [ - 909 - ], - [ - 930 - ], - [ - 1328 - ], - [ - 1367, - 1368 - ], - [ - 1419, - 1420 - ], - [ - 1424 - ], - [ - 1480, - 1487 - ], - [ - 1515, - 1518 - ], - [ - 1525, - 1535 - ], - [ - 1806 - ], - [ - 1867, - 1868 - ], - [ - 1970, - 1983 - ], - [ - 2043, - 2044 - ], - [ - 2094, - 2095 - ], - [ - 2111 - ], - [ - 2140, - 2141 - ], - [ - 2143 - ], - [ - 2155, - 2159 - ], - [ - 2191 - ], - [ - 2194, - 2198 - ], - [ - 2436 - ], - [ - 2445, - 2446 - ], - [ - 2449, - 2450 - ], - [ - 2473 - ], - [ - 2481 - ], - [ - 2483, - 2485 - ], - [ - 2490, - 2491 - ], - [ - 2501, - 2502 - ], - [ - 2505, - 2506 - ], - [ - 2511, - 2518 - ], - [ - 2520, - 2523 - ], - [ - 2526 - ], - [ - 2532, - 2533 - ], - [ - 2559, - 2560 - ], - [ - 2564 - ], - [ - 2571, - 2574 - ], - [ - 2577, - 2578 - ], - [ - 2601 - ], - [ - 2609 - ], - [ - 2612 - ], - [ - 2615 - ], - [ - 2618, - 2619 - ], - [ - 2621 - ], - [ - 2627, - 2630 - ], - [ - 2633, - 2634 - ], - [ - 2638, - 2640 - ], - [ - 2642, - 2648 - ], - [ - 2653 - ], - [ - 2655, - 2661 - ], - [ - 2679, - 2688 - ], - [ - 2692 - ], - [ - 2702 - ], - [ - 2706 - ], - [ - 2729 - ], - [ - 2737 - ], - [ - 2740 - ], - [ - 2746, - 2747 - ], - [ - 2758 - ], - [ - 2762 - ], - [ - 2766, - 2767 - ], - [ - 2769, - 2783 - ], - [ - 2788, - 2789 - ], - [ - 2802, - 2808 - ], - [ - 2816 - ], - [ - 2820 - ], - [ - 2829, - 2830 - ], - [ - 2833, - 2834 - ], - [ - 2857 - ], - [ - 2865 - ], - [ - 2868 - ], - [ - 2874, - 2875 - ], - [ - 2885, - 2886 - ], - [ - 2889, - 2890 - ], - [ - 2894, - 2900 - ], - [ - 2904, - 2907 - ], - [ - 2910 - ], - [ - 2916, - 2917 - ], - [ - 2936, - 2945 - ], - [ - 2948 - ], - [ - 2955, - 2957 - ], - [ - 2961 - ], - [ - 2966, - 2968 - ], - [ - 2971 - ], - [ - 2973 - ], - [ - 2976, - 2978 - ], - [ - 2981, - 2983 - ], - [ - 2987, - 2989 - ], - [ - 3002, - 3005 - ], - [ - 3011, - 3013 - ], - [ - 3017 - ], - [ - 3022, - 3023 - ], - [ - 3025, - 3030 - ], - [ - 3032, - 3045 - ], - [ - 3067, - 3071 - ], - [ - 3085 - ], - [ - 3089 - ], - [ - 3113 - ], - [ - 3130, - 3131 - ], - [ - 3141 - ], - [ - 3145 - ], - [ - 3150, - 3156 - ], - [ - 3159 - ], - [ - 3163, - 3164 - ], - [ - 3166, - 3167 - ], - [ - 3172, - 3173 - ], - [ - 3184, - 3190 - ], - [ - 3213 - ], - [ - 3217 - ], - [ - 3241 - ], - [ - 3252 - ], - [ - 3258, - 3259 - ], - [ - 3269 - ], - [ - 3273 - ], - [ - 3278, - 3284 - ], - [ - 3287, - 3292 - ], - [ - 3295 - ], - [ - 3300, - 3301 - ], - [ - 3312 - ], - [ - 3316, - 3327 - ], - [ - 3341 - ], - [ - 3345 - ], - [ - 3397 - ], - [ - 3401 - ], - [ - 3408, - 3411 - ], - [ - 3428, - 3429 - ], - [ - 3456 - ], - [ - 3460 - ], - [ - 3479, - 3481 - ], - [ - 3506 - ], - [ - 3516 - ], - [ - 3518, - 3519 - ], - [ - 3527, - 3529 - ], - [ - 3531, - 3534 - ], - [ - 3541 - ], - [ - 3543 - ], - [ - 3552, - 3557 - ], - [ - 3568, - 3569 - ], - [ - 3573, - 3584 - ], - [ - 3643, - 3646 - ], - [ - 3676, - 3712 - ], - [ - 3715 - ], - [ - 3717 - ], - [ - 3723 - ], - [ - 3748 - ], - [ - 3750 - ], - [ - 3774, - 3775 - ], - [ - 3781 - ], - [ - 3783 - ], - [ - 3791 - ], - [ - 3802, - 3803 - ], - [ - 3808, - 3839 - ], - [ - 3912 - ], - [ - 3949, - 3952 - ], - [ - 3992 - ], - [ - 4029 - ], - [ - 4045 - ], - [ - 4059, - 4095 - ], - [ - 4294 - ], - [ - 4296, - 4300 - ], - [ - 4302, - 4303 - ], - [ - 4681 - ], - [ - 4686, - 4687 - ], - [ - 4695 - ], - [ - 4697 - ], - [ - 4702, - 4703 - ], - [ - 4745 - ], - [ - 4750, - 4751 - ], - [ - 4785 - ], - [ - 4790, - 4791 - ], - [ - 4799 - ], - [ - 4801 - ], - [ - 4806, - 4807 - ], - [ - 4823 - ], - [ - 4881 - ], - [ - 4886, - 4887 - ], - [ - 4955, - 4956 - ], - [ - 4989, - 4991 - ], - [ - 5018, - 5023 - ], - [ - 5110, - 5111 - ], - [ - 5118, - 5119 - ], - [ - 5789, - 5791 - ], - [ - 5881, - 5887 - ], - [ - 5910, - 5918 - ], - [ - 5943, - 5951 - ], - [ - 5972, - 5983 - ], - [ - 5997 - ], - [ - 6001 - ], - [ - 6004, - 6015 - ], - [ - 6110, - 6111 - ], - [ - 6122, - 6127 - ], - [ - 6138, - 6143 - ], - [ - 6170, - 6175 - ], - [ - 6265, - 6271 - ], - [ - 6315, - 6319 - ], - [ - 6390, - 6399 - ], - [ - 6431 - ], - [ - 6444, - 6447 - ], - [ - 6460, - 6463 - ], - [ - 6465, - 6467 - ], - [ - 6510, - 6511 - ], - [ - 6517, - 6527 - ], - [ - 6572, - 6575 - ], - [ - 6602, - 6607 - ], - [ - 6619, - 6621 - ], - [ - 6684, - 6685 - ], - [ - 6751 - ], - [ - 6781, - 6782 - ], - [ - 6794, - 6799 - ], - [ - 6810, - 6815 - ], - [ - 6830, - 6831 - ], - [ - 6863, - 6911 - ], - [ - 6989 - ], - [ - 7156, - 7163 - ], - [ - 7224, - 7226 - ], - [ - 7242, - 7244 - ], - [ - 7307, - 7311 - ], - [ - 7355, - 7356 - ], - [ - 7368, - 7375 - ], - [ - 7419, - 7423 - ], - [ - 7958, - 7959 - ], - [ - 7966, - 7967 - ], - [ - 8006, - 8007 - ], - [ - 8014, - 8015 - ], - [ - 8024 - ], - [ - 8026 - ], - [ - 8028 - ], - [ - 8030 - ], - [ - 8062, - 8063 - ], - [ - 8117 - ], - [ - 8133 - ], - [ - 8148, - 8149 - ], - [ - 8156 - ], - [ - 8176, - 8177 - ], - [ - 8181 - ], - [ - 8191 - ], - [ - 8293 - ], - [ - 8306, - 8307 - ], - [ - 8335 - ], - [ - 8349, - 8351 - ], - [ - 8385, - 8399 - ], - [ - 8433, - 8447 - ], - [ - 8588, - 8591 - ], - [ - 9258, - 9279 - ], - [ - 9291, - 9311 - ], - [ - 11124, - 11125 - ], - [ - 11158 - ], - [ - 11508, - 11512 - ], - [ - 11558 - ], - [ - 11560, - 11564 - ], - [ - 11566, - 11567 - ], - [ - 11624, - 11630 - ], - [ - 11633, - 11646 - ], - [ - 11671, - 11679 - ], - [ - 11687 - ], - [ - 11695 - ], - [ - 11703 - ], - [ - 11711 - ], - [ - 11719 - ], - [ - 11727 - ], - [ - 11735 - ], - [ - 11743 - ], - [ - 11870, - 11903 - ], - [ - 11930 - ], - [ - 12020, - 12031 - ], - [ - 12246, - 12271 - ], - [ - 12352 - ], - [ - 12439, - 12440 - ], - [ - 12544, - 12548 - ], - [ - 12592 - ], - [ - 12687 - ], - [ - 12774, - 12782 - ], - [ - 12831 - ], - [ - 42125, - 42127 - ], - [ - 42183, - 42191 - ], - [ - 42540, - 42559 - ], - [ - 42744, - 42751 - ], - [ - 42958, - 42959 - ], - [ - 42962 - ], - [ - 42964 - ], - [ - 42973, - 42993 - ], - [ - 43053, - 43055 - ], - [ - 43066, - 43071 - ], - [ - 43128, - 43135 - ], - [ - 43206, - 43213 - ], - [ - 43226, - 43231 - ], - [ - 43348, - 43358 - ], - [ - 43389, - 43391 - ], - [ - 43470 - ], - [ - 43482, - 43485 - ], - [ - 43519 - ], - [ - 43575, - 43583 - ], - [ - 43598, - 43599 - ], - [ - 43610, - 43611 - ], - [ - 43715, - 43738 - ], - [ - 43767, - 43776 - ], - [ - 43783, - 43784 - ], - [ - 43791, - 43792 - ], - [ - 43799, - 43807 - ], - [ - 43815 - ], - [ - 43823 - ], - [ - 43884, - 43887 - ], - [ - 44014, - 44015 - ], - [ - 44026, - 44031 - ], - [ - 55204, - 55215 - ], - [ - 55239, - 55242 - ], - [ - 55292, - 55295 - ], - [ - 64110, - 64111 - ], - [ - 64218, - 64255 - ], - [ - 64263, - 64274 - ], - [ - 64280, - 64284 - ], - [ - 64311 - ], - [ - 64317 - ], - [ - 64319 - ], - [ - 64322 - ], - [ - 64325 - ], - [ - 64451, - 64466 - ], - [ - 64912, - 64913 - ], - [ - 64968, - 64974 - ], - [ - 64976, - 65007 - ], - [ - 65050, - 65055 - ], - [ - 65107 - ], - [ - 65127 - ], - [ - 65132, - 65135 - ], - [ - 65141 - ], - [ - 65277, - 65278 - ], - [ - 65280 - ], - [ - 65471, - 65473 - ], - [ - 65480, - 65481 - ], - [ - 65488, - 65489 - ], - [ - 65496, - 65497 - ], - [ - 65501, - 65503 - ], - [ - 65511 - ], - [ - 65519, - 65528 - ], - [ - 65534, - 65535 - ], - [ - 65548 - ], - [ - 65575 - ], - [ - 65595 - ], - [ - 65598 - ], - [ - 65614, - 65615 - ], - [ - 65630, - 65663 - ], - [ - 65787, - 65791 - ], - [ - 65795, - 65798 - ], - [ - 65844, - 65846 - ], - [ - 65935 - ], - [ - 65949, - 65951 - ], - [ - 65953, - 65999 - ], - [ - 66046, - 66175 - ], - [ - 66205, - 66207 - ], - [ - 66257, - 66271 - ], - [ - 66300, - 66303 - ], - [ - 66340, - 66348 - ], - [ - 66379, - 66383 - ], - [ - 66427, - 66431 - ], - [ - 66462 - ], - [ - 66500, - 66503 - ], - [ - 66518, - 66559 - ], - [ - 66718, - 66719 - ], - [ - 66730, - 66735 - ], - [ - 66772, - 66775 - ], - [ - 66812, - 66815 - ], - [ - 66856, - 66863 - ], - [ - 66916, - 66926 - ], - [ - 66939 - ], - [ - 66955 - ], - [ - 66963 - ], - [ - 66966 - ], - [ - 66978 - ], - [ - 66994 - ], - [ - 67002 - ], - [ - 67005, - 67007 - ], - [ - 67060, - 67071 - ], - [ - 67383, - 67391 - ], - [ - 67414, - 67423 - ], - [ - 67432, - 67455 - ], - [ - 67462 - ], - [ - 67505 - ], - [ - 67515, - 67583 - ], - [ - 67590, - 67591 - ], - [ - 67593 - ], - [ - 67638 - ], - [ - 67641, - 67643 - ], - [ - 67645, - 67646 - ], - [ - 67670 - ], - [ - 67743, - 67750 - ], - [ - 67760, - 67807 - ], - [ - 67827 - ], - [ - 67830, - 67834 - ], - [ - 67868, - 67870 - ], - [ - 67898, - 67902 - ], - [ - 67904, - 67967 - ], - [ - 68024, - 68027 - ], - [ - 68048, - 68049 - ], - [ - 68100 - ], - [ - 68103, - 68107 - ], - [ - 68116 - ], - [ - 68120 - ], - [ - 68150, - 68151 - ], - [ - 68155, - 68158 - ], - [ - 68169, - 68175 - ], - [ - 68185, - 68191 - ], - [ - 68256, - 68287 - ], - [ - 68327, - 68330 - ], - [ - 68343, - 68351 - ], - [ - 68406, - 68408 - ], - [ - 68438, - 68439 - ], - [ - 68467, - 68471 - ], - [ - 68498, - 68504 - ], - [ - 68509, - 68520 - ], - [ - 68528, - 68607 - ], - [ - 68681, - 68735 - ], - [ - 68787, - 68799 - ], - [ - 68851, - 68857 - ], - [ - 68904, - 68911 - ], - [ - 68922, - 68927 - ], - [ - 68966, - 68968 - ], - [ - 68998, - 69005 - ], - [ - 69008, - 69215 - ], - [ - 69247 - ], - [ - 69290 - ], - [ - 69294, - 69295 - ], - [ - 69298, - 69313 - ], - [ - 69317, - 69371 - ], - [ - 69416, - 69423 - ], - [ - 69466, - 69487 - ], - [ - 69514, - 69551 - ], - [ - 69580, - 69599 - ], - [ - 69623, - 69631 - ], - [ - 69710, - 69713 - ], - [ - 69750, - 69758 - ], - [ - 69827, - 69836 - ], - [ - 69838, - 69839 - ], - [ - 69865, - 69871 - ], - [ - 69882, - 69887 - ], - [ - 69941 - ], - [ - 69960, - 69967 - ], - [ - 70007, - 70015 - ], - [ - 70112 - ], - [ - 70133, - 70143 - ], - [ - 70162 - ], - [ - 70210, - 70271 - ], - [ - 70279 - ], - [ - 70281 - ], - [ - 70286 - ], - [ - 70302 - ], - [ - 70314, - 70319 - ], - [ - 70379, - 70383 - ], - [ - 70394, - 70399 - ], - [ - 70404 - ], - [ - 70413, - 70414 - ], - [ - 70417, - 70418 - ], - [ - 70441 - ], - [ - 70449 - ], - [ - 70452 - ], - [ - 70458 - ], - [ - 70469, - 70470 - ], - [ - 70473, - 70474 - ], - [ - 70478, - 70479 - ], - [ - 70481, - 70486 - ], - [ - 70488, - 70492 - ], - [ - 70500, - 70501 - ], - [ - 70509, - 70511 - ], - [ - 70517, - 70527 - ], - [ - 70538 - ], - [ - 70540, - 70541 - ], - [ - 70543 - ], - [ - 70582 - ], - [ - 70593 - ], - [ - 70595, - 70596 - ], - [ - 70598 - ], - [ - 70603 - ], - [ - 70614 - ], - [ - 70617, - 70624 - ], - [ - 70627, - 70655 - ], - [ - 70748 - ], - [ - 70754, - 70783 - ], - [ - 70856, - 70863 - ], - [ - 70874, - 71039 - ], - [ - 71094, - 71095 - ], - [ - 71134, - 71167 - ], - [ - 71237, - 71247 - ], - [ - 71258, - 71263 - ], - [ - 71277, - 71295 - ], - [ - 71354, - 71359 - ], - [ - 71370, - 71375 - ], - [ - 71396, - 71423 - ], - [ - 71451, - 71452 - ], - [ - 71468, - 71471 - ], - [ - 71495, - 71679 - ], - [ - 71740, - 71839 - ], - [ - 71923, - 71934 - ], - [ - 71943, - 71944 - ], - [ - 71946, - 71947 - ], - [ - 71956 - ], - [ - 71959 - ], - [ - 71990 - ], - [ - 71993, - 71994 - ], - [ - 72007, - 72015 - ], - [ - 72026, - 72095 - ], - [ - 72104, - 72105 - ], - [ - 72152, - 72153 - ], - [ - 72165, - 72191 - ], - [ - 72264, - 72271 - ], - [ - 72355, - 72367 - ], - [ - 72441, - 72447 - ], - [ - 72458, - 72639 - ], - [ - 72674, - 72687 - ], - [ - 72698, - 72703 - ], - [ - 72713 - ], - [ - 72759 - ], - [ - 72774, - 72783 - ], - [ - 72813, - 72815 - ], - [ - 72848, - 72849 - ], - [ - 72872 - ], - [ - 72887, - 72959 - ], - [ - 72967 - ], - [ - 72970 - ], - [ - 73015, - 73017 - ], - [ - 73019 - ], - [ - 73022 - ], - [ - 73032, - 73039 - ], - [ - 73050, - 73055 - ], - [ - 73062 - ], - [ - 73065 - ], - [ - 73103 - ], - [ - 73106 - ], - [ - 73113, - 73119 - ], - [ - 73130, - 73439 - ], - [ - 73465, - 73471 - ], - [ - 73489 - ], - [ - 73531, - 73533 - ], - [ - 73563, - 73647 - ], - [ - 73649, - 73663 - ], - [ - 73714, - 73726 - ], - [ - 74650, - 74751 - ], - [ - 74863 - ], - [ - 74869, - 74879 - ], - [ - 75076, - 77711 - ], - [ - 77811, - 77823 - ], - [ - 78934, - 78943 - ], - [ - 82939, - 82943 - ], - [ - 83527, - 90367 - ], - [ - 90426, - 92159 - ], - [ - 92729, - 92735 - ], - [ - 92767 - ], - [ - 92778, - 92781 - ], - [ - 92863 - ], - [ - 92874, - 92879 - ], - [ - 92910, - 92911 - ], - [ - 92918, - 92927 - ], - [ - 92998, - 93007 - ], - [ - 93018 - ], - [ - 93026 - ], - [ - 93048, - 93052 - ], - [ - 93072, - 93503 - ], - [ - 93562, - 93759 - ], - [ - 93851, - 93951 - ], - [ - 94027, - 94030 - ], - [ - 94088, - 94094 - ], - [ - 94112, - 94175 - ], - [ - 94181, - 94191 - ], - [ - 94194, - 94207 - ], - [ - 100344, - 100351 - ], - [ - 101590, - 101630 - ], - [ - 101641, - 110575 - ], - [ - 110580 - ], - [ - 110588 - ], - [ - 110591 - ], - [ - 110883, - 110897 - ], - [ - 110899, - 110927 - ], - [ - 110931, - 110932 - ], - [ - 110934, - 110947 - ], - [ - 110952, - 110959 - ], - [ - 111356, - 113663 - ], - [ - 113771, - 113775 - ], - [ - 113789, - 113791 - ], - [ - 113801, - 113807 - ], - [ - 113818, - 113819 - ], - [ - 113828, - 117759 - ], - [ - 118010, - 118015 - ], - [ - 118452, - 118527 - ], - [ - 118574, - 118575 - ], - [ - 118599, - 118607 - ], - [ - 118724, - 118783 - ], - [ - 119030, - 119039 - ], - [ - 119079, - 119080 - ], - [ - 119275, - 119295 - ], - [ - 119366, - 119487 - ], - [ - 119508, - 119519 - ], - [ - 119540, - 119551 - ], - [ - 119639, - 119647 - ], - [ - 119673, - 119807 - ], - [ - 119893 - ], - [ - 119965 - ], - [ - 119968, - 119969 - ], - [ - 119971, - 119972 - ], - [ - 119975, - 119976 - ], - [ - 119981 - ], - [ - 119994 - ], - [ - 119996 - ], - [ - 120004 - ], - [ - 120070 - ], - [ - 120075, - 120076 - ], - [ - 120085 - ], - [ - 120093 - ], - [ - 120122 - ], - [ - 120127 - ], - [ - 120133 - ], - [ - 120135, - 120137 - ], - [ - 120145 - ], - [ - 120486, - 120487 - ], - [ - 120780, - 120781 - ], - [ - 121484, - 121498 - ], - [ - 121504 - ], - [ - 121520, - 122623 - ], - [ - 122655, - 122660 - ], - [ - 122667, - 122879 - ], - [ - 122887 - ], - [ - 122905, - 122906 - ], - [ - 122914 - ], - [ - 122917 - ], - [ - 122923, - 122927 - ], - [ - 122990, - 123022 - ], - [ - 123024, - 123135 - ], - [ - 123181, - 123183 - ], - [ - 123198, - 123199 - ], - [ - 123210, - 123213 - ], - [ - 123216, - 123535 - ], - [ - 123567, - 123583 - ], - [ - 123642, - 123646 - ], - [ - 123648, - 124111 - ], - [ - 124154, - 124367 - ], - [ - 124411, - 124414 - ], - [ - 124416, - 124895 - ], - [ - 124903 - ], - [ - 124908 - ], - [ - 124911 - ], - [ - 124927 - ], - [ - 125125, - 125126 - ], - [ - 125143, - 125183 - ], - [ - 125260, - 125263 - ], - [ - 125274, - 125277 - ], - [ - 125280, - 126064 - ], - [ - 126133, - 126208 - ], - [ - 126270, - 126463 - ], - [ - 126468 - ], - [ - 126496 - ], - [ - 126499 - ], - [ - 126501, - 126502 - ], - [ - 126504 - ], - [ - 126515 - ], - [ - 126520 - ], - [ - 126522 - ], - [ - 126524, - 126529 - ], - [ - 126531, - 126534 - ], - [ - 126536 - ], - [ - 126538 - ], - [ - 126540 - ], - [ - 126544 - ], - [ - 126547 - ], - [ - 126549, - 126550 - ], - [ - 126552 - ], - [ - 126554 - ], - [ - 126556 - ], - [ - 126558 - ], - [ - 126560 - ], - [ - 126563 - ], - [ - 126565, - 126566 - ], - [ - 126571 - ], - [ - 126579 - ], - [ - 126584 - ], - [ - 126589 - ], - [ - 126591 - ], - [ - 126602 - ], - [ - 126620, - 126624 - ], - [ - 126628 - ], - [ - 126634 - ], - [ - 126652, - 126703 - ], - [ - 126706, - 126975 - ], - [ - 127020, - 127023 - ], - [ - 127124, - 127135 - ], - [ - 127151, - 127152 - ], - [ - 127168 - ], - [ - 127184 - ], - [ - 127222, - 127231 - ], - [ - 127406, - 127461 - ], - [ - 127491, - 127503 - ], - [ - 127548, - 127551 - ], - [ - 127561, - 127567 - ], - [ - 127570, - 127583 - ], - [ - 127590, - 127743 - ], - [ - 128728, - 128731 - ], - [ - 128749, - 128751 - ], - [ - 128765, - 128767 - ], - [ - 128887, - 128890 - ], - [ - 128986, - 128991 - ], - [ - 129004, - 129007 - ], - [ - 129009, - 129023 - ], - [ - 129036, - 129039 - ], - [ - 129096, - 129103 - ], - [ - 129114, - 129119 - ], - [ - 129160, - 129167 - ], - [ - 129198, - 129199 - ], - [ - 129212, - 129215 - ], - [ - 129218, - 129279 - ], - [ - 129620, - 129631 - ], - [ - 129646, - 129647 - ], - [ - 129661, - 129663 - ], - [ - 129674, - 129678 - ], - [ - 129735, - 129741 - ], - [ - 129757, - 129758 - ], - [ - 129770, - 129775 - ], - [ - 129785, - 129791 - ], - [ - 129939 - ], - [ - 130042, - 131071 - ], - [ - 173792, - 173823 - ], - [ - 177978, - 177983 - ], - [ - 178206, - 178207 - ], - [ - 183970, - 183983 - ], - [ - 191457, - 191471 - ], - [ - 192094, - 194559 - ], - [ - 195102, - 196607 - ], - [ - 201547, - 201551 - ], - [ - 205744, - 917504 - ], - [ - 917506, - 917535 - ], - [ - 917632, - 917759 - ], - [ - 918000, - 983039 - ], - [ - 1048574, - 1048575 - ], - [ - 1114110, - 1114111 - ] - ], - "Co": [ - [ - 57344, - 63743 - ], - [ - 983040, - 1048573 - ], - [ - 1048576, - 1114109 - ] - ], - "Cs": [ - [ - 55296, - 57343 - ] - ] -}; -ilib.data.ctype_l = { - "Ll": [ - [ - 97, - 122 - ], - [ - 181 - ], - [ - 223, - 246 - ], - [ - 248, - 255 - ], - [ - 257 - ], - [ - 259 - ], - [ - 261 - ], - [ - 263 - ], - [ - 265 - ], - [ - 267 - ], - [ - 269 - ], - [ - 271 - ], - [ - 273 - ], - [ - 275 - ], - [ - 277 - ], - [ - 279 - ], - [ - 281 - ], - [ - 283 - ], - [ - 285 - ], - [ - 287 - ], - [ - 289 - ], - [ - 291 - ], - [ - 293 - ], - [ - 295 - ], - [ - 297 - ], - [ - 299 - ], - [ - 301 - ], - [ - 303 - ], - [ - 305 - ], - [ - 307 - ], - [ - 309 - ], - [ - 311, - 312 - ], - [ - 314 - ], - [ - 316 - ], - [ - 318 - ], - [ - 320 - ], - [ - 322 - ], - [ - 324 - ], - [ - 326 - ], - [ - 328, - 329 - ], - [ - 331 - ], - [ - 333 - ], - [ - 335 - ], - [ - 337 - ], - [ - 339 - ], - [ - 341 - ], - [ - 343 - ], - [ - 345 - ], - [ - 347 - ], - [ - 349 - ], - [ - 351 - ], - [ - 353 - ], - [ - 355 - ], - [ - 357 - ], - [ - 359 - ], - [ - 361 - ], - [ - 363 - ], - [ - 365 - ], - [ - 367 - ], - [ - 369 - ], - [ - 371 - ], - [ - 373 - ], - [ - 375 - ], - [ - 378 - ], - [ - 380 - ], - [ - 382, - 384 - ], - [ - 387 - ], - [ - 389 - ], - [ - 392 - ], - [ - 396, - 397 - ], - [ - 402 - ], - [ - 405 - ], - [ - 409, - 411 - ], - [ - 414 - ], - [ - 417 - ], - [ - 419 - ], - [ - 421 - ], - [ - 424 - ], - [ - 426, - 427 - ], - [ - 429 - ], - [ - 432 - ], - [ - 436 - ], - [ - 438 - ], - [ - 441, - 442 - ], - [ - 445, - 447 - ], - [ - 454 - ], - [ - 457 - ], - [ - 460 - ], - [ - 462 - ], - [ - 464 - ], - [ - 466 - ], - [ - 468 - ], - [ - 470 - ], - [ - 472 - ], - [ - 474 - ], - [ - 476, - 477 - ], - [ - 479 - ], - [ - 481 - ], - [ - 483 - ], - [ - 485 - ], - [ - 487 - ], - [ - 489 - ], - [ - 491 - ], - [ - 493 - ], - [ - 495, - 496 - ], - [ - 499 - ], - [ - 501 - ], - [ - 505 - ], - [ - 507 - ], - [ - 509 - ], - [ - 511 - ], - [ - 513 - ], - [ - 515 - ], - [ - 517 - ], - [ - 519 - ], - [ - 521 - ], - [ - 523 - ], - [ - 525 - ], - [ - 527 - ], - [ - 529 - ], - [ - 531 - ], - [ - 533 - ], - [ - 535 - ], - [ - 537 - ], - [ - 539 - ], - [ - 541 - ], - [ - 543 - ], - [ - 545 - ], - [ - 547 - ], - [ - 549 - ], - [ - 551 - ], - [ - 553 - ], - [ - 555 - ], - [ - 557 - ], - [ - 559 - ], - [ - 561 - ], - [ - 563, - 569 - ], - [ - 572 - ], - [ - 575, - 576 - ], - [ - 578 - ], - [ - 583 - ], - [ - 585 - ], - [ - 587 - ], - [ - 589 - ], - [ - 591, - 659 - ], - [ - 661, - 687 - ], - [ - 881 - ], - [ - 883 - ], - [ - 887 - ], - [ - 891, - 893 - ], - [ - 912 - ], - [ - 940, - 974 - ], - [ - 976, - 977 - ], - [ - 981, - 983 - ], - [ - 985 - ], - [ - 987 - ], - [ - 989 - ], - [ - 991 - ], - [ - 993 - ], - [ - 995 - ], - [ - 997 - ], - [ - 999 - ], - [ - 1001 - ], - [ - 1003 - ], - [ - 1005 - ], - [ - 1007, - 1011 - ], - [ - 1013 - ], - [ - 1016 - ], - [ - 1019, - 1020 - ], - [ - 1072, - 1119 - ], - [ - 1121 - ], - [ - 1123 - ], - [ - 1125 - ], - [ - 1127 - ], - [ - 1129 - ], - [ - 1131 - ], - [ - 1133 - ], - [ - 1135 - ], - [ - 1137 - ], - [ - 1139 - ], - [ - 1141 - ], - [ - 1143 - ], - [ - 1145 - ], - [ - 1147 - ], - [ - 1149 - ], - [ - 1151 - ], - [ - 1153 - ], - [ - 1163 - ], - [ - 1165 - ], - [ - 1167 - ], - [ - 1169 - ], - [ - 1171 - ], - [ - 1173 - ], - [ - 1175 - ], - [ - 1177 - ], - [ - 1179 - ], - [ - 1181 - ], - [ - 1183 - ], - [ - 1185 - ], - [ - 1187 - ], - [ - 1189 - ], - [ - 1191 - ], - [ - 1193 - ], - [ - 1195 - ], - [ - 1197 - ], - [ - 1199 - ], - [ - 1201 - ], - [ - 1203 - ], - [ - 1205 - ], - [ - 1207 - ], - [ - 1209 - ], - [ - 1211 - ], - [ - 1213 - ], - [ - 1215 - ], - [ - 1218 - ], - [ - 1220 - ], - [ - 1222 - ], - [ - 1224 - ], - [ - 1226 - ], - [ - 1228 - ], - [ - 1230, - 1231 - ], - [ - 1233 - ], - [ - 1235 - ], - [ - 1237 - ], - [ - 1239 - ], - [ - 1241 - ], - [ - 1243 - ], - [ - 1245 - ], - [ - 1247 - ], - [ - 1249 - ], - [ - 1251 - ], - [ - 1253 - ], - [ - 1255 - ], - [ - 1257 - ], - [ - 1259 - ], - [ - 1261 - ], - [ - 1263 - ], - [ - 1265 - ], - [ - 1267 - ], - [ - 1269 - ], - [ - 1271 - ], - [ - 1273 - ], - [ - 1275 - ], - [ - 1277 - ], - [ - 1279 - ], - [ - 1281 - ], - [ - 1283 - ], - [ - 1285 - ], - [ - 1287 - ], - [ - 1289 - ], - [ - 1291 - ], - [ - 1293 - ], - [ - 1295 - ], - [ - 1297 - ], - [ - 1299 - ], - [ - 1301 - ], - [ - 1303 - ], - [ - 1305 - ], - [ - 1307 - ], - [ - 1309 - ], - [ - 1311 - ], - [ - 1313 - ], - [ - 1315 - ], - [ - 1317 - ], - [ - 1319 - ], - [ - 1321 - ], - [ - 1323 - ], - [ - 1325 - ], - [ - 1327 - ], - [ - 1376, - 1416 - ], - [ - 4304, - 4346 - ], - [ - 4349, - 4351 - ], - [ - 5112, - 5117 - ], - [ - 7296, - 7304 - ], - [ - 7306 - ], - [ - 7424, - 7467 - ], - [ - 7531, - 7543 - ], - [ - 7545, - 7578 - ], - [ - 7681 - ], - [ - 7683 - ], - [ - 7685 - ], - [ - 7687 - ], - [ - 7689 - ], - [ - 7691 - ], - [ - 7693 - ], - [ - 7695 - ], - [ - 7697 - ], - [ - 7699 - ], - [ - 7701 - ], - [ - 7703 - ], - [ - 7705 - ], - [ - 7707 - ], - [ - 7709 - ], - [ - 7711 - ], - [ - 7713 - ], - [ - 7715 - ], - [ - 7717 - ], - [ - 7719 - ], - [ - 7721 - ], - [ - 7723 - ], - [ - 7725 - ], - [ - 7727 - ], - [ - 7729 - ], - [ - 7731 - ], - [ - 7733 - ], - [ - 7735 - ], - [ - 7737 - ], - [ - 7739 - ], - [ - 7741 - ], - [ - 7743 - ], - [ - 7745 - ], - [ - 7747 - ], - [ - 7749 - ], - [ - 7751 - ], - [ - 7753 - ], - [ - 7755 - ], - [ - 7757 - ], - [ - 7759 - ], - [ - 7761 - ], - [ - 7763 - ], - [ - 7765 - ], - [ - 7767 - ], - [ - 7769 - ], - [ - 7771 - ], - [ - 7773 - ], - [ - 7775 - ], - [ - 7777 - ], - [ - 7779 - ], - [ - 7781 - ], - [ - 7783 - ], - [ - 7785 - ], - [ - 7787 - ], - [ - 7789 - ], - [ - 7791 - ], - [ - 7793 - ], - [ - 7795 - ], - [ - 7797 - ], - [ - 7799 - ], - [ - 7801 - ], - [ - 7803 - ], - [ - 7805 - ], - [ - 7807 - ], - [ - 7809 - ], - [ - 7811 - ], - [ - 7813 - ], - [ - 7815 - ], - [ - 7817 - ], - [ - 7819 - ], - [ - 7821 - ], - [ - 7823 - ], - [ - 7825 - ], - [ - 7827 - ], - [ - 7829, - 7837 - ], - [ - 7839 - ], - [ - 7841 - ], - [ - 7843 - ], - [ - 7845 - ], - [ - 7847 - ], - [ - 7849 - ], - [ - 7851 - ], - [ - 7853 - ], - [ - 7855 - ], - [ - 7857 - ], - [ - 7859 - ], - [ - 7861 - ], - [ - 7863 - ], - [ - 7865 - ], - [ - 7867 - ], - [ - 7869 - ], - [ - 7871 - ], - [ - 7873 - ], - [ - 7875 - ], - [ - 7877 - ], - [ - 7879 - ], - [ - 7881 - ], - [ - 7883 - ], - [ - 7885 - ], - [ - 7887 - ], - [ - 7889 - ], - [ - 7891 - ], - [ - 7893 - ], - [ - 7895 - ], - [ - 7897 - ], - [ - 7899 - ], - [ - 7901 - ], - [ - 7903 - ], - [ - 7905 - ], - [ - 7907 - ], - [ - 7909 - ], - [ - 7911 - ], - [ - 7913 - ], - [ - 7915 - ], - [ - 7917 - ], - [ - 7919 - ], - [ - 7921 - ], - [ - 7923 - ], - [ - 7925 - ], - [ - 7927 - ], - [ - 7929 - ], - [ - 7931 - ], - [ - 7933 - ], - [ - 7935, - 7943 - ], - [ - 7952, - 7957 - ], - [ - 7968, - 7975 - ], - [ - 7984, - 7991 - ], - [ - 8000, - 8005 - ], - [ - 8016, - 8023 - ], - [ - 8032, - 8039 - ], - [ - 8048, - 8061 - ], - [ - 8064, - 8071 - ], - [ - 8080, - 8087 - ], - [ - 8096, - 8103 - ], - [ - 8112, - 8116 - ], - [ - 8118, - 8119 - ], - [ - 8126 - ], - [ - 8130, - 8132 - ], - [ - 8134, - 8135 - ], - [ - 8144, - 8147 - ], - [ - 8150, - 8151 - ], - [ - 8160, - 8167 - ], - [ - 8178, - 8180 - ], - [ - 8182, - 8183 - ], - [ - 8458 - ], - [ - 8462, - 8463 - ], - [ - 8467 - ], - [ - 8495 - ], - [ - 8500 - ], - [ - 8505 - ], - [ - 8508, - 8509 - ], - [ - 8518, - 8521 - ], - [ - 8526 - ], - [ - 8580 - ], - [ - 11312, - 11359 - ], - [ - 11361 - ], - [ - 11365, - 11366 - ], - [ - 11368 - ], - [ - 11370 - ], - [ - 11372 - ], - [ - 11377 - ], - [ - 11379, - 11380 - ], - [ - 11382, - 11387 - ], - [ - 11393 - ], - [ - 11395 - ], - [ - 11397 - ], - [ - 11399 - ], - [ - 11401 - ], - [ - 11403 - ], - [ - 11405 - ], - [ - 11407 - ], - [ - 11409 - ], - [ - 11411 - ], - [ - 11413 - ], - [ - 11415 - ], - [ - 11417 - ], - [ - 11419 - ], - [ - 11421 - ], - [ - 11423 - ], - [ - 11425 - ], - [ - 11427 - ], - [ - 11429 - ], - [ - 11431 - ], - [ - 11433 - ], - [ - 11435 - ], - [ - 11437 - ], - [ - 11439 - ], - [ - 11441 - ], - [ - 11443 - ], - [ - 11445 - ], - [ - 11447 - ], - [ - 11449 - ], - [ - 11451 - ], - [ - 11453 - ], - [ - 11455 - ], - [ - 11457 - ], - [ - 11459 - ], - [ - 11461 - ], - [ - 11463 - ], - [ - 11465 - ], - [ - 11467 - ], - [ - 11469 - ], - [ - 11471 - ], - [ - 11473 - ], - [ - 11475 - ], - [ - 11477 - ], - [ - 11479 - ], - [ - 11481 - ], - [ - 11483 - ], - [ - 11485 - ], - [ - 11487 - ], - [ - 11489 - ], - [ - 11491, - 11492 - ], - [ - 11500 - ], - [ - 11502 - ], - [ - 11507 - ], - [ - 11520, - 11557 - ], - [ - 11559 - ], - [ - 11565 - ], - [ - 42561 - ], - [ - 42563 - ], - [ - 42565 - ], - [ - 42567 - ], - [ - 42569 - ], - [ - 42571 - ], - [ - 42573 - ], - [ - 42575 - ], - [ - 42577 - ], - [ - 42579 - ], - [ - 42581 - ], - [ - 42583 - ], - [ - 42585 - ], - [ - 42587 - ], - [ - 42589 - ], - [ - 42591 - ], - [ - 42593 - ], - [ - 42595 - ], - [ - 42597 - ], - [ - 42599 - ], - [ - 42601 - ], - [ - 42603 - ], - [ - 42605 - ], - [ - 42625 - ], - [ - 42627 - ], - [ - 42629 - ], - [ - 42631 - ], - [ - 42633 - ], - [ - 42635 - ], - [ - 42637 - ], - [ - 42639 - ], - [ - 42641 - ], - [ - 42643 - ], - [ - 42645 - ], - [ - 42647 - ], - [ - 42649 - ], - [ - 42651 - ], - [ - 42787 - ], - [ - 42789 - ], - [ - 42791 - ], - [ - 42793 - ], - [ - 42795 - ], - [ - 42797 - ], - [ - 42799, - 42801 - ], - [ - 42803 - ], - [ - 42805 - ], - [ - 42807 - ], - [ - 42809 - ], - [ - 42811 - ], - [ - 42813 - ], - [ - 42815 - ], - [ - 42817 - ], - [ - 42819 - ], - [ - 42821 - ], - [ - 42823 - ], - [ - 42825 - ], - [ - 42827 - ], - [ - 42829 - ], - [ - 42831 - ], - [ - 42833 - ], - [ - 42835 - ], - [ - 42837 - ], - [ - 42839 - ], - [ - 42841 - ], - [ - 42843 - ], - [ - 42845 - ], - [ - 42847 - ], - [ - 42849 - ], - [ - 42851 - ], - [ - 42853 - ], - [ - 42855 - ], - [ - 42857 - ], - [ - 42859 - ], - [ - 42861 - ], - [ - 42863 - ], - [ - 42865, - 42872 - ], - [ - 42874 - ], - [ - 42876 - ], - [ - 42879 - ], - [ - 42881 - ], - [ - 42883 - ], - [ - 42885 - ], - [ - 42887 - ], - [ - 42892 - ], - [ - 42894 - ], - [ - 42897 - ], - [ - 42899, - 42901 - ], - [ - 42903 - ], - [ - 42905 - ], - [ - 42907 - ], - [ - 42909 - ], - [ - 42911 - ], - [ - 42913 - ], - [ - 42915 - ], - [ - 42917 - ], - [ - 42919 - ], - [ - 42921 - ], - [ - 42927 - ], - [ - 42933 - ], - [ - 42935 - ], - [ - 42937 - ], - [ - 42939 - ], - [ - 42941 - ], - [ - 42943 - ], - [ - 42945 - ], - [ - 42947 - ], - [ - 42952 - ], - [ - 42954 - ], - [ - 42957 - ], - [ - 42961 - ], - [ - 42963 - ], - [ - 42965 - ], - [ - 42967 - ], - [ - 42969 - ], - [ - 42971 - ], - [ - 42998 - ], - [ - 43002 - ], - [ - 43824, - 43866 - ], - [ - 43872, - 43880 - ], - [ - 43888, - 43967 - ], - [ - 64256, - 64262 - ], - [ - 64275, - 64279 - ], - [ - 65345, - 65370 - ], - [ - 66600, - 66639 - ], - [ - 66776, - 66811 - ], - [ - 66967, - 66977 - ], - [ - 66979, - 66993 - ], - [ - 66995, - 67001 - ], - [ - 67003, - 67004 - ], - [ - 68800, - 68850 - ], - [ - 68976, - 68997 - ], - [ - 71872, - 71903 - ], - [ - 93792, - 93823 - ], - [ - 119834, - 119859 - ], - [ - 119886, - 119892 - ], - [ - 119894, - 119911 - ], - [ - 119938, - 119963 - ], - [ - 119990, - 119993 - ], - [ - 119995 - ], - [ - 119997, - 120003 - ], - [ - 120005, - 120015 - ], - [ - 120042, - 120067 - ], - [ - 120094, - 120119 - ], - [ - 120146, - 120171 - ], - [ - 120198, - 120223 - ], - [ - 120250, - 120275 - ], - [ - 120302, - 120327 - ], - [ - 120354, - 120379 - ], - [ - 120406, - 120431 - ], - [ - 120458, - 120485 - ], - [ - 120514, - 120538 - ], - [ - 120540, - 120545 - ], - [ - 120572, - 120596 - ], - [ - 120598, - 120603 - ], - [ - 120630, - 120654 - ], - [ - 120656, - 120661 - ], - [ - 120688, - 120712 - ], - [ - 120714, - 120719 - ], - [ - 120746, - 120770 - ], - [ - 120772, - 120777 - ], - [ - 120779 - ], - [ - 122624, - 122633 - ], - [ - 122635, - 122654 - ], - [ - 122661, - 122666 - ], - [ - 125218, - 125251 - ] - ], - "Lm": [ - [ - 688, - 705 - ], - [ - 710, - 721 - ], - [ - 736, - 740 - ], - [ - 748 - ], - [ - 750 - ], - [ - 884 - ], - [ - 890 - ], - [ - 1369 - ], - [ - 1600 - ], - [ - 1765, - 1766 - ], - [ - 2036, - 2037 - ], - [ - 2042 - ], - [ - 2074 - ], - [ - 2084 - ], - [ - 2088 - ], - [ - 2249 - ], - [ - 2417 - ], - [ - 3654 - ], - [ - 3782 - ], - [ - 4348 - ], - [ - 6103 - ], - [ - 6211 - ], - [ - 6823 - ], - [ - 7288, - 7293 - ], - [ - 7468, - 7530 - ], - [ - 7544 - ], - [ - 7579, - 7615 - ], - [ - 8305 - ], - [ - 8319 - ], - [ - 8336, - 8348 - ], - [ - 11388, - 11389 - ], - [ - 11631 - ], - [ - 11823 - ], - [ - 12293 - ], - [ - 12337, - 12341 - ], - [ - 12347 - ], - [ - 12445, - 12446 - ], - [ - 12540, - 12542 - ], - [ - 40981 - ], - [ - 42232, - 42237 - ], - [ - 42508 - ], - [ - 42623 - ], - [ - 42652, - 42653 - ], - [ - 42775, - 42783 - ], - [ - 42864 - ], - [ - 42888 - ], - [ - 42994, - 42996 - ], - [ - 43000, - 43001 - ], - [ - 43471 - ], - [ - 43494 - ], - [ - 43632 - ], - [ - 43741 - ], - [ - 43763, - 43764 - ], - [ - 43868, - 43871 - ], - [ - 43881 - ], - [ - 65392 - ], - [ - 65438, - 65439 - ], - [ - 67456, - 67461 - ], - [ - 67463, - 67504 - ], - [ - 67506, - 67514 - ], - [ - 68942 - ], - [ - 68975 - ], - [ - 92992, - 92995 - ], - [ - 93504, - 93506 - ], - [ - 93547, - 93548 - ], - [ - 94099, - 94111 - ], - [ - 94176, - 94177 - ], - [ - 94179 - ], - [ - 110576, - 110579 - ], - [ - 110581, - 110587 - ], - [ - 110589, - 110590 - ], - [ - 122928, - 122989 - ], - [ - 123191, - 123197 - ], - [ - 124139 - ], - [ - 125259 - ] - ], - "Lo": [ - [ - 170 - ], - [ - 186 - ], - [ - 443 - ], - [ - 448, - 451 - ], - [ - 660 - ], - [ - 1488, - 1514 - ], - [ - 1519, - 1522 - ], - [ - 1568, - 1599 - ], - [ - 1601, - 1610 - ], - [ - 1646, - 1647 - ], - [ - 1649, - 1747 - ], - [ - 1749 - ], - [ - 1774, - 1775 - ], - [ - 1786, - 1788 - ], - [ - 1791 - ], - [ - 1808 - ], - [ - 1810, - 1839 - ], - [ - 1869, - 1957 - ], - [ - 1969 - ], - [ - 1994, - 2026 - ], - [ - 2048, - 2069 - ], - [ - 2112, - 2136 - ], - [ - 2144, - 2154 - ], - [ - 2160, - 2183 - ], - [ - 2185, - 2190 - ], - [ - 2208, - 2248 - ], - [ - 2308, - 2361 - ], - [ - 2365 - ], - [ - 2384 - ], - [ - 2392, - 2401 - ], - [ - 2418, - 2432 - ], - [ - 2437, - 2444 - ], - [ - 2447, - 2448 - ], - [ - 2451, - 2472 - ], - [ - 2474, - 2480 - ], - [ - 2482 - ], - [ - 2486, - 2489 - ], - [ - 2493 - ], - [ - 2510 - ], - [ - 2524, - 2525 - ], - [ - 2527, - 2529 - ], - [ - 2544, - 2545 - ], - [ - 2556 - ], - [ - 2565, - 2570 - ], - [ - 2575, - 2576 - ], - [ - 2579, - 2600 - ], - [ - 2602, - 2608 - ], - [ - 2610, - 2611 - ], - [ - 2613, - 2614 - ], - [ - 2616, - 2617 - ], - [ - 2649, - 2652 - ], - [ - 2654 - ], - [ - 2674, - 2676 - ], - [ - 2693, - 2701 - ], - [ - 2703, - 2705 - ], - [ - 2707, - 2728 - ], - [ - 2730, - 2736 - ], - [ - 2738, - 2739 - ], - [ - 2741, - 2745 - ], - [ - 2749 - ], - [ - 2768 - ], - [ - 2784, - 2785 - ], - [ - 2809 - ], - [ - 2821, - 2828 - ], - [ - 2831, - 2832 - ], - [ - 2835, - 2856 - ], - [ - 2858, - 2864 - ], - [ - 2866, - 2867 - ], - [ - 2869, - 2873 - ], - [ - 2877 - ], - [ - 2908, - 2909 - ], - [ - 2911, - 2913 - ], - [ - 2929 - ], - [ - 2947 - ], - [ - 2949, - 2954 - ], - [ - 2958, - 2960 - ], - [ - 2962, - 2965 - ], - [ - 2969, - 2970 - ], - [ - 2972 - ], - [ - 2974, - 2975 - ], - [ - 2979, - 2980 - ], - [ - 2984, - 2986 - ], - [ - 2990, - 3001 - ], - [ - 3024 - ], - [ - 3077, - 3084 - ], - [ - 3086, - 3088 - ], - [ - 3090, - 3112 - ], - [ - 3114, - 3129 - ], - [ - 3133 - ], - [ - 3160, - 3162 - ], - [ - 3165 - ], - [ - 3168, - 3169 - ], - [ - 3200 - ], - [ - 3205, - 3212 - ], - [ - 3214, - 3216 - ], - [ - 3218, - 3240 - ], - [ - 3242, - 3251 - ], - [ - 3253, - 3257 - ], - [ - 3261 - ], - [ - 3293, - 3294 - ], - [ - 3296, - 3297 - ], - [ - 3313, - 3314 - ], - [ - 3332, - 3340 - ], - [ - 3342, - 3344 - ], - [ - 3346, - 3386 - ], - [ - 3389 - ], - [ - 3406 - ], - [ - 3412, - 3414 - ], - [ - 3423, - 3425 - ], - [ - 3450, - 3455 - ], - [ - 3461, - 3478 - ], - [ - 3482, - 3505 - ], - [ - 3507, - 3515 - ], - [ - 3517 - ], - [ - 3520, - 3526 - ], - [ - 3585, - 3632 - ], - [ - 3634, - 3635 - ], - [ - 3648, - 3653 - ], - [ - 3713, - 3714 - ], - [ - 3716 - ], - [ - 3718, - 3722 - ], - [ - 3724, - 3747 - ], - [ - 3749 - ], - [ - 3751, - 3760 - ], - [ - 3762, - 3763 - ], - [ - 3773 - ], - [ - 3776, - 3780 - ], - [ - 3804, - 3807 - ], - [ - 3840 - ], - [ - 3904, - 3911 - ], - [ - 3913, - 3948 - ], - [ - 3976, - 3980 - ], - [ - 4096, - 4138 - ], - [ - 4159 - ], - [ - 4176, - 4181 - ], - [ - 4186, - 4189 - ], - [ - 4193 - ], - [ - 4197, - 4198 - ], - [ - 4206, - 4208 - ], - [ - 4213, - 4225 - ], - [ - 4238 - ], - [ - 4352, - 4680 - ], - [ - 4682, - 4685 - ], - [ - 4688, - 4694 - ], - [ - 4696 - ], - [ - 4698, - 4701 - ], - [ - 4704, - 4744 - ], - [ - 4746, - 4749 - ], - [ - 4752, - 4784 - ], - [ - 4786, - 4789 - ], - [ - 4792, - 4798 - ], - [ - 4800 - ], - [ - 4802, - 4805 - ], - [ - 4808, - 4822 - ], - [ - 4824, - 4880 - ], - [ - 4882, - 4885 - ], - [ - 4888, - 4954 - ], - [ - 4992, - 5007 - ], - [ - 5121, - 5740 - ], - [ - 5743, - 5759 - ], - [ - 5761, - 5786 - ], - [ - 5792, - 5866 - ], - [ - 5873, - 5880 - ], - [ - 5888, - 5905 - ], - [ - 5919, - 5937 - ], - [ - 5952, - 5969 - ], - [ - 5984, - 5996 - ], - [ - 5998, - 6000 - ], - [ - 6016, - 6067 - ], - [ - 6108 - ], - [ - 6176, - 6210 - ], - [ - 6212, - 6264 - ], - [ - 6272, - 6276 - ], - [ - 6279, - 6312 - ], - [ - 6314 - ], - [ - 6320, - 6389 - ], - [ - 6400, - 6430 - ], - [ - 6480, - 6509 - ], - [ - 6512, - 6516 - ], - [ - 6528, - 6571 - ], - [ - 6576, - 6601 - ], - [ - 6656, - 6678 - ], - [ - 6688, - 6740 - ], - [ - 6917, - 6963 - ], - [ - 6981, - 6988 - ], - [ - 7043, - 7072 - ], - [ - 7086, - 7087 - ], - [ - 7098, - 7141 - ], - [ - 7168, - 7203 - ], - [ - 7245, - 7247 - ], - [ - 7258, - 7287 - ], - [ - 7401, - 7404 - ], - [ - 7406, - 7411 - ], - [ - 7413, - 7414 - ], - [ - 7418 - ], - [ - 8501, - 8504 - ], - [ - 11568, - 11623 - ], - [ - 11648, - 11670 - ], - [ - 11680, - 11686 - ], - [ - 11688, - 11694 - ], - [ - 11696, - 11702 - ], - [ - 11704, - 11710 - ], - [ - 11712, - 11718 - ], - [ - 11720, - 11726 - ], - [ - 11728, - 11734 - ], - [ - 11736, - 11742 - ], - [ - 12294 - ], - [ - 12348 - ], - [ - 12353, - 12438 - ], - [ - 12447 - ], - [ - 12449, - 12538 - ], - [ - 12543 - ], - [ - 12549, - 12591 - ], - [ - 12593, - 12686 - ], - [ - 12704, - 12735 - ], - [ - 12784, - 12799 - ], - [ - 13312, - 19903 - ], - [ - 19968, - 40980 - ], - [ - 40982, - 42124 - ], - [ - 42192, - 42231 - ], - [ - 42240, - 42507 - ], - [ - 42512, - 42527 - ], - [ - 42538, - 42539 - ], - [ - 42606 - ], - [ - 42656, - 42725 - ], - [ - 42895 - ], - [ - 42999 - ], - [ - 43003, - 43009 - ], - [ - 43011, - 43013 - ], - [ - 43015, - 43018 - ], - [ - 43020, - 43042 - ], - [ - 43072, - 43123 - ], - [ - 43138, - 43187 - ], - [ - 43250, - 43255 - ], - [ - 43259 - ], - [ - 43261, - 43262 - ], - [ - 43274, - 43301 - ], - [ - 43312, - 43334 - ], - [ - 43360, - 43388 - ], - [ - 43396, - 43442 - ], - [ - 43488, - 43492 - ], - [ - 43495, - 43503 - ], - [ - 43514, - 43518 - ], - [ - 43520, - 43560 - ], - [ - 43584, - 43586 - ], - [ - 43588, - 43595 - ], - [ - 43616, - 43631 - ], - [ - 43633, - 43638 - ], - [ - 43642 - ], - [ - 43646, - 43695 - ], - [ - 43697 - ], - [ - 43701, - 43702 - ], - [ - 43705, - 43709 - ], - [ - 43712 - ], - [ - 43714 - ], - [ - 43739, - 43740 - ], - [ - 43744, - 43754 - ], - [ - 43762 - ], - [ - 43777, - 43782 - ], - [ - 43785, - 43790 - ], - [ - 43793, - 43798 - ], - [ - 43808, - 43814 - ], - [ - 43816, - 43822 - ], - [ - 43968, - 44002 - ], - [ - 44032, - 55203 - ], - [ - 55216, - 55238 - ], - [ - 55243, - 55291 - ], - [ - 63744, - 64109 - ], - [ - 64112, - 64217 - ], - [ - 64285 - ], - [ - 64287, - 64296 - ], - [ - 64298, - 64310 - ], - [ - 64312, - 64316 - ], - [ - 64318 - ], - [ - 64320, - 64321 - ], - [ - 64323, - 64324 - ], - [ - 64326, - 64433 - ], - [ - 64467, - 64829 - ], - [ - 64848, - 64911 - ], - [ - 64914, - 64967 - ], - [ - 65008, - 65019 - ], - [ - 65136, - 65140 - ], - [ - 65142, - 65276 - ], - [ - 65382, - 65391 - ], - [ - 65393, - 65437 - ], - [ - 65440, - 65470 - ], - [ - 65474, - 65479 - ], - [ - 65482, - 65487 - ], - [ - 65490, - 65495 - ], - [ - 65498, - 65500 - ], - [ - 65536, - 65547 - ], - [ - 65549, - 65574 - ], - [ - 65576, - 65594 - ], - [ - 65596, - 65597 - ], - [ - 65599, - 65613 - ], - [ - 65616, - 65629 - ], - [ - 65664, - 65786 - ], - [ - 66176, - 66204 - ], - [ - 66208, - 66256 - ], - [ - 66304, - 66335 - ], - [ - 66349, - 66368 - ], - [ - 66370, - 66377 - ], - [ - 66384, - 66421 - ], - [ - 66432, - 66461 - ], - [ - 66464, - 66499 - ], - [ - 66504, - 66511 - ], - [ - 66640, - 66717 - ], - [ - 66816, - 66855 - ], - [ - 66864, - 66915 - ], - [ - 67008, - 67059 - ], - [ - 67072, - 67382 - ], - [ - 67392, - 67413 - ], - [ - 67424, - 67431 - ], - [ - 67584, - 67589 - ], - [ - 67592 - ], - [ - 67594, - 67637 - ], - [ - 67639, - 67640 - ], - [ - 67644 - ], - [ - 67647, - 67669 - ], - [ - 67680, - 67702 - ], - [ - 67712, - 67742 - ], - [ - 67808, - 67826 - ], - [ - 67828, - 67829 - ], - [ - 67840, - 67861 - ], - [ - 67872, - 67897 - ], - [ - 67968, - 68023 - ], - [ - 68030, - 68031 - ], - [ - 68096 - ], - [ - 68112, - 68115 - ], - [ - 68117, - 68119 - ], - [ - 68121, - 68149 - ], - [ - 68192, - 68220 - ], - [ - 68224, - 68252 - ], - [ - 68288, - 68295 - ], - [ - 68297, - 68324 - ], - [ - 68352, - 68405 - ], - [ - 68416, - 68437 - ], - [ - 68448, - 68466 - ], - [ - 68480, - 68497 - ], - [ - 68608, - 68680 - ], - [ - 68864, - 68899 - ], - [ - 68938, - 68941 - ], - [ - 68943 - ], - [ - 69248, - 69289 - ], - [ - 69296, - 69297 - ], - [ - 69314, - 69316 - ], - [ - 69376, - 69404 - ], - [ - 69415 - ], - [ - 69424, - 69445 - ], - [ - 69488, - 69505 - ], - [ - 69552, - 69572 - ], - [ - 69600, - 69622 - ], - [ - 69635, - 69687 - ], - [ - 69745, - 69746 - ], - [ - 69749 - ], - [ - 69763, - 69807 - ], - [ - 69840, - 69864 - ], - [ - 69891, - 69926 - ], - [ - 69956 - ], - [ - 69959 - ], - [ - 69968, - 70002 - ], - [ - 70006 - ], - [ - 70019, - 70066 - ], - [ - 70081, - 70084 - ], - [ - 70106 - ], - [ - 70108 - ], - [ - 70144, - 70161 - ], - [ - 70163, - 70187 - ], - [ - 70207, - 70208 - ], - [ - 70272, - 70278 - ], - [ - 70280 - ], - [ - 70282, - 70285 - ], - [ - 70287, - 70301 - ], - [ - 70303, - 70312 - ], - [ - 70320, - 70366 - ], - [ - 70405, - 70412 - ], - [ - 70415, - 70416 - ], - [ - 70419, - 70440 - ], - [ - 70442, - 70448 - ], - [ - 70450, - 70451 - ], - [ - 70453, - 70457 - ], - [ - 70461 - ], - [ - 70480 - ], - [ - 70493, - 70497 - ], - [ - 70528, - 70537 - ], - [ - 70539 - ], - [ - 70542 - ], - [ - 70544, - 70581 - ], - [ - 70583 - ], - [ - 70609 - ], - [ - 70611 - ], - [ - 70656, - 70708 - ], - [ - 70727, - 70730 - ], - [ - 70751, - 70753 - ], - [ - 70784, - 70831 - ], - [ - 70852, - 70853 - ], - [ - 70855 - ], - [ - 71040, - 71086 - ], - [ - 71128, - 71131 - ], - [ - 71168, - 71215 - ], - [ - 71236 - ], - [ - 71296, - 71338 - ], - [ - 71352 - ], - [ - 71424, - 71450 - ], - [ - 71488, - 71494 - ], - [ - 71680, - 71723 - ], - [ - 71935, - 71942 - ], - [ - 71945 - ], - [ - 71948, - 71955 - ], - [ - 71957, - 71958 - ], - [ - 71960, - 71983 - ], - [ - 71999 - ], - [ - 72001 - ], - [ - 72096, - 72103 - ], - [ - 72106, - 72144 - ], - [ - 72161 - ], - [ - 72163 - ], - [ - 72192 - ], - [ - 72203, - 72242 - ], - [ - 72250 - ], - [ - 72272 - ], - [ - 72284, - 72329 - ], - [ - 72349 - ], - [ - 72368, - 72440 - ], - [ - 72640, - 72672 - ], - [ - 72704, - 72712 - ], - [ - 72714, - 72750 - ], - [ - 72768 - ], - [ - 72818, - 72847 - ], - [ - 72960, - 72966 - ], - [ - 72968, - 72969 - ], - [ - 72971, - 73008 - ], - [ - 73030 - ], - [ - 73056, - 73061 - ], - [ - 73063, - 73064 - ], - [ - 73066, - 73097 - ], - [ - 73112 - ], - [ - 73440, - 73458 - ], - [ - 73474 - ], - [ - 73476, - 73488 - ], - [ - 73490, - 73523 - ], - [ - 73648 - ], - [ - 73728, - 74649 - ], - [ - 74880, - 75075 - ], - [ - 77712, - 77808 - ], - [ - 77824, - 78895 - ], - [ - 78913, - 78918 - ], - [ - 78944, - 82938 - ], - [ - 82944, - 83526 - ], - [ - 90368, - 90397 - ], - [ - 92160, - 92728 - ], - [ - 92736, - 92766 - ], - [ - 92784, - 92862 - ], - [ - 92880, - 92909 - ], - [ - 92928, - 92975 - ], - [ - 93027, - 93047 - ], - [ - 93053, - 93071 - ], - [ - 93507, - 93546 - ], - [ - 93952, - 94026 - ], - [ - 94032 - ], - [ - 94208, - 100343 - ], - [ - 100352, - 101589 - ], - [ - 101631, - 101640 - ], - [ - 110592, - 110882 - ], - [ - 110898 - ], - [ - 110928, - 110930 - ], - [ - 110933 - ], - [ - 110948, - 110951 - ], - [ - 110960, - 111355 - ], - [ - 113664, - 113770 - ], - [ - 113776, - 113788 - ], - [ - 113792, - 113800 - ], - [ - 113808, - 113817 - ], - [ - 122634 - ], - [ - 123136, - 123180 - ], - [ - 123214 - ], - [ - 123536, - 123565 - ], - [ - 123584, - 123627 - ], - [ - 124112, - 124138 - ], - [ - 124368, - 124397 - ], - [ - 124400 - ], - [ - 124896, - 124902 - ], - [ - 124904, - 124907 - ], - [ - 124909, - 124910 - ], - [ - 124912, - 124926 - ], - [ - 124928, - 125124 - ], - [ - 126464, - 126467 - ], - [ - 126469, - 126495 - ], - [ - 126497, - 126498 - ], - [ - 126500 - ], - [ - 126503 - ], - [ - 126505, - 126514 - ], - [ - 126516, - 126519 - ], - [ - 126521 - ], - [ - 126523 - ], - [ - 126530 - ], - [ - 126535 - ], - [ - 126537 - ], - [ - 126539 - ], - [ - 126541, - 126543 - ], - [ - 126545, - 126546 - ], - [ - 126548 - ], - [ - 126551 - ], - [ - 126553 - ], - [ - 126555 - ], - [ - 126557 - ], - [ - 126559 - ], - [ - 126561, - 126562 - ], - [ - 126564 - ], - [ - 126567, - 126570 - ], - [ - 126572, - 126578 - ], - [ - 126580, - 126583 - ], - [ - 126585, - 126588 - ], - [ - 126590 - ], - [ - 126592, - 126601 - ], - [ - 126603, - 126619 - ], - [ - 126625, - 126627 - ], - [ - 126629, - 126633 - ], - [ - 126635, - 126651 - ], - [ - 131072, - 173791 - ], - [ - 173824, - 177977 - ], - [ - 177984, - 178205 - ], - [ - 178208, - 183969 - ], - [ - 183984, - 191456 - ], - [ - 191472, - 192093 - ], - [ - 194560, - 195101 - ], - [ - 196608, - 201546 - ], - [ - 201552, - 205743 - ] - ], - "Lt": [ - [ - 453 - ], - [ - 456 - ], - [ - 459 - ], - [ - 498 - ], - [ - 8072, - 8079 - ], - [ - 8088, - 8095 - ], - [ - 8104, - 8111 - ], - [ - 8124 - ], - [ - 8140 - ], - [ - 8188 - ] - ], - "Lu": [ - [ - 65, - 90 - ], - [ - 192, - 214 - ], - [ - 216, - 222 - ], - [ - 256 - ], - [ - 258 - ], - [ - 260 - ], - [ - 262 - ], - [ - 264 - ], - [ - 266 - ], - [ - 268 - ], - [ - 270 - ], - [ - 272 - ], - [ - 274 - ], - [ - 276 - ], - [ - 278 - ], - [ - 280 - ], - [ - 282 - ], - [ - 284 - ], - [ - 286 - ], - [ - 288 - ], - [ - 290 - ], - [ - 292 - ], - [ - 294 - ], - [ - 296 - ], - [ - 298 - ], - [ - 300 - ], - [ - 302 - ], - [ - 304 - ], - [ - 306 - ], - [ - 308 - ], - [ - 310 - ], - [ - 313 - ], - [ - 315 - ], - [ - 317 - ], - [ - 319 - ], - [ - 321 - ], - [ - 323 - ], - [ - 325 - ], - [ - 327 - ], - [ - 330 - ], - [ - 332 - ], - [ - 334 - ], - [ - 336 - ], - [ - 338 - ], - [ - 340 - ], - [ - 342 - ], - [ - 344 - ], - [ - 346 - ], - [ - 348 - ], - [ - 350 - ], - [ - 352 - ], - [ - 354 - ], - [ - 356 - ], - [ - 358 - ], - [ - 360 - ], - [ - 362 - ], - [ - 364 - ], - [ - 366 - ], - [ - 368 - ], - [ - 370 - ], - [ - 372 - ], - [ - 374 - ], - [ - 376, - 377 - ], - [ - 379 - ], - [ - 381 - ], - [ - 385, - 386 - ], - [ - 388 - ], - [ - 390, - 391 - ], - [ - 393, - 395 - ], - [ - 398, - 401 - ], - [ - 403, - 404 - ], - [ - 406, - 408 - ], - [ - 412, - 413 - ], - [ - 415, - 416 - ], - [ - 418 - ], - [ - 420 - ], - [ - 422, - 423 - ], - [ - 425 - ], - [ - 428 - ], - [ - 430, - 431 - ], - [ - 433, - 435 - ], - [ - 437 - ], - [ - 439, - 440 - ], - [ - 444 - ], - [ - 452 - ], - [ - 455 - ], - [ - 458 - ], - [ - 461 - ], - [ - 463 - ], - [ - 465 - ], - [ - 467 - ], - [ - 469 - ], - [ - 471 - ], - [ - 473 - ], - [ - 475 - ], - [ - 478 - ], - [ - 480 - ], - [ - 482 - ], - [ - 484 - ], - [ - 486 - ], - [ - 488 - ], - [ - 490 - ], - [ - 492 - ], - [ - 494 - ], - [ - 497 - ], - [ - 500 - ], - [ - 502, - 504 - ], - [ - 506 - ], - [ - 508 - ], - [ - 510 - ], - [ - 512 - ], - [ - 514 - ], - [ - 516 - ], - [ - 518 - ], - [ - 520 - ], - [ - 522 - ], - [ - 524 - ], - [ - 526 - ], - [ - 528 - ], - [ - 530 - ], - [ - 532 - ], - [ - 534 - ], - [ - 536 - ], - [ - 538 - ], - [ - 540 - ], - [ - 542 - ], - [ - 544 - ], - [ - 546 - ], - [ - 548 - ], - [ - 550 - ], - [ - 552 - ], - [ - 554 - ], - [ - 556 - ], - [ - 558 - ], - [ - 560 - ], - [ - 562 - ], - [ - 570, - 571 - ], - [ - 573, - 574 - ], - [ - 577 - ], - [ - 579, - 582 - ], - [ - 584 - ], - [ - 586 - ], - [ - 588 - ], - [ - 590 - ], - [ - 880 - ], - [ - 882 - ], - [ - 886 - ], - [ - 895 - ], - [ - 902 - ], - [ - 904, - 906 - ], - [ - 908 - ], - [ - 910, - 911 - ], - [ - 913, - 929 - ], - [ - 931, - 939 - ], - [ - 975 - ], - [ - 978, - 980 - ], - [ - 984 - ], - [ - 986 - ], - [ - 988 - ], - [ - 990 - ], - [ - 992 - ], - [ - 994 - ], - [ - 996 - ], - [ - 998 - ], - [ - 1000 - ], - [ - 1002 - ], - [ - 1004 - ], - [ - 1006 - ], - [ - 1012 - ], - [ - 1015 - ], - [ - 1017, - 1018 - ], - [ - 1021, - 1071 - ], - [ - 1120 - ], - [ - 1122 - ], - [ - 1124 - ], - [ - 1126 - ], - [ - 1128 - ], - [ - 1130 - ], - [ - 1132 - ], - [ - 1134 - ], - [ - 1136 - ], - [ - 1138 - ], - [ - 1140 - ], - [ - 1142 - ], - [ - 1144 - ], - [ - 1146 - ], - [ - 1148 - ], - [ - 1150 - ], - [ - 1152 - ], - [ - 1162 - ], - [ - 1164 - ], - [ - 1166 - ], - [ - 1168 - ], - [ - 1170 - ], - [ - 1172 - ], - [ - 1174 - ], - [ - 1176 - ], - [ - 1178 - ], - [ - 1180 - ], - [ - 1182 - ], - [ - 1184 - ], - [ - 1186 - ], - [ - 1188 - ], - [ - 1190 - ], - [ - 1192 - ], - [ - 1194 - ], - [ - 1196 - ], - [ - 1198 - ], - [ - 1200 - ], - [ - 1202 - ], - [ - 1204 - ], - [ - 1206 - ], - [ - 1208 - ], - [ - 1210 - ], - [ - 1212 - ], - [ - 1214 - ], - [ - 1216, - 1217 - ], - [ - 1219 - ], - [ - 1221 - ], - [ - 1223 - ], - [ - 1225 - ], - [ - 1227 - ], - [ - 1229 - ], - [ - 1232 - ], - [ - 1234 - ], - [ - 1236 - ], - [ - 1238 - ], - [ - 1240 - ], - [ - 1242 - ], - [ - 1244 - ], - [ - 1246 - ], - [ - 1248 - ], - [ - 1250 - ], - [ - 1252 - ], - [ - 1254 - ], - [ - 1256 - ], - [ - 1258 - ], - [ - 1260 - ], - [ - 1262 - ], - [ - 1264 - ], - [ - 1266 - ], - [ - 1268 - ], - [ - 1270 - ], - [ - 1272 - ], - [ - 1274 - ], - [ - 1276 - ], - [ - 1278 - ], - [ - 1280 - ], - [ - 1282 - ], - [ - 1284 - ], - [ - 1286 - ], - [ - 1288 - ], - [ - 1290 - ], - [ - 1292 - ], - [ - 1294 - ], - [ - 1296 - ], - [ - 1298 - ], - [ - 1300 - ], - [ - 1302 - ], - [ - 1304 - ], - [ - 1306 - ], - [ - 1308 - ], - [ - 1310 - ], - [ - 1312 - ], - [ - 1314 - ], - [ - 1316 - ], - [ - 1318 - ], - [ - 1320 - ], - [ - 1322 - ], - [ - 1324 - ], - [ - 1326 - ], - [ - 1329, - 1366 - ], - [ - 4256, - 4293 - ], - [ - 4295 - ], - [ - 4301 - ], - [ - 5024, - 5109 - ], - [ - 7305 - ], - [ - 7312, - 7354 - ], - [ - 7357, - 7359 - ], - [ - 7680 - ], - [ - 7682 - ], - [ - 7684 - ], - [ - 7686 - ], - [ - 7688 - ], - [ - 7690 - ], - [ - 7692 - ], - [ - 7694 - ], - [ - 7696 - ], - [ - 7698 - ], - [ - 7700 - ], - [ - 7702 - ], - [ - 7704 - ], - [ - 7706 - ], - [ - 7708 - ], - [ - 7710 - ], - [ - 7712 - ], - [ - 7714 - ], - [ - 7716 - ], - [ - 7718 - ], - [ - 7720 - ], - [ - 7722 - ], - [ - 7724 - ], - [ - 7726 - ], - [ - 7728 - ], - [ - 7730 - ], - [ - 7732 - ], - [ - 7734 - ], - [ - 7736 - ], - [ - 7738 - ], - [ - 7740 - ], - [ - 7742 - ], - [ - 7744 - ], - [ - 7746 - ], - [ - 7748 - ], - [ - 7750 - ], - [ - 7752 - ], - [ - 7754 - ], - [ - 7756 - ], - [ - 7758 - ], - [ - 7760 - ], - [ - 7762 - ], - [ - 7764 - ], - [ - 7766 - ], - [ - 7768 - ], - [ - 7770 - ], - [ - 7772 - ], - [ - 7774 - ], - [ - 7776 - ], - [ - 7778 - ], - [ - 7780 - ], - [ - 7782 - ], - [ - 7784 - ], - [ - 7786 - ], - [ - 7788 - ], - [ - 7790 - ], - [ - 7792 - ], - [ - 7794 - ], - [ - 7796 - ], - [ - 7798 - ], - [ - 7800 - ], - [ - 7802 - ], - [ - 7804 - ], - [ - 7806 - ], - [ - 7808 - ], - [ - 7810 - ], - [ - 7812 - ], - [ - 7814 - ], - [ - 7816 - ], - [ - 7818 - ], - [ - 7820 - ], - [ - 7822 - ], - [ - 7824 - ], - [ - 7826 - ], - [ - 7828 - ], - [ - 7838 - ], - [ - 7840 - ], - [ - 7842 - ], - [ - 7844 - ], - [ - 7846 - ], - [ - 7848 - ], - [ - 7850 - ], - [ - 7852 - ], - [ - 7854 - ], - [ - 7856 - ], - [ - 7858 - ], - [ - 7860 - ], - [ - 7862 - ], - [ - 7864 - ], - [ - 7866 - ], - [ - 7868 - ], - [ - 7870 - ], - [ - 7872 - ], - [ - 7874 - ], - [ - 7876 - ], - [ - 7878 - ], - [ - 7880 - ], - [ - 7882 - ], - [ - 7884 - ], - [ - 7886 - ], - [ - 7888 - ], - [ - 7890 - ], - [ - 7892 - ], - [ - 7894 - ], - [ - 7896 - ], - [ - 7898 - ], - [ - 7900 - ], - [ - 7902 - ], - [ - 7904 - ], - [ - 7906 - ], - [ - 7908 - ], - [ - 7910 - ], - [ - 7912 - ], - [ - 7914 - ], - [ - 7916 - ], - [ - 7918 - ], - [ - 7920 - ], - [ - 7922 - ], - [ - 7924 - ], - [ - 7926 - ], - [ - 7928 - ], - [ - 7930 - ], - [ - 7932 - ], - [ - 7934 - ], - [ - 7944, - 7951 - ], - [ - 7960, - 7965 - ], - [ - 7976, - 7983 - ], - [ - 7992, - 7999 - ], - [ - 8008, - 8013 - ], - [ - 8025 - ], - [ - 8027 - ], - [ - 8029 - ], - [ - 8031 - ], - [ - 8040, - 8047 - ], - [ - 8120, - 8123 - ], - [ - 8136, - 8139 - ], - [ - 8152, - 8155 - ], - [ - 8168, - 8172 - ], - [ - 8184, - 8187 - ], - [ - 8450 - ], - [ - 8455 - ], - [ - 8459, - 8461 - ], - [ - 8464, - 8466 - ], - [ - 8469 - ], - [ - 8473, - 8477 - ], - [ - 8484 - ], - [ - 8486 - ], - [ - 8488 - ], - [ - 8490, - 8493 - ], - [ - 8496, - 8499 - ], - [ - 8510, - 8511 - ], - [ - 8517 - ], - [ - 8579 - ], - [ - 11264, - 11311 - ], - [ - 11360 - ], - [ - 11362, - 11364 - ], - [ - 11367 - ], - [ - 11369 - ], - [ - 11371 - ], - [ - 11373, - 11376 - ], - [ - 11378 - ], - [ - 11381 - ], - [ - 11390, - 11392 - ], - [ - 11394 - ], - [ - 11396 - ], - [ - 11398 - ], - [ - 11400 - ], - [ - 11402 - ], - [ - 11404 - ], - [ - 11406 - ], - [ - 11408 - ], - [ - 11410 - ], - [ - 11412 - ], - [ - 11414 - ], - [ - 11416 - ], - [ - 11418 - ], - [ - 11420 - ], - [ - 11422 - ], - [ - 11424 - ], - [ - 11426 - ], - [ - 11428 - ], - [ - 11430 - ], - [ - 11432 - ], - [ - 11434 - ], - [ - 11436 - ], - [ - 11438 - ], - [ - 11440 - ], - [ - 11442 - ], - [ - 11444 - ], - [ - 11446 - ], - [ - 11448 - ], - [ - 11450 - ], - [ - 11452 - ], - [ - 11454 - ], - [ - 11456 - ], - [ - 11458 - ], - [ - 11460 - ], - [ - 11462 - ], - [ - 11464 - ], - [ - 11466 - ], - [ - 11468 - ], - [ - 11470 - ], - [ - 11472 - ], - [ - 11474 - ], - [ - 11476 - ], - [ - 11478 - ], - [ - 11480 - ], - [ - 11482 - ], - [ - 11484 - ], - [ - 11486 - ], - [ - 11488 - ], - [ - 11490 - ], - [ - 11499 - ], - [ - 11501 - ], - [ - 11506 - ], - [ - 42560 - ], - [ - 42562 - ], - [ - 42564 - ], - [ - 42566 - ], - [ - 42568 - ], - [ - 42570 - ], - [ - 42572 - ], - [ - 42574 - ], - [ - 42576 - ], - [ - 42578 - ], - [ - 42580 - ], - [ - 42582 - ], - [ - 42584 - ], - [ - 42586 - ], - [ - 42588 - ], - [ - 42590 - ], - [ - 42592 - ], - [ - 42594 - ], - [ - 42596 - ], - [ - 42598 - ], - [ - 42600 - ], - [ - 42602 - ], - [ - 42604 - ], - [ - 42624 - ], - [ - 42626 - ], - [ - 42628 - ], - [ - 42630 - ], - [ - 42632 - ], - [ - 42634 - ], - [ - 42636 - ], - [ - 42638 - ], - [ - 42640 - ], - [ - 42642 - ], - [ - 42644 - ], - [ - 42646 - ], - [ - 42648 - ], - [ - 42650 - ], - [ - 42786 - ], - [ - 42788 - ], - [ - 42790 - ], - [ - 42792 - ], - [ - 42794 - ], - [ - 42796 - ], - [ - 42798 - ], - [ - 42802 - ], - [ - 42804 - ], - [ - 42806 - ], - [ - 42808 - ], - [ - 42810 - ], - [ - 42812 - ], - [ - 42814 - ], - [ - 42816 - ], - [ - 42818 - ], - [ - 42820 - ], - [ - 42822 - ], - [ - 42824 - ], - [ - 42826 - ], - [ - 42828 - ], - [ - 42830 - ], - [ - 42832 - ], - [ - 42834 - ], - [ - 42836 - ], - [ - 42838 - ], - [ - 42840 - ], - [ - 42842 - ], - [ - 42844 - ], - [ - 42846 - ], - [ - 42848 - ], - [ - 42850 - ], - [ - 42852 - ], - [ - 42854 - ], - [ - 42856 - ], - [ - 42858 - ], - [ - 42860 - ], - [ - 42862 - ], - [ - 42873 - ], - [ - 42875 - ], - [ - 42877, - 42878 - ], - [ - 42880 - ], - [ - 42882 - ], - [ - 42884 - ], - [ - 42886 - ], - [ - 42891 - ], - [ - 42893 - ], - [ - 42896 - ], - [ - 42898 - ], - [ - 42902 - ], - [ - 42904 - ], - [ - 42906 - ], - [ - 42908 - ], - [ - 42910 - ], - [ - 42912 - ], - [ - 42914 - ], - [ - 42916 - ], - [ - 42918 - ], - [ - 42920 - ], - [ - 42922, - 42926 - ], - [ - 42928, - 42932 - ], - [ - 42934 - ], - [ - 42936 - ], - [ - 42938 - ], - [ - 42940 - ], - [ - 42942 - ], - [ - 42944 - ], - [ - 42946 - ], - [ - 42948, - 42951 - ], - [ - 42953 - ], - [ - 42955, - 42956 - ], - [ - 42960 - ], - [ - 42966 - ], - [ - 42968 - ], - [ - 42970 - ], - [ - 42972 - ], - [ - 42997 - ], - [ - 65313, - 65338 - ], - [ - 66560, - 66599 - ], - [ - 66736, - 66771 - ], - [ - 66928, - 66938 - ], - [ - 66940, - 66954 - ], - [ - 66956, - 66962 - ], - [ - 66964, - 66965 - ], - [ - 68736, - 68786 - ], - [ - 68944, - 68965 - ], - [ - 71840, - 71871 - ], - [ - 93760, - 93791 - ], - [ - 119808, - 119833 - ], - [ - 119860, - 119885 - ], - [ - 119912, - 119937 - ], - [ - 119964 - ], - [ - 119966, - 119967 - ], - [ - 119970 - ], - [ - 119973, - 119974 - ], - [ - 119977, - 119980 - ], - [ - 119982, - 119989 - ], - [ - 120016, - 120041 - ], - [ - 120068, - 120069 - ], - [ - 120071, - 120074 - ], - [ - 120077, - 120084 - ], - [ - 120086, - 120092 - ], - [ - 120120, - 120121 - ], - [ - 120123, - 120126 - ], - [ - 120128, - 120132 - ], - [ - 120134 - ], - [ - 120138, - 120144 - ], - [ - 120172, - 120197 - ], - [ - 120224, - 120249 - ], - [ - 120276, - 120301 - ], - [ - 120328, - 120353 - ], - [ - 120380, - 120405 - ], - [ - 120432, - 120457 - ], - [ - 120488, - 120512 - ], - [ - 120546, - 120570 - ], - [ - 120604, - 120628 - ], - [ - 120662, - 120686 - ], - [ - 120720, - 120744 - ], - [ - 120778 - ], - [ - 125184, - 125217 - ] - ] -}; -ilib.data.ctype_m = { - "Mc": [ - [ - 2307 - ], - [ - 2363 - ], - [ - 2366, - 2368 - ], - [ - 2377, - 2380 - ], - [ - 2382, - 2383 - ], - [ - 2434, - 2435 - ], - [ - 2494, - 2496 - ], - [ - 2503, - 2504 - ], - [ - 2507, - 2508 - ], - [ - 2519 - ], - [ - 2563 - ], - [ - 2622, - 2624 - ], - [ - 2691 - ], - [ - 2750, - 2752 - ], - [ - 2761 - ], - [ - 2763, - 2764 - ], - [ - 2818, - 2819 - ], - [ - 2878 - ], - [ - 2880 - ], - [ - 2887, - 2888 - ], - [ - 2891, - 2892 - ], - [ - 2903 - ], - [ - 3006, - 3007 - ], - [ - 3009, - 3010 - ], - [ - 3014, - 3016 - ], - [ - 3018, - 3020 - ], - [ - 3031 - ], - [ - 3073, - 3075 - ], - [ - 3137, - 3140 - ], - [ - 3202, - 3203 - ], - [ - 3262 - ], - [ - 3264, - 3268 - ], - [ - 3271, - 3272 - ], - [ - 3274, - 3275 - ], - [ - 3285, - 3286 - ], - [ - 3315 - ], - [ - 3330, - 3331 - ], - [ - 3390, - 3392 - ], - [ - 3398, - 3400 - ], - [ - 3402, - 3404 - ], - [ - 3415 - ], - [ - 3458, - 3459 - ], - [ - 3535, - 3537 - ], - [ - 3544, - 3551 - ], - [ - 3570, - 3571 - ], - [ - 3902, - 3903 - ], - [ - 3967 - ], - [ - 4139, - 4140 - ], - [ - 4145 - ], - [ - 4152 - ], - [ - 4155, - 4156 - ], - [ - 4182, - 4183 - ], - [ - 4194, - 4196 - ], - [ - 4199, - 4205 - ], - [ - 4227, - 4228 - ], - [ - 4231, - 4236 - ], - [ - 4239 - ], - [ - 4250, - 4252 - ], - [ - 5909 - ], - [ - 5940 - ], - [ - 6070 - ], - [ - 6078, - 6085 - ], - [ - 6087, - 6088 - ], - [ - 6435, - 6438 - ], - [ - 6441, - 6443 - ], - [ - 6448, - 6449 - ], - [ - 6451, - 6456 - ], - [ - 6681, - 6682 - ], - [ - 6741 - ], - [ - 6743 - ], - [ - 6753 - ], - [ - 6755, - 6756 - ], - [ - 6765, - 6770 - ], - [ - 6916 - ], - [ - 6965 - ], - [ - 6971 - ], - [ - 6973, - 6977 - ], - [ - 6979, - 6980 - ], - [ - 7042 - ], - [ - 7073 - ], - [ - 7078, - 7079 - ], - [ - 7082 - ], - [ - 7143 - ], - [ - 7146, - 7148 - ], - [ - 7150 - ], - [ - 7154, - 7155 - ], - [ - 7204, - 7211 - ], - [ - 7220, - 7221 - ], - [ - 7393 - ], - [ - 7415 - ], - [ - 12334, - 12335 - ], - [ - 43043, - 43044 - ], - [ - 43047 - ], - [ - 43136, - 43137 - ], - [ - 43188, - 43203 - ], - [ - 43346, - 43347 - ], - [ - 43395 - ], - [ - 43444, - 43445 - ], - [ - 43450, - 43451 - ], - [ - 43454, - 43456 - ], - [ - 43567, - 43568 - ], - [ - 43571, - 43572 - ], - [ - 43597 - ], - [ - 43643 - ], - [ - 43645 - ], - [ - 43755 - ], - [ - 43758, - 43759 - ], - [ - 43765 - ], - [ - 44003, - 44004 - ], - [ - 44006, - 44007 - ], - [ - 44009, - 44010 - ], - [ - 44012 - ], - [ - 69632 - ], - [ - 69634 - ], - [ - 69762 - ], - [ - 69808, - 69810 - ], - [ - 69815, - 69816 - ], - [ - 69932 - ], - [ - 69957, - 69958 - ], - [ - 70018 - ], - [ - 70067, - 70069 - ], - [ - 70079, - 70080 - ], - [ - 70094 - ], - [ - 70188, - 70190 - ], - [ - 70194, - 70195 - ], - [ - 70197 - ], - [ - 70368, - 70370 - ], - [ - 70402, - 70403 - ], - [ - 70462, - 70463 - ], - [ - 70465, - 70468 - ], - [ - 70471, - 70472 - ], - [ - 70475, - 70477 - ], - [ - 70487 - ], - [ - 70498, - 70499 - ], - [ - 70584, - 70586 - ], - [ - 70594 - ], - [ - 70597 - ], - [ - 70599, - 70602 - ], - [ - 70604, - 70605 - ], - [ - 70607 - ], - [ - 70709, - 70711 - ], - [ - 70720, - 70721 - ], - [ - 70725 - ], - [ - 70832, - 70834 - ], - [ - 70841 - ], - [ - 70843, - 70846 - ], - [ - 70849 - ], - [ - 71087, - 71089 - ], - [ - 71096, - 71099 - ], - [ - 71102 - ], - [ - 71216, - 71218 - ], - [ - 71227, - 71228 - ], - [ - 71230 - ], - [ - 71340 - ], - [ - 71342, - 71343 - ], - [ - 71350 - ], - [ - 71454 - ], - [ - 71456, - 71457 - ], - [ - 71462 - ], - [ - 71724, - 71726 - ], - [ - 71736 - ], - [ - 71984, - 71989 - ], - [ - 71991, - 71992 - ], - [ - 71997 - ], - [ - 72000 - ], - [ - 72002 - ], - [ - 72145, - 72147 - ], - [ - 72156, - 72159 - ], - [ - 72164 - ], - [ - 72249 - ], - [ - 72279, - 72280 - ], - [ - 72343 - ], - [ - 72751 - ], - [ - 72766 - ], - [ - 72873 - ], - [ - 72881 - ], - [ - 72884 - ], - [ - 73098, - 73102 - ], - [ - 73107, - 73108 - ], - [ - 73110 - ], - [ - 73461, - 73462 - ], - [ - 73475 - ], - [ - 73524, - 73525 - ], - [ - 73534, - 73535 - ], - [ - 73537 - ], - [ - 90410, - 90412 - ], - [ - 94033, - 94087 - ], - [ - 94192, - 94193 - ], - [ - 119141, - 119142 - ], - [ - 119149, - 119154 - ] - ], - "Me": [ - [ - 1160, - 1161 - ], - [ - 6846 - ], - [ - 8413, - 8416 - ], - [ - 8418, - 8420 - ], - [ - 42608, - 42610 - ] - ], - "Mn": [ - [ - 768, - 879 - ], - [ - 1155, - 1159 - ], - [ - 1425, - 1469 - ], - [ - 1471 - ], - [ - 1473, - 1474 - ], - [ - 1476, - 1477 - ], - [ - 1479 - ], - [ - 1552, - 1562 - ], - [ - 1611, - 1631 - ], - [ - 1648 - ], - [ - 1750, - 1756 - ], - [ - 1759, - 1764 - ], - [ - 1767, - 1768 - ], - [ - 1770, - 1773 - ], - [ - 1809 - ], - [ - 1840, - 1866 - ], - [ - 1958, - 1968 - ], - [ - 2027, - 2035 - ], - [ - 2045 - ], - [ - 2070, - 2073 - ], - [ - 2075, - 2083 - ], - [ - 2085, - 2087 - ], - [ - 2089, - 2093 - ], - [ - 2137, - 2139 - ], - [ - 2199, - 2207 - ], - [ - 2250, - 2273 - ], - [ - 2275, - 2306 - ], - [ - 2362 - ], - [ - 2364 - ], - [ - 2369, - 2376 - ], - [ - 2381 - ], - [ - 2385, - 2391 - ], - [ - 2402, - 2403 - ], - [ - 2433 - ], - [ - 2492 - ], - [ - 2497, - 2500 - ], - [ - 2509 - ], - [ - 2530, - 2531 - ], - [ - 2558 - ], - [ - 2561, - 2562 - ], - [ - 2620 - ], - [ - 2625, - 2626 - ], - [ - 2631, - 2632 - ], - [ - 2635, - 2637 - ], - [ - 2641 - ], - [ - 2672, - 2673 - ], - [ - 2677 - ], - [ - 2689, - 2690 - ], - [ - 2748 - ], - [ - 2753, - 2757 - ], - [ - 2759, - 2760 - ], - [ - 2765 - ], - [ - 2786, - 2787 - ], - [ - 2810, - 2815 - ], - [ - 2817 - ], - [ - 2876 - ], - [ - 2879 - ], - [ - 2881, - 2884 - ], - [ - 2893 - ], - [ - 2901, - 2902 - ], - [ - 2914, - 2915 - ], - [ - 2946 - ], - [ - 3008 - ], - [ - 3021 - ], - [ - 3072 - ], - [ - 3076 - ], - [ - 3132 - ], - [ - 3134, - 3136 - ], - [ - 3142, - 3144 - ], - [ - 3146, - 3149 - ], - [ - 3157, - 3158 - ], - [ - 3170, - 3171 - ], - [ - 3201 - ], - [ - 3260 - ], - [ - 3263 - ], - [ - 3270 - ], - [ - 3276, - 3277 - ], - [ - 3298, - 3299 - ], - [ - 3328, - 3329 - ], - [ - 3387, - 3388 - ], - [ - 3393, - 3396 - ], - [ - 3405 - ], - [ - 3426, - 3427 - ], - [ - 3457 - ], - [ - 3530 - ], - [ - 3538, - 3540 - ], - [ - 3542 - ], - [ - 3633 - ], - [ - 3636, - 3642 - ], - [ - 3655, - 3662 - ], - [ - 3761 - ], - [ - 3764, - 3772 - ], - [ - 3784, - 3790 - ], - [ - 3864, - 3865 - ], - [ - 3893 - ], - [ - 3895 - ], - [ - 3897 - ], - [ - 3953, - 3966 - ], - [ - 3968, - 3972 - ], - [ - 3974, - 3975 - ], - [ - 3981, - 3991 - ], - [ - 3993, - 4028 - ], - [ - 4038 - ], - [ - 4141, - 4144 - ], - [ - 4146, - 4151 - ], - [ - 4153, - 4154 - ], - [ - 4157, - 4158 - ], - [ - 4184, - 4185 - ], - [ - 4190, - 4192 - ], - [ - 4209, - 4212 - ], - [ - 4226 - ], - [ - 4229, - 4230 - ], - [ - 4237 - ], - [ - 4253 - ], - [ - 4957, - 4959 - ], - [ - 5906, - 5908 - ], - [ - 5938, - 5939 - ], - [ - 5970, - 5971 - ], - [ - 6002, - 6003 - ], - [ - 6068, - 6069 - ], - [ - 6071, - 6077 - ], - [ - 6086 - ], - [ - 6089, - 6099 - ], - [ - 6109 - ], - [ - 6155, - 6157 - ], - [ - 6159 - ], - [ - 6277, - 6278 - ], - [ - 6313 - ], - [ - 6432, - 6434 - ], - [ - 6439, - 6440 - ], - [ - 6450 - ], - [ - 6457, - 6459 - ], - [ - 6679, - 6680 - ], - [ - 6683 - ], - [ - 6742 - ], - [ - 6744, - 6750 - ], - [ - 6752 - ], - [ - 6754 - ], - [ - 6757, - 6764 - ], - [ - 6771, - 6780 - ], - [ - 6783 - ], - [ - 6832, - 6845 - ], - [ - 6847, - 6862 - ], - [ - 6912, - 6915 - ], - [ - 6964 - ], - [ - 6966, - 6970 - ], - [ - 6972 - ], - [ - 6978 - ], - [ - 7019, - 7027 - ], - [ - 7040, - 7041 - ], - [ - 7074, - 7077 - ], - [ - 7080, - 7081 - ], - [ - 7083, - 7085 - ], - [ - 7142 - ], - [ - 7144, - 7145 - ], - [ - 7149 - ], - [ - 7151, - 7153 - ], - [ - 7212, - 7219 - ], - [ - 7222, - 7223 - ], - [ - 7376, - 7378 - ], - [ - 7380, - 7392 - ], - [ - 7394, - 7400 - ], - [ - 7405 - ], - [ - 7412 - ], - [ - 7416, - 7417 - ], - [ - 7616, - 7679 - ], - [ - 8400, - 8412 - ], - [ - 8417 - ], - [ - 8421, - 8432 - ], - [ - 11503, - 11505 - ], - [ - 11647 - ], - [ - 11744, - 11775 - ], - [ - 12330, - 12333 - ], - [ - 12441, - 12442 - ], - [ - 42607 - ], - [ - 42612, - 42621 - ], - [ - 42654, - 42655 - ], - [ - 42736, - 42737 - ], - [ - 43010 - ], - [ - 43014 - ], - [ - 43019 - ], - [ - 43045, - 43046 - ], - [ - 43052 - ], - [ - 43204, - 43205 - ], - [ - 43232, - 43249 - ], - [ - 43263 - ], - [ - 43302, - 43309 - ], - [ - 43335, - 43345 - ], - [ - 43392, - 43394 - ], - [ - 43443 - ], - [ - 43446, - 43449 - ], - [ - 43452, - 43453 - ], - [ - 43493 - ], - [ - 43561, - 43566 - ], - [ - 43569, - 43570 - ], - [ - 43573, - 43574 - ], - [ - 43587 - ], - [ - 43596 - ], - [ - 43644 - ], - [ - 43696 - ], - [ - 43698, - 43700 - ], - [ - 43703, - 43704 - ], - [ - 43710, - 43711 - ], - [ - 43713 - ], - [ - 43756, - 43757 - ], - [ - 43766 - ], - [ - 44005 - ], - [ - 44008 - ], - [ - 44013 - ], - [ - 64286 - ], - [ - 65024, - 65039 - ], - [ - 65056, - 65071 - ], - [ - 66045 - ], - [ - 66272 - ], - [ - 66422, - 66426 - ], - [ - 68097, - 68099 - ], - [ - 68101, - 68102 - ], - [ - 68108, - 68111 - ], - [ - 68152, - 68154 - ], - [ - 68159 - ], - [ - 68325, - 68326 - ], - [ - 68900, - 68903 - ], - [ - 68969, - 68973 - ], - [ - 69291, - 69292 - ], - [ - 69372, - 69375 - ], - [ - 69446, - 69456 - ], - [ - 69506, - 69509 - ], - [ - 69633 - ], - [ - 69688, - 69702 - ], - [ - 69744 - ], - [ - 69747, - 69748 - ], - [ - 69759, - 69761 - ], - [ - 69811, - 69814 - ], - [ - 69817, - 69818 - ], - [ - 69826 - ], - [ - 69888, - 69890 - ], - [ - 69927, - 69931 - ], - [ - 69933, - 69940 - ], - [ - 70003 - ], - [ - 70016, - 70017 - ], - [ - 70070, - 70078 - ], - [ - 70089, - 70092 - ], - [ - 70095 - ], - [ - 70191, - 70193 - ], - [ - 70196 - ], - [ - 70198, - 70199 - ], - [ - 70206 - ], - [ - 70209 - ], - [ - 70367 - ], - [ - 70371, - 70378 - ], - [ - 70400, - 70401 - ], - [ - 70459, - 70460 - ], - [ - 70464 - ], - [ - 70502, - 70508 - ], - [ - 70512, - 70516 - ], - [ - 70587, - 70592 - ], - [ - 70606 - ], - [ - 70608 - ], - [ - 70610 - ], - [ - 70625, - 70626 - ], - [ - 70712, - 70719 - ], - [ - 70722, - 70724 - ], - [ - 70726 - ], - [ - 70750 - ], - [ - 70835, - 70840 - ], - [ - 70842 - ], - [ - 70847, - 70848 - ], - [ - 70850, - 70851 - ], - [ - 71090, - 71093 - ], - [ - 71100, - 71101 - ], - [ - 71103, - 71104 - ], - [ - 71132, - 71133 - ], - [ - 71219, - 71226 - ], - [ - 71229 - ], - [ - 71231, - 71232 - ], - [ - 71339 - ], - [ - 71341 - ], - [ - 71344, - 71349 - ], - [ - 71351 - ], - [ - 71453 - ], - [ - 71455 - ], - [ - 71458, - 71461 - ], - [ - 71463, - 71467 - ], - [ - 71727, - 71735 - ], - [ - 71737, - 71738 - ], - [ - 71995, - 71996 - ], - [ - 71998 - ], - [ - 72003 - ], - [ - 72148, - 72151 - ], - [ - 72154, - 72155 - ], - [ - 72160 - ], - [ - 72193, - 72202 - ], - [ - 72243, - 72248 - ], - [ - 72251, - 72254 - ], - [ - 72263 - ], - [ - 72273, - 72278 - ], - [ - 72281, - 72283 - ], - [ - 72330, - 72342 - ], - [ - 72344, - 72345 - ], - [ - 72752, - 72758 - ], - [ - 72760, - 72765 - ], - [ - 72767 - ], - [ - 72850, - 72871 - ], - [ - 72874, - 72880 - ], - [ - 72882, - 72883 - ], - [ - 72885, - 72886 - ], - [ - 73009, - 73014 - ], - [ - 73018 - ], - [ - 73020, - 73021 - ], - [ - 73023, - 73029 - ], - [ - 73031 - ], - [ - 73104, - 73105 - ], - [ - 73109 - ], - [ - 73111 - ], - [ - 73459, - 73460 - ], - [ - 73472, - 73473 - ], - [ - 73526, - 73530 - ], - [ - 73536 - ], - [ - 73538 - ], - [ - 73562 - ], - [ - 78912 - ], - [ - 78919, - 78933 - ], - [ - 90398, - 90409 - ], - [ - 90413, - 90415 - ], - [ - 92912, - 92916 - ], - [ - 92976, - 92982 - ], - [ - 94031 - ], - [ - 94095, - 94098 - ], - [ - 94180 - ], - [ - 113821, - 113822 - ], - [ - 118528, - 118573 - ], - [ - 118576, - 118598 - ], - [ - 119143, - 119145 - ], - [ - 119163, - 119170 - ], - [ - 119173, - 119179 - ], - [ - 119210, - 119213 - ], - [ - 119362, - 119364 - ], - [ - 121344, - 121398 - ], - [ - 121403, - 121452 - ], - [ - 121461 - ], - [ - 121476 - ], - [ - 121499, - 121503 - ], - [ - 121505, - 121519 - ], - [ - 122880, - 122886 - ], - [ - 122888, - 122904 - ], - [ - 122907, - 122913 - ], - [ - 122915, - 122916 - ], - [ - 122918, - 122922 - ], - [ - 123023 - ], - [ - 123184, - 123190 - ], - [ - 123566 - ], - [ - 123628, - 123631 - ], - [ - 124140, - 124143 - ], - [ - 124398, - 124399 - ], - [ - 125136, - 125142 - ], - [ - 125252, - 125258 - ], - [ - 917760, - 917999 - ] - ] -}; -ilib.data.ctype_n = { - "Nd": [ - [ - 48, - 57 - ], - [ - 1632, - 1641 - ], - [ - 1776, - 1785 - ], - [ - 1984, - 1993 - ], - [ - 2406, - 2415 - ], - [ - 2534, - 2543 - ], - [ - 2662, - 2671 - ], - [ - 2790, - 2799 - ], - [ - 2918, - 2927 - ], - [ - 3046, - 3055 - ], - [ - 3174, - 3183 - ], - [ - 3302, - 3311 - ], - [ - 3430, - 3439 - ], - [ - 3558, - 3567 - ], - [ - 3664, - 3673 - ], - [ - 3792, - 3801 - ], - [ - 3872, - 3881 - ], - [ - 4160, - 4169 - ], - [ - 4240, - 4249 - ], - [ - 6112, - 6121 - ], - [ - 6160, - 6169 - ], - [ - 6470, - 6479 - ], - [ - 6608, - 6617 - ], - [ - 6784, - 6793 - ], - [ - 6800, - 6809 - ], - [ - 6992, - 7001 - ], - [ - 7088, - 7097 - ], - [ - 7232, - 7241 - ], - [ - 7248, - 7257 - ], - [ - 42528, - 42537 - ], - [ - 43216, - 43225 - ], - [ - 43264, - 43273 - ], - [ - 43472, - 43481 - ], - [ - 43504, - 43513 - ], - [ - 43600, - 43609 - ], - [ - 44016, - 44025 - ], - [ - 65296, - 65305 - ], - [ - 66720, - 66729 - ], - [ - 68912, - 68921 - ], - [ - 68928, - 68937 - ], - [ - 69734, - 69743 - ], - [ - 69872, - 69881 - ], - [ - 69942, - 69951 - ], - [ - 70096, - 70105 - ], - [ - 70384, - 70393 - ], - [ - 70736, - 70745 - ], - [ - 70864, - 70873 - ], - [ - 71248, - 71257 - ], - [ - 71360, - 71369 - ], - [ - 71376, - 71395 - ], - [ - 71472, - 71481 - ], - [ - 71904, - 71913 - ], - [ - 72016, - 72025 - ], - [ - 72688, - 72697 - ], - [ - 72784, - 72793 - ], - [ - 73040, - 73049 - ], - [ - 73120, - 73129 - ], - [ - 73552, - 73561 - ], - [ - 90416, - 90425 - ], - [ - 92768, - 92777 - ], - [ - 92864, - 92873 - ], - [ - 93008, - 93017 - ], - [ - 93552, - 93561 - ], - [ - 118000, - 118009 - ], - [ - 120782, - 120831 - ], - [ - 123200, - 123209 - ], - [ - 123632, - 123641 - ], - [ - 124144, - 124153 - ], - [ - 124401, - 124410 - ], - [ - 125264, - 125273 - ], - [ - 130032, - 130041 - ] - ], - "Nl": [ - [ - 5870, - 5872 - ], - [ - 8544, - 8578 - ], - [ - 8581, - 8584 - ], - [ - 12295 - ], - [ - 12321, - 12329 - ], - [ - 12344, - 12346 - ], - [ - 42726, - 42735 - ], - [ - 65856, - 65908 - ], - [ - 66369 - ], - [ - 66378 - ], - [ - 66513, - 66517 - ], - [ - 74752, - 74862 - ] - ], - "No": [ - [ - 178, - 179 - ], - [ - 185 - ], - [ - 188, - 190 - ], - [ - 2548, - 2553 - ], - [ - 2930, - 2935 - ], - [ - 3056, - 3058 - ], - [ - 3192, - 3198 - ], - [ - 3416, - 3422 - ], - [ - 3440, - 3448 - ], - [ - 3882, - 3891 - ], - [ - 4969, - 4988 - ], - [ - 6128, - 6137 - ], - [ - 6618 - ], - [ - 8304 - ], - [ - 8308, - 8313 - ], - [ - 8320, - 8329 - ], - [ - 8528, - 8543 - ], - [ - 8585 - ], - [ - 9312, - 9371 - ], - [ - 9450, - 9471 - ], - [ - 10102, - 10131 - ], - [ - 11517 - ], - [ - 12690, - 12693 - ], - [ - 12832, - 12841 - ], - [ - 12872, - 12879 - ], - [ - 12881, - 12895 - ], - [ - 12928, - 12937 - ], - [ - 12977, - 12991 - ], - [ - 43056, - 43061 - ], - [ - 65799, - 65843 - ], - [ - 65909, - 65912 - ], - [ - 65930, - 65931 - ], - [ - 66273, - 66299 - ], - [ - 66336, - 66339 - ], - [ - 67672, - 67679 - ], - [ - 67705, - 67711 - ], - [ - 67751, - 67759 - ], - [ - 67835, - 67839 - ], - [ - 67862, - 67867 - ], - [ - 68028, - 68029 - ], - [ - 68032, - 68047 - ], - [ - 68050, - 68095 - ], - [ - 68160, - 68168 - ], - [ - 68221, - 68222 - ], - [ - 68253, - 68255 - ], - [ - 68331, - 68335 - ], - [ - 68440, - 68447 - ], - [ - 68472, - 68479 - ], - [ - 68521, - 68527 - ], - [ - 68858, - 68863 - ], - [ - 69216, - 69246 - ], - [ - 69405, - 69414 - ], - [ - 69457, - 69460 - ], - [ - 69573, - 69579 - ], - [ - 69714, - 69733 - ], - [ - 70113, - 70132 - ], - [ - 71482, - 71483 - ], - [ - 71914, - 71922 - ], - [ - 72794, - 72812 - ], - [ - 73664, - 73684 - ], - [ - 93019, - 93025 - ], - [ - 93824, - 93846 - ], - [ - 119488, - 119507 - ], - [ - 119520, - 119539 - ], - [ - 119648, - 119672 - ], - [ - 125127, - 125135 - ], - [ - 126065, - 126123 - ], - [ - 126125, - 126127 - ], - [ - 126129, - 126132 - ], - [ - 126209, - 126253 - ], - [ - 126255, - 126269 - ], - [ - 127232, - 127244 - ] - ] -}; -ilib.data.ctype_p = { - "Pc": [ - [ - 95 - ], - [ - 8255, - 8256 - ], - [ - 8276 - ], - [ - 65075, - 65076 - ], - [ - 65101, - 65103 - ], - [ - 65343 - ] - ], - "Pd": [ - [ - 45 - ], - [ - 1418 - ], - [ - 1470 - ], - [ - 5120 - ], - [ - 6150 - ], - [ - 8208, - 8213 - ], - [ - 11799 - ], - [ - 11802 - ], - [ - 11834, - 11835 - ], - [ - 11840 - ], - [ - 11869 - ], - [ - 12316 - ], - [ - 12336 - ], - [ - 12448 - ], - [ - 65073, - 65074 - ], - [ - 65112 - ], - [ - 65123 - ], - [ - 65293 - ], - [ - 68974 - ], - [ - 69293 - ] - ], - "Pe": [ - [ - 41 - ], - [ - 93 - ], - [ - 125 - ], - [ - 3899 - ], - [ - 3901 - ], - [ - 5788 - ], - [ - 8262 - ], - [ - 8318 - ], - [ - 8334 - ], - [ - 8969 - ], - [ - 8971 - ], - [ - 9002 - ], - [ - 10089 - ], - [ - 10091 - ], - [ - 10093 - ], - [ - 10095 - ], - [ - 10097 - ], - [ - 10099 - ], - [ - 10101 - ], - [ - 10182 - ], - [ - 10215 - ], - [ - 10217 - ], - [ - 10219 - ], - [ - 10221 - ], - [ - 10223 - ], - [ - 10628 - ], - [ - 10630 - ], - [ - 10632 - ], - [ - 10634 - ], - [ - 10636 - ], - [ - 10638 - ], - [ - 10640 - ], - [ - 10642 - ], - [ - 10644 - ], - [ - 10646 - ], - [ - 10648 - ], - [ - 10713 - ], - [ - 10715 - ], - [ - 10749 - ], - [ - 11811 - ], - [ - 11813 - ], - [ - 11815 - ], - [ - 11817 - ], - [ - 11862 - ], - [ - 11864 - ], - [ - 11866 - ], - [ - 11868 - ], - [ - 12297 - ], - [ - 12299 - ], - [ - 12301 - ], - [ - 12303 - ], - [ - 12305 - ], - [ - 12309 - ], - [ - 12311 - ], - [ - 12313 - ], - [ - 12315 - ], - [ - 12318, - 12319 - ], - [ - 64830 - ], - [ - 65048 - ], - [ - 65078 - ], - [ - 65080 - ], - [ - 65082 - ], - [ - 65084 - ], - [ - 65086 - ], - [ - 65088 - ], - [ - 65090 - ], - [ - 65092 - ], - [ - 65096 - ], - [ - 65114 - ], - [ - 65116 - ], - [ - 65118 - ], - [ - 65289 - ], - [ - 65341 - ], - [ - 65373 - ], - [ - 65376 - ], - [ - 65379 - ] - ], - "Pf": [ - [ - 187 - ], - [ - 8217 - ], - [ - 8221 - ], - [ - 8250 - ], - [ - 11779 - ], - [ - 11781 - ], - [ - 11786 - ], - [ - 11789 - ], - [ - 11805 - ], - [ - 11809 - ] - ], - "Pi": [ - [ - 171 - ], - [ - 8216 - ], - [ - 8219, - 8220 - ], - [ - 8223 - ], - [ - 8249 - ], - [ - 11778 - ], - [ - 11780 - ], - [ - 11785 - ], - [ - 11788 - ], - [ - 11804 - ], - [ - 11808 - ] - ], - "Po": [ - [ - 33, - 35 - ], - [ - 37, - 39 - ], - [ - 42 - ], - [ - 44 - ], - [ - 46, - 47 - ], - [ - 58, - 59 - ], - [ - 63, - 64 - ], - [ - 92 - ], - [ - 161 - ], - [ - 167 - ], - [ - 182, - 183 - ], - [ - 191 - ], - [ - 894 - ], - [ - 903 - ], - [ - 1370, - 1375 - ], - [ - 1417 - ], - [ - 1472 - ], - [ - 1475 - ], - [ - 1478 - ], - [ - 1523, - 1524 - ], - [ - 1545, - 1546 - ], - [ - 1548, - 1549 - ], - [ - 1563 - ], - [ - 1565, - 1567 - ], - [ - 1642, - 1645 - ], - [ - 1748 - ], - [ - 1792, - 1805 - ], - [ - 2039, - 2041 - ], - [ - 2096, - 2110 - ], - [ - 2142 - ], - [ - 2404, - 2405 - ], - [ - 2416 - ], - [ - 2557 - ], - [ - 2678 - ], - [ - 2800 - ], - [ - 3191 - ], - [ - 3204 - ], - [ - 3572 - ], - [ - 3663 - ], - [ - 3674, - 3675 - ], - [ - 3844, - 3858 - ], - [ - 3860 - ], - [ - 3973 - ], - [ - 4048, - 4052 - ], - [ - 4057, - 4058 - ], - [ - 4170, - 4175 - ], - [ - 4347 - ], - [ - 4960, - 4968 - ], - [ - 5742 - ], - [ - 5867, - 5869 - ], - [ - 5941, - 5942 - ], - [ - 6100, - 6102 - ], - [ - 6104, - 6106 - ], - [ - 6144, - 6149 - ], - [ - 6151, - 6154 - ], - [ - 6468, - 6469 - ], - [ - 6686, - 6687 - ], - [ - 6816, - 6822 - ], - [ - 6824, - 6829 - ], - [ - 6990, - 6991 - ], - [ - 7002, - 7008 - ], - [ - 7037, - 7039 - ], - [ - 7164, - 7167 - ], - [ - 7227, - 7231 - ], - [ - 7294, - 7295 - ], - [ - 7360, - 7367 - ], - [ - 7379 - ], - [ - 8214, - 8215 - ], - [ - 8224, - 8231 - ], - [ - 8240, - 8248 - ], - [ - 8251, - 8254 - ], - [ - 8257, - 8259 - ], - [ - 8263, - 8273 - ], - [ - 8275 - ], - [ - 8277, - 8286 - ], - [ - 11513, - 11516 - ], - [ - 11518, - 11519 - ], - [ - 11632 - ], - [ - 11776, - 11777 - ], - [ - 11782, - 11784 - ], - [ - 11787 - ], - [ - 11790, - 11798 - ], - [ - 11800, - 11801 - ], - [ - 11803 - ], - [ - 11806, - 11807 - ], - [ - 11818, - 11822 - ], - [ - 11824, - 11833 - ], - [ - 11836, - 11839 - ], - [ - 11841 - ], - [ - 11843, - 11855 - ], - [ - 11858, - 11860 - ], - [ - 12289, - 12291 - ], - [ - 12349 - ], - [ - 12539 - ], - [ - 42238, - 42239 - ], - [ - 42509, - 42511 - ], - [ - 42611 - ], - [ - 42622 - ], - [ - 42738, - 42743 - ], - [ - 43124, - 43127 - ], - [ - 43214, - 43215 - ], - [ - 43256, - 43258 - ], - [ - 43260 - ], - [ - 43310, - 43311 - ], - [ - 43359 - ], - [ - 43457, - 43469 - ], - [ - 43486, - 43487 - ], - [ - 43612, - 43615 - ], - [ - 43742, - 43743 - ], - [ - 43760, - 43761 - ], - [ - 44011 - ], - [ - 65040, - 65046 - ], - [ - 65049 - ], - [ - 65072 - ], - [ - 65093, - 65094 - ], - [ - 65097, - 65100 - ], - [ - 65104, - 65106 - ], - [ - 65108, - 65111 - ], - [ - 65119, - 65121 - ], - [ - 65128 - ], - [ - 65130, - 65131 - ], - [ - 65281, - 65283 - ], - [ - 65285, - 65287 - ], - [ - 65290 - ], - [ - 65292 - ], - [ - 65294, - 65295 - ], - [ - 65306, - 65307 - ], - [ - 65311, - 65312 - ], - [ - 65340 - ], - [ - 65377 - ], - [ - 65380, - 65381 - ], - [ - 65792, - 65794 - ], - [ - 66463 - ], - [ - 66512 - ], - [ - 66927 - ], - [ - 67671 - ], - [ - 67871 - ], - [ - 67903 - ], - [ - 68176, - 68184 - ], - [ - 68223 - ], - [ - 68336, - 68342 - ], - [ - 68409, - 68415 - ], - [ - 68505, - 68508 - ], - [ - 69461, - 69465 - ], - [ - 69510, - 69513 - ], - [ - 69703, - 69709 - ], - [ - 69819, - 69820 - ], - [ - 69822, - 69825 - ], - [ - 69952, - 69955 - ], - [ - 70004, - 70005 - ], - [ - 70085, - 70088 - ], - [ - 70093 - ], - [ - 70107 - ], - [ - 70109, - 70111 - ], - [ - 70200, - 70205 - ], - [ - 70313 - ], - [ - 70612, - 70613 - ], - [ - 70615, - 70616 - ], - [ - 70731, - 70735 - ], - [ - 70746, - 70747 - ], - [ - 70749 - ], - [ - 70854 - ], - [ - 71105, - 71127 - ], - [ - 71233, - 71235 - ], - [ - 71264, - 71276 - ], - [ - 71353 - ], - [ - 71484, - 71486 - ], - [ - 71739 - ], - [ - 72004, - 72006 - ], - [ - 72162 - ], - [ - 72255, - 72262 - ], - [ - 72346, - 72348 - ], - [ - 72350, - 72354 - ], - [ - 72448, - 72457 - ], - [ - 72673 - ], - [ - 72769, - 72773 - ], - [ - 72816, - 72817 - ], - [ - 73463, - 73464 - ], - [ - 73539, - 73551 - ], - [ - 73727 - ], - [ - 74864, - 74868 - ], - [ - 77809, - 77810 - ], - [ - 92782, - 92783 - ], - [ - 92917 - ], - [ - 92983, - 92987 - ], - [ - 92996 - ], - [ - 93549, - 93551 - ], - [ - 93847, - 93850 - ], - [ - 94178 - ], - [ - 113823 - ], - [ - 121479, - 121483 - ], - [ - 124415 - ], - [ - 125278, - 125279 - ] - ], - "Ps": [ - [ - 40 - ], - [ - 91 - ], - [ - 123 - ], - [ - 3898 - ], - [ - 3900 - ], - [ - 5787 - ], - [ - 8218 - ], - [ - 8222 - ], - [ - 8261 - ], - [ - 8317 - ], - [ - 8333 - ], - [ - 8968 - ], - [ - 8970 - ], - [ - 9001 - ], - [ - 10088 - ], - [ - 10090 - ], - [ - 10092 - ], - [ - 10094 - ], - [ - 10096 - ], - [ - 10098 - ], - [ - 10100 - ], - [ - 10181 - ], - [ - 10214 - ], - [ - 10216 - ], - [ - 10218 - ], - [ - 10220 - ], - [ - 10222 - ], - [ - 10627 - ], - [ - 10629 - ], - [ - 10631 - ], - [ - 10633 - ], - [ - 10635 - ], - [ - 10637 - ], - [ - 10639 - ], - [ - 10641 - ], - [ - 10643 - ], - [ - 10645 - ], - [ - 10647 - ], - [ - 10712 - ], - [ - 10714 - ], - [ - 10748 - ], - [ - 11810 - ], - [ - 11812 - ], - [ - 11814 - ], - [ - 11816 - ], - [ - 11842 - ], - [ - 11861 - ], - [ - 11863 - ], - [ - 11865 - ], - [ - 11867 - ], - [ - 12296 - ], - [ - 12298 - ], - [ - 12300 - ], - [ - 12302 - ], - [ - 12304 - ], - [ - 12308 - ], - [ - 12310 - ], - [ - 12312 - ], - [ - 12314 - ], - [ - 12317 - ], - [ - 64831 - ], - [ - 65047 - ], - [ - 65077 - ], - [ - 65079 - ], - [ - 65081 - ], - [ - 65083 - ], - [ - 65085 - ], - [ - 65087 - ], - [ - 65089 - ], - [ - 65091 - ], - [ - 65095 - ], - [ - 65113 - ], - [ - 65115 - ], - [ - 65117 - ], - [ - 65288 - ], - [ - 65339 - ], - [ - 65371 - ], - [ - 65375 - ], - [ - 65378 - ] - ] -}; -ilib.data.ctype_s = { - "Sc": [ - [ - 36 - ], - [ - 162, - 165 - ], - [ - 1423 - ], - [ - 1547 - ], - [ - 2046, - 2047 - ], - [ - 2546, - 2547 - ], - [ - 2555 - ], - [ - 2801 - ], - [ - 3065 - ], - [ - 3647 - ], - [ - 6107 - ], - [ - 8352, - 8384 - ], - [ - 43064 - ], - [ - 65020 - ], - [ - 65129 - ], - [ - 65284 - ], - [ - 65504, - 65505 - ], - [ - 65509, - 65510 - ], - [ - 73693, - 73696 - ], - [ - 123647 - ], - [ - 126128 - ] - ], - "Sk": [ - [ - 94 - ], - [ - 96 - ], - [ - 168 - ], - [ - 175 - ], - [ - 180 - ], - [ - 184 - ], - [ - 706, - 709 - ], - [ - 722, - 735 - ], - [ - 741, - 747 - ], - [ - 749 - ], - [ - 751, - 767 - ], - [ - 885 - ], - [ - 900, - 901 - ], - [ - 2184 - ], - [ - 8125 - ], - [ - 8127, - 8129 - ], - [ - 8141, - 8143 - ], - [ - 8157, - 8159 - ], - [ - 8173, - 8175 - ], - [ - 8189, - 8190 - ], - [ - 12443, - 12444 - ], - [ - 42752, - 42774 - ], - [ - 42784, - 42785 - ], - [ - 42889, - 42890 - ], - [ - 43867 - ], - [ - 43882, - 43883 - ], - [ - 64434, - 64450 - ], - [ - 65342 - ], - [ - 65344 - ], - [ - 65507 - ], - [ - 127995, - 127999 - ] - ], - "Sm": [ - [ - 43 - ], - [ - 60, - 62 - ], - [ - 124 - ], - [ - 126 - ], - [ - 172 - ], - [ - 177 - ], - [ - 215 - ], - [ - 247 - ], - [ - 1014 - ], - [ - 1542, - 1544 - ], - [ - 8260 - ], - [ - 8274 - ], - [ - 8314, - 8316 - ], - [ - 8330, - 8332 - ], - [ - 8472 - ], - [ - 8512, - 8516 - ], - [ - 8523 - ], - [ - 8592, - 8596 - ], - [ - 8602, - 8603 - ], - [ - 8608 - ], - [ - 8611 - ], - [ - 8614 - ], - [ - 8622 - ], - [ - 8654, - 8655 - ], - [ - 8658 - ], - [ - 8660 - ], - [ - 8692, - 8959 - ], - [ - 8992, - 8993 - ], - [ - 9084 - ], - [ - 9115, - 9139 - ], - [ - 9180, - 9185 - ], - [ - 9655 - ], - [ - 9665 - ], - [ - 9720, - 9727 - ], - [ - 9839 - ], - [ - 10176, - 10180 - ], - [ - 10183, - 10213 - ], - [ - 10224, - 10239 - ], - [ - 10496, - 10626 - ], - [ - 10649, - 10711 - ], - [ - 10716, - 10747 - ], - [ - 10750, - 11007 - ], - [ - 11056, - 11076 - ], - [ - 11079, - 11084 - ], - [ - 64297 - ], - [ - 65122 - ], - [ - 65124, - 65126 - ], - [ - 65291 - ], - [ - 65308, - 65310 - ], - [ - 65372 - ], - [ - 65374 - ], - [ - 65506 - ], - [ - 65513, - 65516 - ], - [ - 69006, - 69007 - ], - [ - 120513 - ], - [ - 120539 - ], - [ - 120571 - ], - [ - 120597 - ], - [ - 120629 - ], - [ - 120655 - ], - [ - 120687 - ], - [ - 120713 - ], - [ - 120745 - ], - [ - 120771 - ], - [ - 126704, - 126705 - ] - ], - "So": [ - [ - 166 - ], - [ - 169 - ], - [ - 174 - ], - [ - 176 - ], - [ - 1154 - ], - [ - 1421, - 1422 - ], - [ - 1550, - 1551 - ], - [ - 1758 - ], - [ - 1769 - ], - [ - 1789, - 1790 - ], - [ - 2038 - ], - [ - 2554 - ], - [ - 2928 - ], - [ - 3059, - 3064 - ], - [ - 3066 - ], - [ - 3199 - ], - [ - 3407 - ], - [ - 3449 - ], - [ - 3841, - 3843 - ], - [ - 3859 - ], - [ - 3861, - 3863 - ], - [ - 3866, - 3871 - ], - [ - 3892 - ], - [ - 3894 - ], - [ - 3896 - ], - [ - 4030, - 4037 - ], - [ - 4039, - 4044 - ], - [ - 4046, - 4047 - ], - [ - 4053, - 4056 - ], - [ - 4254, - 4255 - ], - [ - 5008, - 5017 - ], - [ - 5741 - ], - [ - 6464 - ], - [ - 6622, - 6655 - ], - [ - 7009, - 7018 - ], - [ - 7028, - 7036 - ], - [ - 8448, - 8449 - ], - [ - 8451, - 8454 - ], - [ - 8456, - 8457 - ], - [ - 8468 - ], - [ - 8470, - 8471 - ], - [ - 8478, - 8483 - ], - [ - 8485 - ], - [ - 8487 - ], - [ - 8489 - ], - [ - 8494 - ], - [ - 8506, - 8507 - ], - [ - 8522 - ], - [ - 8524, - 8525 - ], - [ - 8527 - ], - [ - 8586, - 8587 - ], - [ - 8597, - 8601 - ], - [ - 8604, - 8607 - ], - [ - 8609, - 8610 - ], - [ - 8612, - 8613 - ], - [ - 8615, - 8621 - ], - [ - 8623, - 8653 - ], - [ - 8656, - 8657 - ], - [ - 8659 - ], - [ - 8661, - 8691 - ], - [ - 8960, - 8967 - ], - [ - 8972, - 8991 - ], - [ - 8994, - 9000 - ], - [ - 9003, - 9083 - ], - [ - 9085, - 9114 - ], - [ - 9140, - 9179 - ], - [ - 9186, - 9257 - ], - [ - 9280, - 9290 - ], - [ - 9372, - 9449 - ], - [ - 9472, - 9654 - ], - [ - 9656, - 9664 - ], - [ - 9666, - 9719 - ], - [ - 9728, - 9838 - ], - [ - 9840, - 10087 - ], - [ - 10132, - 10175 - ], - [ - 10240, - 10495 - ], - [ - 11008, - 11055 - ], - [ - 11077, - 11078 - ], - [ - 11085, - 11123 - ], - [ - 11126, - 11157 - ], - [ - 11159, - 11263 - ], - [ - 11493, - 11498 - ], - [ - 11856, - 11857 - ], - [ - 11904, - 11929 - ], - [ - 11931, - 12019 - ], - [ - 12032, - 12245 - ], - [ - 12272, - 12287 - ], - [ - 12292 - ], - [ - 12306, - 12307 - ], - [ - 12320 - ], - [ - 12342, - 12343 - ], - [ - 12350, - 12351 - ], - [ - 12688, - 12689 - ], - [ - 12694, - 12703 - ], - [ - 12736, - 12773 - ], - [ - 12783 - ], - [ - 12800, - 12830 - ], - [ - 12842, - 12871 - ], - [ - 12880 - ], - [ - 12896, - 12927 - ], - [ - 12938, - 12976 - ], - [ - 12992, - 13311 - ], - [ - 19904, - 19967 - ], - [ - 42128, - 42182 - ], - [ - 43048, - 43051 - ], - [ - 43062, - 43063 - ], - [ - 43065 - ], - [ - 43639, - 43641 - ], - [ - 64832, - 64847 - ], - [ - 64975 - ], - [ - 65021, - 65023 - ], - [ - 65508 - ], - [ - 65512 - ], - [ - 65517, - 65518 - ], - [ - 65532, - 65533 - ], - [ - 65847, - 65855 - ], - [ - 65913, - 65929 - ], - [ - 65932, - 65934 - ], - [ - 65936, - 65948 - ], - [ - 65952 - ], - [ - 66000, - 66044 - ], - [ - 67703, - 67704 - ], - [ - 68296 - ], - [ - 71487 - ], - [ - 73685, - 73692 - ], - [ - 73697, - 73713 - ], - [ - 92988, - 92991 - ], - [ - 92997 - ], - [ - 113820 - ], - [ - 117760, - 117999 - ], - [ - 118016, - 118451 - ], - [ - 118608, - 118723 - ], - [ - 118784, - 119029 - ], - [ - 119040, - 119078 - ], - [ - 119081, - 119140 - ], - [ - 119146, - 119148 - ], - [ - 119171, - 119172 - ], - [ - 119180, - 119209 - ], - [ - 119214, - 119274 - ], - [ - 119296, - 119361 - ], - [ - 119365 - ], - [ - 119552, - 119638 - ], - [ - 120832, - 121343 - ], - [ - 121399, - 121402 - ], - [ - 121453, - 121460 - ], - [ - 121462, - 121475 - ], - [ - 121477, - 121478 - ], - [ - 123215 - ], - [ - 126124 - ], - [ - 126254 - ], - [ - 126976, - 127019 - ], - [ - 127024, - 127123 - ], - [ - 127136, - 127150 - ], - [ - 127153, - 127167 - ], - [ - 127169, - 127183 - ], - [ - 127185, - 127221 - ], - [ - 127245, - 127405 - ], - [ - 127462, - 127490 - ], - [ - 127504, - 127547 - ], - [ - 127552, - 127560 - ], - [ - 127568, - 127569 - ], - [ - 127584, - 127589 - ], - [ - 127744, - 127994 - ], - [ - 128000, - 128727 - ], - [ - 128732, - 128748 - ], - [ - 128752, - 128764 - ], - [ - 128768, - 128886 - ], - [ - 128891, - 128985 - ], - [ - 128992, - 129003 - ], - [ - 129008 - ], - [ - 129024, - 129035 - ], - [ - 129040, - 129095 - ], - [ - 129104, - 129113 - ], - [ - 129120, - 129159 - ], - [ - 129168, - 129197 - ], - [ - 129200, - 129211 - ], - [ - 129216, - 129217 - ], - [ - 129280, - 129619 - ], - [ - 129632, - 129645 - ], - [ - 129648, - 129660 - ], - [ - 129664, - 129673 - ], - [ - 129679, - 129734 - ], - [ - 129742, - 129756 - ], - [ - 129759, - 129769 - ], - [ - 129776, - 129784 - ], - [ - 129792, - 129938 - ], - [ - 129940, - 130031 - ] - ] -}; -ilib.data.ctype_z = { - "Zl": [ - [ - 8232 - ] - ], - "Zp": [ - [ - 8233 - ] - ], - "Zs": [ - [ - 32 - ], - [ - 160 - ], - [ - 5760 - ], - [ - 8192, - 8202 - ], - [ - 8239 - ], - [ - 8287 - ], - [ - 12288 - ] - ] -}; -ilib.data.zoneinfo["Africa/Abidjan"] = { - "c": "CI", - "f": "GMT", - "n": "Greenwich {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["Africa/Accra"] = { - "c": "GH", - "f": "GMT", - "n": "Greenwich {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["Africa/Addis_Ababa"] = { - "c": "ET", - "f": "EAT", - "n": "E. Africa {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Africa/Algiers"] = { - "c": "DZ", - "f": "CET", - "n": "W. Central Africa {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Africa/Asmara"] = { - "c": "ER", - "f": "EAT", - "o": "3:0" -}; -ilib.data.zoneinfo["Africa/Asmera"] = { - "c": "KE", - "f": "EAT", - "n": "E. Africa {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Africa/Bamako"] = { - "c": "ML", - "f": "GMT", - "n": "Greenwich {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["Africa/Bangui"] = { - "c": "CF", - "f": "WAT", - "n": "W. Central Africa {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Africa/Banjul"] = { - "c": "GM", - "f": "GMT", - "n": "Greenwich {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["Africa/Bissau"] = { - "c": "GW", - "f": "GMT", - "n": "Greenwich {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["Africa/Blantyre"] = { - "c": "MW", - "f": "CAT", - "n": "South Africa {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Africa/Brazzaville"] = { - "c": "CG", - "f": "WAT", - "n": "W. Central Africa {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Africa/Bujumbura"] = { - "c": "BI", - "f": "CAT", - "n": "South Africa {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Africa/Cairo"] = { - "c": "EG", - "e": { - "m": 10, - "r": "l5", - "t": "0:0" - }, - "f": "EE{c}T", - "n": "Egypt {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 4, - "r": "l5", - "t": "0:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Africa/Casablanca"] = { - "c": "MA", - "e": { - "m": 4, - "r": "14", - "t": "2:0" - }, - "f": "+01/+00", - "n": "Morocco {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Africa/Ceuta"] = { - "c": "ES", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "Romance {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Africa/Conakry"] = { - "c": "GN", - "f": "GMT", - "n": "Greenwich {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["Africa/Dakar"] = { - "c": "SN", - "f": "GMT", - "n": "Greenwich {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["Africa/Dar_es_Salaam"] = { - "c": "TZ", - "f": "EAT", - "n": "E. Africa {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Africa/Djibouti"] = { - "c": "DJ", - "f": "EAT", - "n": "E. Africa {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Africa/Douala"] = { - "c": "CM", - "f": "WAT", - "n": "W. Central Africa {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Africa/El_Aaiun"] = { - "c": "EH", - "e": { - "m": 4, - "r": "14", - "t": "2:0" - }, - "f": "+01/+00", - "n": "Morocco {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Africa/Freetown"] = { - "c": "SL", - "f": "GMT", - "n": "Greenwich {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["Africa/Gaborone"] = { - "c": "BW", - "f": "CAT", - "n": "South Africa {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Africa/Harare"] = { - "c": "ZW", - "f": "CAT", - "n": "South Africa {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Africa/Johannesburg"] = { - "c": "ZA", - "f": "SAST", - "n": "South Africa {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Africa/Juba"] = { - "c": "SS", - "f": "CAT", - "n": "South Sudan {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Africa/Kampala"] = { - "c": "UG", - "f": "EAT", - "n": "E. Africa {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Africa/Khartoum"] = { - "c": "SD", - "f": "CAT", - "n": "Sudan {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Africa/Kigali"] = { - "c": "RW", - "f": "CAT", - "n": "South Africa {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Africa/Kinshasa"] = { - "c": "CD", - "f": "WAT", - "n": "W. Central Africa {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Africa/Lagos"] = { - "c": "NG", - "f": "WAT", - "n": "W. Central Africa {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Africa/Libreville"] = { - "c": "GA", - "f": "WAT", - "n": "W. Central Africa {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Africa/Lome"] = { - "c": "TG", - "f": "GMT", - "n": "Greenwich {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["Africa/Luanda"] = { - "c": "AO", - "f": "WAT", - "n": "W. Central Africa {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Africa/Lubumbashi"] = { - "c": "CD", - "f": "CAT", - "n": "South Africa {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Africa/Lusaka"] = { - "c": "ZM", - "f": "CAT", - "n": "South Africa {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Africa/Malabo"] = { - "c": "GQ", - "f": "WAT", - "n": "W. Central Africa {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Africa/Maputo"] = { - "c": "MZ", - "f": "CAT", - "n": "South Africa {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Africa/Maseru"] = { - "c": "LS", - "f": "SAST", - "n": "South Africa {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Africa/Mbabane"] = { - "c": "SZ", - "f": "SAST", - "n": "South Africa {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Africa/Mogadishu"] = { - "c": "SO", - "f": "EAT", - "n": "E. Africa {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Africa/Monrovia"] = { - "c": "LR", - "f": "GMT", - "n": "Greenwich {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["Africa/Nairobi"] = { - "c": "KE", - "f": "EAT", - "n": "E. Africa {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Africa/Ndjamena"] = { - "c": "TD", - "f": "WAT", - "n": "W. Central Africa {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Africa/Niamey"] = { - "c": "NE", - "f": "WAT", - "n": "W. Central Africa {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Africa/Nouakchott"] = { - "c": "MR", - "f": "GMT", - "n": "Greenwich {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["Africa/Ouagadougou"] = { - "c": "BF", - "f": "GMT", - "n": "Greenwich {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["Africa/Porto-Novo"] = { - "c": "BJ", - "f": "WAT", - "n": "W. Central Africa {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Africa/Sao_Tome"] = { - "c": "ST", - "f": "GMT", - "n": "Sao Tome {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["Africa/Timbuktu"] = { - "c": "CI", - "f": "GMT", - "o": "0:0" -}; -ilib.data.zoneinfo["Africa/Tripoli"] = { - "c": "LY", - "f": "EET", - "n": "Libya {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Africa/Tunis"] = { - "c": "TN", - "f": "CEST", - "n": "W. Central Africa {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Africa/Windhoek"] = { - "c": "NA", - "f": "WAT", - "n": "Namibia {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["America/Adak"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "H{c}T", - "n": "Aleutian {c} Time", - "o": "-10:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Anchorage"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "AK{c}T", - "n": "Alaskan {c} Time", - "o": "-9:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Anguilla"] = { - "c": "AI", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Antigua"] = { - "c": "AG", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Araguaina"] = { - "c": "BR", - "f": "-03", - "n": "Tocantins {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Argentina/Buenos_Aires"] = { - "c": "AR", - "f": "-03/-02", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Argentina/Catamarca"] = { - "c": "AR", - "f": "-03", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Argentina/ComodRivadavia"] = { - "c": "AR", - "f": "-03", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Argentina/Cordoba"] = { - "c": "AR", - "f": "-03/-02", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Argentina/Jujuy"] = { - "c": "AR", - "f": "-03", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Argentina/La_Rioja"] = { - "c": "AR", - "f": "-03", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Argentina/Mendoza"] = { - "c": "AR", - "f": "-03", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Argentina/Rio_Gallegos"] = { - "c": "AR", - "f": "-03", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Argentina/Salta"] = { - "c": "AR", - "f": "-03", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Argentina/San_Juan"] = { - "c": "AR", - "f": "-03", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Argentina/San_Luis"] = { - "c": "AR", - "f": "-03", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Argentina/Tucuman"] = { - "c": "AR", - "f": "-03/-02", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Argentina/Ushuaia"] = { - "c": "AR", - "f": "-03", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Aruba"] = { - "c": "AW", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Asuncion"] = { - "c": "PY", - "e": { - "m": 3, - "r": "0>22", - "t": "0:0" - }, - "f": "-04/-03", - "n": "Paraguay {c} Time", - "o": "-4:0", - "s": { - "m": 10, - "r": "0>1", - "t": "0:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Atikokan"] = { - "c": "CA", - "f": "EST", - "o": "-5:0" -}; -ilib.data.zoneinfo["America/Bahia"] = { - "c": "BR", - "f": "-03", - "n": "Bahia {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Bahia_Banderas"] = { - "c": "MX", - "f": "CST", - "n": "Central {c} Time (Mexico)", - "o": "-6:0" -}; -ilib.data.zoneinfo["America/Barbados"] = { - "c": "BB", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Belem"] = { - "c": "BR", - "f": "-03", - "n": "SA Eastern {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Belize"] = { - "c": "BZ", - "f": "CST", - "n": "Central America {c} Time", - "o": "-6:0" -}; -ilib.data.zoneinfo["America/Blanc-Sablon"] = { - "c": "CA", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Boa_Vista"] = { - "c": "BR", - "f": "-04", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Bogota"] = { - "c": "CO", - "f": "-05/-04", - "n": "SA Pacific {c} Time", - "o": "-5:0" -}; -ilib.data.zoneinfo["America/Boise"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "M{c}T", - "n": "Mountain {c} Time", - "o": "-7:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Buenos_Aires"] = { - "c": "AR", - "f": "-03/-02", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Cambridge_Bay"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "M{c}T", - "n": "Mountain {c} Time", - "o": "-7:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Campo_Grande"] = { - "c": "BR", - "f": "-04/-03", - "n": "Central Brazilian {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Cancun"] = { - "c": "MX", - "f": "EST", - "n": "Eastern {c} Time (Mexico)", - "o": "-5:0" -}; -ilib.data.zoneinfo["America/Caracas"] = { - "c": "VE", - "f": "-04", - "n": "Venezuela {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Catamarca"] = { - "c": "AR", - "f": "-03", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Cayenne"] = { - "c": "GF", - "f": "-03", - "n": "SA Eastern {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Cayman"] = { - "c": "KY", - "f": "EST", - "n": "SA Pacific {c} Time", - "o": "-5:0" -}; -ilib.data.zoneinfo["America/Chicago"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "n": "Central {c} Time", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Chihuahua"] = { - "c": "MX", - "f": "CST", - "n": "Central {c} Time (Mexico)", - "o": "-6:0" -}; -ilib.data.zoneinfo["America/Ciudad_Juarez"] = { - "c": "MX", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "M{c}T", - "n": "Mountain {c} Time", - "o": "-7:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Coral_Harbour"] = { - "c": "CA", - "f": "EST", - "n": "SA Pacific {c} Time", - "o": "-5:0" -}; -ilib.data.zoneinfo["America/Cordoba"] = { - "c": "AR", - "f": "-03/-02", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Costa_Rica"] = { - "c": "CR", - "f": "CST", - "n": "Central America {c} Time", - "o": "-6:0" -}; -ilib.data.zoneinfo["America/Creston"] = { - "c": "CA", - "f": "MST", - "n": "US Mountain {c} Time", - "o": "-7:0" -}; -ilib.data.zoneinfo["America/Cuiaba"] = { - "c": "BR", - "f": "-04/-03", - "n": "Central Brazilian {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Curacao"] = { - "c": "CW", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Danmarkshavn"] = { - "c": "GL", - "f": "GMT", - "n": "Greenwich {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["America/Dawson"] = { - "c": "CA", - "f": "MST", - "n": "Yukon {c} Time", - "o": "-7:0" -}; -ilib.data.zoneinfo["America/Dawson_Creek"] = { - "c": "CA", - "f": "MST", - "n": "US Mountain {c} Time", - "o": "-7:0" -}; -ilib.data.zoneinfo["America/Denver"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "M{c}T", - "n": "Mountain {c} Time", - "o": "-7:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Detroit"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Dominica"] = { - "c": "DM", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Edmonton"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "M{c}T", - "n": "Mountain {c} Time", - "o": "-7:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Eirunepe"] = { - "c": "BR", - "f": "-05", - "n": "SA Pacific {c} Time", - "o": "-5:0" -}; -ilib.data.zoneinfo["America/El_Salvador"] = { - "c": "SV", - "f": "CST", - "n": "Central America {c} Time", - "o": "-6:0" -}; -ilib.data.zoneinfo["America/Ensenada"] = { - "c": "MX", - "f": "PST", - "o": "-8:0" -}; -ilib.data.zoneinfo["America/Fort_Nelson"] = { - "c": "CA", - "f": "MST", - "n": "US Mountain {c} Time", - "o": "-7:0" -}; -ilib.data.zoneinfo["America/Fort_Wayne"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Fortaleza"] = { - "c": "BR", - "f": "-03", - "n": "SA Eastern {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Glace_Bay"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "A{c}T", - "n": "Atlantic {c} Time", - "o": "-4:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Godthab"] = { - "e": { - "m": 10, - "r": "l6", - "t": "23:0" - }, - "f": "-03/-02", - "o": "-3:0", - "s": { - "c": "S", - "m": 3, - "r": "l6", - "t": "22:0", - "v": "1:0" - }, - "c": "GL", - "n": "Greenland {c} Time" -}; -ilib.data.zoneinfo["America/Goose_Bay"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "A{c}T", - "n": "Atlantic {c} Time", - "o": "-4:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Grand_Turk"] = { - "c": "TC", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Turks And Caicos {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Grenada"] = { - "c": "GD", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Guadeloupe"] = { - "c": "GP", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Guatemala"] = { - "c": "GT", - "f": "CST", - "n": "Central America {c} Time", - "o": "-6:0" -}; -ilib.data.zoneinfo["America/Guayaquil"] = { - "c": "EC", - "f": "-05/-04", - "n": "SA Pacific {c} Time", - "o": "-5:0" -}; -ilib.data.zoneinfo["America/Guyana"] = { - "c": "GY", - "f": "-04", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Halifax"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "A{c}T", - "n": "Atlantic {c} Time", - "o": "-4:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Havana"] = { - "c": "CU", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "1:0" - }, - "f": "C{c}T", - "n": "Cuba {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "0:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Hermosillo"] = { - "c": "MX", - "f": "MST", - "n": "US Mountain {c} Time", - "o": "-7:0" -}; -ilib.data.zoneinfo["America/Indiana/Indianapolis"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "US Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Indiana/Knox"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "n": "Central {c} Time", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Indiana/Marengo"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "US Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Indiana/Petersburg"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Indiana/Tell_City"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "n": "Central {c} Time", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Indiana/Vevay"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "US Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Indiana/Vincennes"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Indiana/Winamac"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Indianapolis"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "US Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Inuvik"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "M{c}T", - "n": "Mountain {c} Time", - "o": "-7:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Iqaluit"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Jamaica"] = { - "c": "JM", - "f": "EST", - "n": "SA Pacific {c} Time", - "o": "-5:0" -}; -ilib.data.zoneinfo["America/Jujuy"] = { - "c": "AR", - "f": "-03", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Juneau"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "AK{c}T", - "n": "Alaskan {c} Time", - "o": "-9:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Kentucky/Louisville"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Kentucky/Monticello"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Knox_IN"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Kralendijk"] = { - "c": "BQ", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/La_Paz"] = { - "c": "BO", - "f": "-04", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Lima"] = { - "c": "PE", - "f": "-05/-04", - "n": "SA Pacific {c} Time", - "o": "-5:0" -}; -ilib.data.zoneinfo["America/Los_Angeles"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "P{c}T", - "n": "Pacific {c} Time", - "o": "-8:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Louisville"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Lower_Princes"] = { - "c": "SX", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Maceio"] = { - "c": "BR", - "f": "-03", - "n": "SA Eastern {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Managua"] = { - "c": "NI", - "f": "CST", - "n": "Central America {c} Time", - "o": "-6:0" -}; -ilib.data.zoneinfo["America/Manaus"] = { - "c": "BR", - "f": "-04", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Marigot"] = { - "c": "MF", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Martinique"] = { - "c": "MQ", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Matamoros"] = { - "c": "MX", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "n": "Central {c} Time", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Mazatlan"] = { - "c": "MX", - "f": "MST", - "n": "Mountain {c} Time (Mexico)", - "o": "-7:0" -}; -ilib.data.zoneinfo["America/Mendoza"] = { - "c": "AR", - "f": "-03", - "n": "Argentina {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Menominee"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "n": "Central {c} Time", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Merida"] = { - "c": "MX", - "f": "CST", - "n": "Central {c} Time (Mexico)", - "o": "-6:0" -}; -ilib.data.zoneinfo["America/Metlakatla"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "AK{c}T", - "n": "Alaskan {c} Time", - "o": "-9:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Mexico_City"] = { - "c": "MX", - "f": "CST", - "n": "Central {c} Time (Mexico)", - "o": "-6:0" -}; -ilib.data.zoneinfo["America/Miquelon"] = { - "c": "PM", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "-03/-02", - "n": "Saint Pierre {c} Time", - "o": "-3:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Moncton"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "A{c}T", - "n": "Atlantic {c} Time", - "o": "-4:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Monterrey"] = { - "c": "MX", - "f": "CST", - "n": "Central {c} Time (Mexico)", - "o": "-6:0" -}; -ilib.data.zoneinfo["America/Montevideo"] = { - "c": "UY", - "f": "-03/-02", - "n": "Montevideo {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Montreal"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Montserrat"] = { - "c": "MS", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Nassau"] = { - "c": "BS", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/New_York"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Nipigon"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Nome"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "AK{c}T", - "n": "Alaskan {c} Time", - "o": "-9:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Noronha"] = { - "c": "BR", - "f": "-02", - "n": "UTC-02", - "o": "-2:0" -}; -ilib.data.zoneinfo["America/North_Dakota/Beulah"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "n": "Central {c} Time", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/North_Dakota/Center"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "n": "Central {c} Time", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/North_Dakota/New_Salem"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "n": "Central {c} Time", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Nuuk"] = { - "c": "GL", - "e": { - "m": 10, - "r": "l0", - "t": "0:0" - }, - "f": "-02/-01", - "n": "Greenland {c} Time", - "o": "-2:0", - "s": { - "c": "S", - "m": 3, - "r": "l6", - "t": "23:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Ojinaga"] = { - "c": "MX", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "n": "Central {c} Time", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Panama"] = { - "c": "PA", - "f": "EST", - "n": "SA Pacific {c} Time", - "o": "-5:0" -}; -ilib.data.zoneinfo["America/Pangnirtung"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Paramaribo"] = { - "c": "SR", - "f": "-03", - "n": "SA Eastern {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Phoenix"] = { - "c": "US", - "f": "MST", - "n": "US Mountain {c} Time", - "o": "-7:0" -}; -ilib.data.zoneinfo["America/Port-au-Prince"] = { - "c": "HT", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Haiti {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Port_of_Spain"] = { - "c": "TT", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Porto_Acre"] = { - "c": "BR", - "f": "-05", - "o": "-5:0" -}; -ilib.data.zoneinfo["America/Porto_Velho"] = { - "c": "BR", - "f": "-04", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Puerto_Rico"] = { - "c": "PR", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Punta_Arenas"] = { - "c": "CL", - "f": "-03", - "n": "Magallanes {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Rainy_River"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "n": "Central {c} Time", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Rankin_Inlet"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "n": "Central {c} Time", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Recife"] = { - "c": "BR", - "f": "-03", - "n": "SA Eastern {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Regina"] = { - "c": "CA", - "f": "CST", - "n": "Canada Central {c} Time", - "o": "-6:0" -}; -ilib.data.zoneinfo["America/Resolute"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "n": "Central {c} Time", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Rio_Branco"] = { - "c": "BR", - "f": "-05", - "n": "SA Pacific {c} Time", - "o": "-5:0" -}; -ilib.data.zoneinfo["America/Rosario"] = { - "c": "AR", - "f": "-03/-02", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Santarem"] = { - "c": "BR", - "f": "-03", - "n": "SA Eastern {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Santiago"] = { - "c": "CL", - "e": { - "m": 4, - "r": "0>2", - "t": "0:0" - }, - "f": "-04/-03", - "n": "Pacific SA {c} Time", - "o": "-4:0", - "s": { - "m": 9, - "r": "0>2", - "t": "0:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Santo_Domingo"] = { - "c": "DO", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Sao_Paulo"] = { - "c": "BR", - "f": "-03/-02", - "n": "E. South America {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["America/Scoresbysund"] = { - "c": "GL", - "e": { - "m": 10, - "r": "l0", - "t": "0:0" - }, - "f": "-02/-01", - "n": "Azores {c} Time", - "o": "-2:0", - "s": { - "c": "S", - "m": 3, - "r": "l6", - "t": "23:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Sitka"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "AK{c}T", - "n": "Alaskan {c} Time", - "o": "-9:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/St_Barthelemy"] = { - "c": "BL", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/St_Johns"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "N{c}T", - "n": "Newfoundland {c} Time", - "o": "-3:30", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/St_Kitts"] = { - "c": "KN", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/St_Lucia"] = { - "c": "LC", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/St_Thomas"] = { - "c": "VI", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/St_Vincent"] = { - "c": "VC", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Swift_Current"] = { - "c": "CA", - "f": "CST", - "n": "Canada Central {c} Time", - "o": "-6:0" -}; -ilib.data.zoneinfo["America/Tegucigalpa"] = { - "c": "HN", - "f": "CST", - "n": "Central America {c} Time", - "o": "-6:0" -}; -ilib.data.zoneinfo["America/Thule"] = { - "c": "GL", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "A{c}T", - "n": "Atlantic {c} Time", - "o": "-4:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Thunder_Bay"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Tijuana"] = { - "c": "MX", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "P{c}T", - "n": "Pacific {c} Time (Mexico)", - "o": "-8:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Toronto"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Tortola"] = { - "c": "VG", - "f": "AST", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Vancouver"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "P{c}T", - "n": "Pacific {c} Time", - "o": "-8:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Virgin"] = { - "c": "TT", - "f": "AST", - "o": "-4:0" -}; -ilib.data.zoneinfo["America/Whitehorse"] = { - "c": "CA", - "f": "MST", - "n": "Yukon {c} Time", - "o": "-7:0" -}; -ilib.data.zoneinfo["America/Winnipeg"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "n": "Central {c} Time", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Yakutat"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "AK{c}T", - "n": "Alaskan {c} Time", - "o": "-9:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["America/Yellowknife"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "M{c}T", - "n": "Mountain {c} Time", - "o": "-7:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Antarctica/Casey"] = { - "c": "AQ", - "f": "+08", - "n": "Central Pacific {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Antarctica/Davis"] = { - "c": "AQ", - "f": "+07", - "n": "SE Asia {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Antarctica/DumontDUrville"] = { - "c": "AQ", - "f": "+10", - "n": "West Pacific {c} Time", - "o": "10:0" -}; -ilib.data.zoneinfo["Antarctica/Macquarie"] = { - "c": "AU", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "AE{c}T", - "n": "Tasmania {c} Time", - "o": "10:0", - "s": { - "c": "D", - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Antarctica/Mawson"] = { - "c": "AQ", - "f": "+05", - "n": "West Asia {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Antarctica/McMurdo"] = { - "c": "AQ", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "NZ{c}T", - "n": "New Zealand {c} Time", - "o": "12:0", - "s": { - "c": "D", - "m": 9, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Antarctica/Palmer"] = { - "c": "AQ", - "f": "-03", - "n": "SA Eastern {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["Antarctica/Rothera"] = { - "c": "AQ", - "f": "-03", - "n": "SA Eastern {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["Antarctica/South_Pole"] = { - "c": "NZ", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "NZ{c}T", - "o": "12:0", - "s": { - "c": "D", - "m": 9, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Antarctica/Syowa"] = { - "c": "AQ", - "f": "+03", - "n": "E. Africa {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Antarctica/Troll"] = { - "c": "AQ", - "e": { - "c": "+00", - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "+00", - "o": "0:0", - "s": { - "c": "+02", - "m": 3, - "r": "l0", - "t": "1:0", - "v": "2:0" - } -}; -ilib.data.zoneinfo["Antarctica/Vostok"] = { - "c": "AQ", - "f": "+05", - "n": "Central Asia {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Arctic/Longyearbyen"] = { - "c": "SJ", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Asia/Aden"] = { - "c": "YE", - "f": "+03", - "n": "Arab {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Asia/Almaty"] = { - "c": "KZ", - "f": "+05", - "n": "Central Asia {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Asia/Amman"] = { - "c": "JO", - "f": "+03", - "n": "Jordan {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Asia/Anadyr"] = { - "c": "RU", - "f": "+12", - "n": "Russia Time Zone 11", - "o": "12:0" -}; -ilib.data.zoneinfo["Asia/Aqtau"] = { - "c": "KZ", - "f": "+05", - "n": "West Asia {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Asia/Aqtobe"] = { - "c": "KZ", - "f": "+05", - "n": "West Asia {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Asia/Ashgabat"] = { - "c": "TM", - "f": "+05", - "n": "West Asia {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Asia/Atyrau"] = { - "c": "KZ", - "f": "+05", - "n": "West Asia {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Asia/Baghdad"] = { - "c": "IQ", - "f": "+03/+04", - "n": "Arabic {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Asia/Bahrain"] = { - "c": "BH", - "f": "+03", - "n": "Arab {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Asia/Baku"] = { - "c": "AZ", - "f": "+04/+05", - "n": "Azerbaijan {c} Time", - "o": "4:0" -}; -ilib.data.zoneinfo["Asia/Bangkok"] = { - "c": "TH", - "f": "+07", - "n": "SE Asia {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Asia/Barnaul"] = { - "c": "RU", - "f": "+07", - "n": "Altai {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Asia/Beirut"] = { - "c": "LB", - "e": { - "m": 10, - "r": "l0", - "t": "0:0" - }, - "f": "EE{c}T", - "n": "Middle East {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "0:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Asia/Bishkek"] = { - "c": "KG", - "f": "+06", - "n": "Central Asia {c} Time", - "o": "6:0" -}; -ilib.data.zoneinfo["Asia/Brunei"] = { - "c": "BN", - "f": "+08", - "n": "Singapore {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Chita"] = { - "c": "RU", - "f": "+09", - "n": "Transbaikal {c} Time", - "o": "9:0" -}; -ilib.data.zoneinfo["Asia/Choibalsan"] = { - "c": "MN", - "f": "+08/+09", - "n": "Ulaanbaatar {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Chongqing"] = { - "c": "CN", - "f": "CST", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Chungking"] = { - "c": "CN", - "f": "CST", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Colombo"] = { - "c": "LK", - "f": "+0530", - "n": "Sri Lanka {c} Time", - "o": "5:30" -}; -ilib.data.zoneinfo["Asia/Damascus"] = { - "c": "SY", - "f": "+03", - "n": "Syria {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Asia/Dhaka"] = { - "c": "BD", - "f": "+06/+07", - "n": "Bangladesh {c} Time", - "o": "6:0" -}; -ilib.data.zoneinfo["Asia/Dili"] = { - "c": "TL", - "f": "+09", - "n": "Tokyo {c} Time", - "o": "9:0" -}; -ilib.data.zoneinfo["Asia/Dubai"] = { - "c": "AE", - "f": "+04", - "n": "Mauritius {c} Time", - "o": "4:0" -}; -ilib.data.zoneinfo["Asia/Dushanbe"] = { - "c": "TJ", - "f": "+05", - "n": "West Asia {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Asia/Famagusta"] = { - "c": "CY", - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "n": "GTB {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Asia/Gaza"] = { - "c": "PS", - "e": { - "m": 10, - "r": "6<30", - "t": "2:0" - }, - "f": "EE{c}T", - "n": "West Bank {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 4, - "r": "20", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Asia/Hanoi"] = { - "f": "+07", - "o": "7:0" -}; -ilib.data.zoneinfo["Asia/Harbin"] = { - "c": "CN", - "f": "CST", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Hebron"] = { - "c": "PS", - "e": { - "m": 10, - "r": "6<30", - "t": "2:0" - }, - "f": "EE{c}T", - "n": "West Bank {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 4, - "r": "20", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Asia/Ho_Chi_Minh"] = { - "c": "VN", - "f": "+07", - "n": "SE Asia {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Asia/Hong_Kong"] = { - "c": "HK", - "f": "HKST", - "n": "China {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Hovd"] = { - "c": "MN", - "f": "+07/+08", - "n": "W. Mongolia {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Asia/Irkutsk"] = { - "c": "RU", - "f": "+08", - "n": "North Asia East {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Istanbul"] = { - "f": "+03", - "o": "3:0" -}; -ilib.data.zoneinfo["Asia/Jakarta"] = { - "c": "ID", - "f": "WIB", - "n": "SE Asia {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Asia/Jayapura"] = { - "c": "ID", - "f": "WIT", - "n": "Tokyo {c} Time", - "o": "9:0" -}; -ilib.data.zoneinfo["Asia/Jerusalem"] = { - "c": "IL", - "e": { - "c": "S", - "m": 10, - "r": "l0", - "t": "2:0" - }, - "f": "I{c}T", - "n": "Israel {c} Time", - "o": "2:0", - "s": { - "c": "D", - "m": 3, - "r": "5>23", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Asia/Kabul"] = { - "c": "AF", - "f": "+0430", - "n": "Afghanistan {c} Time", - "o": "4:30" -}; -ilib.data.zoneinfo["Asia/Kamchatka"] = { - "c": "RU", - "f": "+12", - "n": "Russia Time Zone 11", - "o": "12:0" -}; -ilib.data.zoneinfo["Asia/Karachi"] = { - "c": "PK", - "f": "PKST", - "n": "Pakistan {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Asia/Kashgar"] = { - "c": "CN", - "f": "CST", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Kathmandu"] = { - "c": "NP", - "f": "+0545", - "n": "Nepal {c} Time", - "o": "5:45" -}; -ilib.data.zoneinfo["Asia/Khandyga"] = { - "c": "RU", - "f": "+09", - "n": "Yakutsk {c} Time", - "o": "9:0" -}; -ilib.data.zoneinfo["Asia/Kolkata"] = { - "c": "IN", - "f": "IST", - "n": "India {c} Time", - "o": "5:30" -}; -ilib.data.zoneinfo["Asia/Krasnoyarsk"] = { - "c": "RU", - "f": "+07", - "n": "North Asia {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Asia/Kuala_Lumpur"] = { - "c": "MY", - "f": "+08", - "n": "Singapore {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Kuching"] = { - "c": "MY", - "f": "+08", - "n": "Singapore {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Kuwait"] = { - "c": "KW", - "f": "+03", - "n": "Arab {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Asia/Macau"] = { - "c": "MO", - "f": "CST", - "n": "China {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Magadan"] = { - "c": "RU", - "f": "+11", - "n": "Magadan {c} Time", - "o": "11:0" -}; -ilib.data.zoneinfo["Asia/Makassar"] = { - "c": "ID", - "f": "WITA", - "n": "Singapore {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Manila"] = { - "c": "PH", - "f": "PST", - "n": "Singapore {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Muscat"] = { - "c": "OM", - "f": "+04", - "n": "Arabian {c} Time", - "o": "4:0" -}; -ilib.data.zoneinfo["Asia/Nicosia"] = { - "c": "CY", - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "n": "GTB {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Asia/Novokuznetsk"] = { - "c": "RU", - "f": "+07", - "n": "North Asia {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Asia/Novosibirsk"] = { - "c": "RU", - "f": "+07", - "n": "N. Central Asia {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Asia/Omsk"] = { - "c": "RU", - "f": "+06", - "n": "Omsk {c} Time", - "o": "6:0" -}; -ilib.data.zoneinfo["Asia/Oral"] = { - "c": "KZ", - "f": "+05", - "n": "West Asia {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Asia/Phnom_Penh"] = { - "c": "KH", - "f": "+07", - "n": "SE Asia {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Asia/Pontianak"] = { - "c": "ID", - "f": "WIB", - "n": "SE Asia {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Asia/Pyongyang"] = { - "c": "KP", - "f": "KST", - "n": "North Korea {c} Time", - "o": "9:0" -}; -ilib.data.zoneinfo["Asia/Qatar"] = { - "c": "QA", - "f": "+03", - "n": "Arab {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Asia/Qostanay"] = { - "c": "KZ", - "f": "+05", - "n": "Central Asia {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Asia/Qyzylorda"] = { - "c": "KZ", - "f": "+05", - "n": "Qyzylorda {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Asia/Riyadh"] = { - "c": "SA", - "f": "+03", - "n": "E. Africa {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Asia/Saigon"] = { - "c": "VN", - "f": "+07", - "n": "SE Asia {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Asia/Sakhalin"] = { - "c": "RU", - "f": "+11", - "n": "Sakhalin {c} Time", - "o": "11:0" -}; -ilib.data.zoneinfo["Asia/Samarkand"] = { - "c": "UZ", - "f": "+05", - "n": "West Asia {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Asia/Seoul"] = { - "c": "KR", - "f": "KST", - "n": "Korea {c} Time", - "o": "9:0" -}; -ilib.data.zoneinfo["Asia/Shanghai"] = { - "c": "CN", - "f": "CST", - "n": "China {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Singapore"] = { - "c": "SG", - "f": "+08", - "n": "Singapore {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Srednekolymsk"] = { - "c": "RU", - "f": "+11", - "n": "Russia Time Zone 10", - "o": "11:0" -}; -ilib.data.zoneinfo["Asia/Taipei"] = { - "c": "TW", - "f": "CST", - "n": "Taipei {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Tashkent"] = { - "c": "UZ", - "f": "+05", - "n": "West Asia {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Asia/Tbilisi"] = { - "c": "GE", - "f": "+04", - "n": "Georgian {c} Time", - "o": "4:0" -}; -ilib.data.zoneinfo["Asia/Tehran"] = { - "c": "IR", - "f": "+0330/+0430", - "n": "Iran {c} Time", - "o": "3:30" -}; -ilib.data.zoneinfo["Asia/Tel_Aviv"] = { - "c": "IL", - "e": { - "c": "S", - "m": 10, - "r": "l0", - "t": "2:0" - }, - "f": "I{c}T", - "o": "2:0", - "s": { - "c": "D", - "m": 3, - "r": "5>23", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Asia/Thimphu"] = { - "c": "BT", - "f": "+06", - "n": "Bangladesh {c} Time", - "o": "6:0" -}; -ilib.data.zoneinfo["Asia/Tokyo"] = { - "c": "JP", - "f": "JST", - "n": "Tokyo {c} Time", - "o": "9:0" -}; -ilib.data.zoneinfo["Asia/Tomsk"] = { - "c": "RU", - "f": "+07", - "n": "Tomsk {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Asia/Ulaanbaatar"] = { - "c": "MN", - "f": "+08/+09", - "n": "Ulaanbaatar {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Ulan_Bator"] = { - "c": "MN", - "f": "+08/+09", - "o": "8:0" -}; -ilib.data.zoneinfo["Asia/Urumqi"] = { - "c": "CN", - "f": "+06", - "n": "Central Asia {c} Time", - "o": "6:0" -}; -ilib.data.zoneinfo["Asia/Ust-Nera"] = { - "c": "RU", - "f": "+10", - "n": "Vladivostok {c} Time", - "o": "10:0" -}; -ilib.data.zoneinfo["Asia/Vientiane"] = { - "c": "LA", - "f": "+07", - "n": "SE Asia {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Asia/Vladivostok"] = { - "c": "RU", - "f": "+10", - "n": "Vladivostok {c} Time", - "o": "10:0" -}; -ilib.data.zoneinfo["Asia/Yakutsk"] = { - "c": "RU", - "f": "+09", - "n": "Yakutsk {c} Time", - "o": "9:0" -}; -ilib.data.zoneinfo["Asia/Yangon"] = { - "c": "MM", - "f": "+0630", - "n": "Myanmar {c} Time", - "o": "6:30" -}; -ilib.data.zoneinfo["Asia/Yekaterinburg"] = { - "c": "RU", - "f": "+05", - "n": "Ekaterinburg {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Asia/Yerevan"] = { - "c": "AM", - "f": "+04/+05", - "n": "Caucasus {c} Time", - "o": "4:0" -}; -ilib.data.zoneinfo["Atlantic/Azores"] = { - "c": "PT", - "e": { - "m": 10, - "r": "l0", - "t": "1:0" - }, - "f": "-01/+00", - "n": "Azores {c} Time", - "o": "-1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "0:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Atlantic/Bermuda"] = { - "c": "BM", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "A{c}T", - "n": "Atlantic {c} Time", - "o": "-4:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Atlantic/Canary"] = { - "c": "ES", - "e": { - "m": 10, - "r": "l0", - "t": "2:0" - }, - "f": "WE{c}T", - "n": "GMT {c} Time", - "o": "0:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "1:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Atlantic/Cape_Verde"] = { - "c": "CV", - "f": "-01", - "n": "Cape Verde {c} Time", - "o": "-1:0" -}; -ilib.data.zoneinfo["Atlantic/Faroe"] = { - "c": "FO", - "e": { - "m": 10, - "r": "l0", - "t": "2:0" - }, - "f": "WE{c}T", - "n": "GMT {c} Time", - "o": "0:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "1:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Atlantic/Jan_Mayen"] = { - "c": "NO", - "f": "-01", - "o": "-1:0" -}; -ilib.data.zoneinfo["Atlantic/Madeira"] = { - "c": "PT", - "e": { - "m": 10, - "r": "l0", - "t": "2:0" - }, - "f": "WE{c}T", - "n": "GMT {c} Time", - "o": "0:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "1:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Atlantic/Reykjavik"] = { - "c": "IS", - "f": "GMT", - "n": "Greenwich {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["Atlantic/South_Georgia"] = { - "c": "GS", - "f": "-02", - "n": "UTC-02", - "o": "-2:0" -}; -ilib.data.zoneinfo["Atlantic/St_Helena"] = { - "c": "SH", - "f": "GMT", - "n": "Greenwich {c} Time", - "o": "0:0" -}; -ilib.data.zoneinfo["Atlantic/Stanley"] = { - "c": "FK", - "f": "-03", - "n": "SA Eastern {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["Australia/ACT"] = { - "c": "AU", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "AE{c}T", - "o": "10:0", - "s": { - "c": "D", - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Australia/Adelaide"] = { - "c": "AU", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "AC{c}T", - "n": "Cen. Australia {c} Time", - "o": "9:30", - "s": { - "c": "D", - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Australia/Brisbane"] = { - "c": "AU", - "f": "AEST", - "n": "E. Australia {c} Time", - "o": "10:0" -}; -ilib.data.zoneinfo["Australia/Broken_Hill"] = { - "c": "AU", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "AC{c}T", - "n": "Cen. Australia {c} Time", - "o": "9:30", - "s": { - "c": "D", - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Australia/Canberra"] = { - "c": "AU", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "AE{c}T", - "o": "10:0", - "s": { - "c": "D", - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Australia/Currie"] = { - "c": "AU", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "AE{c}T", - "n": "Tasmania {c} Time", - "o": "10:0", - "s": { - "c": "D", - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Australia/Darwin"] = { - "c": "AU", - "f": "ACST", - "n": "AUS Central {c} Time", - "o": "9:30" -}; -ilib.data.zoneinfo["Australia/Eucla"] = { - "c": "AU", - "f": "+0845/+0945", - "n": "Aus Central W. {c} Time", - "o": "8:45" -}; -ilib.data.zoneinfo["Australia/Hobart"] = { - "c": "AU", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "AE{c}T", - "n": "Tasmania {c} Time", - "o": "10:0", - "s": { - "c": "D", - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Australia/LHI"] = { - "c": "AU", - "e": { - "m": 4, - "r": "0>1", - "t": "2:0" - }, - "f": "+1030/+11", - "o": "10:30", - "s": { - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "0:30" - } -}; -ilib.data.zoneinfo["Australia/Lindeman"] = { - "c": "AU", - "f": "AEST", - "n": "E. Australia {c} Time", - "o": "10:0" -}; -ilib.data.zoneinfo["Australia/Lord_Howe"] = { - "c": "AU", - "e": { - "m": 4, - "r": "0>1", - "t": "2:0" - }, - "f": "+1030/+11", - "n": "Lord Howe {c} Time", - "o": "10:30", - "s": { - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "0:30" - } -}; -ilib.data.zoneinfo["Australia/Melbourne"] = { - "c": "AU", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "AE{c}T", - "n": "AUS Eastern {c} Time", - "o": "10:0", - "s": { - "c": "D", - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Australia/NSW"] = { - "c": "AU", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "AE{c}T", - "o": "10:0", - "s": { - "c": "D", - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Australia/North"] = { - "c": "AU", - "f": "ACST", - "o": "9:30" -}; -ilib.data.zoneinfo["Australia/Perth"] = { - "c": "AU", - "f": "AWST", - "n": "W. Australia {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Australia/Queensland"] = { - "c": "AU", - "f": "AEST", - "o": "10:0" -}; -ilib.data.zoneinfo["Australia/South"] = { - "c": "AU", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "AC{c}T", - "o": "9:30", - "s": { - "c": "D", - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Australia/Sydney"] = { - "c": "AU", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "AE{c}T", - "n": "AUS Eastern {c} Time", - "o": "10:0", - "s": { - "c": "D", - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Australia/Tasmania"] = { - "c": "AU", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "AE{c}T", - "o": "10:0", - "s": { - "c": "D", - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Australia/Victoria"] = { - "c": "AU", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "AE{c}T", - "o": "10:0", - "s": { - "c": "D", - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Australia/Yancowinna"] = { - "c": "AU", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "AC{c}T", - "o": "9:30", - "s": { - "c": "D", - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Brazil/Acre"] = { - "c": "BR", - "f": "-05", - "o": "-5:0" -}; -ilib.data.zoneinfo["Brazil/East"] = { - "c": "BR", - "f": "-03/-02", - "o": "-3:0" -}; -ilib.data.zoneinfo["CET"] = { - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["CST6CDT"] = { - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "n": "Central {c} Time", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Canada/Central"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Canada/Mountain"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "M{c}T", - "o": "-7:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Canada/Newfoundland"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "N{c}T", - "o": "-3:30", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Canada/Pacific"] = { - "c": "CA", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "P{c}T", - "o": "-8:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Canada/Yukon"] = { - "c": "CA", - "f": "MST", - "o": "-7:0" -}; -ilib.data.zoneinfo["Chile/Continental"] = { - "c": "CL", - "e": { - "m": 4, - "r": "0>2", - "t": "0:0" - }, - "f": "-04/-03", - "o": "-4:0", - "s": { - "m": 9, - "r": "0>2", - "t": "0:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["EET"] = { - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["EST"] = { - "f": "EST", - "o": "-5:0" -}; -ilib.data.zoneinfo["EST5EDT"] = { - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "n": "Eastern {c} Time", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Etc/GMT+1"] = { - "f": "-01", - "n": "Cape Verde {c} Time", - "o": "-1:0" -}; -ilib.data.zoneinfo["Etc/GMT+10"] = { - "f": "-10", - "n": "Hawaiian {c} Time", - "o": "-10:0" -}; -ilib.data.zoneinfo["Etc/GMT+11"] = { - "f": "-11", - "n": "UTC-11", - "o": "-11:0" -}; -ilib.data.zoneinfo["Etc/GMT+12"] = { - "f": "-12", - "n": "Dateline {c} Time", - "o": "-12:0" -}; -ilib.data.zoneinfo["Etc/GMT+2"] = { - "f": "-02", - "n": "UTC-02", - "o": "-2:0" -}; -ilib.data.zoneinfo["Etc/GMT+3"] = { - "f": "-03", - "n": "SA Eastern {c} Time", - "o": "-3:0" -}; -ilib.data.zoneinfo["Etc/GMT+4"] = { - "f": "-04", - "n": "SA Western {c} Time", - "o": "-4:0" -}; -ilib.data.zoneinfo["Etc/GMT+5"] = { - "f": "-05", - "n": "SA Pacific {c} Time", - "o": "-5:0" -}; -ilib.data.zoneinfo["Etc/GMT+6"] = { - "f": "-06", - "n": "Central America {c} Time", - "o": "-6:0" -}; -ilib.data.zoneinfo["Etc/GMT+7"] = { - "f": "-07", - "n": "US Mountain {c} Time", - "o": "-7:0" -}; -ilib.data.zoneinfo["Etc/GMT+8"] = { - "f": "-08", - "n": "UTC-08", - "o": "-8:0" -}; -ilib.data.zoneinfo["Etc/GMT+9"] = { - "f": "-09", - "n": "UTC-09", - "o": "-9:0" -}; -ilib.data.zoneinfo["Etc/GMT-1"] = { - "f": "+01", - "n": "W. Central Africa {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Etc/GMT-10"] = { - "f": "+10", - "n": "West Pacific {c} Time", - "o": "10:0" -}; -ilib.data.zoneinfo["Etc/GMT-11"] = { - "f": "+11", - "n": "Central Pacific {c} Time", - "o": "11:0" -}; -ilib.data.zoneinfo["Etc/GMT-12"] = { - "f": "+12", - "n": "UTC+12", - "o": "12:0" -}; -ilib.data.zoneinfo["Etc/GMT-13"] = { - "f": "+13", - "n": "UTC+13", - "o": "13:0" -}; -ilib.data.zoneinfo["Etc/GMT-14"] = { - "f": "+14", - "n": "Line Islands {c} Time", - "o": "14:0" -}; -ilib.data.zoneinfo["Etc/GMT-2"] = { - "f": "+02", - "n": "South Africa {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Etc/GMT-3"] = { - "f": "+03", - "n": "E. Africa {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Etc/GMT-4"] = { - "f": "+04", - "n": "Arabian {c} Time", - "o": "4:0" -}; -ilib.data.zoneinfo["Etc/GMT-5"] = { - "f": "+05", - "n": "West Asia {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Etc/GMT-6"] = { - "f": "+06", - "n": "Central Asia {c} Time", - "o": "6:0" -}; -ilib.data.zoneinfo["Etc/GMT-7"] = { - "f": "+07", - "n": "SE Asia {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Etc/GMT-8"] = { - "f": "+08", - "n": "Singapore {c} Time", - "o": "8:0" -}; -ilib.data.zoneinfo["Etc/GMT-9"] = { - "f": "+09", - "n": "Tokyo {c} Time", - "o": "9:0" -}; -ilib.data.zoneinfo["Etc/GMT"] = { - "f": "GMT", - "n": "UTC", - "o": "0:0" -}; -ilib.data.zoneinfo["Etc/UTC"] = { - "f": "UTC", - "n": "UTC", - "o": "0:0" -}; -ilib.data.zoneinfo["Europe/Amsterdam"] = { - "c": "NL", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Andorra"] = { - "c": "AD", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Astrakhan"] = { - "c": "RU", - "f": "+04", - "n": "Astrakhan {c} Time", - "o": "4:0" -}; -ilib.data.zoneinfo["Europe/Athens"] = { - "c": "GR", - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "n": "GTB {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Belfast"] = { - "c": "GB", - "e": { - "m": 10, - "r": "l0", - "t": "2:0" - }, - "f": "GMT/BST", - "o": "0:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "1:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Belgrade"] = { - "c": "RS", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "Central European {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Berlin"] = { - "c": "DE", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Bratislava"] = { - "c": "SK", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "Central Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Brussels"] = { - "c": "BE", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Bucharest"] = { - "c": "RO", - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "n": "GTB {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Budapest"] = { - "c": "HU", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "Central Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Busingen"] = { - "c": "DE", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Chisinau"] = { - "c": "MD", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "EE{c}T", - "n": "E. Europe {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Copenhagen"] = { - "c": "DK", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "Romance {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Dublin"] = { - "c": "IE", - "e": { - "m": 10, - "r": "l0", - "t": "1:0", - "z": "u" - }, - "f": "IST/GMT", - "n": "GMT {c} Time", - "o": "1:0" -}; -ilib.data.zoneinfo["Europe/Gibraltar"] = { - "c": "GI", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Guernsey"] = { - "c": "GG", - "e": { - "m": 10, - "r": "l0", - "t": "2:0" - }, - "f": "GMT/BST", - "n": "GMT {c} Time", - "o": "0:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "1:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Helsinki"] = { - "c": "FI", - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "n": "FLE {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Isle_of_Man"] = { - "c": "IM", - "e": { - "m": 10, - "r": "l0", - "t": "2:0" - }, - "f": "GMT/BST", - "n": "GMT {c} Time", - "o": "0:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "1:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Istanbul"] = { - "c": "TR", - "f": "+03", - "n": "Turkey {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Europe/Jersey"] = { - "c": "JE", - "e": { - "m": 10, - "r": "l0", - "t": "2:0" - }, - "f": "GMT/BST", - "n": "GMT {c} Time", - "o": "0:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "1:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Kaliningrad"] = { - "c": "RU", - "f": "EET", - "n": "Kaliningrad {c} Time", - "o": "2:0" -}; -ilib.data.zoneinfo["Europe/Kiev"] = { - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - }, - "c": "UA", - "n": "FLE {c} Time" -}; -ilib.data.zoneinfo["Europe/Kirov"] = { - "c": "RU", - "f": "MSK", - "n": "Russian {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Europe/Kyiv"] = { - "c": "UA", - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "n": "FLE {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Lisbon"] = { - "c": "PT", - "e": { - "m": 10, - "r": "l0", - "t": "2:0" - }, - "f": "WE{c}T", - "n": "GMT {c} Time", - "o": "0:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "1:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Ljubljana"] = { - "c": "SI", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "Central Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/London"] = { - "c": "GB", - "e": { - "m": 10, - "r": "l0", - "t": "2:0" - }, - "f": "GMT/BST", - "n": "GMT {c} Time", - "o": "0:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "1:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Luxembourg"] = { - "c": "LU", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Madrid"] = { - "c": "ES", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "Romance {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Malta"] = { - "c": "MT", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Mariehamn"] = { - "c": "AX", - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "n": "FLE {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Minsk"] = { - "c": "BY", - "f": "+03", - "n": "Belarus {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Europe/Monaco"] = { - "c": "MC", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Moscow"] = { - "c": "RU", - "f": "MSK", - "n": "Russian {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Europe/Nicosia"] = { - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Oslo"] = { - "c": "NO", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Paris"] = { - "c": "FR", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Podgorica"] = { - "c": "ME", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "Central Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Prague"] = { - "c": "CZ", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "Central Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Riga"] = { - "c": "LV", - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "n": "FLE {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Rome"] = { - "c": "IT", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Samara"] = { - "c": "RU", - "f": "+04", - "n": "Russia Time Zone 3", - "o": "4:0" -}; -ilib.data.zoneinfo["Europe/San_Marino"] = { - "c": "SM", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Sarajevo"] = { - "c": "BA", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "Central European {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Saratov"] = { - "c": "RU", - "f": "+04", - "n": "Saratov {c} Time", - "o": "4:0" -}; -ilib.data.zoneinfo["Europe/Simferopol"] = { - "c": "UA", - "f": "MSK", - "n": "Russian {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Europe/Skopje"] = { - "c": "MK", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "Central European {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Sofia"] = { - "c": "BG", - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "n": "FLE {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Stockholm"] = { - "c": "SE", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Tallinn"] = { - "c": "EE", - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "n": "FLE {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Tirane"] = { - "c": "AL", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "Central Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Tiraspol"] = { - "c": "MD", - "f": "MSK/MSD", - "o": "3:0" -}; -ilib.data.zoneinfo["Europe/Ulyanovsk"] = { - "c": "RU", - "f": "+04", - "n": "Astrakhan {c} Time", - "o": "4:0" -}; -ilib.data.zoneinfo["Europe/Uzhgorod"] = { - "c": "UA", - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "n": "FLE {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Vaduz"] = { - "c": "LI", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Vatican"] = { - "c": "VA", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Vienna"] = { - "c": "AT", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Vilnius"] = { - "c": "LT", - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "n": "FLE {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Volgograd"] = { - "c": "RU", - "f": "MSK", - "n": "Volgograd {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Europe/Warsaw"] = { - "c": "PL", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "Central European {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Zagreb"] = { - "c": "HR", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "Central European {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Zaporozhye"] = { - "c": "UA", - "e": { - "m": 10, - "r": "l0", - "t": "4:0" - }, - "f": "EE{c}T", - "n": "FLE {c} Time", - "o": "2:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "3:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Europe/Zurich"] = { - "c": "CH", - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "CE{c}T", - "n": "W. Europe {c} Time", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Factory"] = { - "f": "-00", - "o": "0:0" -}; -ilib.data.zoneinfo["HST"] = { - "f": "HST", - "o": "-10:0" -}; -ilib.data.zoneinfo["Iceland"] = { - "c": "CI", - "f": "GMT", - "o": "0:0" -}; -ilib.data.zoneinfo["Indian/Antananarivo"] = { - "c": "MG", - "f": "EAT", - "n": "E. Africa {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Indian/Chagos"] = { - "c": "IO", - "f": "+06", - "n": "Central Asia {c} Time", - "o": "6:0" -}; -ilib.data.zoneinfo["Indian/Christmas"] = { - "c": "CX", - "f": "+07", - "n": "SE Asia {c} Time", - "o": "7:0" -}; -ilib.data.zoneinfo["Indian/Cocos"] = { - "c": "CC", - "f": "+0630", - "n": "Myanmar {c} Time", - "o": "6:30" -}; -ilib.data.zoneinfo["Indian/Comoro"] = { - "c": "KM", - "f": "EAT", - "n": "E. Africa {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Indian/Kerguelen"] = { - "c": "TF", - "f": "+05", - "n": "West Asia {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Indian/Mahe"] = { - "c": "SC", - "f": "+04", - "n": "Mauritius {c} Time", - "o": "4:0" -}; -ilib.data.zoneinfo["Indian/Maldives"] = { - "c": "MV", - "f": "+05", - "n": "West Asia {c} Time", - "o": "5:0" -}; -ilib.data.zoneinfo["Indian/Mauritius"] = { - "c": "MU", - "f": "+04/+05", - "n": "Mauritius {c} Time", - "o": "4:0" -}; -ilib.data.zoneinfo["Indian/Mayotte"] = { - "c": "YT", - "f": "EAT", - "n": "E. Africa {c} Time", - "o": "3:0" -}; -ilib.data.zoneinfo["Indian/Reunion"] = { - "c": "RE", - "f": "+04", - "n": "Mauritius {c} Time", - "o": "4:0" -}; -ilib.data.zoneinfo["Kwajalein"] = { - "c": "MH", - "f": "+12", - "o": "12:0" -}; -ilib.data.zoneinfo["MET"] = { - "e": { - "m": 10, - "r": "l0", - "t": "3:0" - }, - "f": "ME{c}T", - "o": "1:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["MST"] = { - "f": "MST", - "o": "-7:0" -}; -ilib.data.zoneinfo["MST7MDT"] = { - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "M{c}T", - "n": "Mountain {c} Time", - "o": "-7:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Mexico/BajaSur"] = { - "c": "MX", - "f": "MST", - "o": "-7:0" -}; -ilib.data.zoneinfo["Mexico/General"] = { - "c": "MX", - "f": "CST", - "o": "-6:0" -}; -ilib.data.zoneinfo["NZ"] = { - "c": "NZ", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "NZ{c}T", - "o": "12:0", - "s": { - "c": "D", - "m": 9, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["PST8PDT"] = { - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "P{c}T", - "n": "Pacific {c} Time", - "o": "-8:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Pacific/Apia"] = { - "c": "WS", - "f": "+13/+14", - "n": "Samoa {c} Time", - "o": "13:0" -}; -ilib.data.zoneinfo["Pacific/Auckland"] = { - "c": "NZ", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "NZ{c}T", - "n": "New Zealand {c} Time", - "o": "12:0", - "s": { - "c": "D", - "m": 9, - "r": "l0", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Pacific/Bougainville"] = { - "c": "PG", - "f": "+11", - "n": "Bougainville {c} Time", - "o": "11:0" -}; -ilib.data.zoneinfo["Pacific/Chatham"] = { - "c": "NZ", - "e": { - "m": 4, - "r": "0>1", - "t": "3:45" - }, - "f": "+1245/+1345", - "n": "Chatham Islands {c} Time", - "o": "12:45", - "s": { - "m": 9, - "r": "l0", - "t": "2:45", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Pacific/Chuuk"] = { - "c": "FM", - "f": "+10", - "o": "10:0" -}; -ilib.data.zoneinfo["Pacific/Easter"] = { - "c": "CL", - "e": { - "m": 4, - "r": "0>1", - "t": "22:0" - }, - "f": "-06/-05", - "n": "Easter Island {c} Time", - "o": "-6:0", - "s": { - "m": 9, - "r": "0>1", - "t": "22:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Pacific/Efate"] = { - "c": "VU", - "f": "+11/+12", - "n": "Central Pacific {c} Time", - "o": "11:0" -}; -ilib.data.zoneinfo["Pacific/Enderbury"] = { - "c": "KI", - "f": "-00", - "n": "UTC+13", - "o": "0:0" -}; -ilib.data.zoneinfo["Pacific/Fakaofo"] = { - "c": "TK", - "f": "+13", - "n": "UTC+13", - "o": "13:0" -}; -ilib.data.zoneinfo["Pacific/Fiji"] = { - "c": "FJ", - "f": "+12/+13", - "n": "Fiji {c} Time", - "o": "12:0" -}; -ilib.data.zoneinfo["Pacific/Funafuti"] = { - "c": "TV", - "f": "+12", - "n": "UTC+12", - "o": "12:0" -}; -ilib.data.zoneinfo["Pacific/Galapagos"] = { - "c": "EC", - "f": "-06/-05", - "n": "Central America {c} Time", - "o": "-6:0" -}; -ilib.data.zoneinfo["Pacific/Gambier"] = { - "c": "PF", - "f": "-09", - "n": "UTC-09", - "o": "-9:0" -}; -ilib.data.zoneinfo["Pacific/Guadalcanal"] = { - "c": "SB", - "f": "+11", - "n": "Central Pacific {c} Time", - "o": "11:0" -}; -ilib.data.zoneinfo["Pacific/Guam"] = { - "c": "GU", - "f": "ChST", - "n": "West Pacific {c} Time", - "o": "10:0" -}; -ilib.data.zoneinfo["Pacific/Honolulu"] = { - "c": "US", - "f": "HST", - "n": "Hawaiian {c} Time", - "o": "-10:0" -}; -ilib.data.zoneinfo["Pacific/Johnston"] = { - "c": "US", - "f": "HST", - "n": "Hawaiian {c} Time", - "o": "-10:0" -}; -ilib.data.zoneinfo["Pacific/Kanton"] = { - "c": "KI", - "f": "+13", - "n": "UTC+13", - "o": "13:0" -}; -ilib.data.zoneinfo["Pacific/Kiritimati"] = { - "c": "KI", - "f": "+14", - "n": "Line Islands {c} Time", - "o": "14:0" -}; -ilib.data.zoneinfo["Pacific/Kosrae"] = { - "c": "FM", - "f": "+11", - "n": "Central Pacific {c} Time", - "o": "11:0" -}; -ilib.data.zoneinfo["Pacific/Kwajalein"] = { - "c": "MH", - "f": "+12", - "n": "UTC+12", - "o": "12:0" -}; -ilib.data.zoneinfo["Pacific/Majuro"] = { - "c": "MH", - "f": "+12", - "n": "UTC+12", - "o": "12:0" -}; -ilib.data.zoneinfo["Pacific/Marquesas"] = { - "c": "PF", - "f": "-0930", - "n": "Marquesas {c} Time", - "o": "-9:30" -}; -ilib.data.zoneinfo["Pacific/Midway"] = { - "c": "UM", - "f": "SST", - "n": "UTC-11", - "o": "-11:0" -}; -ilib.data.zoneinfo["Pacific/Nauru"] = { - "c": "NR", - "f": "+12", - "n": "UTC+12", - "o": "12:0" -}; -ilib.data.zoneinfo["Pacific/Niue"] = { - "c": "NU", - "f": "-11", - "n": "UTC-11", - "o": "-11:0" -}; -ilib.data.zoneinfo["Pacific/Norfolk"] = { - "c": "NF", - "e": { - "c": "S", - "m": 4, - "r": "0>1", - "t": "3:0" - }, - "f": "+11/+12", - "n": "Norfolk {c} Time", - "o": "11:0", - "s": { - "c": "D", - "m": 10, - "r": "0>1", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["Pacific/Noumea"] = { - "c": "NC", - "f": "+11/+12", - "n": "Central Pacific {c} Time", - "o": "11:0" -}; -ilib.data.zoneinfo["Pacific/Pago_Pago"] = { - "c": "AS", - "f": "SST", - "n": "UTC-11", - "o": "-11:0" -}; -ilib.data.zoneinfo["Pacific/Palau"] = { - "c": "PW", - "f": "+09", - "n": "Tokyo {c} Time", - "o": "9:0" -}; -ilib.data.zoneinfo["Pacific/Pitcairn"] = { - "c": "PN", - "f": "-08", - "n": "UTC-08", - "o": "-8:0" -}; -ilib.data.zoneinfo["Pacific/Pohnpei"] = { - "c": "FM", - "f": "+11", - "o": "11:0" -}; -ilib.data.zoneinfo["Pacific/Ponape"] = { - "c": "SB", - "f": "+11", - "n": "Central Pacific {c} Time", - "o": "11:0" -}; -ilib.data.zoneinfo["Pacific/Port_Moresby"] = { - "c": "PG", - "f": "+10", - "n": "West Pacific {c} Time", - "o": "10:0" -}; -ilib.data.zoneinfo["Pacific/Rarotonga"] = { - "c": "CK", - "f": "-10/-0930", - "n": "Hawaiian {c} Time", - "o": "-10:0" -}; -ilib.data.zoneinfo["Pacific/Saipan"] = { - "c": "MP", - "f": "ChST", - "n": "West Pacific {c} Time", - "o": "10:0" -}; -ilib.data.zoneinfo["Pacific/Samoa"] = { - "c": "AS", - "f": "SST", - "o": "-11:0" -}; -ilib.data.zoneinfo["Pacific/Tahiti"] = { - "c": "PF", - "f": "-10", - "n": "Hawaiian {c} Time", - "o": "-10:0" -}; -ilib.data.zoneinfo["Pacific/Tarawa"] = { - "c": "KI", - "f": "+12", - "n": "UTC+12", - "o": "12:0" -}; -ilib.data.zoneinfo["Pacific/Tongatapu"] = { - "c": "TO", - "f": "+13/+14", - "n": "Tonga {c} Time", - "o": "13:0" -}; -ilib.data.zoneinfo["Pacific/Truk"] = { - "c": "PG", - "f": "+10", - "n": "West Pacific {c} Time", - "o": "10:0" -}; -ilib.data.zoneinfo["Pacific/Wake"] = { - "c": "UM", - "f": "+12", - "n": "UTC+12", - "o": "12:0" -}; -ilib.data.zoneinfo["Pacific/Wallis"] = { - "c": "WF", - "f": "+12", - "n": "UTC+12", - "o": "12:0" -}; -ilib.data.zoneinfo["Pacific/Yap"] = { - "c": "PG", - "f": "+10", - "o": "10:0" -}; -ilib.data.zoneinfo["US/Alaska"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "AK{c}T", - "o": "-9:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["US/East-Indiana"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["US/Eastern"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "E{c}T", - "o": "-5:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["US/Hawaii"] = { - "c": "US", - "f": "HST", - "o": "-10:0" -}; -ilib.data.zoneinfo["US/Indiana-Starke"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "C{c}T", - "o": "-6:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["US/Pacific"] = { - "c": "US", - "e": { - "c": "S", - "m": 11, - "r": "0>1", - "t": "2:0" - }, - "f": "P{c}T", - "o": "-8:0", - "s": { - "c": "D", - "m": 3, - "r": "0>8", - "t": "2:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["US/Samoa"] = { - "c": "AS", - "f": "SST", - "o": "-11:0" -}; -ilib.data.zoneinfo["WET"] = { - "e": { - "m": 10, - "r": "l0", - "t": "2:0" - }, - "f": "WE{c}T", - "o": "0:0", - "s": { - "c": "S", - "m": 3, - "r": "l0", - "t": "1:0", - "v": "1:0" - } -}; -ilib.data.zoneinfo["zonetab"] = { - "AD": [ - "Europe/Andorra" - ], - "AE": [ - "Asia/Dubai" - ], - "AF": [ - "Asia/Kabul" - ], - "AG": [ - "America/Antigua" - ], - "AI": [ - "America/Anguilla" - ], - "AL": [ - "Europe/Tirane" - ], - "AM": [ - "Asia/Yerevan" - ], - "AO": [ - "Africa/Luanda" - ], - "AQ": [ - "Antarctica/Casey", - "Antarctica/Davis", - "Antarctica/DumontDUrville", - "Antarctica/Mawson", - "Antarctica/McMurdo", - "Antarctica/Palmer", - "Antarctica/Rothera", - "Antarctica/Syowa", - "Antarctica/Troll", - "Antarctica/Vostok" - ], - "AR": [ - "America/Argentina/Buenos_Aires", - "America/Argentina/Catamarca", - "America/Argentina/ComodRivadavia", - "America/Argentina/Cordoba", - "America/Argentina/Jujuy", - "America/Argentina/La_Rioja", - "America/Argentina/Mendoza", - "America/Argentina/Rio_Gallegos", - "America/Argentina/Salta", - "America/Argentina/San_Juan", - "America/Argentina/San_Luis", - "America/Argentina/Tucuman", - "America/Argentina/Ushuaia", - "America/Buenos_Aires", - "America/Catamarca", - "America/Cordoba", - "America/Jujuy", - "America/Mendoza", - "America/Rosario" - ], - "AS": [ - "Pacific/Pago_Pago", - "Pacific/Samoa", - "US/Samoa" - ], - "AT": [ - "Europe/Vienna" - ], - "AU": [ - "Antarctica/Macquarie", - "Australia/ACT", - "Australia/Adelaide", - "Australia/Brisbane", - "Australia/Broken_Hill", - "Australia/Canberra", - "Australia/Currie", - "Australia/Darwin", - "Australia/Eucla", - "Australia/Hobart", - "Australia/LHI", - "Australia/Lindeman", - "Australia/Lord_Howe", - "Australia/Melbourne", - "Australia/NSW", - "Australia/North", - "Australia/Perth", - "Australia/Queensland", - "Australia/South", - "Australia/Sydney", - "Australia/Tasmania", - "Australia/Victoria", - "Australia/West", - "Australia/Yancowinna" - ], - "AW": [ - "America/Aruba" - ], - "AX": [ - "Europe/Mariehamn" - ], - "AZ": [ - "Asia/Baku" - ], - "BA": [ - "Europe/Sarajevo" - ], - "BB": [ - "America/Barbados" - ], - "BD": [ - "Asia/Dacca", - "Asia/Dhaka" - ], - "BE": [ - "Europe/Brussels" - ], - "BF": [ - "Africa/Ouagadougou" - ], - "BG": [ - "Europe/Sofia" - ], - "BH": [ - "Asia/Bahrain" - ], - "BI": [ - "Africa/Bujumbura" - ], - "BJ": [ - "Africa/Porto-Novo" - ], - "BL": [ - "America/St_Barthelemy" - ], - "BM": [ - "Atlantic/Bermuda" - ], - "BN": [ - "Asia/Brunei" - ], - "BO": [ - "America/La_Paz" - ], - "BQ": [ - "America/Kralendijk" - ], - "BR": [ - "America/Araguaina", - "America/Bahia", - "America/Belem", - "America/Boa_Vista", - "America/Campo_Grande", - "America/Cuiaba", - "America/Eirunepe", - "America/Fortaleza", - "America/Maceio", - "America/Manaus", - "America/Noronha", - "America/Porto_Acre", - "America/Porto_Velho", - "America/Recife", - "America/Rio_Branco", - "America/Santarem", - "America/Sao_Paulo", - "Brazil/Acre", - "Brazil/DeNoronha", - "Brazil/East", - "Brazil/West" - ], - "BS": [ - "America/Nassau" - ], - "BT": [ - "Asia/Thimbu", - "Asia/Thimphu" - ], - "BW": [ - "Africa/Gaborone" - ], - "BY": [ - "Europe/Minsk" - ], - "BZ": [ - "America/Belize" - ], - "CA": [ - "America/Atikokan", - "America/Blanc-Sablon", - "America/Cambridge_Bay", - "America/Coral_Harbour", - "America/Creston", - "America/Dawson", - "America/Dawson_Creek", - "America/Edmonton", - "America/Fort_Nelson", - "America/Glace_Bay", - "America/Goose_Bay", - "America/Halifax", - "America/Inuvik", - "America/Iqaluit", - "America/Moncton", - "America/Montreal", - "America/Nipigon", - "America/Pangnirtung", - "America/Rainy_River", - "America/Rankin_Inlet", - "America/Regina", - "America/Resolute", - "America/St_Johns", - "America/Swift_Current", - "America/Thunder_Bay", - "America/Toronto", - "America/Vancouver", - "America/Whitehorse", - "America/Winnipeg", - "America/Yellowknife", - "Canada/Atlantic", - "Canada/Central", - "Canada/Eastern", - "Canada/Mountain", - "Canada/Newfoundland", - "Canada/Pacific", - "Canada/Saskatchewan", - "Canada/Yukon" - ], - "CC": [ - "Indian/Cocos" - ], - "CD": [ - "Africa/Kinshasa", - "Africa/Lubumbashi" - ], - "CF": [ - "Africa/Bangui" - ], - "CG": [ - "Africa/Brazzaville" - ], - "CH": [ - "Europe/Zurich" - ], - "CI": [ - "Africa/Abidjan", - "Africa/Timbuktu" - ], - "CK": [ - "Pacific/Rarotonga" - ], - "CL": [ - "America/Punta_Arenas", - "America/Santiago", - "Chile/Continental", - "Chile/EasterIsland", - "Pacific/Easter" - ], - "CM": [ - "Africa/Douala" - ], - "CN": [ - "Asia/Chongqing", - "Asia/Chungking", - "Asia/Harbin", - "Asia/Kashgar", - "Asia/Shanghai", - "Asia/Urumqi", - "PRC" - ], - "CO": [ - "America/Bogota" - ], - "CR": [ - "America/Costa_Rica" - ], - "CU": [ - "America/Havana", - "Cuba" - ], - "CV": [ - "Atlantic/Cape_Verde" - ], - "CW": [ - "America/Curacao" - ], - "CX": [ - "Indian/Christmas" - ], - "CY": [ - "Asia/Famagusta", - "Asia/Nicosia", - "Europe/Nicosia" - ], - "CZ": [ - "Europe/Prague" - ], - "DE": [ - "Europe/Berlin", - "Europe/Busingen" - ], - "DJ": [ - "Africa/Djibouti" - ], - "DK": [ - "Europe/Copenhagen" - ], - "DM": [ - "America/Dominica" - ], - "DO": [ - "America/Santo_Domingo" - ], - "DZ": [ - "Africa/Algiers" - ], - "EC": [ - "America/Guayaquil", - "Pacific/Galapagos" - ], - "EE": [ - "Europe/Tallinn" - ], - "EG": [ - "Africa/Cairo", - "Egypt" - ], - "EH": [ - "Africa/El_Aaiun" - ], - "ER": [ - "Africa/Asmara" - ], - "ES": [ - "Africa/Ceuta", - "Atlantic/Canary", - "Europe/Madrid" - ], - "ET": [ - "Africa/Addis_Ababa" - ], - "FI": [ - "Europe/Helsinki" - ], - "FJ": [ - "Pacific/Fiji" - ], - "FK": [ - "Atlantic/Stanley" - ], - "FM": [ - "Pacific/Chuuk", - "Pacific/Kosrae", - "Pacific/Pohnpei", - "Pacific/Ponape", - "Pacific/Truk", - "Pacific/Yap" - ], - "FO": [ - "Atlantic/Faeroe", - "Atlantic/Faroe" - ], - "FR": [ - "Europe/Paris" - ], - "GA": [ - "Africa/Libreville" - ], - "GB": [ - "Europe/Belfast", - "Europe/London", - "GB", - "GB-Eire" - ], - "GD": [ - "America/Grenada" - ], - "GE": [ - "Asia/Tbilisi" - ], - "GF": [ - "America/Cayenne" - ], - "GG": [ - "Europe/Guernsey" - ], - "GH": [ - "Africa/Accra" - ], - "GI": [ - "Europe/Gibraltar" - ], - "GL": [ - "America/Danmarkshavn", - "America/Godthab", - "America/Nuuk", - "America/Scoresbysund", - "America/Thule" - ], - "GM": [ - "Africa/Banjul" - ], - "GN": [ - "Africa/Conakry" - ], - "GP": [ - "America/Guadeloupe" - ], - "GQ": [ - "Africa/Malabo" - ], - "GR": [ - "Europe/Athens" - ], - "GS": [ - "Atlantic/South_Georgia" - ], - "GT": [ - "America/Guatemala" - ], - "GU": [ - "Pacific/Guam" - ], - "GW": [ - "Africa/Bissau" - ], - "GY": [ - "America/Guyana" - ], - "HK": [ - "Asia/Hong_Kong", - "Hongkong" - ], - "HN": [ - "America/Tegucigalpa" - ], - "HR": [ - "Europe/Zagreb" - ], - "HT": [ - "America/Port-au-Prince" - ], - "HU": [ - "Europe/Budapest" - ], - "ID": [ - "Asia/Jakarta", - "Asia/Jayapura", - "Asia/Makassar", - "Asia/Pontianak", - "Asia/Ujung_Pandang" - ], - "IE": [ - "Eire", - "Europe/Dublin" - ], - "IL": [ - "Asia/Jerusalem", - "Asia/Tel_Aviv", - "Israel" - ], - "IM": [ - "Europe/Isle_of_Man" - ], - "IN": [ - "Asia/Calcutta", - "Asia/Kolkata" - ], - "IO": [ - "Indian/Chagos" - ], - "IQ": [ - "Asia/Baghdad" - ], - "IR": [ - "Asia/Tehran", - "Iran" - ], - "IS": [ - "Atlantic/Reykjavik", - "Iceland" - ], - "IT": [ - "Europe/Rome" - ], - "JE": [ - "Europe/Jersey" - ], - "JM": [ - "America/Jamaica", - "Jamaica" - ], - "JO": [ - "Asia/Amman" - ], - "JP": [ - "Asia/Tokyo", - "Japan" - ], - "KE": [ - "Africa/Asmera", - "Africa/Nairobi" - ], - "KG": [ - "Asia/Bishkek" - ], - "KH": [ - "Asia/Phnom_Penh" - ], - "KI": [ - "Pacific/Enderbury", - "Pacific/Kanton", - "Pacific/Kiritimati", - "Pacific/Tarawa" - ], - "KM": [ - "Indian/Comoro" - ], - "KN": [ - "America/St_Kitts" - ], - "KP": [ - "Asia/Pyongyang" - ], - "KR": [ - "Asia/Seoul", - "ROK" - ], - "KW": [ - "Asia/Kuwait" - ], - "KY": [ - "America/Cayman" - ], - "KZ": [ - "Asia/Almaty", - "Asia/Aqtau", - "Asia/Aqtobe", - "Asia/Atyrau", - "Asia/Oral", - "Asia/Qostanay", - "Asia/Qyzylorda" - ], - "LA": [ - "Asia/Vientiane" - ], - "LB": [ - "Asia/Beirut" - ], - "LC": [ - "America/St_Lucia" - ], - "LI": [ - "Europe/Vaduz" - ], - "LK": [ - "Asia/Colombo" - ], - "LR": [ - "Africa/Monrovia" - ], - "LS": [ - "Africa/Maseru" - ], - "LT": [ - "Europe/Vilnius" - ], - "LU": [ - "Europe/Luxembourg" - ], - "LV": [ - "Europe/Riga" - ], - "LY": [ - "Africa/Tripoli", - "Libya" - ], - "MA": [ - "Africa/Casablanca" - ], - "MC": [ - "Europe/Monaco" - ], - "MD": [ - "Europe/Chisinau", - "Europe/Tiraspol" - ], - "ME": [ - "Europe/Podgorica" - ], - "MF": [ - "America/Marigot" - ], - "MG": [ - "Indian/Antananarivo" - ], - "MH": [ - "Kwajalein", - "Pacific/Kwajalein", - "Pacific/Majuro" - ], - "MK": [ - "Europe/Skopje" - ], - "ML": [ - "Africa/Bamako" - ], - "MM": [ - "Asia/Rangoon", - "Asia/Yangon" - ], - "MN": [ - "Asia/Choibalsan", - "Asia/Hovd", - "Asia/Ulaanbaatar", - "Asia/Ulan_Bator" - ], - "MO": [ - "Asia/Macao", - "Asia/Macau" - ], - "MP": [ - "Pacific/Saipan" - ], - "MQ": [ - "America/Martinique" - ], - "MR": [ - "Africa/Nouakchott" - ], - "MS": [ - "America/Montserrat" - ], - "MT": [ - "Europe/Malta" - ], - "MU": [ - "Indian/Mauritius" - ], - "MV": [ - "Indian/Maldives" - ], - "MW": [ - "Africa/Blantyre" - ], - "MX": [ - "America/Bahia_Banderas", - "America/Cancun", - "America/Chihuahua", - "America/Ciudad_Juarez", - "America/Ensenada", - "America/Hermosillo", - "America/Matamoros", - "America/Mazatlan", - "America/Merida", - "America/Mexico_City", - "America/Monterrey", - "America/Ojinaga", - "America/Santa_Isabel", - "America/Tijuana", - "Mexico/BajaNorte", - "Mexico/BajaSur", - "Mexico/General" - ], - "MY": [ - "Asia/Kuala_Lumpur", - "Asia/Kuching" - ], - "MZ": [ - "Africa/Maputo" - ], - "NA": [ - "Africa/Windhoek" - ], - "NC": [ - "Pacific/Noumea" - ], - "NE": [ - "Africa/Niamey" - ], - "NF": [ - "Pacific/Norfolk" - ], - "NG": [ - "Africa/Lagos" - ], - "NI": [ - "America/Managua" - ], - "NL": [ - "Europe/Amsterdam" - ], - "NO": [ - "Atlantic/Jan_Mayen", - "Europe/Oslo" - ], - "NP": [ - "Asia/Kathmandu", - "Asia/Katmandu" - ], - "NR": [ - "Pacific/Nauru" - ], - "NU": [ - "Pacific/Niue" - ], - "NZ": [ - "Antarctica/South_Pole", - "NZ", - "NZ-CHAT", - "Pacific/Auckland", - "Pacific/Chatham" - ], - "OM": [ - "Asia/Muscat" - ], - "PA": [ - "America/Panama" - ], - "PE": [ - "America/Lima" - ], - "PF": [ - "Pacific/Gambier", - "Pacific/Marquesas", - "Pacific/Tahiti" - ], - "PG": [ - "Pacific/Bougainville", - "Pacific/Port_Moresby" - ], - "PH": [ - "Asia/Manila" - ], - "PK": [ - "Asia/Karachi" - ], - "PL": [ - "Europe/Warsaw", - "Poland" - ], - "PM": [ - "America/Miquelon" - ], - "PN": [ - "Pacific/Pitcairn" - ], - "PR": [ - "America/Puerto_Rico" - ], - "PS": [ - "Asia/Gaza", - "Asia/Hebron" - ], - "PT": [ - "Atlantic/Azores", - "Atlantic/Madeira", - "Europe/Lisbon", - "Portugal" - ], - "PW": [ - "Pacific/Palau" - ], - "PY": [ - "America/Asuncion" - ], - "QA": [ - "Asia/Qatar" - ], - "RE": [ - "Indian/Reunion" - ], - "RO": [ - "Europe/Bucharest" - ], - "RS": [ - "Europe/Belgrade" - ], - "RU": [ - "Asia/Anadyr", - "Asia/Barnaul", - "Asia/Chita", - "Asia/Irkutsk", - "Asia/Kamchatka", - "Asia/Khandyga", - "Asia/Krasnoyarsk", - "Asia/Magadan", - "Asia/Novokuznetsk", - "Asia/Novosibirsk", - "Asia/Omsk", - "Asia/Sakhalin", - "Asia/Srednekolymsk", - "Asia/Tomsk", - "Asia/Ust-Nera", - "Asia/Vladivostok", - "Asia/Yakutsk", - "Asia/Yekaterinburg", - "Europe/Astrakhan", - "Europe/Kaliningrad", - "Europe/Kirov", - "Europe/Moscow", - "Europe/Samara", - "Europe/Saratov", - "Europe/Ulyanovsk", - "Europe/Volgograd", - "W-SU" - ], - "RW": [ - "Africa/Kigali" - ], - "SA": [ - "Asia/Riyadh" - ], - "SB": [ - "Pacific/Guadalcanal" - ], - "SC": [ - "Indian/Mahe" - ], - "SD": [ - "Africa/Khartoum" - ], - "SE": [ - "Europe/Stockholm" - ], - "SG": [ - "Asia/Singapore", - "Singapore" - ], - "SH": [ - "Atlantic/St_Helena" - ], - "SI": [ - "Europe/Ljubljana" - ], - "SJ": [ - "Arctic/Longyearbyen" - ], - "SK": [ - "Europe/Bratislava" - ], - "SL": [ - "Africa/Freetown" - ], - "SM": [ - "Europe/San_Marino" - ], - "SN": [ - "Africa/Dakar" - ], - "SO": [ - "Africa/Mogadishu" - ], - "SR": [ - "America/Paramaribo" - ], - "SS": [ - "Africa/Juba" - ], - "ST": [ - "Africa/Sao_Tome" - ], - "SV": [ - "America/El_Salvador" - ], - "SX": [ - "America/Lower_Princes" - ], - "SY": [ - "Asia/Damascus" - ], - "SZ": [ - "Africa/Mbabane" - ], - "TC": [ - "America/Grand_Turk" - ], - "TD": [ - "Africa/Ndjamena" - ], - "TF": [ - "Indian/Kerguelen" - ], - "TG": [ - "Africa/Lome" - ], - "TH": [ - "Asia/Bangkok" - ], - "TJ": [ - "Asia/Dushanbe" - ], - "TK": [ - "Pacific/Fakaofo" - ], - "TL": [ - "Asia/Dili" - ], - "TM": [ - "Asia/Ashgabat", - "Asia/Ashkhabad" - ], - "TN": [ - "Africa/Tunis" - ], - "TO": [ - "Pacific/Tongatapu" - ], - "TR": [ - "Asia/Istanbul", - "Europe/Istanbul", - "Turkey" - ], - "TT": [ - "America/Port_of_Spain", - "America/Virgin" - ], - "TV": [ - "Pacific/Funafuti" - ], - "TW": [ - "Asia/Taipei", - "ROC" - ], - "TZ": [ - "Africa/Dar_es_Salaam" - ], - "UA": [ - "Europe/Kiev", - "Europe/Kyiv", - "Europe/Simferopol", - "Europe/Uzhgorod", - "Europe/Zaporozhye" - ], - "UG": [ - "Africa/Kampala" - ], - "UM": [ - "Pacific/Midway", - "Pacific/Wake" - ], - "US": [ - "America/Adak", - "America/Anchorage", - "America/Atka", - "America/Boise", - "America/Chicago", - "America/Denver", - "America/Detroit", - "America/Fort_Wayne", - "America/Indiana/Indianapolis", - "America/Indiana/Knox", - "America/Indiana/Marengo", - "America/Indiana/Petersburg", - "America/Indiana/Tell_City", - "America/Indiana/Vevay", - "America/Indiana/Vincennes", - "America/Indiana/Winamac", - "America/Indianapolis", - "America/Juneau", - "America/Kentucky/Louisville", - "America/Kentucky/Monticello", - "America/Knox_IN", - "America/Los_Angeles", - "America/Louisville", - "America/Menominee", - "America/Metlakatla", - "America/New_York", - "America/Nome", - "America/North_Dakota/Beulah", - "America/North_Dakota/Center", - "America/North_Dakota/New_Salem", - "America/Phoenix", - "America/Shiprock", - "America/Sitka", - "America/Yakutat", - "Navajo", - "Pacific/Honolulu", - "Pacific/Johnston", - "US/Alaska", - "US/Aleutian", - "US/Arizona", - "US/Central", - "US/East-Indiana", - "US/Eastern", - "US/Hawaii", - "US/Indiana-Starke", - "US/Michigan", - "US/Mountain", - "US/Pacific" - ], - "UY": [ - "America/Montevideo" - ], - "UZ": [ - "Asia/Samarkand", - "Asia/Tashkent" - ], - "VA": [ - "Europe/Vatican" - ], - "VC": [ - "America/St_Vincent" - ], - "VE": [ - "America/Caracas" - ], - "VG": [ - "America/Tortola" - ], - "VI": [ - "America/St_Thomas" - ], - "VN": [ - "Asia/Ho_Chi_Minh", - "Asia/Saigon" - ], - "VU": [ - "Pacific/Efate" - ], - "WF": [ - "Pacific/Wallis" - ], - "WS": [ - "Pacific/Apia" - ], - "YE": [ - "Asia/Aden" - ], - "YT": [ - "Indian/Mayotte" - ], - "ZA": [ - "Africa/Johannesburg" - ], - "ZM": [ - "Africa/Lusaka" - ], - "ZW": [ - "Africa/Harare" - ] -}; diff --git a/lib/ilib_durationfmt.dart b/lib/ilib_durationfmt.dart index 004469d..b076a6a 100644 --- a/lib/ilib_durationfmt.dart +++ b/lib/ilib_durationfmt.dart @@ -56,7 +56,9 @@ class ILibDurationFmt { return result; } - /// Return the template string that is used to format date/times for this formatter instance + /// Return the locale that was used to construct this duration formatter object. + /// If the locale was not given as parameter to the constructor, this method returns the default + /// locale of the system. String getLocale() { String result = ''; final String formatOptions = toJsonString(); @@ -66,6 +68,9 @@ class ILibDurationFmt { return result; } + /// Return the length that was used to construct this duration formatter object. If the + /// length was not given as parameter to the constructor, this method returns the default + /// length. Valid values are "short", "medium", "long", and "full". String getLength() { String result = ''; final String formatOptions = toJsonString(); @@ -74,6 +79,8 @@ class ILibDurationFmt { return result; } + /// Return the style that was used to construct this duration formatter object. + /// Valid values are "text" or "clock". String getStyle() { String result = ''; final String formatOptions = toJsonString(); @@ -84,10 +91,9 @@ class ILibDurationFmt { } class ILibDurationFmtOptions { - /// [locale] Locales are specified either with a specifier string that follows the BCP-47 convention, - /// [length] Specifies the length of the format to use.Valid values are "short", "medium", "long" and "full". - /// [style] - /// [type] Specifies whether this formatter should format times only, dates only, or both times and dates together. Valid values are "time", "date", and "datetime". + /// [locale] Locales are specified either with a specifier string that follows the BCP-47 convention. + /// [length] Specifies the length of the format to use. Valid values are "short", "medium", "long" and "full". + /// [style] whether hours, minutes, and seconds should be formatted as a text string or as a regular time as on a clock. /// [useNative] The flag used to determine whether to use the native script settings for formatting the numbers. ILibDurationFmtOptions({ this.locale, From 8747628a27231f2682d7bff40967dbfb282b3f3e Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Tue, 27 Jan 2026 15:03:11 +0900 Subject: [PATCH 08/11] Fix typos --- CHANGELOG.md | 40 ++++++++++++++++++++-------------------- README.md | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 521103f..069210f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,25 +6,25 @@ The developer can use `evaluate()` to obtain the result of Duration formatting until the DurationFmt class is properly implemented. ## 1.3.0 -* Add `clock` field to ILibDateFmtOptions for specifying time format (e.g., 12-hour or 24-hour). -* Add `template` field to ILibDateFmtOptions for defining custom date/time display patterns. -* Fix proper handling of `meridiems` field in ILibDateFmtOptions, which was previously ignored. +* Added `clock` field to ILibDateFmtOptions for specifying time format (e.g., 12-hour or 24-hour). +* Added `template` field to ILibDateFmtOptions for defining custom date/time display patterns. +* Fixed proper handling of `meridiems` field in ILibDateFmtOptions, which was previously ignored. ## 1.2.1 -* Fix incorrect timezone handling when [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html) where UTC-based times were being misinterpreted as local time during formatting and parsing. +* Fixed incorrect timezone handling when [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html) where UTC-based times were being misinterpreted as local time during formatting and parsing. ## 1.2.0 -* Add `isILibReady` getter to `ILibJS` class to expose internal `_iLibPrepared` state. -* Add `isILibReady` getter to `FlutterILib` class for external access to ILibJS initialization status. +* Added `isILibReady` getter to `ILibJS` class to expose internal `_iLibPrepared` state. +* Added `isILibReady` getter to `FlutterILib` class for external access to ILibJS initialization status. * Updated logging system to use the logging package with support for multiple log levels ## 1.1.0 -* Update the iLib files to version 14.21.0 since the new version of iLib has been released. +* Updated the iLib files to version 14.21.0 since the new version of iLib has been released. * iLib version 14.21.0 incorporates CLDR 46 -* Update the test cases where expectations have aligned between webOS versions and upstream since the CLDR update to 46 +* Updated the test cases where expectations have aligned between webOS versions and upstream since the CLDR update to 46 ## 1.0.0 -* Update the structure to load separate locale data files. +* Updated the structure to load separate locale data files. Previously, the dependent ilib was a fully assembled JS file. Now, the ilib files are divided into the js and locale files. The JS code is assembled as `ilib-init.js`, and the locale files are generated with names like [language].js, e.g. `en.js`, `ko.js`. The iLib files are generated using the [ilib-assemble](https://github.com/iLib-js/ilib-assemble) tool. This change brings memory savings over previous versions of flutter_ilib. Initially, when the app is launched, the package automatically loads the locale data by detecting the system's locale. To load the updated locale data file when the locale changes, I suggest adding the following method at the appropriate time when the locale chanages. @@ -33,31 +33,31 @@ ``` ## 0.4.0 -* Add `libquickjs_c_bridge_plugin.so` for aarch64-webos -* Update `CMakeLists.txt` for webos to support both arm and aarch64 +* Added `libquickjs_c_bridge_plugin.so` for aarch64-webos +* Updated `CMakeLists.txt` for webos to support both arm and aarch64 ## 0.3.0 * Add the method `getMeridiemsRange()` in the class ILibDateFmt. -* Update test files to use ILib's `loadJS()` instead of `loadJSwithPath()`. -* Update the test files to share them between flutter_ilib and another flutter_ilib for webOS. The webOS overrides some of the locale data, so some test cases return different results. +* Updated test files to use ILib's `loadJS()` instead of `loadJSwithPath()`. +* Updated the test files to share them between flutter_ilib and another flutter_ilib for webOS. The webOS overrides some of the locale data, so some test cases return different results. ## 0.2.0 -* Add the method `getTemplate()` in the class ILibDateFmt. -* Re-generate the assemble ilib file to return the correct released version number. +* Added the method `getTemplate()` in the class ILibDateFmt. +* Regenerated the assemble ilib file to return the correct released version number. * Change the name of the assemble ilib file to `ilib-all.js`. ## 0.1.0 -* Update the `README.md` file. -* Update the minor version up for release. +* Updated the `README.md` file. +* Updated the minor version up for release. ## 0.0.4 -* Add more of the API comments in codes. +* Added more of the API comments in codes. ## 0.0.3 -* Update to show a sample screenshot image in the published package. +* Updated to show a sample screenshot image in the published package. ## 0.0.2 -* Updat structure by using `ChangeNotifier` so that APIs can be used synchronously. +* Updated structure by using `ChangeNotifier` so that APIs can be used synchronously. * First, the app must add a listener to receive a callback message that the iLib is ready for use. then the APIs can be used synchronously. * Added the linter file (`analysis_options.yaml`) and fixed warnings. diff --git a/README.md b/README.md index 495c910..2abc64e 100644 --- a/README.md +++ b/README.md @@ -145,7 +145,7 @@ We have a plan to provide more classes and methods. - Methods: `getFirstDayOfWeek()`, `getWeekEndStart()`, `getWeekEndStart()` ### ILibDurationFmt -- Class: [ILibDurationFmtOptions](./Docs.md/#ilibdurationfmteoptions) +- Class: [ILibDurationFmtOptions](./Docs.md/#ilibdurationfmtoptions) - Class: [ILibDurationFmt](./Docs.md/#ilibdurationfmt) - Methods: `format()`, `getLocale()`, `getStyle()`, , `getLength()` From 577fba185f685ffe80183d99f541e0f07456a677 Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Tue, 27 Jan 2026 15:05:34 +0900 Subject: [PATCH 09/11] Update changelog --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 069210f..3f0ed4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,14 +37,14 @@ * Updated `CMakeLists.txt` for webos to support both arm and aarch64 ## 0.3.0 -* Add the method `getMeridiemsRange()` in the class ILibDateFmt. +* Added the method `getMeridiemsRange()` in the class ILibDateFmt. * Updated test files to use ILib's `loadJS()` instead of `loadJSwithPath()`. * Updated the test files to share them between flutter_ilib and another flutter_ilib for webOS. The webOS overrides some of the locale data, so some test cases return different results. ## 0.2.0 * Added the method `getTemplate()` in the class ILibDateFmt. * Regenerated the assemble ilib file to return the correct released version number. -* Change the name of the assemble ilib file to `ilib-all.js`. +* Changed the name of the assemble ilib file to `ilib-all.js`. ## 0.1.0 * Updated the `README.md` file. From 935113f74fbf9ad6cb9452c34677248973425757 Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Tue, 27 Jan 2026 17:17:07 +0900 Subject: [PATCH 10/11] Update wrong example in README --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2abc64e..b5ae1c3 100644 --- a/README.md +++ b/README.md @@ -86,19 +86,19 @@ fmt.format(dateOptions); ```dart final ILibDurationFmtOptions fmtOptions = - ILibDurationOptions(locale: 'en-GB', length: 'full'); -final ILibDurationFmt fmt = ILibDuration(fmtOptions); + ILibDurationFmtOptions(locale: 'en-GB', length: 'full'); +final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); final ILibDateOptions dateOptions = ILibDateOptions( year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1); fmt.format(dateOptions); // '1 year, 1 month, 1 week, 1 day, 1 hour, 1 minute' -final ILibDurationFmtOptions fmtOptions = ILibDurationOptions( +final ILibDurationFmtOptions fmtOptions = ILibDurationFmtOptions( locale: 'en-GB', length: 'full', style: 'clock', ); -final ILibDurationFmt fmt = ILibDuration(fmtOptions); +final ILibDurationFmt fmt = ILibDurationFmt(fmtOptions); final ILibDateOptions dateOptions = ILibDateOptions( year: 1, month: 1, week: 1, day: 1, hour: 1, minute: 1); fmt.format(dateOptions); From 27e068f76bb9722017a6abacfce14b1cb42e6ef4 Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Tue, 27 Jan 2026 17:20:08 +0900 Subject: [PATCH 11/11] Update README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b5ae1c3..7e69155 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,7 @@ _flutterIlibPlugin.evaluateILib(jscode1); // 'ethiopic' ``` To give a more efficient way, we provide some classes that can be easily used in a Flutter app. -Currently, We have a `ILibDateFmt` and `ILibLocaleInfo` classes. +Currently, We have a `ILibDateFmt` , `ILibLocaleInfo` and `ILibDurationFmt` classes. We have a plan to provide more classes and methods. ### ILibDate @@ -147,7 +147,7 @@ We have a plan to provide more classes and methods. ### ILibDurationFmt - Class: [ILibDurationFmtOptions](./Docs.md/#ilibdurationfmtoptions) - Class: [ILibDurationFmt](./Docs.md/#ilibdurationfmt) - - Methods: `format()`, `getLocale()`, `getStyle()`, , `getLength()` + - Methods: `format()`, `getLocale()`, `getStyle()`, `getLength()` ## Supported Locales The results of the following locales are checked by unit tests.